{"version":3,"sources":["../../../src/modelgarden/v2/anthropic.ts"],"sourcesContent":["/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n  ContentBlock as AnthropicContent,\n  ImageBlockParam,\n  Message,\n  MessageCreateParamsBase,\n  MessageParam,\n  TextBlock,\n  TextBlockParam,\n  TextDelta,\n  ThinkingBlock,\n  ThinkingBlockParam,\n  Tool,\n  ToolResultBlockParam,\n  ToolUseBlock,\n  ToolUseBlockParam,\n} from '@anthropic-ai/sdk/resources/messages';\nimport { AnthropicVertex } from '@anthropic-ai/vertex-sdk';\nimport {\n  ActionMetadata,\n  z,\n  type GenerateRequest,\n  type Part as GenkitPart,\n  type MessageData,\n  type ModelReference,\n  type ModelResponseData,\n  type Part,\n} from 'genkit';\nimport {\n  GenerationCommonConfigSchema,\n  ModelInfo,\n  getBasicUsageStats,\n  modelRef,\n  type ModelAction,\n} from 'genkit/model';\nimport { model as pluginModel } from 'genkit/plugin';\nimport { getGenkitClientHeader } from '../../common/index.mjs';\nimport { PluginOptions } from './types.mjs';\nimport { checkModelName } from './utils.mjs';\n\nexport const ThinkingConfigSchema = z\n  .object({\n    enabled: z.boolean().optional(),\n    budgetTokens: z.number().min(1_024).optional(),\n    adaptive: z.boolean().optional(),\n    display: z.enum(['summarized', 'omitted']).optional(),\n  })\n  .passthrough()\n  .superRefine((value, ctx) => {\n    if (value.enabled && value.adaptive) {\n      ctx.addIssue({\n        code: z.ZodIssueCode.custom,\n        path: ['adaptive'],\n        message:\n          'Cannot use both enabled and adaptive thinking modes simultaneously',\n      });\n    }\n\n    if (value.enabled) {\n      if (value.budgetTokens === undefined) {\n        ctx.addIssue({\n          code: z.ZodIssueCode.custom,\n          path: ['budgetTokens'],\n          message: 'budgetTokens is required when thinking is enabled',\n        });\n      } else if (!Number.isInteger(value.budgetTokens)) {\n        ctx.addIssue({\n          code: z.ZodIssueCode.custom,\n          path: ['budgetTokens'],\n          message: 'budgetTokens must be an integer',\n        });\n      }\n    }\n  });\n\nexport const AnthropicConfigSchema = GenerationCommonConfigSchema.extend({\n  location: z.string().optional(),\n  thinking: ThinkingConfigSchema.optional().describe(\n    'The thinking configuration to use for the request. Thinking is a feature that allows the model to think about the request and provide a better response.'\n  ),\n  output_config: z\n    .object({\n      effort: z.enum(['low', 'medium', 'high', 'xhigh']).optional(),\n    })\n    .passthrough()\n    .describe(\n      'Configuration for output generation, such as setting the effort parameter.'\n    )\n    .optional(),\n}).passthrough();\nexport type AnthropicConfigSchemaType = typeof AnthropicConfigSchema;\nexport type AnthropicConfig = z.infer<AnthropicConfigSchemaType>;\n\n// All the config schema types\ntype ConfigSchemaType = AnthropicConfigSchemaType;\n\nfunction commonRef(\n  name: string,\n  info?: ModelInfo,\n  configSchema: ConfigSchemaType = AnthropicConfigSchema\n): ModelReference<ConfigSchemaType> {\n  return modelRef({\n    name: `vertex-model-garden/${name}`,\n    configSchema,\n    info: info ?? {\n      supports: {\n        multiturn: true,\n        media: true,\n        tools: true,\n        systemRole: true,\n        output: ['text'],\n      },\n    },\n  });\n}\n\nexport const GENERIC_MODEL = commonRef('anthropic');\n\nexport const KNOWN_MODELS = {\n  'claude-opus-4-7': commonRef('claude-opus-4-7'),\n  'claude-sonnet-4-6': commonRef('claude-sonnet-4-6'),\n  'claude-opus-4-6': commonRef('claude-opus-4-6'),\n  'claude-haiku-4-5@20251001': commonRef('claude-haiku-4-5@20251001'),\n  'claude-sonnet-4-5@20250929': commonRef('claude-sonnet-4-5@20250929'),\n  'claude-sonnet-4@20250514': commonRef('claude-sonnet-4@20250514'),\n  'claude-opus-4-5@20251101': commonRef('claude-opus-4-5@20251101'),\n  'claude-opus-4-1@20250805': commonRef('claude-opus-4-1@20250805'),\n  'claude-opus-4@20250514': commonRef('claude-opus-4@20250514'),\n};\nexport type KnownModels = keyof typeof KNOWN_MODELS;\nexport type AnthropicModelName = `claude-${string}`;\nexport function isAnthropicModelName(\n  value?: string\n): value is AnthropicModelName {\n  return !!value?.startsWith('claude-');\n}\n\nexport function model(\n  version: string,\n  options: AnthropicConfig = {}\n): ModelReference<AnthropicConfigSchemaType> {\n  const name = checkModelName(version);\n\n  return modelRef({\n    name: `vertex-model-garden/${name}`,\n    config: options,\n    configSchema: AnthropicConfigSchema,\n    info: {\n      ...GENERIC_MODEL.info,\n    },\n  });\n}\n\nexport interface ClientOptions {\n  location: string; // e.g. 'us-central1' or 'global'\n  projectId: string;\n}\n\nexport function listActions(clientOptions: ClientOptions): ActionMetadata[] {\n  // TODO: figure out where to get the list of models.\n  return [];\n}\n\nexport function listKnownModels(\n  clientOptions: ClientOptions,\n  pluginOptions?: PluginOptions\n) {\n  return Object.keys(KNOWN_MODELS).map((name) =>\n    defineModel(name, clientOptions, pluginOptions)\n  );\n}\n\nexport function defineModel(\n  name: string,\n  clientOptions: ClientOptions,\n  pluginOptions?: PluginOptions\n): ModelAction {\n  const clients: Record<string, AnthropicVertex> = {};\n  const clientFactory = (region: string): AnthropicVertex => {\n    if (!clients[region]) {\n      clients[region] = new AnthropicVertex({\n        region: region,\n        projectId: clientOptions.projectId,\n        defaultHeaders: {\n          'X-Goog-Api-Client': getGenkitClientHeader(),\n        },\n      });\n    }\n    return clients[region];\n  };\n  const ref = model(name);\n\n  return pluginModel(\n    {\n      name: ref.name,\n      ...ref.info,\n      configSchema: ref.configSchema,\n    },\n    async (request, { streamingRequested, sendChunk }) => {\n      const client = clientFactory(\n        request.config?.location || clientOptions.location\n      );\n      const modelVersion = checkModelName(ref.name);\n      const anthropicRequest = toAnthropicRequest(modelVersion, request);\n      if (!streamingRequested) {\n        // Non-streaming\n        const response = await client.messages.create({\n          ...anthropicRequest,\n          stream: false,\n        });\n        return fromAnthropicResponse(request, response);\n      } else {\n        // Streaming\n        const stream = await client.messages.stream(anthropicRequest);\n        for await (const event of stream) {\n          if (event.type === 'content_block_delta') {\n            sendChunk({\n              index: 0,\n              content: [\n                {\n                  text: (event.delta as TextDelta).text,\n                },\n              ],\n            });\n          }\n        }\n        return fromAnthropicResponse(request, await stream.finalMessage());\n      }\n    }\n  );\n}\n\nexport function toAnthropicRequest(\n  model: string,\n  input: GenerateRequest<typeof AnthropicConfigSchema>\n): MessageCreateParamsBase {\n  let system: string | undefined = undefined;\n  const messages: MessageParam[] = [];\n  for (const msg of input.messages) {\n    if (msg.role === 'system') {\n      system = msg.content\n        .map((c) => {\n          if (!c.text) {\n            throw new Error(\n              'Only text context is supported for system messages.'\n            );\n          }\n          return c.text;\n        })\n        .join();\n    }\n    // If the last message is a tool response, we need to add a user message.\n    // https://docs.anthropic.com/en/docs/build-with-claude/tool-use#handling-tool-use-and-tool-result-content-blocks\n    else if (msg.content[msg.content.length - 1].toolResponse) {\n      messages.push({\n        role: 'user',\n        content: toAnthropicContent(msg.content),\n      });\n    } else {\n      messages.push({\n        role: toAnthropicRole(msg.role),\n        content: toAnthropicContent(msg.content),\n      });\n    }\n  }\n  const {\n    location,\n    version,\n    maxOutputTokens,\n    stopSequences,\n    temperature,\n    topK,\n    topP,\n    thinking,\n    output_config,\n    ...restConfig\n  } = input.config ?? {};\n\n  const request = {\n    model,\n    messages,\n    // https://docs.anthropic.com/claude/docs/models-overview#model-comparison\n    max_tokens: maxOutputTokens ?? 4096,\n    ...restConfig,\n  } as MessageCreateParamsBase & Record<string, any>;\n\n  if (system) {\n    request['system'] = system;\n  }\n  if (input.tools) {\n    request.tools = input.tools?.map((tool) => {\n      return {\n        name: tool.name,\n        description: tool.description,\n        input_schema: tool.inputSchema,\n      };\n    }) as Array<Tool>;\n  }\n  if (stopSequences) {\n    request.stop_sequences = stopSequences;\n  }\n  if (temperature !== undefined) {\n    request.temperature = temperature;\n  }\n  if (topK !== undefined) {\n    request.top_k = topK;\n  }\n  if (topP !== undefined) {\n    request.top_p = topP;\n  }\n\n  if (thinking) {\n    const anthropicThinking = toAnthropicThinking(thinking);\n    if (anthropicThinking) {\n      request.thinking = anthropicThinking;\n    }\n  }\n\n  if (output_config) {\n    request.output_config = output_config;\n  }\n\n  return request;\n}\n\nfunction toAnthropicThinking(\n  config: z.infer<typeof ThinkingConfigSchema> | undefined\n):\n  | { type: 'enabled'; budget_tokens: number }\n  | { type: 'disabled' }\n  | { type: 'adaptive'; display?: 'summarized' | 'omitted' }\n  | undefined {\n  if (!config) return undefined;\n\n  const { enabled, budgetTokens, adaptive, display } = config;\n\n  if (adaptive === true) {\n    return {\n      type: 'adaptive',\n      ...(display !== undefined && { display }),\n    };\n  }\n\n  if (enabled === true) {\n    if (budgetTokens === undefined) {\n      throw new Error('budgetTokens is required when thinking is enabled');\n    }\n    return { type: 'enabled', budget_tokens: budgetTokens };\n  }\n\n  if (enabled === false) {\n    return { type: 'disabled' };\n  }\n\n  if (budgetTokens !== undefined) {\n    return { type: 'enabled', budget_tokens: budgetTokens };\n  }\n\n  return undefined;\n}\n\nfunction toAnthropicContent(\n  content: GenkitPart[]\n): Array<\n  | TextBlockParam\n  | ImageBlockParam\n  | ToolUseBlockParam\n  | ToolResultBlockParam\n  | ThinkingBlockParam\n> {\n  return content.map((p) => {\n    if (p.reasoning) {\n      const signature = p.metadata?.thoughtSignature;\n      return {\n        type: 'thinking',\n        thinking: p.reasoning,\n        ...(signature ? { signature } : {}),\n      } as ThinkingBlockParam;\n    }\n    if (p.text) {\n      return {\n        type: 'text',\n        text: p.text,\n      };\n    }\n    if (p.media) {\n      let b64Data = p.media.url;\n      if (b64Data.startsWith('data:')) {\n        b64Data = b64Data.substring(b64Data.indexOf(',')! + 1);\n      }\n\n      return {\n        type: 'image',\n        source: {\n          type: 'base64',\n          data: b64Data,\n          media_type: p.media.contentType as\n            | 'image/jpeg'\n            | 'image/png'\n            | 'image/gif'\n            | 'image/webp',\n        },\n      };\n    }\n    if (p.toolRequest) {\n      return toAnthropicToolRequest(p.toolRequest);\n    }\n    if (p.toolResponse) {\n      return toAnthropicToolResponse(p);\n    }\n    throw new Error(`Unsupported content type: ${JSON.stringify(p)}`);\n  });\n}\n\nfunction toAnthropicRole(role): 'user' | 'assistant' {\n  if (role === 'model') {\n    return 'assistant';\n  }\n  if (role === 'user') {\n    return 'user';\n  }\n  if (role === 'tool') {\n    return 'assistant';\n  }\n  throw new Error(`Unsupported role type ${role}`);\n}\n\nfunction fromAnthropicTextPart(part: TextBlock): Part {\n  return { text: part.text };\n}\n\nfunction fromAnthropicToolCallPart(part: ToolUseBlock): Part {\n  return {\n    toolRequest: {\n      name: part.name,\n      input: part.input,\n      ref: part.id,\n    },\n  };\n}\n\nfunction fromAnthropicThinkingPart(part: ThinkingBlock): Part {\n  if (part.signature !== undefined) {\n    return {\n      reasoning: part.thinking,\n      metadata: { thoughtSignature: part.signature },\n    };\n  }\n  return { reasoning: part.thinking };\n}\n\n// Converts an Anthropic part to a Genkit part.\nfunction fromAnthropicPart(part: AnthropicContent): Part {\n  if (part.type === 'text') return fromAnthropicTextPart(part);\n  if (part.type === 'tool_use')\n    return fromAnthropicToolCallPart(part as ToolUseBlock);\n  if (part.type === 'thinking')\n    return fromAnthropicThinkingPart(part as ThinkingBlock);\n\n  const unknownType = (part as { type: string }).type;\n  console.warn(\n    `Unexpected Anthropic content block type: ${unknownType}. Returning empty text.`\n  );\n  return { text: '' };\n}\n\n// Converts an Anthropic response to a Genkit response.\nexport function fromAnthropicResponse(\n  input: GenerateRequest<typeof AnthropicConfigSchema>,\n  response: Message\n): ModelResponseData {\n  const parts = response.content as AnthropicContent[];\n  const message: MessageData = {\n    role: 'model',\n    content: parts.map(fromAnthropicPart),\n  };\n\n  return {\n    message,\n    finishReason: toGenkitFinishReason(\n      response.stop_reason as\n        | 'end_turn'\n        | 'max_tokens'\n        | 'stop_sequence'\n        | 'tool_use'\n        | null\n    ),\n    custom: {\n      id: response.id,\n      model: response.model,\n      type: response.type,\n    },\n    raw: response,\n    usage: {\n      ...getBasicUsageStats(input.messages, message),\n      inputTokens: response.usage.input_tokens,\n      outputTokens: response.usage.output_tokens,\n      custom: {\n        cache_creation_input_tokens:\n          response.usage.cache_creation_input_tokens ?? 0,\n        cache_read_input_tokens: response.usage.cache_read_input_tokens ?? 0,\n        ephemeral_5m_input_tokens:\n          response.usage.cache_creation?.ephemeral_5m_input_tokens ?? 0,\n        ephemeral_1h_input_tokens:\n          response.usage.cache_creation?.ephemeral_1h_input_tokens ?? 0,\n      },\n    },\n  };\n}\n\nfunction toGenkitFinishReason(\n  reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null\n): ModelResponseData['finishReason'] {\n  switch (reason) {\n    case 'end_turn':\n      return 'stop';\n    case 'max_tokens':\n      return 'length';\n    case 'stop_sequence':\n      return 'stop';\n    case 'tool_use':\n      return 'stop';\n    case null:\n      return 'unknown';\n    default:\n      return 'other';\n  }\n}\n\nfunction toAnthropicToolRequest(tool: Record<string, any>): ToolUseBlockParam {\n  if (!tool.name) {\n    throw new Error('Tool name is required');\n  }\n  // Validate the tool name, Anthropic only supports letters, numbers, and underscores.\n  // https://docs.anthropic.com/en/docs/build-with-claude/tool-use#specifying-tools\n  if (!/^[a-zA-Z0-9_-]{1,64}$/.test(tool.name)) {\n    throw new Error(\n      `Tool name ${tool.name} contains invalid characters.\n      Only letters, numbers, and underscores are allowed,\n      and the name must be between 1 and 64 characters long.`\n    );\n  }\n  const declaration: ToolUseBlockParam = {\n    type: 'tool_use',\n    id: tool.ref,\n    name: tool.name,\n    input: tool.input,\n  };\n  return declaration;\n}\n\nfunction toAnthropicToolResponse(part: Part): ToolResultBlockParam {\n  if (!part.toolResponse?.ref) {\n    throw new Error('Tool response reference is required');\n  }\n\n  if (!part.toolResponse.output) {\n    throw new Error('Tool response output is required');\n  }\n\n  return {\n    type: 'tool_result',\n    tool_use_id: part.toolResponse.ref,\n    content: JSON.stringify(part.toolResponse.output),\n  };\n}\n"],"mappings":"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","names":["model"]}