kimi-proxy 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import dotenv from \"dotenv\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport YAML from \"yaml\";\nimport type { JWTInput } from \"google-auth-library\";\nimport {\n OpenAIConfig,\n type OpenAIModelConfig,\n} from \"./core/providers/openai.js\";\nimport {\n OpenRouterConfig,\n type OpenRouterModelConfig,\n} from \"./core/providers/openrouter.js\";\nimport {\n VertexConfig,\n type VertexModelConfig,\n} from \"./core/providers/vertex.js\";\nimport {\n LoadBalancingStrategy,\n ModelDefinition,\n} from \"./core/modelRegistry.js\";\n\ndotenv.config();\n\nexport interface AppConfig {\n server: {\n host: string;\n port: number;\n };\n logging: {\n dbPath: string;\n blobRoot: string;\n };\n streaming: {\n delay: number;\n chunkSize: number;\n };\n livestore: {\n batchSize: number;\n };\n providers: {\n openai?: OpenAIConfig;\n anthropic?: { apiKey: string; baseUrl?: string };\n openrouter?: OpenRouterConfig;\n vertex?: VertexConfig;\n };\n models: {\n definitions: ModelDefinition[];\n defaultStrategy: LoadBalancingStrategy;\n };\n}\n\nfunction resolveOpenAI(): OpenAIConfig | undefined {\n const baseUrl = process.env.OPENAI_BASE_URL;\n const apiKey = process.env.OPENAI_API_KEY;\n if (baseUrl && apiKey) {\n return { baseUrl, apiKey };\n }\n return undefined;\n}\n\nfunction resolveOpenRouter(): OpenRouterConfig | undefined {\n const apiKey = process.env.OPENROUTER_API_KEY;\n\n // Only configure OpenRouter if API key is provided\n if (!apiKey) {\n return undefined;\n }\n\n const config: OpenRouterConfig = {\n apiKey,\n };\n\n // Only include parameters if explicitly set via env vars\n // (no fallbacks for these - they must be explicitly defined)\n const providers = process.env.OPENROUTER_PROVIDERS;\n if (providers) {\n config.providers = providers;\n }\n\n const order = process.env.OPENROUTER_ORDER;\n if (order) {\n config.order = order\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n }\n\n const sort = process.env.OPENROUTER_SORT;\n if (sort) {\n config.sort = sort;\n }\n\n const allowFallbacks = process.env.OPENROUTER_ALLOW_FALLBACKS;\n if (allowFallbacks) {\n config.allowFallbacks = allowFallbacks.toLowerCase() === \"true\";\n }\n\n const modelShortcut = process.env.OPENROUTER_MODEL_SHORTCUT;\n if (modelShortcut) {\n config.modelShortcut = modelShortcut;\n }\n\n return config;\n}\n\nfunction resolveAnthropic(): { apiKey: string; baseUrl?: string } | undefined {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n if (!apiKey) return undefined;\n return {\n apiKey,\n baseUrl: process.env.ANTHROPIC_BASE_URL,\n };\n}\n\nfunction resolveVertex(): VertexConfig | undefined {\n const projectId = process.env.VERTEX_PROJECT_ID;\n const location = process.env.VERTEX_LOCATION;\n const rawCredentials = process.env.GOOGLE_APPLICATION_CREDENTIALS;\n\n if (!projectId || !location || !rawCredentials) {\n return undefined;\n }\n\n const credentialInfo = parseGoogleCredentials(rawCredentials);\n\n return {\n projectId,\n location,\n endpointOverride: process.env.VERTEX_CHAT_ENDPOINT,\n ...credentialInfo,\n };\n}\n\nfunction parseGoogleCredentials(value: string): {\n credentialsPath?: string;\n credentials?: JWTInput;\n} {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS is set but empty\");\n }\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed) as JWTInput;\n return { credentials: parsed };\n } catch (error) {\n throw new Error(\n `Failed to parse GOOGLE_APPLICATION_CREDENTIALS JSON: ${(error as Error).message}`,\n );\n }\n }\n return { credentialsPath: trimmed };\n}\n\nexport function loadConfig(): AppConfig {\n const host = process.env.HOST ?? \"0.0.0.0\";\n const port = Number(process.env.PORT ?? \"8000\");\n const dbPath =\n process.env.LOG_DB_PATH ?? path.resolve(process.cwd(), \"data\", \"logs.db\");\n const blobRoot =\n process.env.LOG_BLOB_ROOT ?? path.resolve(process.cwd(), \"data\", \"logs\");\n const streamDelay = Number(process.env.STREAM_DELAY ?? \"10\");\n const streamChunkSize = Number(process.env.STREAM_CHUNK_SIZE ?? \"5\");\n const livestoreBatch = Number(process.env.LIVESTORE_BATCH ?? \"50\");\n\n const openai = resolveOpenAI();\n const anthropic = resolveAnthropic();\n const openrouter = resolveOpenRouter();\n const vertex = resolveVertex();\n\n if (!openai && !openrouter && !vertex && !anthropic) {\n throw new Error(\n \"At least one provider (OpenAI, OpenRouter, or Vertex) must be configured\",\n );\n }\n\n const configuredProviders = new Set<string>();\n if (openai) {\n configuredProviders.add(\"openai\");\n }\n if (anthropic) {\n configuredProviders.add(\"anthropic\");\n }\n if (openrouter) {\n configuredProviders.add(\"openrouter\");\n }\n if (vertex) {\n configuredProviders.add(\"vertex\");\n }\n\n const modelRegistry = parseModelRegistryConfig();\n\n return {\n server: { host, port },\n logging: { dbPath, blobRoot },\n streaming: { delay: streamDelay, chunkSize: streamChunkSize },\n livestore: { batchSize: Math.max(1, Math.min(500, livestoreBatch)) },\n providers: { openai, anthropic, openrouter, vertex },\n models: modelRegistry,\n };\n}\n\nconst loadBalancingStrategySchema = z\n .enum([\"first\", \"round_robin\", \"random\", \"weighted_random\"])\n .default(\"first\");\n\nconst modelDefinitionSchema = z.object({\n name: z.string().min(1),\n provider: z.string().min(1),\n model: z.string().min(1),\n weight: z.number().optional(),\n strategy: loadBalancingStrategySchema.optional(),\n ensure_tool_call: z.boolean().optional(),\n profile: z.string().optional(),\n provider_config: z.record(z.unknown()).optional(),\n});\n\nconst modelRegistrySchema = z.object({\n default_strategy: loadBalancingStrategySchema.optional(),\n models: z.array(modelDefinitionSchema).min(1),\n});\n\nfunction parseModelRegistryConfig(): {\n definitions: ModelDefinition[];\n defaultStrategy: LoadBalancingStrategy;\n} {\n const rawConfig = loadModelConfigText();\n let rawParsed: unknown;\n try {\n rawParsed = YAML.parse(rawConfig);\n } catch (error) {\n throw new Error(\n `Failed to parse model configuration YAML: ${(error as Error).message}`,\n );\n }\n let parsed;\n try {\n parsed = modelRegistrySchema.parse(rawParsed);\n } catch (error) {\n throw new Error(\n `Invalid model registry config: ${(error as Error).message}`,\n );\n }\n const definitions: ModelDefinition[] = parsed.models.map((entry) => ({\n name: entry.name,\n provider: entry.provider,\n upstreamModel: entry.model,\n weight: entry.weight,\n strategy: entry.strategy,\n ensureToolCall: entry.ensure_tool_call,\n profile: entry.profile,\n providerConfig: entry.provider_config,\n }));\n for (const def of definitions) {\n validateModelProviderConfig(def);\n }\n return {\n definitions,\n defaultStrategy: parsed.default_strategy ?? \"first\",\n };\n}\n\nfunction loadModelConfigText(): string {\n const inline = process.env.MODEL_CONFIG;\n if (inline && inline.trim()) {\n return inline;\n }\n\n const configPath =\n process.env.MODEL_CONFIG_PATH ??\n path.resolve(process.cwd(), \"model-config.yaml\");\n if (!fs.existsSync(configPath)) {\n throw new Error(\n \"Model configuration is missing. Provide MODEL_CONFIG (YAML string) or MODEL_CONFIG_PATH pointing to a YAML file.\",\n );\n }\n return fs.readFileSync(configPath, \"utf-8\");\n}\n\nfunction validateModelProviderConfig(definition: ModelDefinition): void {\n const { name, provider, providerConfig } = definition;\n\n if (provider === \"openai\") {\n const cfg = (providerConfig || {}) as Partial<OpenAIModelConfig>;\n const hasApiKey = Boolean(cfg.apiKey || process.env.OPENAI_API_KEY);\n const hasBaseUrl = Boolean(cfg.baseUrl || process.env.OPENAI_BASE_URL);\n if (!hasApiKey || !hasBaseUrl) {\n const missing: string[] = [];\n if (!hasApiKey) missing.push(\"apiKey\");\n if (!hasBaseUrl) missing.push(\"baseUrl\");\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: ${missing.join(\", \")}. ` +\n `Set ${missing\n .map((k) =>\n k === \"apiKey\"\n ? \"provider_config.apiKey or env OPENAI_API_KEY\"\n : \"provider_config.baseUrl or env OPENAI_BASE_URL\",\n )\n .join(\", \")}.`,\n );\n }\n return;\n }\n\n if (provider === \"openrouter\") {\n const cfg = (providerConfig || {}) as Partial<OpenRouterModelConfig>;\n const hasApiKey = Boolean(cfg.apiKey || process.env.OPENROUTER_API_KEY);\n if (!hasApiKey) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: apiKey. ` +\n `Set provider_config.apiKey or env OPENROUTER_API_KEY.`,\n );\n }\n return;\n }\n\n if (provider === \"anthropic\") {\n const cfg = (providerConfig || {}) as { apiKey?: string };\n const hasApiKey = Boolean(cfg.apiKey || process.env.ANTHROPIC_API_KEY);\n if (!hasApiKey) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: apiKey (provider_config.apiKey or env ANTHROPIC_API_KEY).`,\n );\n }\n return;\n }\n\n if (provider === \"vertex\") {\n const cfg = (providerConfig || {}) as Partial<VertexModelConfig>;\n const hasProject = Boolean(process.env.VERTEX_PROJECT_ID || cfg.projectId);\n const hasLocation = Boolean(process.env.VERTEX_LOCATION || cfg.location);\n // Credentials can be via env var, credentialsPath, or inline credentials\n const hasCreds = Boolean(\n process.env.GOOGLE_APPLICATION_CREDENTIALS ||\n cfg.credentialsPath ||\n cfg.credentials,\n );\n const missing: string[] = [];\n if (!hasProject)\n missing.push(\"provider_config.projectId or env VERTEX_PROJECT_ID\");\n if (!hasLocation)\n missing.push(\"provider_config.location or env VERTEX_LOCATION\");\n if (!hasCreds)\n missing.push(\n \"provider_config.credentialsPath or provider_config.credentials or env GOOGLE_APPLICATION_CREDENTIALS\",\n );\n if (missing.length) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: ${missing.join(\"; \")}.`,\n );\n }\n return;\n }\n}\n",
6
6
  "import { z } from \"zod\";\n\n// --- Shared Schemas ---\n\nexport const FunctionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.record(z.unknown()).optional(),\n strict: z.boolean().optional(),\n});\n\nexport const ToolSchema = z.object({\n type: z.literal(\"function\").default(\"function\"),\n function: FunctionSchema,\n});\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\").default(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n});\n\nconst ToolCallLikeSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\").default(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n }),\n});\n\n// --- OpenAI Chat Completions ---\n\nconst OpenAIChatContentPartSchema = z.union([\n z\n .object({\n type: z.literal(\"text\").optional(),\n text: z.string(),\n })\n .passthrough(),\n z\n .object({\n type: z.literal(\"image_url\").optional(),\n image_url: z.union([\n z.string(),\n z\n .object({\n url: z.string(),\n detail: z.string().optional(),\n })\n .passthrough(),\n ]),\n })\n .passthrough(),\n]);\n\nexport const OpenAIChatMessageSchema = z.object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIChatContentPartSchema)])\n .optional()\n .nullable(),\n name: z.string().optional(),\n tool_calls: z.array(ToolCallLikeSchema).optional(),\n function_call: z\n .object({\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .nullable()\n .optional(),\n tool_call_id: z.string().optional(),\n});\n\nexport const OpenAIChatCompletionRequestSchema = z.object({\n model: z.string(),\n messages: z.array(OpenAIChatMessageSchema),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n n: z.number().optional(),\n stream: z.boolean().optional(),\n stop: z.union([z.string(), z.array(z.string())]).optional(),\n max_completion_tokens: z.number().optional(),\n max_tokens: z.number().optional(),\n presence_penalty: z.number().optional(),\n frequency_penalty: z.number().optional(),\n logit_bias: z.record(z.number()).optional(),\n user: z.string().optional(),\n functions: z.array(FunctionSchema).optional(),\n function_call: z\n .union([z.string(), z.object({ name: z.string() })])\n .optional(),\n tools: z.array(ToolSchema).optional(),\n tool_choice: z\n .union([\n z.string(),\n z.object({ type: z.string(), function: z.object({ name: z.string() }) }),\n ])\n .optional(),\n});\n\nexport type OpenAIChatCompletionRequest = z.infer<\n typeof OpenAIChatCompletionRequestSchema\n>;\n\nexport const OpenAIChatCompletionResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\"),\n created: z.number(),\n model: z.string(),\n system_fingerprint: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.string(),\n content: z.string().nullable(),\n reasoning_content: z.string().optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n }),\n finish_reason: z.string().nullable(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAIChatCompletionResponse = z.infer<\n typeof OpenAIChatCompletionResponseSchema\n>;\n\n// --- Anthropic Messages ---\n\nconst AnthropicInputContentBlockSchema = z\n .object({\n type: z.string().optional(),\n text: z.string().optional(),\n thinking: z.string().optional(),\n signature: z.string().optional(),\n source: z.unknown().optional(),\n id: z.string().optional(),\n name: z.string().optional(),\n input: z.unknown().optional(),\n tool_use_id: z.string().optional(),\n content: z.unknown().optional(),\n is_error: z.boolean().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nexport const AnthropicContentBlockSchema = z.union([\n z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n }),\n z.object({\n type: z.literal(\"image\"),\n source: z.object({\n type: z.literal(\"base64\"),\n media_type: z.string(),\n data: z.string(),\n }),\n }),\n z.object({\n type: z.literal(\"tool_use\"),\n id: z.string(),\n name: z.string(),\n input: z.record(z.unknown()),\n }),\n z.object({\n type: z.literal(\"tool_result\"),\n tool_use_id: z.string(),\n content: z.union([z.string(), z.array(z.any())]).optional(),\n is_error: z.boolean().optional(),\n }),\n z.object({\n type: z.literal(\"thinking\"),\n thinking: z.string(),\n signature: z.string().optional(),\n }),\n]);\n\nexport const AnthropicMessageSchema = z.object({\n role: z.string(),\n content: z.union([z.string(), z.array(AnthropicInputContentBlockSchema)]),\n});\n\nconst AnthropicFunctionToolSchema = z\n .object({\n name: z.string(),\n description: z.string().optional(),\n input_schema: z.record(z.unknown()),\n })\n .passthrough();\n\nconst AnthropicProviderDefinedToolSchema = z\n .object({\n type: z.string(),\n name: z.string(),\n })\n .passthrough();\n\nexport const AnthropicMessagesRequestSchema = z.object({\n model: z.string(),\n messages: z.array(AnthropicMessageSchema),\n system: z\n .union([\n z.string(),\n z.array(\n z\n .object({ type: z.literal(\"text\").optional(), text: z.string() })\n .passthrough(),\n ),\n ])\n .optional(),\n max_tokens: z.number().optional(), // Anthropic usually requires this, but we can make it optional and default it\n metadata: z.object({ user_id: z.string().optional() }).optional(),\n stop_sequences: z.array(z.string()).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n top_k: z.number().optional(),\n thinking: z.unknown().optional(),\n thinking_config: z.unknown().optional(),\n tools: z\n .array(\n z.union([\n AnthropicFunctionToolSchema,\n AnthropicProviderDefinedToolSchema,\n ]),\n )\n .optional(),\n tool_choice: z\n .union([\n z.object({ type: z.literal(\"auto\") }),\n z.object({ type: z.literal(\"any\") }),\n z.object({ type: z.literal(\"tool\"), name: z.string() }),\n z.object({ type: z.literal(\"none\") }),\n ])\n .optional(),\n});\n\nexport type AnthropicMessagesRequest = z.infer<\n typeof AnthropicMessagesRequestSchema\n>;\n\nexport const AnthropicMessagesResponseSchema = z.object({\n id: z.string(),\n type: z.literal(\"message\"),\n role: z.literal(\"assistant\"),\n content: z.array(AnthropicContentBlockSchema),\n model: z.string(),\n stop_reason: z.string().nullable(),\n stop_sequence: z.string().nullable(),\n usage: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n});\n\nexport type AnthropicMessagesResponse = z.infer<\n typeof AnthropicMessagesResponseSchema\n>;\n\n// --- OpenAI Responses (Custom) ---\n\nexport const OpenAIResponsesRequestSchema = z.object({\n model: z.string(),\n messages: z.array(OpenAIChatMessageSchema).optional(),\n input: z.union([z.string(), z.array(z.any())]).optional(),\n tools: z.array(z.union([ToolSchema, FunctionSchema])).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n});\n\nexport type OpenAIResponsesRequest = z.infer<\n typeof OpenAIResponsesRequestSchema\n>;\n\nconst OpenAIResponsesUsageSchema = z.object({\n input_tokens: z.number(),\n input_tokens_details: z.object({ cached_tokens: z.number() }),\n output_tokens: z.number(),\n output_tokens_details: z.object({ reasoning_tokens: z.number() }),\n total_tokens: z.number(),\n});\n\nconst OpenAIResponsesFunctionToolSchema = z.object({\n type: z.literal(\"function\"),\n name: z.string(),\n description: z.string().nullable().optional(),\n parameters: z.record(z.unknown()).nullable(),\n strict: z.boolean().nullable(),\n});\n\nexport const OpenAIResponsesResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"response\"),\n created_at: z.number(),\n model: z.string(),\n status: z.string().optional(),\n error: z.unknown().nullable(),\n incomplete_details: z.unknown().nullable(),\n instructions: z.unknown().nullable(),\n metadata: z.record(z.string()).nullable(),\n output: z.array(z.lazy(() => OpenAIResponsesOutputItemSchema)),\n output_text: z.string(),\n parallel_tool_calls: z.boolean(),\n temperature: z.number().nullable(),\n tool_choice: z.unknown(),\n tools: z.array(OpenAIResponsesFunctionToolSchema).optional(),\n top_p: z.number().nullable(),\n truncation: z\n .union([z.literal(\"auto\"), z.literal(\"disabled\")])\n .nullable()\n .optional(),\n usage: OpenAIResponsesUsageSchema.optional(),\n});\n\nexport type OpenAIResponsesResponse = z.infer<\n typeof OpenAIResponsesResponseSchema\n>;\n\n// --- Request Union Alias ---\nexport type ClientRequest =\n | OpenAIChatCompletionRequest\n | AnthropicMessagesRequest\n | OpenAIResponsesRequest;\n\n// --- Streaming Schemas ---\n\nexport const OpenAIStreamChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\"),\n created: z.number(),\n model: z.string(),\n system_fingerprint: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.string().optional(),\n content: z.string().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n }),\n ),\n});\n\nexport type OpenAIStreamChunk = z.infer<typeof OpenAIStreamChunkSchema>;\n\nexport const AnthropicStreamEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message_start\"),\n message: AnthropicMessagesResponseSchema,\n }),\n z.object({\n type: z.literal(\"content_block_start\"),\n index: z.number(),\n content_block: AnthropicContentBlockSchema,\n }),\n z.object({\n type: z.literal(\"content_block_delta\"),\n index: z.number(),\n delta: z.union([\n z.object({ type: z.literal(\"text_delta\"), text: z.string() }),\n z.object({\n type: z.literal(\"input_json_delta\"),\n partial_json: z.string(),\n }),\n z.object({ type: z.literal(\"thinking_delta\"), thinking: z.string() }),\n ]),\n }),\n z.object({\n type: z.literal(\"content_block_stop\"),\n index: z.number(),\n }),\n z.object({\n type: z.literal(\"message_delta\"),\n delta: z.object({\n stop_reason: z.string().nullable(),\n stop_sequence: z.string().nullable(),\n }),\n usage: z.object({ output_tokens: z.number() }),\n }),\n z.object({\n type: z.literal(\"message_stop\"),\n }),\n z.object({\n type: z.literal(\"ping\").optional(),\n }),\n z.object({\n type: z.literal(\"error\"),\n error: z.object({\n type: z.string(),\n message: z.string(),\n }),\n }),\n]);\n\nexport type AnthropicStreamEvent = z.infer<typeof AnthropicStreamEventSchema>;\n\n// --- Response Union Alias ---\nexport type ClientResponse =\n | OpenAIChatCompletionResponse\n | AnthropicMessagesResponse\n | OpenAIResponsesResponse;\n\n// --- OpenAI Responses Output Items ---\n\nexport const OpenAIResponsesOutputItemSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message\"),\n id: z.string(),\n role: z.literal(\"assistant\"),\n content: z.array(\n z.union([\n z.object({\n type: z.literal(\"output_text\"),\n text: z.string(),\n annotations: z.array(z.unknown()).default([]),\n }),\n z.object({ type: z.literal(\"refusal\"), refusal: z.string() }),\n ]),\n ),\n status: z.string(),\n }),\n z.object({\n type: z.literal(\"function_call\"),\n id: z.string(),\n call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n id: z.string(),\n status: z.string().optional(),\n content: z\n .array(z.object({ type: z.literal(\"reasoning_text\"), text: z.string() }))\n .optional(),\n summary: z.array(\n z.object({ type: z.literal(\"summary_text\"), text: z.string() }),\n ),\n encrypted_content: z.string().nullable().optional(),\n }),\n]);\n\nexport type OpenAIResponsesOutputItem = z.infer<\n typeof OpenAIResponsesOutputItemSchema\n>;\n\nexport type AnthropicContentBlock = z.infer<typeof AnthropicContentBlockSchema>;\n",
7
- "import {\n ClientRequest,\n AnthropicMessagesResponse,\n OpenAIResponsesResponse,\n OpenAIChatCompletionResponse,\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n} from \"./core/schemas.js\";\nimport Fastify, {\n type FastifyInstance,\n type FastifyReply,\n type FastifyRequest,\n} from \"fastify\";\nimport cors from \"@fastify/cors\";\nimport FastifyStatic from \"@fastify/static\";\nimport { fileURLToPath } from \"node:url\";\nimport path, { dirname, join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { pipeline as streamPipeline } from \"node:stream/promises\";\nimport { AppConfig } from \"./config.js\";\nimport {\n HybridLogStore,\n readBlobFile,\n type HybridLogMetadata,\n type LogBlobKind,\n} from \"./persistence/hybridLogStore.js\";\nimport { Pipeline, ClientRegistry, ProviderRegistry } from \"./core/pipeline.js\";\nimport {\n OpenAIChatClientAdapter,\n AnthropicMessagesClientAdapter,\n OpenAIResponsesClientAdapter,\n} from \"./core/clientAdapters.js\";\nimport {\n OpenAIProviderAdapter,\n AnthropicProviderAdapter,\n OpenRouterProviderAdapter,\n VertexProviderAdapter,\n} from \"./core/providerAdapters.js\";\nimport {\n NormalizeTransform,\n NormalizeResponseTransform,\n PropagateFinishReasonsTransform,\n EnsureToolCallRequestTransform,\n EnsureToolCallResponseTransform,\n} from \"./core/transforms.js\";\nimport { Operation, type Response } from \"./core/types.js\";\nimport { ClientFormat, type JsonObject, type JsonValue } from \"./core/types.js\";\nimport { ModelRegistry } from \"./core/modelRegistry.js\";\nimport { resolveEnvVarsDeep } from \"./utils/envResolver.js\";\nimport { createRequestId } from \"./utils/ids.js\";\nimport { logger } from \"./utils/logger.js\";\nimport {\n anthropicStreamFromResponse,\n openAIResponsesStreamFromResponse,\n openAIStreamFromResponse,\n type StreamingOptions,\n} from \"./services/streaming.js\";\nimport {\n searchLogBlobs,\n type LogSearchBlobKind,\n} from \"./services/logSearch.js\";\nimport {\n createLiveStoreRuntime,\n type LiveStoreRuntime,\n} from \"./livestore/runtime.js\";\n\ninterface FastifyParamsWithProfile {\n profile: string;\n}\n\nexport async function createServer(\n config: AppConfig,\n): Promise<FastifyInstance> {\n const server = Fastify({ logger: false, bodyLimit: 104857600 });\n await server.register(cors, { origin: true });\n\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const uiDist = join(currentDir, \"..\", \"frontend\", \"dist\");\n const indexPath = join(uiDist, \"index.html\");\n const hasStaticAssets = existsSync(indexPath);\n\n if (hasStaticAssets) {\n await server.register(FastifyStatic, {\n root: uiDist,\n prefix: \"/\",\n wildcard: false,\n decorateReply: true,\n maxAge: 86400000,\n });\n\n server.get(\"/*\", async (req, reply) => {\n const file = (req.params as Record<string, string>)[\"*\"] ?? \"\";\n const isAsset = file.includes(\".\");\n if (!isAsset) {\n reply.sendFile(\"index.html\");\n return;\n }\n reply.sendFile(file);\n });\n } else {\n logger.warn(\n `Static frontend assets not found at ${indexPath}; skipping static serving.`,\n );\n }\n\n const logStore = new HybridLogStore(\n config.logging.dbPath,\n config.logging.blobRoot,\n );\n\n const liveStoreRuntime: LiveStoreRuntime | undefined =\n await createLiveStoreRuntime({\n storageDir: path.join(path.dirname(config.logging.dbPath), \"livestore\"),\n storeId: \"logs\",\n }).catch((error) => {\n logger.warn(\n { err: error },\n \"Failed to start LiveStore log mirror; dashboard sync will rely on HTTP only\",\n );\n return undefined;\n });\n if (liveStoreRuntime) {\n const seeded = await liveStoreRuntime.seedFromHybrid(logStore, {\n batchSize: config.livestore.batchSize,\n });\n logger.info({ seeded }, \"Seeded LiveStore log mirror\");\n server.addHook(\"onClose\", async () => {\n await liveStoreRuntime.close();\n });\n }\n const clientRegistry = new ClientRegistry();\n clientRegistry.register(new OpenAIChatClientAdapter());\n clientRegistry.register(new AnthropicMessagesClientAdapter());\n clientRegistry.register(new OpenAIResponsesClientAdapter());\n\n const providerRegistry = new ProviderRegistry();\n const hasVertexModels = config.models.definitions.some(\n (definition) => definition.provider === \"vertex\",\n );\n if (config.providers.openai) {\n providerRegistry.register(\n new OpenAIProviderAdapter({\n apiKey: config.providers.openai.apiKey,\n baseUrl: config.providers.openai.baseUrl,\n }),\n );\n }\n\n if (config.providers.anthropic) {\n providerRegistry.register(\n new AnthropicProviderAdapter({\n apiKey: config.providers.anthropic.apiKey,\n baseUrl: config.providers.anthropic.baseUrl,\n }),\n );\n }\n\n if (config.providers.openrouter) {\n providerRegistry.register(\n new OpenRouterProviderAdapter({\n apiKey: config.providers.openrouter.apiKey,\n }),\n );\n }\n\n if (config.providers.vertex || hasVertexModels) {\n if (!config.providers.vertex) {\n logger.warn(\n \"Vertex models configured without global provider config; provider_config must include project, location, and credentials\",\n );\n }\n providerRegistry.register(\n new VertexProviderAdapter(config.providers.vertex),\n );\n }\n\n const transforms = [\n new NormalizeTransform(),\n new EnsureToolCallRequestTransform(),\n new NormalizeResponseTransform(),\n new EnsureToolCallResponseTransform(),\n new PropagateFinishReasonsTransform(),\n ];\n\n const pipeline = new Pipeline(clientRegistry, providerRegistry, transforms);\n\n const modelRegistry = new ModelRegistry(\n config.models.definitions,\n config.models.defaultStrategy,\n );\n\n server.post(\"/v1/chat/completions\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n },\n );\n });\n\n server.post(\"/v1/messages\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n },\n );\n });\n\n server.post(\"/v1/responses\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n },\n );\n });\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/chat/completions\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/messages\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/responses\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.get(\"/v1/models\", (_req, reply) => {\n const summaries = modelRegistry.list();\n const data = summaries.map((summary) => ({\n id: summary.name,\n object: \"model\",\n owned_by: \"system\",\n name: summary.name,\n metadata: {\n strategy: summary.strategy,\n variants: summary.variants,\n },\n }));\n reply.send({ object: \"list\", data });\n });\n\n server.get(\"/api/logs\", (req, reply) => {\n const {\n page = \"1\",\n page_size = \"20\",\n search,\n from,\n to,\n } = req.query as Record<string, string>;\n const result = logStore.list({\n page: Number(page),\n pageSize: Number(page_size),\n search,\n from,\n to,\n });\n reply.send(result);\n });\n\n server.get(\"/api/logs/search\", async (req, reply) => {\n const {\n q,\n search,\n kinds,\n limit = \"200\",\n timeout_ms,\n } = req.query as Record<string, string>;\n\n const query = (q ?? search ?? \"\").trim();\n if (!query) {\n reply.send({\n ids: [],\n request_ids: [],\n truncated: false,\n engine: \"rg\",\n });\n return;\n }\n\n const parsedKinds: LogSearchBlobKind[] | undefined = kinds\n ? (kinds\n .split(\",\")\n .map((kind) => kind.trim())\n .filter(Boolean) as LogSearchBlobKind[])\n : undefined;\n\n const limitRaw = Number(limit);\n const limitNum = Number.isFinite(limitRaw)\n ? Math.max(1, Math.min(5000, limitRaw))\n : 200;\n const timeoutRaw = timeout_ms ? Number(timeout_ms) : undefined;\n const timeoutMs =\n timeoutRaw !== undefined && Number.isFinite(timeoutRaw)\n ? timeoutRaw\n : undefined;\n\n try {\n const blobResult = await searchLogBlobs({\n blobRoot: config.logging.blobRoot,\n query,\n kinds: parsedKinds,\n limit: limitNum,\n timeoutMs,\n });\n const ids = logStore.findIdsByRequestIds(blobResult.requestIds);\n reply.send({\n ids,\n request_ids: blobResult.requestIds,\n truncated: blobResult.truncated,\n engine: blobResult.engine,\n });\n } catch (error) {\n logger.error({ err: error }, \"Blob search failed\");\n reply.status(500).send({ error: { message: \"Blob search failed\" } });\n }\n });\n\n server.get(\"/api/livestore/pull\", async (req, reply) => {\n if (!liveStoreRuntime) {\n reply.status(503).send({\n error: { message: \"LiveStore mirror unavailable on this node\" },\n });\n return;\n }\n try {\n const { timestamp, id, limit } = req.query as Record<string, string>;\n const batchSize = Math.max(\n 1,\n Math.min(500, Number(limit ?? config.livestore.batchSize ?? 200)),\n );\n const checkpoint = {\n timestamp,\n id: id ? Number(id) : undefined,\n };\n const items = await liveStoreRuntime.pullSince(checkpoint, batchSize);\n const next =\n items.length > 0\n ? {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.numeric_id,\n }\n : checkpoint;\n reply.send({ items, next });\n } catch (error) {\n logger.error({ err: error }, \"LiveStore pull failed\");\n reply.status(500).send({ error: { message: \"LiveStore pull failed\" } });\n }\n });\n\n server.get(\"/api/logs/:id\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send(meta);\n });\n\n server.get(\"/api/logs/:id/blobs/:kind\", (req, reply) => {\n const { id, kind } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n\n const blobPath = logStore.resolveBlobPath(meta, kind as LogBlobKind);\n if (!blobPath) {\n reply.status(404).send({ error: { message: \"Blob not found\" } });\n return;\n }\n\n const etag = resolveEtag(meta, kind as LogBlobKind);\n if (etag && req.headers[\"if-none-match\"] === etag) {\n reply.status(304).send();\n return;\n }\n\n const payload = readBlobFile(blobPath);\n reply\n .header(\"Content-Type\", \"application/json\")\n .header(\"Cache-Control\", \"public, max-age=3600\")\n .header(\"ETag\", etag)\n .send(payload);\n });\n\n server.get(\"/api/logs/:id/summary\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send({\n id: meta.id,\n request_id: meta.request_id,\n status_code: meta.status_code,\n model: meta.model,\n provider: meta.provider,\n summary: meta.summary,\n timestamp: meta.timestamp,\n });\n });\n\n return server;\n}\n\nasync function handleRequest(\n req: FastifyRequest,\n reply: FastifyReply,\n body: ClientRequest,\n modelRegistry: ModelRegistry,\n pipeline: Pipeline,\n logStore: HybridLogStore,\n liveStoreRuntime: LiveStoreRuntime | undefined,\n config: AppConfig,\n options: {\n operation: Operation;\n clientFormat: ClientFormat;\n profile?: string;\n },\n) {\n const requestId = createRequestId();\n const startedAt = Date.now();\n let model: string;\n let isStream: boolean;\n let parsedBody: ClientRequest;\n\n try {\n if (options.clientFormat === ClientFormat.OpenAIChatCompletions) {\n parsedBody = OpenAIChatCompletionRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.AnthropicMessages) {\n parsedBody = AnthropicMessagesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.OpenAIResponses) {\n parsedBody = OpenAIResponsesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else {\n throw new Error(\"Unknown client format\");\n }\n } catch (error) {\n const errorBody = {\n error: { message: \"Invalid request schema\", details: error },\n };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n provider: \"schema_validation_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: req.body as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"schema_validation\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n const headers = normalizeHeaders(req.headers);\n\n let providerKey: string;\n let upstreamModel: string | undefined;\n let providerConfig: JsonObject | undefined;\n let ensureToolCall = false;\n try {\n const resolved = modelRegistry.resolve(model, options.profile);\n providerKey = resolved.provider;\n upstreamModel = resolved.upstreamModel;\n ensureToolCall = resolved.ensureToolCall === true;\n providerConfig = resolved.providerConfig\n ? (resolveEnvVarsDeep(resolved.providerConfig) as JsonObject)\n : undefined;\n } catch (error) {\n logger.error(\n { err: error, model, profile: options.profile },\n \"Model resolution failed\",\n );\n const errorBody = { error: { message: (error as Error).message } };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n model,\n provider: \"resolution_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: parsedBody as unknown as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"model_resolution\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n try {\n const result = await pipeline.execute({\n clientFormat: options.clientFormat,\n providerKey,\n providerConfig,\n requestBody: upstreamModel\n ? ({\n ...parsedBody,\n model: upstreamModel,\n } as unknown as ClientRequest)\n : parsedBody,\n requestHeaders: headers,\n operation: options.operation,\n requestId,\n profile: options.profile,\n ensureToolCall,\n });\n\n const status =\n result.providerResponse.status >= 400\n ? result.providerResponse.status\n : result.response.error\n ? 502\n : 200;\n\n const stored = logStore.append({\n requestId: result.request.id,\n method: req.method,\n url: req.url,\n statusCode: status,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: result.request.metadata.providerFormat,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: result.clientResponse,\n providerRequestBody: result.providerResponse.requestBody,\n providerResponseBody: result.providerResponse.body,\n summary: summarize(result.response),\n });\n\n if (stored) {\n if (liveStoreRuntime) {\n void liveStoreRuntime.mirrorLog(stored).catch((error) => {\n logger.warn({ err: error }, \"LiveStore mirrorLog failed\");\n });\n }\n }\n\n if (status >= 400) {\n const errorPayload =\n status >= 400 && result.response.error\n ? { error: result.response.error }\n : result.providerResponse.body;\n reply.status(status).send(errorPayload);\n return;\n }\n\n await sendResponse(\n reply,\n options.clientFormat,\n isStream,\n result.clientResponse,\n config.streaming,\n );\n } catch (error) {\n logger.error({ err: error }, \"Pipeline failed\");\n\n const errorDetails = {\n message: \"Internal proxy error\",\n details: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n cause:\n error instanceof Error && (error as { cause?: unknown }).cause\n ? String((error as { cause?: unknown }).cause)\n : undefined,\n };\n\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 500,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: undefined,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: { error: errorDetails },\n providerRequestBody: null,\n providerResponseBody: null,\n summary: summarizeError(error, \"pipeline_execution\"),\n });\n reply.status(500).send({ error: { message: \"Internal proxy error\" } });\n }\n}\nfunction normalizeHeaders(\n headers: FastifyRequest[\"headers\"],\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n normalized[key.toLowerCase()] = value;\n }\n }\n return normalized;\n}\n\nasync function sendResponse(\n reply: FastifyReply,\n clientFormat: ClientFormat,\n shouldStream: boolean,\n payload: JsonValue,\n streaming: StreamingOptions,\n) {\n if (!shouldStream) {\n reply.send(payload);\n return;\n }\n\n if (clientFormat === ClientFormat.AnthropicMessages) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = anthropicStreamFromResponse(\n payload as unknown as AnthropicMessagesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during anthropic stream\",\n );\n }\n return;\n }\n\n if (clientFormat === ClientFormat.OpenAIResponses) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIResponsesStreamFromResponse(\n payload as unknown as OpenAIResponsesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during responses stream\",\n );\n }\n return;\n }\n\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIStreamFromResponse(\n payload as unknown as OpenAIChatCompletionResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug({ err: error }, \"Client disconnected during stream\");\n }\n}\n\nfunction resolveEtag(\n meta: HybridLogMetadata,\n kind: LogBlobKind,\n): string | undefined {\n const mapping: Record<LogBlobKind, string | undefined> = {\n request: meta.request_sha256 as string | undefined,\n response: meta.response_sha256 as string | undefined,\n \"provider-request\": meta.provider_request_sha256 as string | undefined,\n \"provider-response\": meta.provider_response_sha256 as string | undefined,\n };\n return mapping[kind];\n}\n\nfunction summarize(response: Response): string {\n const message = response.output.find((entry) => entry.type === \"message\");\n const preview =\n message && message.type === \"message\"\n ? message.content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\")\n .slice(0, 200) || undefined\n : undefined;\n\n return JSON.stringify({\n finish_reason: response.finish_reason,\n error: response.error,\n preview,\n });\n}\n\nfunction summarizeError(error: unknown, errorType: string): string {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return JSON.stringify({\n error_type: errorType,\n error_message: errorMessage.slice(0, 500), // Limit length\n });\n}\n\nfunction isPrematureCloseError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const err = error as { code?: string; message?: string };\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") return true;\n return (\n typeof err.message === \"string\" && err.message.includes(\"Premature close\")\n );\n}\n",
7
+ "import {\n ClientRequest,\n AnthropicMessagesResponse,\n OpenAIResponsesResponse,\n OpenAIChatCompletionResponse,\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n} from \"./core/schemas.js\";\nimport Fastify, {\n type FastifyInstance,\n type FastifyReply,\n type FastifyRequest,\n} from \"fastify\";\nimport cors from \"@fastify/cors\";\nimport FastifyStatic from \"@fastify/static\";\nimport { fileURLToPath } from \"node:url\";\nimport path, { dirname, join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { pipeline as streamPipeline } from \"node:stream/promises\";\nimport { AppConfig } from \"./config.js\";\nimport {\n HybridLogStore,\n readBlobFile,\n type HybridLogMetadata,\n type LogBlobKind,\n} from \"./persistence/hybridLogStore.js\";\nimport { Pipeline, ClientRegistry, ProviderRegistry } from \"./core/pipeline.js\";\nimport {\n OpenAIChatClientAdapter,\n AnthropicMessagesClientAdapter,\n OpenAIResponsesClientAdapter,\n} from \"./core/clientAdapters.js\";\nimport {\n OpenAIProviderAdapter,\n AnthropicProviderAdapter,\n OpenRouterProviderAdapter,\n VertexProviderAdapter,\n} from \"./core/providerAdapters.js\";\nimport {\n NormalizeTransform,\n NormalizeResponseTransform,\n PropagateFinishReasonsTransform,\n EnsureToolCallRequestTransform,\n EnsureToolCallResponseTransform,\n} from \"./core/transforms.js\";\nimport { Operation, type Response } from \"./core/types.js\";\nimport { ClientFormat, type JsonObject, type JsonValue } from \"./core/types.js\";\nimport { ModelRegistry } from \"./core/modelRegistry.js\";\nimport { resolveEnvVarsDeep } from \"./utils/envResolver.js\";\nimport { createRequestId } from \"./utils/ids.js\";\nimport { logger } from \"./utils/logger.js\";\nimport {\n anthropicStreamFromResponse,\n openAIResponsesStreamFromResponse,\n openAIStreamFromResponse,\n type StreamingOptions,\n} from \"./services/streaming.js\";\nimport {\n searchLogBlobs,\n type LogSearchBlobKind,\n} from \"./services/logSearch.js\";\nimport {\n createLiveStoreRuntime,\n type LiveStoreRuntime,\n} from \"./livestore/runtime.js\";\n\ninterface FastifyParamsWithProfile {\n profile: string;\n}\n\nexport async function createServer(\n config: AppConfig,\n): Promise<FastifyInstance> {\n const server = Fastify({ logger: false, bodyLimit: 104857600 });\n await server.register(cors, { origin: true });\n\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const uiDist = join(currentDir, \"..\", \"frontend\", \"dist\");\n const indexPath = join(uiDist, \"index.html\");\n const hasStaticAssets = existsSync(indexPath);\n\n if (hasStaticAssets) {\n await server.register(FastifyStatic, {\n root: uiDist,\n prefix: \"/\",\n wildcard: false,\n decorateReply: true,\n maxAge: 86400000,\n });\n\n server.get(\"/*\", async (req, reply) => {\n const file = (req.params as Record<string, string>)[\"*\"] ?? \"\";\n const isAsset = file.includes(\".\");\n if (!isAsset) {\n reply.sendFile(\"index.html\");\n return;\n }\n reply.sendFile(file);\n });\n } else {\n logger.warn(\n `Static frontend assets not found at ${indexPath}; skipping static serving.`,\n );\n }\n\n const logStore = new HybridLogStore(\n config.logging.dbPath,\n config.logging.blobRoot,\n );\n\n const liveStoreRuntime: LiveStoreRuntime | undefined =\n await createLiveStoreRuntime({\n storageDir: path.join(path.dirname(config.logging.dbPath), \"livestore\"),\n storeId: \"logs\",\n }).catch((error) => {\n logger.warn(\n { err: error },\n \"Failed to start LiveStore log mirror; dashboard sync will rely on HTTP only\",\n );\n return undefined;\n });\n if (liveStoreRuntime) {\n const seeded = await liveStoreRuntime.seedFromHybrid(logStore, {\n batchSize: config.livestore.batchSize,\n });\n logger.info({ seeded }, \"Seeded LiveStore log mirror\");\n server.addHook(\"onClose\", async () => {\n await liveStoreRuntime.close();\n });\n }\n const clientRegistry = new ClientRegistry();\n clientRegistry.register(new OpenAIChatClientAdapter());\n clientRegistry.register(new AnthropicMessagesClientAdapter());\n clientRegistry.register(new OpenAIResponsesClientAdapter());\n\n const providerRegistry = new ProviderRegistry();\n const hasVertexModels = config.models.definitions.some(\n (definition) => definition.provider === \"vertex\",\n );\n if (config.providers.openai) {\n providerRegistry.register(\n new OpenAIProviderAdapter({\n apiKey: config.providers.openai.apiKey,\n baseUrl: config.providers.openai.baseUrl,\n }),\n );\n }\n\n if (config.providers.anthropic) {\n providerRegistry.register(\n new AnthropicProviderAdapter({\n apiKey: config.providers.anthropic.apiKey,\n baseUrl: config.providers.anthropic.baseUrl,\n }),\n );\n }\n\n if (config.providers.openrouter) {\n providerRegistry.register(\n new OpenRouterProviderAdapter({\n apiKey: config.providers.openrouter.apiKey,\n }),\n );\n }\n\n if (config.providers.vertex || hasVertexModels) {\n if (!config.providers.vertex) {\n logger.warn(\n \"Vertex models configured without global provider config; provider_config must include project, location, and credentials\",\n );\n }\n providerRegistry.register(\n new VertexProviderAdapter(config.providers.vertex),\n );\n }\n\n const transforms = [\n new NormalizeTransform(),\n new EnsureToolCallRequestTransform(),\n new NormalizeResponseTransform(),\n new EnsureToolCallResponseTransform(),\n new PropagateFinishReasonsTransform(),\n ];\n\n const pipeline = new Pipeline(clientRegistry, providerRegistry, transforms);\n\n const modelRegistry = new ModelRegistry(\n config.models.definitions,\n config.models.defaultStrategy,\n );\n\n server.post(\"/v1/chat/completions\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n },\n );\n });\n\n server.post(\"/v1/messages\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n },\n );\n });\n\n server.post(\"/v1/responses\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n },\n );\n });\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/chat/completions\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/messages\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/responses\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.get(\"/v1/models\", (_req, reply) => {\n const summaries = modelRegistry.list();\n const data = summaries.map((summary) => ({\n id: summary.name,\n object: \"model\",\n owned_by: \"system\",\n name: summary.name,\n metadata: {\n strategy: summary.strategy,\n variants: summary.variants,\n },\n }));\n reply.send({ object: \"list\", data });\n });\n\n server.get(\"/api/logs\", (req, reply) => {\n const {\n page = \"1\",\n page_size = \"20\",\n search,\n from,\n to,\n } = req.query as Record<string, string>;\n const result = logStore.list({\n page: Number(page),\n pageSize: Number(page_size),\n search,\n from,\n to,\n });\n reply.send(result);\n });\n\n server.get(\"/api/logs/search\", async (req, reply) => {\n const {\n q,\n search,\n kinds,\n limit = \"200\",\n timeout_ms,\n } = req.query as Record<string, string>;\n\n const query = (q ?? search ?? \"\").trim();\n if (!query) {\n reply.send({\n ids: [],\n request_ids: [],\n truncated: false,\n engine: \"rg\",\n });\n return;\n }\n\n const parsedKinds: LogSearchBlobKind[] | undefined = kinds\n ? (kinds\n .split(\",\")\n .map((kind) => kind.trim())\n .filter(Boolean) as LogSearchBlobKind[])\n : undefined;\n\n const limitRaw = Number(limit);\n const limitNum = Number.isFinite(limitRaw)\n ? Math.max(1, Math.min(5000, limitRaw))\n : 200;\n const timeoutRaw = timeout_ms ? Number(timeout_ms) : undefined;\n const timeoutMs =\n timeoutRaw !== undefined && Number.isFinite(timeoutRaw)\n ? timeoutRaw\n : undefined;\n\n try {\n const blobResult = await searchLogBlobs({\n blobRoot: config.logging.blobRoot,\n query,\n kinds: parsedKinds,\n limit: limitNum,\n timeoutMs,\n });\n const ids = logStore.findIdsByRequestIds(blobResult.requestIds);\n reply.send({\n ids,\n request_ids: blobResult.requestIds,\n truncated: blobResult.truncated,\n engine: blobResult.engine,\n });\n } catch (error) {\n logger.error({ err: error }, \"Blob search failed\");\n reply.status(500).send({ error: { message: \"Blob search failed\" } });\n }\n });\n\n server.get(\"/api/livestore/pull\", async (req, reply) => {\n if (!liveStoreRuntime) {\n reply.status(503).send({\n error: { message: \"LiveStore mirror unavailable on this node\" },\n });\n return;\n }\n try {\n const { timestamp, id, limit } = req.query as Record<string, string>;\n const batchSize = Math.max(\n 1,\n Math.min(500, Number(limit ?? config.livestore.batchSize ?? 200)),\n );\n const checkpoint = {\n timestamp,\n id: id ? Number(id) : undefined,\n };\n const items = await liveStoreRuntime.pullSince(checkpoint, batchSize);\n const next =\n items.length > 0\n ? {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.numeric_id,\n }\n : checkpoint;\n reply.send({ items, next });\n } catch (error) {\n logger.error({ err: error }, \"LiveStore pull failed\");\n reply.status(500).send({ error: { message: \"LiveStore pull failed\" } });\n }\n });\n\n server.get(\"/api/logs/:id\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send(meta);\n });\n\n server.get(\"/api/logs/:id/blobs/:kind\", (req, reply) => {\n const { id, kind } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n\n const blobPath = logStore.resolveBlobPath(meta, kind as LogBlobKind);\n if (!blobPath) {\n reply.status(404).send({ error: { message: \"Blob not found\" } });\n return;\n }\n\n const etag = resolveEtag(meta, kind as LogBlobKind);\n if (etag && req.headers[\"if-none-match\"] === etag) {\n reply.status(304).send();\n return;\n }\n\n const payload = readBlobFile(blobPath);\n reply\n .header(\"Content-Type\", \"application/json\")\n .header(\"Cache-Control\", \"public, max-age=3600\")\n .header(\"ETag\", etag)\n .send(payload);\n });\n\n server.get(\"/api/logs/:id/summary\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send({\n id: meta.id,\n request_id: meta.request_id,\n status_code: meta.status_code,\n model: meta.model,\n provider: meta.provider,\n summary: meta.summary,\n timestamp: meta.timestamp,\n });\n });\n\n server.get(\"/api/config\", (_req, reply) => {\n reply.send({\n blobRoot: config.logging.blobRoot,\n });\n });\n\n server.get(\"/api/logs/:id/path\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n\n // Build the absolute path from the relative paths stored\n // Get the date components from timestamp\n const date = new Date(meta.timestamp);\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n\n // Directory path: {blobRoot}/{YYYY}/{MM}/{DD}/{request_id}/\n const dirPath = `${config.logging.blobRoot}/${year}/${month}/${day}/${meta.request_id}/`;\n\n reply.send({\n directory: dirPath,\n request: meta.request_path\n ? `${config.logging.blobRoot}/${meta.request_path}`\n : null,\n response: meta.response_path\n ? `${config.logging.blobRoot}/${meta.response_path}`\n : null,\n providerRequest: meta.provider_request_path\n ? `${config.logging.blobRoot}/${meta.provider_request_path}`\n : null,\n providerResponse: meta.provider_response_path\n ? `${config.logging.blobRoot}/${meta.provider_response_path}`\n : null,\n });\n });\n\n return server;\n}\n\nasync function handleRequest(\n req: FastifyRequest,\n reply: FastifyReply,\n body: ClientRequest,\n modelRegistry: ModelRegistry,\n pipeline: Pipeline,\n logStore: HybridLogStore,\n liveStoreRuntime: LiveStoreRuntime | undefined,\n config: AppConfig,\n options: {\n operation: Operation;\n clientFormat: ClientFormat;\n profile?: string;\n },\n) {\n const requestId = createRequestId();\n const startedAt = Date.now();\n let model: string;\n let isStream: boolean;\n let parsedBody: ClientRequest;\n\n try {\n if (options.clientFormat === ClientFormat.OpenAIChatCompletions) {\n parsedBody = OpenAIChatCompletionRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.AnthropicMessages) {\n parsedBody = AnthropicMessagesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.OpenAIResponses) {\n parsedBody = OpenAIResponsesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else {\n throw new Error(\"Unknown client format\");\n }\n } catch (error) {\n const errorBody = {\n error: { message: \"Invalid request schema\", details: error },\n };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n provider: \"schema_validation_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: req.body as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"schema_validation\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n const headers = normalizeHeaders(req.headers);\n\n let providerKey: string;\n let upstreamModel: string | undefined;\n let providerConfig: JsonObject | undefined;\n let ensureToolCall = false;\n try {\n const resolved = modelRegistry.resolve(model, options.profile);\n providerKey = resolved.provider;\n upstreamModel = resolved.upstreamModel;\n ensureToolCall = resolved.ensureToolCall === true;\n providerConfig = resolved.providerConfig\n ? (resolveEnvVarsDeep(resolved.providerConfig) as JsonObject)\n : undefined;\n } catch (error) {\n logger.error(\n { err: error, model, profile: options.profile },\n \"Model resolution failed\",\n );\n const errorBody = { error: { message: (error as Error).message } };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n model,\n provider: \"resolution_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: parsedBody as unknown as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"model_resolution\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n try {\n const result = await pipeline.execute({\n clientFormat: options.clientFormat,\n providerKey,\n providerConfig,\n requestBody: upstreamModel\n ? ({\n ...parsedBody,\n model: upstreamModel,\n } as unknown as ClientRequest)\n : parsedBody,\n requestHeaders: headers,\n operation: options.operation,\n requestId,\n profile: options.profile,\n ensureToolCall,\n });\n\n const status =\n result.providerResponse.status >= 400\n ? result.providerResponse.status\n : result.response.error\n ? 502\n : 200;\n\n const stored = logStore.append({\n requestId: result.request.id,\n method: req.method,\n url: req.url,\n statusCode: status,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: result.request.metadata.providerFormat,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: result.clientResponse,\n providerRequestBody: result.providerResponse.requestBody,\n providerResponseBody: result.providerResponse.body,\n summary: summarize(result.response),\n });\n\n if (stored) {\n if (liveStoreRuntime) {\n void liveStoreRuntime.mirrorLog(stored).catch((error) => {\n logger.warn({ err: error }, \"LiveStore mirrorLog failed\");\n });\n }\n }\n\n if (status >= 400) {\n const errorPayload =\n status >= 400 && result.response.error\n ? { error: result.response.error }\n : result.providerResponse.body;\n reply.status(status).send(errorPayload);\n return;\n }\n\n await sendResponse(\n reply,\n options.clientFormat,\n isStream,\n result.clientResponse,\n config.streaming,\n );\n } catch (error) {\n logger.error({ err: error }, \"Pipeline failed\");\n\n const errorDetails = {\n message: \"Internal proxy error\",\n details: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n cause:\n error instanceof Error && (error as { cause?: unknown }).cause\n ? String((error as { cause?: unknown }).cause)\n : undefined,\n };\n\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 500,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: undefined,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: { error: errorDetails },\n providerRequestBody: null,\n providerResponseBody: null,\n summary: summarizeError(error, \"pipeline_execution\"),\n });\n reply.status(500).send({ error: { message: \"Internal proxy error\" } });\n }\n}\nfunction normalizeHeaders(\n headers: FastifyRequest[\"headers\"],\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n normalized[key.toLowerCase()] = value;\n }\n }\n return normalized;\n}\n\nasync function sendResponse(\n reply: FastifyReply,\n clientFormat: ClientFormat,\n shouldStream: boolean,\n payload: JsonValue,\n streaming: StreamingOptions,\n) {\n if (!shouldStream) {\n reply.send(payload);\n return;\n }\n\n if (clientFormat === ClientFormat.AnthropicMessages) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = anthropicStreamFromResponse(\n payload as unknown as AnthropicMessagesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during anthropic stream\",\n );\n }\n return;\n }\n\n if (clientFormat === ClientFormat.OpenAIResponses) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIResponsesStreamFromResponse(\n payload as unknown as OpenAIResponsesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during responses stream\",\n );\n }\n return;\n }\n\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIStreamFromResponse(\n payload as unknown as OpenAIChatCompletionResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug({ err: error }, \"Client disconnected during stream\");\n }\n}\n\nfunction resolveEtag(\n meta: HybridLogMetadata,\n kind: LogBlobKind,\n): string | undefined {\n const mapping: Record<LogBlobKind, string | undefined> = {\n request: meta.request_sha256 as string | undefined,\n response: meta.response_sha256 as string | undefined,\n \"provider-request\": meta.provider_request_sha256 as string | undefined,\n \"provider-response\": meta.provider_response_sha256 as string | undefined,\n };\n return mapping[kind];\n}\n\nfunction summarize(response: Response): string {\n const message = response.output.find((entry) => entry.type === \"message\");\n const preview =\n message && message.type === \"message\"\n ? message.content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\")\n .slice(0, 200) || undefined\n : undefined;\n\n return JSON.stringify({\n finish_reason: response.finish_reason,\n error: response.error,\n preview,\n });\n}\n\nfunction summarizeError(error: unknown, errorType: string): string {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return JSON.stringify({\n error_type: errorType,\n error_message: errorMessage.slice(0, 500), // Limit length\n });\n}\n\nfunction isPrematureCloseError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const err = error as { code?: string; message?: string };\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") return true;\n return (\n typeof err.message === \"string\" && err.message.includes(\"Premature close\")\n );\n}\n",
8
8
  "import { Database, type Statement } from \"bun:sqlite\";\nimport { mkdirSync, writeFileSync, existsSync, readFileSync } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { logger } from \"../utils/logger.js\";\nimport type { JsonValue } from \"../core/types.js\";\n\nexport type LogBlobKind =\n | \"request\"\n | \"response\"\n | \"provider-request\"\n | \"provider-response\";\n\nexport interface HybridLogMetadata {\n id: number;\n request_id: string;\n timestamp: string;\n method: string;\n url: string;\n status_code: number;\n model?: string | null;\n provider?: string | null;\n profile?: string | null;\n operation?: string | null;\n client_format?: string | null;\n provider_format?: string | null;\n latency_ms?: number | null;\n request_path?: string | null;\n response_path?: string | null;\n provider_request_path?: string | null;\n provider_response_path?: string | null;\n request_sha256?: string | null;\n response_sha256?: string | null;\n provider_request_sha256?: string | null;\n provider_response_sha256?: string | null;\n blob_bytes?: number | null;\n summary?: string | null;\n}\n\nexport interface HybridLogListQuery {\n page: number;\n pageSize: number;\n search?: string;\n from?: string;\n to?: string;\n}\n\nexport interface HybridLogListResult {\n items: HybridLogMetadata[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport interface HybridLogAppendInput {\n requestId: string;\n method: string;\n url: string;\n statusCode: number;\n model?: string;\n provider?: string;\n profile?: string;\n operation?: string;\n clientFormat?: string;\n providerFormat?: string;\n startedAt?: number;\n finishedAt?: number;\n requestBody: JsonValue;\n responseBody: JsonValue;\n providerRequestBody?: JsonValue;\n providerResponseBody?: JsonValue;\n summary?: string;\n}\n\ntype InsertableLogRow = HybridLogMetadata;\n\nexport class HybridLogStore {\n private db: Database;\n private insertStmt: Statement<InsertableLogRow>;\n\n constructor(\n private readonly dbPath: string,\n private readonly blobRoot: string,\n ) {\n mkdirSync(path.dirname(dbPath), { recursive: true });\n mkdirSync(blobRoot, { recursive: true });\n\n this.db = new Database(dbPath, { create: true, strict: true });\n this.db.prepare(\"PRAGMA journal_mode = WAL\").get();\n this.db\n .prepare(\n `CREATE TABLE IF NOT EXISTS logs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n request_id TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n method TEXT NOT NULL,\n url TEXT NOT NULL,\n status_code INTEGER NOT NULL,\n model TEXT,\n provider TEXT,\n profile TEXT,\n operation TEXT,\n client_format TEXT,\n provider_format TEXT,\n latency_ms INTEGER,\n request_path TEXT,\n response_path TEXT,\n provider_request_path TEXT,\n provider_response_path TEXT,\n request_sha256 TEXT,\n response_sha256 TEXT,\n provider_request_sha256 TEXT,\n provider_response_sha256 TEXT,\n blob_bytes INTEGER,\n summary TEXT\n )`,\n )\n .run();\n\n this.db\n .prepare(\n `CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp DESC)`,\n )\n .run();\n this.db\n .prepare(\n `CREATE INDEX IF NOT EXISTS idx_logs_status ON logs(status_code)`,\n )\n .run();\n this.db\n .prepare(`CREATE INDEX IF NOT EXISTS idx_logs_model ON logs(model)`)\n .run();\n\n this.insertStmt = this.db.prepare(`\n INSERT INTO logs (\n request_id,\n timestamp,\n method,\n url,\n status_code,\n model,\n provider,\n profile,\n operation,\n client_format,\n provider_format,\n latency_ms,\n request_path,\n response_path,\n provider_request_path,\n provider_response_path,\n request_sha256,\n response_sha256,\n provider_request_sha256,\n provider_response_sha256,\n blob_bytes,\n summary\n ) VALUES (\n @request_id,\n @timestamp,\n @method,\n @url,\n @status_code,\n @model,\n @provider,\n @profile,\n @operation,\n @client_format,\n @provider_format,\n @latency_ms,\n @request_path,\n @response_path,\n @provider_request_path,\n @provider_response_path,\n @request_sha256,\n @response_sha256,\n @provider_request_sha256,\n @provider_response_sha256,\n @blob_bytes,\n @summary\n )\n `);\n }\n\n append(input: HybridLogAppendInput): HybridLogMetadata | undefined {\n try {\n const timestamp = new Date().toISOString();\n const dir = this.resolveBlobDir(timestamp, input.requestId);\n const record = this.writeBlobs(dir, {\n request: input.requestBody,\n response: input.responseBody,\n providerRequest: input.providerRequestBody,\n providerResponse: input.providerResponseBody,\n });\n\n const latency =\n input.startedAt && input.finishedAt\n ? Math.max(0, input.finishedAt - input.startedAt)\n : null;\n\n const row: InsertableLogRow = {\n id: 0,\n request_id: input.requestId,\n timestamp,\n method: input.method,\n url: input.url,\n status_code: input.statusCode,\n model: input.model,\n provider: input.provider,\n profile: input.profile,\n operation: input.operation,\n client_format: input.clientFormat,\n provider_format: input.providerFormat,\n latency_ms: latency,\n request_path: record.request.path,\n response_path: record.response.path,\n provider_request_path: record.providerRequest?.path,\n provider_response_path: record.providerResponse?.path,\n request_sha256: record.request.hash,\n response_sha256: record.response.hash,\n provider_request_sha256: record.providerRequest?.hash,\n provider_response_sha256: record.providerResponse?.hash,\n blob_bytes: record.totalBytes,\n summary: input.summary,\n };\n\n const result = this.insertStmt.run(row);\n return { ...row, id: Number(result.lastInsertRowid) };\n } catch (error) {\n logger.error({ err: error }, \"Failed to append hybrid log entry\");\n return undefined;\n }\n }\n\n list(query: HybridLogListQuery): HybridLogListResult {\n const page = Math.max(1, query.page);\n const pageSize = Math.min(200, Math.max(1, query.pageSize));\n const offset = (page - 1) * pageSize;\n\n const clauses: string[] = [];\n const params: Record<string, unknown> = { limit: pageSize, offset };\n\n if (query.search) {\n clauses.push(\n `(method LIKE @search OR url LIKE @search OR model LIKE @search OR provider LIKE @search OR client_format LIKE @search OR provider_format LIKE @search)`,\n );\n params.search = `%${query.search}%`;\n }\n\n if (query.from) {\n clauses.push(`timestamp >= @from`);\n params.from = query.from;\n }\n\n if (query.to) {\n clauses.push(`timestamp <= @to`);\n params.to = query.to;\n }\n\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n\n const totalRow = this.db\n .prepare(`SELECT COUNT(*) as count FROM logs ${where}`)\n .get(params as never) as { count?: number } | undefined;\n\n const rows = this.db\n .prepare(\n `SELECT * FROM logs ${where} ORDER BY timestamp DESC, id DESC LIMIT @limit OFFSET @offset`,\n )\n .all(params as never) as HybridLogMetadata[];\n\n return { items: rows, total: Number(totalRow?.count ?? 0), page, pageSize };\n }\n\n latestCheckpoint(): { timestamp: string; id: number } | undefined {\n const row = this.db\n .prepare(\n \"SELECT id, timestamp FROM logs ORDER BY datetime(timestamp) DESC LIMIT 1\",\n )\n .get() as { id?: number; timestamp?: string } | undefined;\n if (!row?.id || !row.timestamp) return undefined;\n return { id: row.id, timestamp: row.timestamp };\n }\n\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): HybridLogListResult {\n const clauses: string[] = [];\n const params: Record<string, unknown> = { limit };\n if (checkpoint.timestamp) {\n clauses.push(`(timestamp > @ts OR (timestamp = @ts AND id > @id))`);\n params.ts = checkpoint.timestamp;\n params.id = checkpoint.id ?? 0;\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const rows = this.db\n .prepare(\n `SELECT * FROM logs ${where} ORDER BY datetime(timestamp), id LIMIT @limit`,\n )\n .all(params as never) as HybridLogMetadata[];\n return { items: rows, total: rows.length, page: 1, pageSize: rows.length };\n }\n\n resolveBlobPath(record: HybridLogMetadata, kind: LogBlobKind): string | null {\n const mapping: Record<LogBlobKind, string | null | undefined> = {\n request: record.request_path,\n response: record.response_path,\n \"provider-request\": record.provider_request_path,\n \"provider-response\": record.provider_response_path,\n };\n const resolved = mapping[kind];\n if (!resolved) return null;\n const full = path.isAbsolute(resolved)\n ? resolved\n : path.join(this.blobRoot, resolved);\n return existsSync(full) ? full : null;\n }\n\n readMetadata(id: number): HybridLogMetadata | undefined {\n const row = this.db\n .prepare(\"SELECT * FROM logs WHERE id = @id\")\n .get({ id }) as HybridLogMetadata | undefined;\n return row;\n }\n\n findIdsByRequestIds(requestIds: string[]): number[] {\n if (!requestIds.length) return [];\n const ids: number[] = [];\n const chunkSize = 900;\n for (let offset = 0; offset < requestIds.length; offset += chunkSize) {\n const chunk = requestIds.slice(offset, offset + chunkSize);\n const params: Record<string, string> = {};\n const placeholders = chunk\n .map((requestId, index) => {\n const key = `id${index}`;\n params[key] = requestId;\n return `@${key}`;\n })\n .join(\", \");\n const rows = this.db\n .prepare(`SELECT id FROM logs WHERE request_id IN (${placeholders})`)\n .all(params as never) as Array<{ id: number }>;\n ids.push(...rows.map((row) => Number(row.id)));\n }\n return ids;\n }\n\n private resolveBlobDir(timestamp: string, requestId: string): string {\n const date = new Date(timestamp);\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n return path.join(this.blobRoot, `${year}`, `${month}`, `${day}`, requestId);\n }\n\n private writeBlobs(\n dir: string,\n payloads: {\n request: JsonValue;\n response: JsonValue;\n providerRequest?: JsonValue;\n providerResponse?: JsonValue;\n },\n ) {\n mkdirSync(dir, { recursive: true });\n\n const write = (\n filename: string,\n content: JsonValue | undefined,\n ): { path: string; hash: string; bytes: number } => {\n const serialized = JSON.stringify(content ?? null, null, 2);\n const fullPath = path.join(dir, filename);\n writeFileSync(fullPath, serialized);\n const hash = createHash(\"sha256\").update(serialized).digest(\"hex\");\n return {\n path: path.relative(this.blobRoot, fullPath),\n hash,\n bytes: Buffer.byteLength(serialized),\n };\n };\n\n const request = write(\"request.json\", payloads.request);\n const response = write(\"response.json\", payloads.response);\n const providerRequest = payloads.providerRequest\n ? write(\"provider-request.json\", payloads.providerRequest)\n : undefined;\n const providerResponse = payloads.providerResponse\n ? write(\"provider-response.json\", payloads.providerResponse)\n : undefined;\n\n const totalBytes =\n request.bytes +\n response.bytes +\n (providerRequest?.bytes ?? 0) +\n (providerResponse?.bytes ?? 0);\n\n return { request, response, providerRequest, providerResponse, totalBytes };\n }\n}\n\nexport function readBlobFile(pathname: string): string {\n return readFileSync(pathname, \"utf-8\");\n}\n",
9
9
  "import pino from \"pino\";\n\nconst level = process.env.LOG_LEVEL ?? \"info\";\n\nexport const logger = pino({\n level,\n transport:\n process.env.NODE_ENV === \"development\"\n ? {\n target: \"pino-pretty\",\n options: { colorize: true, translateTime: \"SYS:standard\" },\n }\n : undefined,\n});\n\nexport type Logger = typeof logger;\n",
10
10
  "import { customAlphabet } from \"nanoid\";\n\nconst alphabet = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nconst randomId = customAlphabet(alphabet, 12);\n\nexport function createRequestId(prefix = \"req\"): string {\n return `${prefix}_${randomId()}`;\n}\n",
@@ -12,15 +12,15 @@
12
12
  "import { z } from \"zod\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n type ClientRequest,\n} from \"./schemas.js\";\n\nexport enum ClientFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n AnthropicMessages = \"anthropic.messages\",\n OpenAIResponses = \"openai.responses\",\n}\n\nexport enum ProviderFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n VertexChatCompletions = \"vertex.chat-completions\",\n OpenRouterChatCompletions = \"openrouter.chat-completions\",\n}\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonArray = JsonValue[];\nexport interface JsonObject {\n [key: string]: JsonValue | undefined;\n}\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport function isJsonObject(\n value: JsonValue | undefined,\n): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport enum Operation {\n Chat = \"chat\",\n Messages = \"messages\",\n Responses = \"responses\",\n}\n\nexport type Role = string;\n\nexport const ContentSchema = z.object({\n type: z.enum([\"text\", \"image_url\", \"json\", \"reasoning\", \"metadata\", \"blob\"]),\n text: z.string().optional(),\n data: z.custom<JsonValue>().optional(),\n url: z.string().optional(),\n mime: z.string().optional(),\n});\n\nexport type ContentBlock = z.infer<typeof ContentSchema> & {\n data?: JsonValue;\n};\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n name: z.string(),\n arguments: z.string().default(\"{}\"),\n});\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\n\nexport const MessageSchema = z.object({\n role: z.string(),\n tool_call_id: z.string().optional(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n annotations: z.record(z.unknown()).optional(),\n thinking: z.union([z.string(), z.array(ContentSchema)]).optional(),\n});\n\nexport type Message = z.infer<typeof MessageSchema>;\n\nexport const ToolSchema = z.object({\n type: z.literal(\"function\"),\n name: z.string(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n parameters: z.record(z.custom<JsonValue>()).optional(),\n});\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const UsageSchema = z.object({\n input_tokens: z.number().int().nonnegative().optional(),\n output_tokens: z.number().int().nonnegative().optional(),\n total_tokens: z.number().int().nonnegative().optional(),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const RequestSchema = z.object({\n id: z.string(),\n model: z.string(),\n profile: z.string().optional(),\n operation: z.nativeEnum(Operation),\n system: z.array(z.string()).optional(),\n messages: z.array(MessageSchema),\n tools: z.array(ToolSchema).optional(),\n stream: z.boolean().default(false),\n state: z.record(z.custom<JsonValue>()).default({}),\n parameters: z\n .object({\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n top_k: z.number().optional(),\n max_tokens: z.number().optional(),\n thinking: z.unknown().optional(),\n thinking_config: z.unknown().optional(),\n })\n .partial()\n .default({}),\n metadata: z\n .object({\n headers: z.record(z.string()).default({}),\n clientFormat: z.string(),\n providerFormat: z.string().optional(),\n clientRequest: z\n .union([\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n ])\n .optional(),\n })\n .default({ clientFormat: \"\", headers: {} }),\n});\n\nexport type Request = z.infer<typeof RequestSchema>;\n\nexport const OutputSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message\"),\n role: z.string(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool_call\"),\n call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n content: z.array(ContentSchema).default([]),\n summary: z.array(ContentSchema).default([]),\n }),\n z.object({\n type: z.literal(\"delta\"),\n content: z.array(ContentSchema).default([]),\n }),\n]);\n\nexport type OutputBlock = z.infer<typeof OutputSchema>;\n\nexport const ResponseSchema = z.object({\n id: z.string(),\n model: z.string(),\n operation: z.nativeEnum(Operation),\n output: z.array(OutputSchema).default([]),\n usage: UsageSchema.optional(),\n finish_reason: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n code: z.string().optional(),\n })\n .optional(),\n metadata: z\n .object({\n provider: z.string().optional(),\n providerFormat: z.string().optional(),\n clientFormat: z.string().optional(),\n providerResponse: z.unknown().optional(),\n requestHeaders: z.record(z.string()).optional(),\n normalization: z.record(z.unknown()).optional(),\n synthetic: z.boolean().optional(),\n })\n .optional(),\n});\n\nexport type Response = z.infer<typeof ResponseSchema>;\n\nexport interface Envelope {\n request: Request;\n response?: Response;\n}\n\nexport interface TransformContext {\n request: Request;\n response?: Response;\n}\n\nexport interface Transform {\n name: string;\n stage: \"ingress\" | \"egress\";\n priority?: number;\n applies(context: TransformContext): boolean;\n transform(context: TransformContext): Promise<void> | void;\n}\n\nexport interface ProviderRequest {\n body: JsonValue;\n headers: Record<string, string>;\n}\n\nexport interface ProviderResponse {\n status: number;\n body: JsonValue;\n headers: Record<string, string>;\n requestBody?: JsonValue;\n}\n\nexport interface ProviderAdapter {\n key: string;\n providerFormat: string;\n invoke(request: Request, config?: JsonObject): Promise<ProviderResponse>;\n toUlxResponse(\n payload: ProviderResponse,\n request: Request,\n ): Promise<Response> | Response;\n}\n\nexport interface ClientAdapter {\n clientFormat: string;\n toUlx(body: ClientRequest, headers: Record<string, string>): Request;\n fromUlx(response: Response, request: Request): JsonValue;\n}\n\nexport interface PipelineResult {\n request: Request;\n response: Response;\n providerResponse: ProviderResponse;\n providerAdapter: string;\n clientResponse: JsonValue;\n}\n\nexport type Json = JsonValue;\n\nexport const isMessage = (value: unknown): value is Message =>\n MessageSchema.safeParse(value).success;\n\nfunction jsonSchemaToZod(schema: JsonValue | undefined): z.ZodSchema {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema))\n return z.any();\n\n const s = schema as Record<string, unknown>;\n switch (s.type) {\n case \"object\": {\n const shape: Record<string, z.ZodSchema> = {};\n const properties = (s.properties as Record<string, JsonValue>) || {};\n const required = (s.required as string[]) || [];\n\n for (const key in properties) {\n let propSchema = jsonSchemaToZod(properties[key]);\n if (!required.includes(key)) {\n propSchema = propSchema.optional();\n }\n shape[key] = propSchema;\n }\n\n const zodObj = z.object(shape);\n if (s.additionalProperties === false) {\n return zodObj.strict();\n } else {\n return zodObj.passthrough();\n }\n }\n\n case \"array\":\n return z.array(jsonSchemaToZod((s.items as JsonValue) || {}));\n\n case \"string\":\n if (\n Array.isArray(s.enum) &&\n s.enum.length > 0 &&\n s.enum.every((e: unknown) => typeof e === \"string\")\n ) {\n return z.enum(s.enum as [string, ...string[]]);\n }\n return z.string();\n\n case \"number\":\n case \"integer\":\n return z.number();\n\n case \"boolean\":\n return z.boolean();\n\n case \"null\":\n return z.null();\n\n default:\n return z.any();\n }\n}\n\nconst toolSchemaCache = new WeakMap<Request, Record<string, z.ZodSchema>>();\n\nexport function getToolSchemas(request: Request): Record<string, z.ZodSchema> {\n let schemas = toolSchemaCache.get(request);\n if (schemas) return schemas;\n\n schemas = {};\n for (const tool of request.tools ?? []) {\n schemas[tool.name] = jsonSchemaToZod(tool.parameters);\n }\n\n toolSchemaCache.set(request, schemas);\n return schemas;\n}\n\nfunction safeParseJson(str: string): unknown {\n try {\n return JSON.parse(str);\n } catch {\n return str;\n }\n}\n\nexport function findMatchingTool(\n request: Request,\n args: unknown,\n): string | null {\n const schemas = getToolSchemas(request);\n const matches: string[] = [];\n\n const parsedArgs = typeof args === \"string\" ? safeParseJson(args) : args;\n\n for (const [name, schema] of Object.entries(schemas)) {\n if (schema.safeParse(parsedArgs).success) {\n matches.push(name);\n }\n }\n\n return matches.length === 1 ? matches[0] : null;\n}\n",
13
13
  "import type { JsonObject, JsonValue, Message, Tool } from \"./types.js\";\nimport { isJsonObject } from \"./types.js\";\n\nexport const ENSURE_TOOL_CALL_STATE_KEY = \"__ensureToolCall\";\nexport const DEFAULT_TERMINATION_TOOL_NAME = \"done\";\n\nexport interface EnsureToolCallState extends JsonObject {\n enabled: boolean;\n terminationToolName: string;\n reminderCount: number;\n pendingReminder: boolean;\n finalAnswerRequired?: boolean;\n reminderHistory?: string[];\n}\n\nconst BASE_INSTRUCTION_TEMPLATE = (toolName: string) =>\n `Always reply with at least one tool call so the client can continue orchestrating actions. When you have completely finished and are ready to hand back the final result, call the \"${toolName}\" function to signal completion.`;\n\nconst REMINDER_TEMPLATE = (toolName: string) =>\n `The client will not continue unless you reply with a tool call. Use the available tools for work and call \"${toolName}\" when you are done.`;\n\nconst FINAL_ANSWER_REQUIREMENT_TEMPLATE = (toolName: string) =>\n `Please use the tool \"${toolName}\" with a final answer. You must include a final_answer with your response.`;\n\nexport function createEnsureToolCallState(\n state: Record<string, JsonValue>,\n options?: { terminationToolName?: string },\n): EnsureToolCallState {\n const terminationToolName =\n options?.terminationToolName ?? DEFAULT_TERMINATION_TOOL_NAME;\n const ensureState: EnsureToolCallState = {\n enabled: true,\n terminationToolName,\n reminderCount: 0,\n pendingReminder: false,\n };\n state[ENSURE_TOOL_CALL_STATE_KEY] = ensureState;\n return ensureState;\n}\n\nexport function getEnsureToolCallState(\n state: Record<string, JsonValue>,\n): EnsureToolCallState | null {\n const raw = state[ENSURE_TOOL_CALL_STATE_KEY];\n if (!isJsonObject(raw)) {\n return null;\n }\n const ensureState = raw as EnsureToolCallState;\n if (ensureState.enabled !== true) {\n return null;\n }\n ensureState.terminationToolName =\n typeof ensureState.terminationToolName === \"string\"\n ? ensureState.terminationToolName\n : DEFAULT_TERMINATION_TOOL_NAME;\n ensureState.reminderCount =\n typeof ensureState.reminderCount === \"number\"\n ? ensureState.reminderCount\n : 0;\n ensureState.pendingReminder = Boolean(ensureState.pendingReminder);\n return ensureState;\n}\n\nexport function buildBaseInstruction(toolName: string): string {\n return BASE_INSTRUCTION_TEMPLATE(toolName);\n}\n\nexport function buildReminderInstruction(toolName: string): string {\n return REMINDER_TEMPLATE(toolName);\n}\n\nexport function buildFinalAnswerRequirementInstruction(\n toolName: string,\n): string {\n return FINAL_ANSWER_REQUIREMENT_TEMPLATE(toolName);\n}\n\nexport function createTerminationToolDefinition(name: string): Tool {\n return {\n type: \"function\",\n name,\n description:\n \"Call this tool exactly once when you have fully completed all reasoning and actions.\",\n parameters: {\n type: \"object\",\n properties: {\n final_answer: {\n type: \"string\",\n description: \"Optional final answer to provide when terminating.\",\n },\n },\n required: [],\n additionalProperties: false,\n },\n };\n}\n\n/**\n * Get messages from the last user message to the end of the array.\n * Returns empty array if no user message is found.\n */\nexport function getMessagesSinceLastUser(\n messages: Message[] | undefined,\n): Message[] {\n if (!Array.isArray(messages) || messages.length === 0) {\n return [];\n }\n\n let lastUserIndex = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i]?.role === \"user\") {\n lastUserIndex = i;\n break;\n }\n }\n\n if (lastUserIndex === -1) {\n return [];\n }\n\n return messages.slice(lastUserIndex);\n}\n",
14
14
  "import { type ClientRequest } from \"./schemas.js\";\nimport { createRequestId } from \"../utils/ids.js\";\nimport { logger } from \"../utils/logger.js\";\nimport type { JsonObject, JsonValue } from \"./types.js\";\nimport {\n ClientAdapter,\n PipelineResult as PipelineResult,\n ProviderAdapter,\n ProviderResponse,\n Response,\n Transform as Transform,\n Operation as Operation,\n TransformContext,\n} from \"./types.js\";\nimport {\n clearRetryRequest,\n clearSyntheticResponseRequest,\n isRetryRequested,\n isSyntheticResponseRequested,\n resolvePipelineMaxAttempts,\n setPipelineMaxAttempts,\n} from \"./pipelineControl.js\";\nimport {\n createEnsureToolCallState,\n getEnsureToolCallState,\n} from \"./ensureToolCall.js\";\n\nexport class ClientRegistry {\n private adapters = new Map<string, ClientAdapter>();\n\n register(adapter: ClientAdapter) {\n this.adapters.set(adapter.clientFormat, adapter);\n }\n\n resolve(clientFormat: string): ClientAdapter {\n const adapter = this.adapters.get(clientFormat);\n if (!adapter) {\n throw new Error(`No client adapter registered for ${clientFormat}`);\n }\n return adapter;\n }\n}\n\nexport class ProviderRegistry {\n private adapters = new Map<string, ProviderAdapter>();\n\n register(adapter: ProviderAdapter) {\n this.adapters.set(adapter.key, adapter);\n }\n\n resolve(key: string): ProviderAdapter {\n const adapter = this.adapters.get(key);\n if (!adapter) {\n throw new Error(`No provider adapter registered for ${key}`);\n }\n return adapter;\n }\n}\n\nexport interface PipelineOptions {\n clientFormat: string;\n providerKey: string;\n providerConfig?: JsonObject;\n requestBody: ClientRequest;\n requestHeaders: Record<string, string>;\n operation: Operation;\n requestId?: string;\n profile?: string;\n ensureToolCall?: boolean;\n}\n\nexport class Pipeline {\n constructor(\n private readonly clients: ClientRegistry,\n private readonly providers: ProviderRegistry,\n private readonly transforms: Transform[] = [],\n ) {}\n\n async execute(options: PipelineOptions): Promise<PipelineResult> {\n const clientAdapter = this.clients.resolve(options.clientFormat);\n const providerAdapter = this.providers.resolve(options.providerKey);\n\n const context = clientAdapter.toUlx(\n options.requestBody,\n options.requestHeaders,\n );\n\n context.operation = options.operation;\n context.profile = options.profile;\n context.id = options.requestId ?? context.id ?? createRequestId();\n context.metadata.clientFormat = options.clientFormat;\n context.metadata.providerFormat = providerAdapter.providerFormat;\n context.metadata.clientRequest = options.requestBody;\n\n if (options.ensureToolCall === true) {\n if (!getEnsureToolCallState(context.state)) {\n createEnsureToolCallState(context.state);\n }\n setPipelineMaxAttempts(\n context.state,\n resolveEnsureToolCallAttemptLimit(),\n );\n }\n\n const maxAttempts = resolvePipelineMaxAttempts(context.state);\n let attempt = 0;\n\n let lastProviderResponse: ProviderResponse = {\n status: 500,\n body: {},\n headers: {},\n };\n let lastResponse: Response | undefined;\n let lastClientResponse: JsonValue | undefined;\n\n while (true) {\n attempt += 1;\n await this.runTransforms(\"ingress\", { request: context });\n\n if (isSyntheticResponseRequested(context.state)) {\n clearSyntheticResponseRequest(context.state);\n lastProviderResponse = createSyntheticProviderResponse();\n lastResponse = createSyntheticResponse(context);\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n synthetic: true,\n };\n } else {\n lastProviderResponse = await providerAdapter.invoke(\n context,\n options.providerConfig,\n );\n\n if (lastProviderResponse.status >= 400) {\n lastResponse = await providerAdapter.toUlxResponse(\n lastProviderResponse,\n context,\n );\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n };\n\n lastClientResponse = lastResponse.error\n ? { error: lastResponse.error }\n : clientAdapter.fromUlx(lastResponse, context);\n\n clearRetryRequest(context.state);\n return {\n request: context,\n response: lastResponse,\n providerResponse: lastProviderResponse,\n providerAdapter: providerAdapter.key,\n clientResponse: lastClientResponse,\n };\n }\n\n lastResponse = await providerAdapter.toUlxResponse(\n lastProviderResponse,\n context,\n );\n\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n };\n }\n\n await this.runTransforms(\"egress\", {\n request: context,\n response: lastResponse,\n });\n\n lastClientResponse = lastResponse.error\n ? { error: lastResponse.error }\n : clientAdapter.fromUlx(lastResponse, context);\n\n const shouldRetry =\n attempt < maxAttempts && isRetryRequested(context.state);\n if (!shouldRetry) {\n clearRetryRequest(context.state);\n return {\n request: context,\n response: lastResponse,\n providerResponse: lastProviderResponse,\n providerAdapter: providerAdapter.key,\n clientResponse: lastClientResponse,\n };\n }\n\n clearRetryRequest(context.state);\n }\n }\n\n private async runTransforms(\n stage: Transform[\"stage\"],\n context: TransformContext,\n ) {\n const transforms = this.transforms\n .map((transform, index) => ({ transform, index }))\n .filter((entry) => entry.transform.stage === stage)\n .sort((a, b) => {\n const priorityDelta =\n (a.transform.priority ?? 0) - (b.transform.priority ?? 0);\n if (priorityDelta !== 0) return priorityDelta;\n return a.index - b.index;\n })\n .map((entry) => entry.transform);\n\n for (const transform of transforms) {\n try {\n if (transform.applies(context)) {\n await transform.transform(context);\n }\n } catch (error) {\n logger.error(\n { err: error, stage, transform: transform.name },\n \"Transform failed\",\n );\n throw error;\n }\n }\n }\n}\n\nfunction createSyntheticProviderResponse(): ProviderResponse {\n return {\n status: 200,\n body: {},\n headers: {\n \"x-synthetic-response\": \"true\",\n },\n };\n}\n\nfunction resolveEnsureToolCallAttemptLimit(): number {\n const raw = Number(process.env.ENSURE_TOOL_CALL_MAX_ATTEMPTS ?? \"3\");\n if (!Number.isFinite(raw) || raw < 1) {\n return 3;\n }\n return Math.min(5, Math.floor(raw));\n}\n\nfunction createSyntheticResponse(context: {\n id: string;\n operation: Operation;\n}): Response {\n return {\n id: `synth_${context.id}`,\n model: \"synthetic\",\n operation: context.operation,\n finish_reason: \"stop\",\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [],\n status: \"completed\",\n },\n ],\n usage: { input_tokens: 0, output_tokens: 0, total_tokens: 0 },\n metadata: { synthetic: true },\n };\n}\n",
15
- "import { z } from \"zod\";\nimport { ClientFormat, type JsonValue } from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n ClientAdapter,\n ContentBlock,\n Operation,\n Request,\n Response,\n Tool,\n ToolCall,\n Message,\n Role,\n} from \"./types.js\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n OpenAIChatCompletionResponseSchema,\n AnthropicMessagesResponseSchema,\n OpenAIResponsesResponseSchema,\n type OpenAIResponsesOutputItem,\n type AnthropicContentBlock,\n type ClientRequest,\n} from \"./schemas.js\";\n\nfunction stripTopLevelJsonSchemaMeta(\n schema: Record<string, JsonValue> | undefined,\n): Record<string, JsonValue> | undefined {\n if (!schema) return undefined;\n if (!(\"$schema\" in schema)) return schema;\n const sanitized = { ...schema };\n delete sanitized.$schema;\n return sanitized;\n}\n\nfunction normalizeTools(\n tools: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n });\n}\n\nfunction normalizeOpenAIFunctions(\n functions: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"functions\"],\n): Tool[] | undefined {\n if (!functions) return undefined;\n return functions.map((fn) => ({\n type: \"function\",\n name: fn.name,\n description: fn.description,\n strict: fn.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n fn.parameters as Record<string, JsonValue> | undefined,\n ),\n }));\n}\n\nfunction normalizeOpenAIChatTools(\n request: z.infer<typeof OpenAIChatCompletionRequestSchema>,\n): Tool[] | undefined {\n return (\n normalizeTools(request.tools) ?? normalizeOpenAIFunctions(request.functions)\n );\n}\n\nfunction normalizeAnthropicTools(\n tools: z.infer<typeof AnthropicMessagesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n const normalized: Tool[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== \"object\") continue;\n if (!(\"input_schema\" in tool)) continue;\n\n const typed = tool as {\n name?: unknown;\n description?: unknown;\n input_schema?: unknown;\n };\n\n if (typeof typed.name !== \"string\") continue;\n if (!typed.input_schema || typeof typed.input_schema !== \"object\") continue;\n\n normalized.push({\n type: \"function\",\n name: typed.name,\n description:\n typeof typed.description === \"string\" ? typed.description : undefined,\n strict: undefined,\n parameters: stripTopLevelJsonSchemaMeta(\n typed.input_schema as Record<string, JsonValue> | undefined,\n ),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeToolsResponses(\n tools: z.infer<typeof OpenAIResponsesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n if (\"function\" in tool) {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n } else {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n strict: tool.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n }\n });\n}\n\nfunction contentToText(content: ContentBlock[]): string | JsonValue {\n if (!content.length) return \"\";\n if (content.every((entry) => entry.type === \"text\")) {\n return content.map((entry) => entry.text ?? \"\").join(\"\");\n }\n return content.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n if (entry.type === \"reasoning\")\n return {\n type: \"thinking\",\n thinking: entry.text,\n signature: (entry.data as Record<string, unknown>)?.signature as string,\n };\n return entry;\n }) as JsonValue;\n}\n\nfunction usageToOpenAI(\n usage?: Response[\"usage\"],\n):\n | { prompt_tokens: number; completion_tokens: number; total_tokens: number }\n | undefined {\n if (!usage) return undefined;\n return {\n prompt_tokens: usage.input_tokens ?? 0,\n completion_tokens: usage.output_tokens ?? 0,\n total_tokens:\n usage.total_tokens ??\n (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n };\n}\n\nexport class OpenAIChatClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIChatCompletions;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIChatCompletionRequestSchema.parse(body);\n\n const messages: Message[] = request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n\n const imageUrl =\n typeof part.image_url === \"string\"\n ? part.image_url\n : typeof part.image_url === \"object\" && part.image_url !== null\n ? (part.image_url as { url?: string }).url\n : undefined;\n if (imageUrl) {\n content.push({ type: \"image_url\", url: imageUrl });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n const legacyFunctionCall =\n !toolCalls?.length && message.function_call\n ? message.function_call\n : null;\n\n const legacyToolCalls: ToolCall[] | undefined =\n legacyFunctionCall && typeof legacyFunctionCall.name === \"string\"\n ? [\n {\n id: legacyFunctionCall.name,\n type: \"function\",\n name: legacyFunctionCall.name,\n arguments: safeJsonString(legacyFunctionCall.arguments),\n },\n ]\n : undefined;\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls?.length ? toolCalls : legacyToolCalls,\n };\n });\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Chat,\n messages,\n tools: normalizeOpenAIChatTools(request),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_completion_tokens ?? request.max_tokens,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromUlx(ulxResponse: Response, _ulxRequest: Request): JsonValue {\n const contentBlocks = ulxResponse.output.find(\n (entry) => entry.type === \"message\",\n );\n\n let content: string | null = null;\n let reasoning_content: string | undefined = undefined;\n\n if (contentBlocks?.type === \"message\") {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n\n for (const entry of contentBlocks.content) {\n if (entry.type === \"text\") {\n textParts.push(entry.text ?? \"\");\n } else if (entry.type === \"reasoning\") {\n reasoningParts.push(entry.text ?? \"\");\n }\n }\n\n if (textParts.length > 0) {\n content = textParts.join(\"\");\n } else if (\n contentBlocks.content.some(\n (c) => c.type === \"image_url\" || c.type === \"json\",\n )\n ) {\n const mixed = contentToText(\n contentBlocks.content.filter((c) => c.type !== \"reasoning\"),\n );\n content = typeof mixed === \"string\" ? mixed : JSON.stringify(mixed);\n } else {\n content = null;\n }\n\n if (reasoningParts.length > 0) {\n reasoning_content = reasoningParts.join(\"\\n\\n\");\n }\n }\n\n return {\n id: ulxResponse.id,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: ulxResponse.model,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content,\n ...(reasoning_content ? { reasoning_content } : {}),\n tool_calls:\n contentBlocks?.type === \"message\" && contentBlocks.tool_calls\n ? contentBlocks.tool_calls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: tc.arguments,\n },\n }))\n : undefined,\n },\n finish_reason: ulxResponse.finish_reason ?? \"stop\",\n },\n ],\n usage: usageToOpenAI(ulxResponse.usage),\n } satisfies z.infer<typeof OpenAIChatCompletionResponseSchema> as JsonValue;\n }\n}\n\nexport class AnthropicMessagesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.AnthropicMessages;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = AnthropicMessagesRequestSchema.parse(body);\n\n const messages: Message[] = [];\n\n function isRecord(value: unknown): value is Record<string, unknown> {\n return (\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n );\n }\n\n function anthropicSourceToUrl(source: unknown): string | undefined {\n if (!isRecord(source)) return undefined;\n\n if (typeof source.url === \"string\" && source.url) return source.url;\n\n const type = typeof source.type === \"string\" ? source.type : undefined;\n const mediaType =\n typeof source.media_type === \"string\" ? source.media_type : undefined;\n const data = typeof source.data === \"string\" ? source.data : undefined;\n\n if (type === \"base64\" && mediaType && data) {\n return `data:${mediaType};base64,${data}`;\n }\n\n if (type === \"text\" && mediaType && data) {\n return `data:${mediaType},${encodeURIComponent(data)}`;\n }\n\n return undefined;\n }\n\n function flushUserContent(blocks: ContentBlock[]) {\n if (!blocks.length) return;\n messages.push({\n role: \"user\",\n content: [...blocks],\n tool_calls: undefined,\n });\n blocks.length = 0;\n }\n\n function toolResultContentToText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((entry) => {\n if (typeof entry === \"string\") return entry;\n if (!isRecord(entry)) return JSON.stringify(entry);\n\n if (typeof entry.text === \"string\") return entry.text;\n const url = anthropicSourceToUrl(entry.source);\n if (url) return url;\n\n return JSON.stringify(entry);\n })\n .join(\"\");\n }\n\n if (content === undefined) return \"\";\n try {\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n }\n\n function flushAssistantMessage(\n content: ContentBlock[],\n toolCalls: ToolCall[],\n ) {\n if (!content.length && !toolCalls.length) return;\n messages.push({\n role: \"assistant\",\n content: [...content],\n tool_calls: toolCalls.length ? [...toolCalls] : undefined,\n });\n content.length = 0;\n toolCalls.length = 0;\n }\n\n function anthropicBlockToUlxContent(block: Record<string, unknown>) {\n const declaredType = typeof block.type === \"string\" ? block.type : \"\";\n if (\n declaredType === \"thinking\" ||\n declaredType === \"redacted_thinking\" ||\n typeof block.thinking === \"string\"\n ) {\n return undefined;\n }\n\n if (typeof block.text === \"string\") {\n return { type: \"text\" as const, text: block.text };\n }\n\n const url = anthropicSourceToUrl(block.source);\n const mediaType =\n isRecord(block.source) && typeof block.source.media_type === \"string\"\n ? block.source.media_type\n : undefined;\n\n const isImage =\n declaredType === \"image\" ||\n (typeof mediaType === \"string\" && mediaType.startsWith(\"image/\"));\n\n if (url && isImage) {\n return { type: \"image_url\" as const, url };\n }\n\n if (url) {\n return { type: \"text\" as const, text: url };\n }\n\n return {\n type: \"text\" as const,\n text: JSON.stringify(block),\n };\n }\n\n for (const message of request.messages) {\n if (typeof message.content === \"string\") {\n messages.push({\n role: message.role as Role,\n content: [{ type: \"text\", text: message.content }],\n tool_calls: undefined,\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushAssistantMessage(content, toolCalls);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const id = typeof part.id === \"string\" ? part.id : undefined;\n const name = typeof part.name === \"string\" ? part.name : undefined;\n if (id && name) {\n toolCalls.push({\n id,\n type: \"function\",\n name,\n arguments: JSON.stringify(part.input ?? {}),\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) content.push(normalized);\n }\n\n flushAssistantMessage(content, toolCalls);\n continue;\n }\n\n const bufferedUserContent: ContentBlock[] = [];\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushUserContent(bufferedUserContent);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) bufferedUserContent.push(normalized);\n }\n flushUserContent(bufferedUserContent);\n }\n\n const system = request.system;\n const systemArr = Array.isArray(system)\n ? system.map((s) => s.text)\n : system\n ? [system]\n : undefined;\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Messages,\n system: systemArr,\n messages,\n tools: normalizeAnthropicTools(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_tokens,\n top_k: request.top_k,\n thinking: request.thinking,\n thinking_config: request.thinking_config,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n fromUlx(ulxResponse: Response): JsonValue {\n const contentBlocks = ulxResponse.output.find(\n (entry) => entry.type === \"message\",\n );\n\n const messageContent =\n contentBlocks?.type === \"message\"\n ? contentToText(contentBlocks.content)\n : \"\";\n\n const content: AnthropicContentBlock[] = [];\n if (typeof messageContent === \"string\") {\n if (messageContent) content.push({ type: \"text\", text: messageContent });\n } else if (Array.isArray(messageContent)) {\n for (const item of messageContent) {\n if (item && typeof item === \"object\") {\n const block = item as AnthropicContentBlock;\n if (block.type === \"thinking\") {\n content.push(block);\n } else if (block.type === \"text\") {\n content.push(block);\n }\n }\n }\n } else if (\n typeof messageContent === \"object\" &&\n messageContent !== null &&\n \"text\" in messageContent\n ) {\n content.push(messageContent as unknown as AnthropicContentBlock);\n }\n\n if (contentBlocks?.type === \"message\" && contentBlocks.tool_calls) {\n for (const tc of contentBlocks.tool_calls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: JSON.parse(tc.arguments),\n });\n }\n }\n\n return {\n id: ulxResponse.id,\n type: \"message\",\n role: \"assistant\",\n model: ulxResponse.model,\n stop_reason:\n ulxResponse.finish_reason === \"tool_calls\"\n ? \"tool_use\"\n : ((ulxResponse.finish_reason as\n | \"end_turn\"\n | \"max_tokens\"\n | \"stop_sequence\") ?? \"end_turn\"),\n stop_sequence: null,\n usage: {\n input_tokens: ulxResponse.usage?.input_tokens ?? 0,\n output_tokens: ulxResponse.usage?.output_tokens ?? 0,\n },\n content: content,\n } satisfies z.infer<typeof AnthropicMessagesResponseSchema> as JsonValue;\n }\n}\n\nconst OpenAIResponsesToolCallLikeSchema = z\n .object({\n id: z.string().optional(),\n type: z.string().optional(),\n function: z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputContentPartSchema = z\n .object({\n type: z.string().optional(),\n text: z.union([z.string(), z.number()]).optional(),\n image_url: z\n .union([\n z.string(),\n z.object({ url: z.string().optional() }).passthrough(),\n ])\n .optional(),\n file_url: z.string().optional(),\n file_id: z.string().nullable().optional(),\n file_data: z.string().optional(),\n filename: z.string().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputMessageLikeSchema = z\n .object({\n role: z.string(),\n content: z.union([z.string(), z.array(z.unknown())]).optional(),\n tool_calls: z.array(OpenAIResponsesToolCallLikeSchema).optional(),\n tool_call_id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallLikeSchema = z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n call_id: z.string().optional(),\n callId: z.string().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallOutputLikeSchema = z\n .object({\n call_id: z.string().optional(),\n callId: z.string().optional(),\n output: z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.unknown()),\n z.record(z.unknown()),\n ]),\n })\n .passthrough();\n\nconst OpenAIResponsesInputTextLikeSchema = z\n .object({\n text: z.union([z.string(), z.number()]),\n })\n .passthrough();\n\nfunction normalizeOpenAIResponsesToolCalls(\n toolCalls: unknown,\n): ToolCall[] | undefined {\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) return undefined;\n const normalized: ToolCall[] = [];\n\n for (const call of toolCalls) {\n const parsed = OpenAIResponsesToolCallLikeSchema.safeParse(call);\n if (!parsed.success) continue;\n const fn = parsed.data.function;\n const name = fn.name;\n const id =\n typeof parsed.data.id === \"string\" && parsed.data.id.length\n ? parsed.data.id\n : name;\n const args = safeJsonString(fn.arguments);\n\n normalized.push({ id, type: \"function\", name, arguments: args });\n }\n\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIResponsesMessageContent(\n content: unknown,\n): ContentBlock[] {\n if (typeof content === \"string\") {\n return content.length ? [{ type: \"text\", text: content }] : [];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const entry of content) {\n const parsed = OpenAIResponsesInputContentPartSchema.safeParse(entry);\n if (!parsed.success) continue;\n\n const part = parsed.data;\n if (typeof part.text === \"string\" || typeof part.text === \"number\") {\n const text = String(part.text);\n if (text) blocks.push({ type: \"text\", text });\n continue;\n }\n\n const imageUrlValue = part.image_url;\n const imageUrl =\n typeof imageUrlValue === \"string\"\n ? imageUrlValue\n : typeof imageUrlValue === \"object\" && imageUrlValue !== null\n ? (imageUrlValue as { url?: string }).url\n : undefined;\n if (imageUrl) {\n blocks.push({ type: \"image_url\", url: imageUrl });\n continue;\n }\n\n if (part.type === \"json\") {\n blocks.push({ type: \"json\", data: part.data as JsonValue });\n continue;\n }\n\n const fileRef =\n (typeof part.file_url === \"string\" && part.file_url) ||\n (typeof part.file_id === \"string\" && part.file_id) ||\n (typeof part.file_data === \"string\" && part.file_data)\n ? JSON.stringify({\n type: part.type ?? \"input_file\",\n file_url: part.file_url,\n file_id: part.file_id,\n filename: part.filename,\n })\n : undefined;\n if (fileRef) {\n blocks.push({ type: \"text\", text: fileRef });\n }\n }\n\n return blocks;\n}\n\nexport class OpenAIResponsesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIResponses;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIResponsesRequestSchema.parse(body);\n\n const messages: Message[] = request.messages\n ? request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image_url\") {\n const url =\n typeof part.image_url === \"string\"\n ? part.image_url\n : part.image_url.url;\n content.push({ type: \"image_url\", url });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls,\n };\n })\n : [];\n\n if (request.input) {\n if (typeof request.input === \"string\") {\n messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: request.input }],\n tool_calls: undefined,\n });\n } else if (Array.isArray(request.input)) {\n const inputContent: ContentBlock[] = [];\n\n function flushInputContent() {\n if (inputContent.length === 0) return;\n messages.push({\n role: \"user\",\n content: [...inputContent],\n tool_calls: undefined,\n });\n inputContent.length = 0;\n }\n\n function appendToolCall(toolCall: ToolCall) {\n const last = messages[messages.length - 1];\n if (last && last.role === \"assistant\") {\n last.tool_calls = [...(last.tool_calls ?? []), toolCall];\n return;\n }\n\n messages.push({\n role: \"assistant\",\n content: [],\n tool_calls: [toolCall],\n });\n }\n\n for (const part of request.input) {\n if (typeof part === \"string\" || typeof part === \"number\") {\n const text = String(part);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n\n const messageLike =\n OpenAIResponsesInputMessageLikeSchema.safeParse(part);\n if (messageLike.success) {\n flushInputContent();\n const role = messageLike.data.role as Role;\n const content = normalizeOpenAIResponsesMessageContent(\n messageLike.data.content,\n );\n const toolCalls = normalizeOpenAIResponsesToolCalls(\n messageLike.data.tool_calls,\n );\n\n messages.push({\n role,\n tool_call_id: messageLike.data.tool_call_id,\n content,\n tool_calls: toolCalls,\n });\n continue;\n }\n\n const functionCallOutputLike =\n OpenAIResponsesInputFunctionCallOutputLikeSchema.safeParse(part);\n if (functionCallOutputLike.success) {\n flushInputContent();\n const toolCallId =\n functionCallOutputLike.data.call_id ??\n functionCallOutputLike.data.callId ??\n \"\";\n\n const outputText =\n typeof functionCallOutputLike.data.output === \"string\"\n ? functionCallOutputLike.data.output\n : JSON.stringify(functionCallOutputLike.data.output ?? \"\");\n\n messages.push({\n role: \"tool\",\n tool_call_id: toolCallId,\n content: [{ type: \"text\", text: outputText }],\n tool_calls: undefined,\n });\n continue;\n }\n\n const functionCallLike =\n OpenAIResponsesInputFunctionCallLikeSchema.safeParse(part);\n if (functionCallLike.success) {\n flushInputContent();\n const callId =\n functionCallLike.data.call_id ??\n functionCallLike.data.callId ??\n functionCallLike.data.id ??\n functionCallLike.data.name;\n appendToolCall({\n id: callId,\n type: \"function\",\n name: functionCallLike.data.name,\n arguments: safeJsonString(functionCallLike.data.arguments),\n });\n continue;\n }\n\n const textLike = OpenAIResponsesInputTextLikeSchema.safeParse(part);\n if (textLike.success) {\n const text = String(textLike.data.text);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n }\n\n flushInputContent();\n }\n }\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Responses,\n messages,\n tools: normalizeToolsResponses(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n },\n metadata: {\n headers,\n clientFormat: this.clientFormat,\n },\n } satisfies Request;\n }\n\n fromUlx(ulxResponse: Response, ulxRequest: Request): JsonValue {\n const outputBlocks = ulxResponse.output;\n const output: OpenAIResponsesOutputItem[] = [];\n const textParts: string[] = [];\n\n const createdAt = Math.floor(Date.now() / 1000);\n\n let messageIndex = 0;\n let functionCallIndex = 0;\n let reasoningIndex = 0;\n\n for (const block of outputBlocks) {\n if (block.type === \"message\") {\n const messageId = `msg_${ulxResponse.id}_${messageIndex++}`;\n const status: \"completed\" | \"incomplete\" =\n block.status === \"incomplete\" ? \"incomplete\" : \"completed\";\n\n const content: Array<{\n type: \"output_text\";\n text: string;\n annotations: unknown[];\n }> = [];\n\n const reasoningContent: Array<{\n type: \"reasoning_text\";\n text: string;\n }> = [];\n\n for (const entry of block.content) {\n if (entry.type === \"text\") {\n const text = entry.text ?? \"\";\n textParts.push(text);\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"image_url\") {\n const text = entry.url ?? \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"json\") {\n const text = entry.data ? JSON.stringify(entry.data) : \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"reasoning\") {\n reasoningContent.push({\n type: \"reasoning_text\",\n text: entry.text ?? \"\",\n });\n }\n }\n\n if (reasoningContent.length > 0) {\n output.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: reasoningContent,\n summary: [],\n });\n }\n\n output.push({\n type: \"message\",\n id: messageId,\n role: \"assistant\",\n content,\n status,\n });\n\n if (block.tool_calls) {\n for (const call of block.tool_calls) {\n output.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: call.id,\n name: call.name,\n arguments: call.arguments,\n status: \"completed\",\n });\n }\n }\n } else if (block.type === \"tool_call\") {\n output.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: block.call_id,\n name: block.name,\n arguments: block.arguments,\n status: block.status === \"pending\" ? \"in_progress\" : \"completed\",\n });\n } else if (block.type === \"reasoning\") {\n output.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: block.content\n .filter((entry) => entry.type === \"reasoning\")\n .map((entry) => ({\n type: \"reasoning_text\",\n text: entry.text ?? \"\",\n })),\n summary:\n block.summary?.map((entry) => ({\n type: \"summary_text\",\n text: entry.text ?? \"\",\n })) ?? [],\n });\n }\n }\n\n const inputTokens = ulxResponse.usage?.input_tokens ?? 0;\n const outputTokens = ulxResponse.usage?.output_tokens ?? 0;\n const totalTokens =\n ulxResponse.usage?.total_tokens ?? inputTokens + outputTokens;\n\n const responseStatus =\n ulxResponse.finish_reason === \"length\" ? \"incomplete\" : \"completed\";\n\n return {\n id: ulxResponse.id,\n object: \"response\",\n created_at: createdAt,\n status: responseStatus,\n error: null,\n incomplete_details:\n responseStatus === \"incomplete\"\n ? { reason: \"max_output_tokens\" }\n : null,\n instructions: null,\n metadata: {},\n model: ulxResponse.model,\n output,\n output_text: textParts.join(\"\"),\n parallel_tool_calls: true,\n temperature: ulxRequest.parameters.temperature ?? null,\n tool_choice: \"auto\",\n top_p: ulxRequest.parameters.top_p ?? null,\n usage: {\n input_tokens: inputTokens,\n input_tokens_details: { cached_tokens: 0 },\n output_tokens: outputTokens,\n output_tokens_details: { reasoning_tokens: 0 },\n total_tokens: totalTokens,\n },\n } satisfies z.infer<typeof OpenAIResponsesResponseSchema> as JsonValue;\n }\n}\n",
15
+ "import { z } from \"zod\";\nimport { ClientFormat, type JsonValue } from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n ClientAdapter,\n ContentBlock,\n Operation,\n Request,\n Response,\n Tool,\n ToolCall,\n Message,\n Role,\n} from \"./types.js\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n OpenAIChatCompletionResponseSchema,\n AnthropicMessagesResponseSchema,\n OpenAIResponsesResponseSchema,\n type OpenAIResponsesOutputItem,\n type AnthropicContentBlock,\n type ClientRequest,\n} from \"./schemas.js\";\n\nfunction stripTopLevelJsonSchemaMeta(\n schema: Record<string, JsonValue> | undefined,\n): Record<string, JsonValue> | undefined {\n if (!schema) return undefined;\n if (!(\"$schema\" in schema)) return schema;\n const sanitized = { ...schema };\n delete sanitized.$schema;\n return sanitized;\n}\n\nfunction normalizeTools(\n tools: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n });\n}\n\nfunction normalizeOpenAIFunctions(\n functions: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"functions\"],\n): Tool[] | undefined {\n if (!functions) return undefined;\n return functions.map((fn) => ({\n type: \"function\",\n name: fn.name,\n description: fn.description,\n strict: fn.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n fn.parameters as Record<string, JsonValue> | undefined,\n ),\n }));\n}\n\nfunction normalizeOpenAIChatTools(\n request: z.infer<typeof OpenAIChatCompletionRequestSchema>,\n): Tool[] | undefined {\n return (\n normalizeTools(request.tools) ?? normalizeOpenAIFunctions(request.functions)\n );\n}\n\nfunction normalizeAnthropicTools(\n tools: z.infer<typeof AnthropicMessagesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n const normalized: Tool[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== \"object\") continue;\n if (!(\"input_schema\" in tool)) continue;\n\n const typed = tool as {\n name?: unknown;\n description?: unknown;\n input_schema?: unknown;\n };\n\n if (typeof typed.name !== \"string\") continue;\n if (!typed.input_schema || typeof typed.input_schema !== \"object\") continue;\n\n normalized.push({\n type: \"function\",\n name: typed.name,\n description:\n typeof typed.description === \"string\" ? typed.description : undefined,\n strict: undefined,\n parameters: stripTopLevelJsonSchemaMeta(\n typed.input_schema as Record<string, JsonValue> | undefined,\n ),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeToolsResponses(\n tools: z.infer<typeof OpenAIResponsesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n if (\"function\" in tool) {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n } else {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n strict: tool.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n }\n });\n}\n\nfunction contentToText(content: ContentBlock[]): string | JsonValue {\n if (!content.length) return \"\";\n if (content.every((entry) => entry.type === \"text\")) {\n return content.map((entry) => entry.text ?? \"\").join(\"\");\n }\n return content.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n if (entry.type === \"reasoning\")\n return {\n type: \"thinking\",\n thinking: entry.text,\n signature: (entry.data as Record<string, unknown>)?.signature as string,\n };\n return entry;\n }) as JsonValue;\n}\n\nfunction usageToOpenAI(\n usage?: Response[\"usage\"],\n):\n | { prompt_tokens: number; completion_tokens: number; total_tokens: number }\n | undefined {\n if (!usage) return undefined;\n return {\n prompt_tokens: usage.input_tokens ?? 0,\n completion_tokens: usage.output_tokens ?? 0,\n total_tokens:\n usage.total_tokens ??\n (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n };\n}\n\nexport class OpenAIChatClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIChatCompletions;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIChatCompletionRequestSchema.parse(body);\n\n const messages: Message[] = request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n\n const imageUrl =\n typeof part.image_url === \"string\"\n ? part.image_url\n : typeof part.image_url === \"object\" && part.image_url !== null\n ? (part.image_url as { url?: string }).url\n : undefined;\n if (imageUrl) {\n content.push({ type: \"image_url\", url: imageUrl });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n const legacyFunctionCall =\n !toolCalls?.length && message.function_call\n ? message.function_call\n : null;\n\n const legacyToolCalls: ToolCall[] | undefined =\n legacyFunctionCall && typeof legacyFunctionCall.name === \"string\"\n ? [\n {\n id: legacyFunctionCall.name,\n type: \"function\",\n name: legacyFunctionCall.name,\n arguments: safeJsonString(legacyFunctionCall.arguments),\n },\n ]\n : undefined;\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls?.length ? toolCalls : legacyToolCalls,\n };\n });\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Chat,\n messages,\n tools: normalizeOpenAIChatTools(request),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_completion_tokens ?? request.max_tokens,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromUlx(ulxResponse: Response, _ulxRequest: Request): JsonValue {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n let toolCalls: ToolCall[] | undefined = undefined;\n\n for (const block of ulxResponse.output) {\n if (block.type === \"message\") {\n for (const entry of block.content) {\n if (entry.type === \"reasoning\") {\n reasoningParts.push(entry.text ?? \"\");\n }\n }\n\n const meaningfulContent = block.content.filter(\n (c) => c.type !== \"reasoning\",\n );\n if (meaningfulContent.length > 0) {\n const mixed = contentToText(meaningfulContent);\n textParts.push(\n typeof mixed === \"string\" ? mixed : JSON.stringify(mixed),\n );\n }\n\n if (block.tool_calls) {\n toolCalls = [...(toolCalls ?? []), ...block.tool_calls];\n }\n } else if (block.type === \"reasoning\") {\n for (const entry of block.content) {\n if (entry.type === \"reasoning\") {\n reasoningParts.push(entry.text ?? \"\");\n }\n }\n }\n }\n\n const content = textParts.join(\"\") || null;\n const reasoning_content = reasoningParts.join(\"\\n\\n\") || undefined;\n\n return {\n id: ulxResponse.id,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: ulxResponse.model,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n ...(reasoning_content ? { reasoning_content } : {}),\n content,\n tool_calls: toolCalls\n ? toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: tc.arguments,\n },\n }))\n : undefined,\n },\n finish_reason: ulxResponse.finish_reason ?? \"stop\",\n },\n ],\n usage: usageToOpenAI(ulxResponse.usage),\n } satisfies z.infer<typeof OpenAIChatCompletionResponseSchema> as JsonValue;\n }\n}\n\nexport class AnthropicMessagesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.AnthropicMessages;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = AnthropicMessagesRequestSchema.parse(body);\n\n const messages: Message[] = [];\n\n function isRecord(value: unknown): value is Record<string, unknown> {\n return (\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n );\n }\n\n function anthropicSourceToUrl(source: unknown): string | undefined {\n if (!isRecord(source)) return undefined;\n\n if (typeof source.url === \"string\" && source.url) return source.url;\n\n const type = typeof source.type === \"string\" ? source.type : undefined;\n const mediaType =\n typeof source.media_type === \"string\" ? source.media_type : undefined;\n const data = typeof source.data === \"string\" ? source.data : undefined;\n\n if (type === \"base64\" && mediaType && data) {\n return `data:${mediaType};base64,${data}`;\n }\n\n if (type === \"text\" && mediaType && data) {\n return `data:${mediaType},${encodeURIComponent(data)}`;\n }\n\n return undefined;\n }\n\n function flushUserContent(blocks: ContentBlock[]) {\n if (!blocks.length) return;\n messages.push({\n role: \"user\",\n content: [...blocks],\n tool_calls: undefined,\n });\n blocks.length = 0;\n }\n\n function toolResultContentToText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((entry) => {\n if (typeof entry === \"string\") return entry;\n if (!isRecord(entry)) return JSON.stringify(entry);\n\n if (typeof entry.text === \"string\") return entry.text;\n const url = anthropicSourceToUrl(entry.source);\n if (url) return url;\n\n return JSON.stringify(entry);\n })\n .join(\"\");\n }\n\n if (content === undefined) return \"\";\n try {\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n }\n\n function flushAssistantMessage(\n content: ContentBlock[],\n toolCalls: ToolCall[],\n ) {\n if (!content.length && !toolCalls.length) return;\n messages.push({\n role: \"assistant\",\n content: [...content],\n tool_calls: toolCalls.length ? [...toolCalls] : undefined,\n });\n content.length = 0;\n toolCalls.length = 0;\n }\n\n function anthropicBlockToUlxContent(\n block: Record<string, unknown>,\n ): ContentBlock | undefined {\n const declaredType = typeof block.type === \"string\" ? block.type : \"\";\n if (\n declaredType === \"thinking\" ||\n declaredType === \"redacted_thinking\" ||\n typeof block.thinking === \"string\"\n ) {\n return {\n type: \"reasoning\",\n text: (block.thinking as string) ?? (block.text as string) ?? \"\",\n data: block.signature\n ? { signature: block.signature as JsonValue }\n : declaredType === \"redacted_thinking\"\n ? { redacted: true }\n : undefined,\n };\n }\n\n if (typeof block.text === \"string\") {\n return { type: \"text\" as const, text: block.text };\n }\n\n const url = anthropicSourceToUrl(block.source);\n const mediaType =\n isRecord(block.source) && typeof block.source.media_type === \"string\"\n ? block.source.media_type\n : undefined;\n\n const isImage =\n declaredType === \"image\" ||\n (typeof mediaType === \"string\" && mediaType.startsWith(\"image/\"));\n\n if (url && isImage) {\n return { type: \"image_url\" as const, url };\n }\n\n if (url) {\n return { type: \"text\" as const, text: url };\n }\n\n return {\n type: \"text\" as const,\n text: JSON.stringify(block),\n };\n }\n\n for (const message of request.messages) {\n if (typeof message.content === \"string\") {\n messages.push({\n role: message.role as Role,\n content: [{ type: \"text\", text: message.content }],\n tool_calls: undefined,\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushAssistantMessage(content, toolCalls);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const id = typeof part.id === \"string\" ? part.id : undefined;\n const name = typeof part.name === \"string\" ? part.name : undefined;\n if (id && name) {\n toolCalls.push({\n id,\n type: \"function\",\n name,\n arguments: JSON.stringify(part.input ?? {}),\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) content.push(normalized);\n }\n\n flushAssistantMessage(content, toolCalls);\n continue;\n }\n\n const bufferedUserContent: ContentBlock[] = [];\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushUserContent(bufferedUserContent);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) bufferedUserContent.push(normalized);\n }\n flushUserContent(bufferedUserContent);\n }\n\n const system = request.system;\n const systemArr = Array.isArray(system)\n ? system.map((s) => s.text)\n : system\n ? [system]\n : undefined;\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Messages,\n system: systemArr,\n messages,\n tools: normalizeAnthropicTools(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_tokens,\n top_k: request.top_k,\n thinking: request.thinking,\n thinking_config: request.thinking_config,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromUlx(ulxResponse: Response, _ulxRequest: Request): JsonValue {\n const thinkingBlocks: AnthropicContentBlock[] = [];\n const textBlocks: AnthropicContentBlock[] = [];\n const toolUseBlocks: AnthropicContentBlock[] = [];\n\n for (const block of ulxResponse.output) {\n if (block.type === \"reasoning\") {\n for (const entry of block.content) {\n if (entry.type === \"reasoning\") {\n thinkingBlocks.push({\n type: \"thinking\",\n thinking: entry.text ?? \"\",\n signature: (entry.data as Record<string, unknown>)\n ?.signature as string,\n });\n }\n }\n } else if (block.type === \"message\") {\n const messageContent = contentToText(block.content);\n if (typeof messageContent === \"string\") {\n if (messageContent)\n textBlocks.push({ type: \"text\", text: messageContent });\n } else if (Array.isArray(messageContent)) {\n for (const item of messageContent) {\n if (item && typeof item === \"object\") {\n const b = item as AnthropicContentBlock;\n if (b.type === \"thinking\") {\n thinkingBlocks.push(b);\n } else if (b.type === \"text\") {\n textBlocks.push(b);\n }\n }\n }\n } else if (\n typeof messageContent === \"object\" &&\n messageContent !== null &&\n \"text\" in messageContent\n ) {\n textBlocks.push(messageContent as unknown as AnthropicContentBlock);\n }\n\n if (block.tool_calls) {\n for (const tc of block.tool_calls) {\n toolUseBlocks.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: JSON.parse(tc.arguments),\n });\n }\n }\n }\n }\n\n const content: AnthropicContentBlock[] = [\n ...thinkingBlocks,\n ...textBlocks,\n ...toolUseBlocks,\n ];\n\n return {\n id: ulxResponse.id,\n type: \"message\",\n role: \"assistant\",\n model: ulxResponse.model,\n stop_reason:\n ulxResponse.finish_reason === \"tool_calls\"\n ? \"tool_use\"\n : ((ulxResponse.finish_reason as\n | \"end_turn\"\n | \"max_tokens\"\n | \"stop_sequence\") ?? \"end_turn\"),\n stop_sequence: null,\n usage: {\n input_tokens: ulxResponse.usage?.input_tokens ?? 0,\n output_tokens: ulxResponse.usage?.output_tokens ?? 0,\n },\n content: content,\n } satisfies z.infer<typeof AnthropicMessagesResponseSchema> as JsonValue;\n }\n}\n\nconst OpenAIResponsesToolCallLikeSchema = z\n .object({\n id: z.string().optional(),\n type: z.string().optional(),\n function: z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputContentPartSchema = z\n .object({\n type: z.string().optional(),\n text: z.union([z.string(), z.number()]).optional(),\n image_url: z\n .union([\n z.string(),\n z.object({ url: z.string().optional() }).passthrough(),\n ])\n .optional(),\n file_url: z.string().optional(),\n file_id: z.string().nullable().optional(),\n file_data: z.string().optional(),\n filename: z.string().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputMessageLikeSchema = z\n .object({\n role: z.string(),\n content: z.union([z.string(), z.array(z.unknown())]).optional(),\n tool_calls: z.array(OpenAIResponsesToolCallLikeSchema).optional(),\n tool_call_id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallLikeSchema = z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n call_id: z.string().optional(),\n callId: z.string().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallOutputLikeSchema = z\n .object({\n call_id: z.string().optional(),\n callId: z.string().optional(),\n output: z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.unknown()),\n z.record(z.unknown()),\n ]),\n })\n .passthrough();\n\nconst OpenAIResponsesInputTextLikeSchema = z\n .object({\n text: z.union([z.string(), z.number()]),\n })\n .passthrough();\n\nfunction normalizeOpenAIResponsesToolCalls(\n toolCalls: unknown,\n): ToolCall[] | undefined {\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) return undefined;\n const normalized: ToolCall[] = [];\n\n for (const call of toolCalls) {\n const parsed = OpenAIResponsesToolCallLikeSchema.safeParse(call);\n if (!parsed.success) continue;\n const fn = parsed.data.function;\n const name = fn.name;\n const id =\n typeof parsed.data.id === \"string\" && parsed.data.id.length\n ? parsed.data.id\n : name;\n const args = safeJsonString(fn.arguments);\n\n normalized.push({ id, type: \"function\", name, arguments: args });\n }\n\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIResponsesMessageContent(\n content: unknown,\n): ContentBlock[] {\n if (typeof content === \"string\") {\n return content.length ? [{ type: \"text\", text: content }] : [];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const entry of content) {\n const parsed = OpenAIResponsesInputContentPartSchema.safeParse(entry);\n if (!parsed.success) continue;\n\n const part = parsed.data;\n if (typeof part.text === \"string\" || typeof part.text === \"number\") {\n const text = String(part.text);\n if (text) blocks.push({ type: \"text\", text });\n continue;\n }\n\n const imageUrlValue = part.image_url;\n const imageUrl =\n typeof imageUrlValue === \"string\"\n ? imageUrlValue\n : typeof imageUrlValue === \"object\" && imageUrlValue !== null\n ? (imageUrlValue as { url?: string }).url\n : undefined;\n if (imageUrl) {\n blocks.push({ type: \"image_url\", url: imageUrl });\n continue;\n }\n\n if (part.type === \"json\") {\n blocks.push({ type: \"json\", data: part.data as JsonValue });\n continue;\n }\n\n const fileRef =\n (typeof part.file_url === \"string\" && part.file_url) ||\n (typeof part.file_id === \"string\" && part.file_id) ||\n (typeof part.file_data === \"string\" && part.file_data)\n ? JSON.stringify({\n type: part.type ?? \"input_file\",\n file_url: part.file_url,\n file_id: part.file_id,\n filename: part.filename,\n })\n : undefined;\n if (fileRef) {\n blocks.push({ type: \"text\", text: fileRef });\n }\n }\n\n return blocks;\n}\n\nexport class OpenAIResponsesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIResponses;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIResponsesRequestSchema.parse(body);\n\n const messages: Message[] = request.messages\n ? request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image_url\") {\n const url =\n typeof part.image_url === \"string\"\n ? part.image_url\n : part.image_url.url;\n content.push({ type: \"image_url\", url });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls,\n };\n })\n : [];\n\n if (request.input) {\n if (typeof request.input === \"string\") {\n messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: request.input }],\n tool_calls: undefined,\n });\n } else if (Array.isArray(request.input)) {\n const inputContent: ContentBlock[] = [];\n\n function flushInputContent() {\n if (inputContent.length === 0) return;\n messages.push({\n role: \"user\",\n content: [...inputContent],\n tool_calls: undefined,\n });\n inputContent.length = 0;\n }\n\n function appendToolCall(toolCall: ToolCall) {\n const last = messages[messages.length - 1];\n if (last && last.role === \"assistant\") {\n last.tool_calls = [...(last.tool_calls ?? []), toolCall];\n return;\n }\n\n messages.push({\n role: \"assistant\",\n content: [],\n tool_calls: [toolCall],\n });\n }\n\n for (const part of request.input) {\n if (typeof part === \"string\" || typeof part === \"number\") {\n const text = String(part);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n\n const messageLike =\n OpenAIResponsesInputMessageLikeSchema.safeParse(part);\n if (messageLike.success) {\n flushInputContent();\n const role = messageLike.data.role as Role;\n const content = normalizeOpenAIResponsesMessageContent(\n messageLike.data.content,\n );\n const toolCalls = normalizeOpenAIResponsesToolCalls(\n messageLike.data.tool_calls,\n );\n\n messages.push({\n role,\n tool_call_id: messageLike.data.tool_call_id,\n content,\n tool_calls: toolCalls,\n });\n continue;\n }\n\n const functionCallOutputLike =\n OpenAIResponsesInputFunctionCallOutputLikeSchema.safeParse(part);\n if (functionCallOutputLike.success) {\n flushInputContent();\n const toolCallId =\n functionCallOutputLike.data.call_id ??\n functionCallOutputLike.data.callId ??\n \"\";\n\n const outputText =\n typeof functionCallOutputLike.data.output === \"string\"\n ? functionCallOutputLike.data.output\n : JSON.stringify(functionCallOutputLike.data.output ?? \"\");\n\n messages.push({\n role: \"tool\",\n tool_call_id: toolCallId,\n content: [{ type: \"text\", text: outputText }],\n tool_calls: undefined,\n });\n continue;\n }\n\n const functionCallLike =\n OpenAIResponsesInputFunctionCallLikeSchema.safeParse(part);\n if (functionCallLike.success) {\n flushInputContent();\n const callId =\n functionCallLike.data.call_id ??\n functionCallLike.data.callId ??\n functionCallLike.data.id ??\n functionCallLike.data.name;\n appendToolCall({\n id: callId,\n type: \"function\",\n name: functionCallLike.data.name,\n arguments: safeJsonString(functionCallLike.data.arguments),\n });\n continue;\n }\n\n const textLike = OpenAIResponsesInputTextLikeSchema.safeParse(part);\n if (textLike.success) {\n const text = String(textLike.data.text);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n }\n\n flushInputContent();\n }\n }\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Responses,\n messages,\n tools: normalizeToolsResponses(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n },\n metadata: {\n headers,\n clientFormat: this.clientFormat,\n },\n } satisfies Request;\n }\n\n fromUlx(ulxResponse: Response, ulxRequest: Request): JsonValue {\n const outputBlocks = ulxResponse.output;\n const textParts: string[] = [];\n\n const createdAt = Math.floor(Date.now() / 1000);\n\n let messageIndex = 0;\n let functionCallIndex = 0;\n let reasoningIndex = 0;\n\n const collectedReasoning: OpenAIResponsesOutputItem[] = [];\n const collectedMessages: OpenAIResponsesOutputItem[] = [];\n const collectedFunctionCalls: OpenAIResponsesOutputItem[] = [];\n\n for (const block of outputBlocks) {\n if (block.type === \"message\") {\n const messageId = `msg_${ulxResponse.id}_${messageIndex++}`;\n const status: \"completed\" | \"incomplete\" =\n block.status === \"incomplete\" ? \"incomplete\" : \"completed\";\n\n const content: Array<{\n type: \"output_text\";\n text: string;\n annotations: unknown[];\n }> = [];\n\n for (const entry of block.content) {\n if (entry.type === \"text\") {\n const text = entry.text ?? \"\";\n textParts.push(text);\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"image_url\") {\n const text = entry.url ?? \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"json\") {\n const text = entry.data ? JSON.stringify(entry.data) : \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"reasoning\") {\n collectedReasoning.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: [{ type: \"reasoning_text\", text: entry.text ?? \"\" }],\n summary: [],\n });\n }\n }\n\n collectedMessages.push({\n type: \"message\",\n id: messageId,\n role: \"assistant\",\n content,\n status,\n });\n\n if (block.tool_calls) {\n for (const call of block.tool_calls) {\n collectedFunctionCalls.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: call.id,\n name: call.name,\n arguments: call.arguments,\n status: \"completed\",\n });\n }\n }\n } else if (block.type === \"tool_call\") {\n collectedFunctionCalls.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: block.call_id,\n name: block.name,\n arguments: block.arguments,\n status: block.status === \"pending\" ? \"in_progress\" : \"completed\",\n });\n } else if (block.type === \"reasoning\") {\n collectedReasoning.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: block.content\n .filter((entry) => entry.type === \"reasoning\")\n .map((entry) => ({\n type: \"reasoning_text\",\n text: entry.text ?? \"\",\n })),\n summary:\n block.summary?.map((entry) => ({\n type: \"summary_text\",\n text: entry.text ?? \"\",\n })) ?? [],\n });\n }\n }\n\n const output: OpenAIResponsesOutputItem[] = [\n ...collectedReasoning,\n ...collectedMessages,\n ...collectedFunctionCalls,\n ];\n\n const inputTokens = ulxResponse.usage?.input_tokens ?? 0;\n const outputTokens = ulxResponse.usage?.output_tokens ?? 0;\n const totalTokens =\n ulxResponse.usage?.total_tokens ?? inputTokens + outputTokens;\n\n const responseStatus =\n ulxResponse.finish_reason === \"length\" ? \"incomplete\" : \"completed\";\n\n return {\n id: ulxResponse.id,\n object: \"response\",\n created_at: createdAt,\n status: responseStatus,\n error: null,\n incomplete_details:\n responseStatus === \"incomplete\"\n ? { reason: \"max_output_tokens\" }\n : null,\n instructions: null,\n metadata: {},\n model: ulxResponse.model,\n output,\n output_text: textParts.join(\"\"),\n parallel_tool_calls: true,\n temperature: ulxRequest.parameters.temperature ?? null,\n tool_choice: \"auto\",\n top_p: ulxRequest.parameters.top_p ?? null,\n usage: {\n input_tokens: inputTokens,\n input_tokens_details: { cached_tokens: 0 },\n output_tokens: outputTokens,\n output_tokens_details: { reasoning_tokens: 0 },\n total_tokens: totalTokens,\n },\n } satisfies z.infer<typeof OpenAIResponsesResponseSchema> as JsonValue;\n }\n}\n",
16
16
  "import type { JsonObject, JsonValue } from \"./types.js\";\n\nexport function safeJsonString(value: unknown): string {\n if (typeof value === \"string\") {\n try {\n JSON.parse(value);\n return value;\n } catch {\n return JSON.stringify({ _raw: value });\n }\n }\n\n if (value === undefined || value === null) return \"{}\";\n\n try {\n return JSON.stringify(value);\n } catch {\n return JSON.stringify({ _raw: String(value) });\n }\n}\n\nexport function safeJsonParseObject(value: string | undefined): JsonObject {\n const raw = typeof value === \"string\" ? value : \"\";\n if (!raw.trim()) return {};\n\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n !Array.isArray(parsed)\n ) {\n return parsed as JsonObject;\n }\n return { _raw: parsed as JsonValue };\n } catch {\n return { _raw: raw };\n }\n}\n",
17
- "import Anthropic from \"@anthropic-ai/sdk\";\nimport type { MessageCreateParams } from \"@anthropic-ai/sdk/resources/messages/messages.js\";\nimport { z } from \"zod\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n ToolCall,\n} from \"../types.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst AnthropicContentSchema = z\n .object({\n type: z.string(),\n text: z.string().optional(),\n })\n .passthrough();\n\nconst AnthropicResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n content: z.array(AnthropicContentSchema).default([]),\n stop_reason: z.string().nullable().optional(),\n usage: z\n .object({\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype AnthropicParsedResponse = z.infer<typeof AnthropicResponseSchema>;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return String((entry as JsonObject).text ?? \"\");\n })\n .join(\"\");\n}\n\nfunction toolCallsToAnthropic(toolCalls: ToolCall[] | undefined): JsonObject[] {\n if (!toolCalls?.length) return [];\n return toolCalls\n .filter((call) => call && call.name && call.id)\n .map((call) => ({\n type: \"tool_use\",\n id: call.id,\n name: call.name,\n input: safeJsonParseObject(call.arguments),\n }));\n}\n\nfunction toAnthropicContent(blocks: ContentBlock[]): JsonObject[] {\n if (!blocks.length) return [{ type: \"text\", text: \"\" }];\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text ?? \"\" };\n if (entry.type === \"image_url\")\n if (typeof entry.url === \"string\") {\n const match = entry.url.match(/^data:([^;]+);base64,(.+)$/);\n if (match?.[1] && match?.[2]) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: match[1],\n data: match[2],\n },\n } as JsonObject;\n }\n return { type: \"text\", text: entry.url };\n }\n if (entry.type === \"json\")\n return { type: \"text\", text: JSON.stringify(entry.data) };\n return { type: \"text\", text: String((entry as JsonObject).text ?? \"\") };\n });\n}\n\nfunction anthropicResponseToUlx(\n body: AnthropicParsedResponse,\n request: Request,\n): Response {\n const reasoning = body.content.filter((entry) => entry.type === \"thinking\");\n const messageBlocks = body.content.filter(\n (entry) => entry.type !== \"thinking\",\n );\n\n const outputs: Response[\"output\"] = [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks.map((part) => ({\n type: \"text\",\n text: part.text ?? \"\",\n })),\n status: body.stop_reason === \"max_tokens\" ? \"incomplete\" : \"completed\",\n },\n ];\n\n if (reasoning.length) {\n outputs.push({\n type: \"reasoning\",\n content: reasoning.map((part) => ({\n type: \"reasoning\",\n text: part.text ?? \"\",\n })),\n summary: [],\n });\n }\n\n return {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: body.stop_reason ?? undefined,\n output: outputs,\n usage: body.usage\n ? {\n input_tokens: body.usage.input_tokens,\n output_tokens: body.usage.output_tokens,\n total_tokens:\n (body.usage.input_tokens ?? 0) + (body.usage.output_tokens ?? 0),\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n}\n\nexport interface AnthropicProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class AnthropicProviderAdapter implements ProviderAdapter {\n key = \"anthropic\";\n providerFormat = \"anthropic\";\n\n constructor(private readonly config: AnthropicProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): AnthropicProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new Anthropic({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: MessageCreateParams | undefined;\n try {\n payload = this.buildAnthropicPayload(request);\n await client.messages.create(payload);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const parsed = AnthropicResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message:\n parsed.error.issues[0]?.message ??\n \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return anthropicResponseToUlx(parsed.data, request);\n }\n\n private buildAnthropicPayload(request: Request): MessageCreateParams {\n const systemParts: string[] = [];\n if (request.system?.length) systemParts.push(...request.system);\n\n const messages: Array<{ role: \"user\" | \"assistant\"; content: unknown }> =\n [];\n\n for (const message of request.messages) {\n if (message.role === \"system\" || message.role === \"developer\") {\n const text = ulxContentToText(message.content);\n if (text) systemParts.push(text);\n continue;\n }\n\n if (message.role === \"tool\") {\n if (message.tool_call_id) {\n messages.push({\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: message.tool_call_id,\n content: ulxContentToText(message.content),\n },\n ],\n });\n continue;\n }\n\n messages.push({\n role: \"user\",\n content: toAnthropicContent(message.content),\n });\n continue;\n }\n\n const role: \"user\" | \"assistant\" =\n message.role === \"assistant\" ? \"assistant\" : \"user\";\n\n let content = toAnthropicContent(message.content);\n if (role === \"assistant\") {\n const toolUses = toolCallsToAnthropic(message.tool_calls);\n if (toolUses.length) {\n if (\n content.length === 1 &&\n content[0]?.type === \"text\" &&\n content[0]?.text === \"\"\n ) {\n content = [];\n }\n content = [...content, ...toolUses];\n }\n }\n\n messages.push({ role, content });\n }\n\n return {\n model: request.model,\n messages,\n system: systemParts.length ? systemParts.join(\"\\n\") : undefined,\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n max_tokens: request.parameters.max_tokens,\n tools: request.tools?.map((tool) => ({\n name: tool.name,\n description: tool.description,\n input_schema: (tool.parameters as JsonObject) ?? {},\n type: \"function\",\n })),\n } as unknown as MessageCreateParams;\n }\n}\n",
17
+ "import Anthropic from \"@anthropic-ai/sdk\";\nimport type { MessageCreateParams } from \"@anthropic-ai/sdk/resources/messages/messages.js\";\nimport { z } from \"zod\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n ToolCall,\n} from \"../types.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst AnthropicContentSchema = z\n .object({\n type: z.string(),\n text: z.string().optional(),\n thinking: z.string().optional(),\n signature: z.string().optional(),\n })\n .passthrough();\n\nconst AnthropicResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n content: z.array(AnthropicContentSchema).default([]),\n stop_reason: z.string().nullable().optional(),\n usage: z\n .object({\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype AnthropicParsedResponse = z.infer<typeof AnthropicResponseSchema>;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return String((entry as JsonObject).text ?? \"\");\n })\n .join(\"\");\n}\n\nfunction toolCallsToAnthropic(toolCalls: ToolCall[] | undefined): JsonObject[] {\n if (!toolCalls?.length) return [];\n return toolCalls\n .filter((call) => call && call.name && call.id)\n .map((call) => ({\n type: \"tool_use\",\n id: call.id,\n name: call.name,\n input: safeJsonParseObject(call.arguments),\n }));\n}\n\nfunction toAnthropicContent(blocks: ContentBlock[]): JsonObject[] {\n if (!blocks.length) return [{ type: \"text\", text: \"\" }];\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text ?? \"\" };\n if (entry.type === \"reasoning\") {\n return {\n type: \"thinking\",\n thinking: entry.text ?? \"\",\n signature: (entry.data as JsonObject)?.signature,\n } as JsonObject;\n }\n if (entry.type === \"image_url\")\n if (typeof entry.url === \"string\") {\n const match = entry.url.match(/^data:([^;]+);base64,(.+)$/);\n if (match?.[1] && match?.[2]) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: match[1],\n data: match[2],\n },\n } as JsonObject;\n }\n return { type: \"text\", text: entry.url };\n }\n if (entry.type === \"json\")\n return { type: \"text\", text: JSON.stringify(entry.data) };\n return { type: \"text\", text: String((entry as JsonObject).text ?? \"\") };\n });\n}\n\nfunction anthropicResponseToUlx(\n body: AnthropicParsedResponse,\n request: Request,\n): Response {\n const reasoning = body.content.filter((entry) => entry.type === \"thinking\");\n const messageBlocks = body.content.filter(\n (entry) => entry.type !== \"thinking\",\n );\n\n const outputs: Response[\"output\"] = [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks.map((part) => ({\n type: \"text\",\n text: part.text ?? \"\",\n })),\n status: body.stop_reason === \"max_tokens\" ? \"incomplete\" : \"completed\",\n },\n ];\n\n if (reasoning.length) {\n outputs.push({\n type: \"reasoning\",\n content: reasoning.map((part) => ({\n type: \"reasoning\",\n text: part.thinking ?? part.text ?? \"\",\n data: part.signature ? { signature: part.signature } : undefined,\n })),\n summary: [],\n });\n }\n\n return {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: body.stop_reason ?? undefined,\n output: outputs,\n usage: body.usage\n ? {\n input_tokens: body.usage.input_tokens,\n output_tokens: body.usage.output_tokens,\n total_tokens:\n (body.usage.input_tokens ?? 0) + (body.usage.output_tokens ?? 0),\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n}\n\nexport interface AnthropicProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class AnthropicProviderAdapter implements ProviderAdapter {\n key = \"anthropic\";\n providerFormat = \"anthropic\";\n\n constructor(private readonly config: AnthropicProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): AnthropicProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new Anthropic({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: MessageCreateParams | undefined;\n try {\n payload = this.buildAnthropicPayload(request);\n await client.messages.create(payload);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const parsed = AnthropicResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message:\n parsed.error.issues[0]?.message ??\n \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return anthropicResponseToUlx(parsed.data, request);\n }\n\n private buildAnthropicPayload(request: Request): MessageCreateParams {\n const systemParts: string[] = [];\n if (request.system?.length) systemParts.push(...request.system);\n\n const messages: Array<{ role: \"user\" | \"assistant\"; content: unknown }> =\n [];\n\n for (const message of request.messages) {\n if (message.role === \"system\" || message.role === \"developer\") {\n const text = ulxContentToText(message.content);\n if (text) systemParts.push(text);\n continue;\n }\n\n if (message.role === \"tool\") {\n if (message.tool_call_id) {\n messages.push({\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: message.tool_call_id,\n content: ulxContentToText(message.content),\n },\n ],\n });\n continue;\n }\n\n messages.push({\n role: \"user\",\n content: toAnthropicContent(message.content),\n });\n continue;\n }\n\n const role: \"user\" | \"assistant\" =\n message.role === \"assistant\" ? \"assistant\" : \"user\";\n\n let content = toAnthropicContent(message.content);\n if (role === \"assistant\") {\n const toolUses = toolCallsToAnthropic(message.tool_calls);\n if (toolUses.length) {\n if (\n content.length === 1 &&\n content[0]?.type === \"text\" &&\n content[0]?.text === \"\"\n ) {\n content = [];\n }\n content = [...content, ...toolUses];\n }\n }\n\n messages.push({ role, content });\n }\n\n return {\n model: request.model,\n messages,\n system: systemParts.length ? systemParts.join(\"\\n\") : undefined,\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n max_tokens: request.parameters.max_tokens,\n tools: request.tools?.map((tool) => ({\n name: tool.name,\n description: tool.description,\n input_schema: (tool.parameters as JsonObject) ?? {},\n type: \"function\",\n })),\n } as unknown as MessageCreateParams;\n }\n}\n",
18
18
  "import { z } from \"zod\";\nimport type { JsonValue } from \"../types.js\";\nimport type { ProviderResponse, Request, Response } from \"../types.js\";\n\nexport { safeJsonString } from \"../json.js\";\n\nconst JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(JsonValueSchema),\n z.record(JsonValueSchema.optional()),\n ]),\n);\n\nconst ProviderErrorSchema = z\n .object({\n error: z.object({\n message: z.string(),\n code: z.union([z.string(), z.number()]).optional(),\n }),\n })\n .passthrough();\n\nconst UnknownErrorSchema = z\n .object({\n message: z.string().optional(),\n status: z.number().optional(),\n statusCode: z.number().optional(),\n code: z.union([z.string(), z.number()]).optional(),\n error: z.unknown().optional(),\n response: z\n .object({\n status: z.number().optional(),\n statusCode: z.number().optional(),\n data: z.unknown().optional(),\n })\n .passthrough()\n .optional(),\n })\n .passthrough();\n\nexport function parseProviderError(body: JsonValue | undefined): {\n message: string;\n code?: string;\n} {\n const parsed = ProviderErrorSchema.safeParse(body ?? {});\n if (parsed.success) {\n return {\n message: parsed.data.error.message,\n code:\n typeof parsed.data.error.code === \"number\"\n ? String(parsed.data.error.code)\n : parsed.data.error.code,\n };\n }\n return { message: \"Provider returned an error response\" };\n}\n\nexport function toProviderErrorBody(error: unknown): JsonValue {\n const parsed = UnknownErrorSchema.safeParse(error);\n if (parsed.success) {\n const upstream = JsonValueSchema.safeParse(parsed.data.error);\n if (upstream.success) return upstream.data;\n\n const responseData = JsonValueSchema.safeParse(parsed.data.response?.data);\n if (responseData.success) return responseData.data;\n\n if (typeof parsed.data.message === \"string\" && parsed.data.message.length) {\n return { error: { message: parsed.data.message } };\n }\n }\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Provider request failed\";\n\n return { error: { message } };\n}\n\nexport function toProviderErrorStatus(\n error: unknown,\n fallback: number = 500,\n): number {\n const isValidHttpStatus = (value: number) =>\n Number.isInteger(value) && value >= 100 && value <= 599;\n\n const parsed = UnknownErrorSchema.safeParse(error);\n if (parsed.success) {\n const statusCandidates = [\n parsed.data.status,\n parsed.data.statusCode,\n parsed.data.response?.status,\n parsed.data.response?.statusCode,\n ];\n for (const candidate of statusCandidates) {\n if (typeof candidate === \"number\" && isValidHttpStatus(candidate)) {\n return candidate;\n }\n }\n\n const { code } = parsed.data;\n if (typeof code === \"number\" && isValidHttpStatus(code)) return code;\n if (typeof code === \"string\") {\n const parsedCode = Number.parseInt(code, 10);\n if (String(parsedCode) === code && isValidHttpStatus(parsedCode)) {\n return parsedCode;\n }\n }\n }\n\n const providerBody = toProviderErrorBody(error);\n const providerParsed = ProviderErrorSchema.safeParse(providerBody);\n if (providerParsed.success) {\n const providerCode = providerParsed.data.error.code;\n if (typeof providerCode === \"number\" && isValidHttpStatus(providerCode)) {\n return providerCode;\n }\n if (typeof providerCode === \"string\") {\n const parsedCode = Number.parseInt(providerCode, 10);\n if (\n String(parsedCode) === providerCode &&\n isValidHttpStatus(parsedCode)\n ) {\n return parsedCode;\n }\n }\n }\n\n return fallback;\n}\n\nexport function toUlxErrorResponse(\n payload: ProviderResponse,\n request: Request,\n): Response {\n const providerError = parseProviderError(payload.body);\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: providerError.message || `Provider error (${payload.status})`,\n code: providerError.code ?? String(payload.status),\n },\n };\n}\n",
19
19
  "import { type JsonValue } from \"../core/types.js\";\n\nexport interface CapturedInteraction {\n request: {\n url: string;\n method: string;\n headers: Record<string, string>;\n body: JsonValue | undefined;\n };\n response: {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: JsonValue | undefined;\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const obj: Record<string, string> = {};\n headers.forEach((value, key) => {\n obj[key] = value;\n });\n return obj;\n}\n\nexport function createCapturingFetch(\n originalFetch: typeof fetch = globalThis.fetch,\n) {\n const interaction: Partial<CapturedInteraction> = {};\n\n type FetchCall = (\n ...args: Parameters<typeof originalFetch>\n ) => ReturnType<typeof originalFetch>;\n\n const trackingFetch: FetchCall = async (input, init) => {\n let url = input.toString();\n let method = init?.method ?? \"GET\";\n let headers = new Headers(init?.headers);\n let reqBody: JsonValue | undefined;\n\n if (input instanceof Request) {\n url = input.url;\n method = input.method;\n // Merge headers if needed, but usually init headers override or merge\n // For simplicity, lets look at init headers first as that is what we usually see\n if (!init?.headers) {\n headers = input.headers;\n }\n }\n\n if (init?.body && typeof init.body === \"string\") {\n try {\n reqBody = JSON.parse(init.body);\n } catch {\n reqBody = init.body;\n }\n } else if (input instanceof Request && !reqBody) {\n // Try to read body from request if possible, but it might be consumed\n // Since we are proxying, we might not want to consume it before fetch\n // But for logging, we want it.\n // Reading body from Request object that is about to be fetched is tricky because of streams.\n // For now, let's stick to init.body which is what usually happens in these SDKs\n }\n\n interaction.request = {\n url,\n method,\n headers: headersToObject(headers),\n body: reqBody,\n };\n\n const response = await originalFetch(input, init);\n\n const cloned = response.clone();\n // We assume JSON response for these providers usually\n const text = await cloned.text();\n let resBody: JsonValue | undefined;\n try {\n resBody = JSON.parse(text);\n } catch {\n resBody = text;\n }\n\n interaction.response = {\n status: response.status,\n statusText: response.statusText,\n headers: headersToObject(response.headers),\n body: resBody,\n };\n\n return response;\n };\n\n const wrappedFetch = Object.assign(trackingFetch, originalFetch);\n\n const maybePreconnect = (originalFetch as unknown as { preconnect?: unknown })\n .preconnect;\n if (typeof maybePreconnect === \"function\") {\n Object.assign(wrappedFetch, {\n preconnect: maybePreconnect.bind(originalFetch),\n });\n }\n\n return { fetch: wrappedFetch, interaction };\n}\n",
20
- "import OpenAI from \"openai\";\nimport { z } from \"zod\";\nimport {\n fixKimiResponse,\n type KimiFixMetadata,\n} from \"../../services/kimiFixer.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ContentBlock,\n Operation,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Role,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst OpenAIContentPartSchema = z\n .object({\n type: z.string().default(\"text\"),\n text: z.string().optional(),\n image_url: z\n .union([z.string(), z.object({ url: z.string().optional() }).strict()])\n .optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIToolCallSchema = z\n .object({\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.union([z.string(), z.number()]).transform(String),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIMessageSchema = z\n .object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIContentPartSchema)])\n .nullable()\n .optional(),\n tool_calls: z.array(OpenAIToolCallSchema).nullable().optional(),\n reasoning_content: z.string().nullable().optional(),\n })\n .passthrough();\n\nconst OpenAIChoiceSchema = z\n .object({\n finish_reason: z.string().nullable().optional(),\n message: OpenAIMessageSchema,\n })\n .passthrough();\n\nconst OpenAIResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n choices: z.array(OpenAIChoiceSchema).default([]),\n usage: z\n .object({\n prompt_tokens: z.number().optional(),\n completion_tokens: z.number().optional(),\n total_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype OpenAIParsedResponse = z.infer<typeof OpenAIResponseSchema>;\n\nfunction normalizeToolCalls(\n toolCalls:\n | Array<{\n id?: string | null;\n function?: { name?: unknown; arguments?: unknown } | null;\n }>\n | null\n | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n const fn = call?.function;\n if (!fn || (typeof fn.name !== \"string\" && typeof fn.name !== \"number\"))\n continue;\n const name = String(fn.name);\n // default to rand id\n const id =\n typeof call.id === \"string\" && call.id.length\n ? call.id\n : `${name}_call_${Math.random().toString(36).substring(2, 10)}`;\n normalized.push({\n id,\n type: \"function\",\n name: name,\n arguments: safeJsonString(fn.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIContent(content: unknown): ContentBlock[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n const entry = part as Record<string, unknown>;\n const type = typeof entry.type === \"string\" ? entry.type : \"text\";\n if (type === \"image_url\") {\n const value = entry.image_url;\n const url =\n typeof value === \"string\"\n ? value\n : typeof value === \"object\" && value !== null\n ? (value as { url?: string }).url\n : undefined;\n if (url) {\n blocks.push({ type: \"image_url\", url });\n }\n continue;\n }\n if (type === \"json\") {\n blocks.push({ type: \"json\", data: entry.data as JsonValue });\n continue;\n }\n const text =\n typeof entry.text === \"string\"\n ? entry.text\n : typeof entry.data === \"string\"\n ? entry.data\n : \"\";\n blocks.push({ type: \"text\", text });\n }\n return blocks;\n}\n\nfunction openAIUsageToUlx(\n usage?: OpenAIParsedResponse[\"usage\"],\n): Response[\"usage\"] {\n if (!usage) return undefined;\n const input = usage.prompt_tokens ?? undefined;\n const output = usage.completion_tokens ?? undefined;\n const total = usage.total_tokens ?? (input ?? 0) + (output ?? 0);\n return {\n input_tokens: input,\n output_tokens: output,\n total_tokens: total,\n };\n}\n\nfunction toOpenAIContent(blocks: ContentBlock[]): string | JsonValue {\n if (blocks.every((entry) => entry.type === \"text\")) {\n return blocks.map((entry) => entry.text ?? \"\").join(\"\");\n }\n\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n return entry as JsonObject;\n }) as JsonValue;\n}\n\nexport function toOpenAITool(tool: Tool): JsonObject {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n strict: tool.strict,\n },\n };\n}\n\nexport function toOpenAIMessages(messages: Request[\"messages\"]): JsonValue {\n return messages.map((msg) => {\n if (msg.role === \"tool\") {\n return {\n role: \"tool\",\n tool_call_id: msg.tool_call_id,\n content: toOpenAIContent(msg.content),\n };\n }\n if (msg.tool_calls) {\n return {\n role: msg.role,\n content: toOpenAIContent(msg.content),\n tool_calls: msg.tool_calls.map((call) => ({\n id: call.id,\n type: \"function\",\n function: {\n name: call.name,\n arguments: call.arguments,\n },\n })),\n };\n }\n return {\n role: msg.role === \"assistant\" ? \"assistant\" : msg.role,\n content: toOpenAIContent(msg.content),\n name: undefined,\n };\n });\n}\n\nexport function normalizeOpenAIProviderResponse(\n payload: ProviderResponse,\n request: Request,\n): { body: OpenAIParsedResponse; kimi?: KimiFixMetadata } | { error: string } {\n const parsed = OpenAIResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0]?.message ?? \"Invalid provider payload\";\n logger.error(\n { issues: parsed.error.issues },\n \"Failed to parse OpenAI payload\",\n );\n return { error: issue };\n }\n\n const cloned = structuredClone(parsed.data) as JsonObject;\n const { response, metadata } = fixKimiResponse(cloned, request);\n const normalized = OpenAIResponseSchema.safeParse(response);\n if (!normalized.success) {\n const issue =\n normalized.error.issues[0]?.message ??\n \"Provider payload invalid after normalization\";\n logger.error(\n { issues: normalized.error.issues },\n \"OpenAI payload invalid after normalization\",\n );\n return { error: issue };\n }\n\n return { body: normalized.data, kimi: metadata };\n}\n\nexport function openAIResponseToUlx(\n body: OpenAIParsedResponse,\n request: Request,\n kimi?: KimiFixMetadata,\n): Response {\n const [choice] = body.choices;\n const message = choice?.message;\n const contentBlocks = normalizeOpenAIContent(message?.content);\n const toolCalls = normalizeToolCalls(message?.tool_calls);\n\n const outputs: Response[\"output\"] = [];\n outputs.push({\n type: \"message\",\n role: (message?.role as Role) ?? \"assistant\",\n content: contentBlocks,\n tool_calls: toolCalls,\n status: choice?.finish_reason === \"length\" ? \"incomplete\" : \"completed\",\n });\n\n if (typeof message?.reasoning_content === \"string\") {\n const text = message.reasoning_content.trim();\n if (text) {\n outputs.push({\n type: \"reasoning\",\n content: [{ type: \"reasoning\", text }],\n summary: [],\n });\n }\n }\n\n const response: Response = {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: choice?.finish_reason ?? undefined,\n output: outputs,\n usage: openAIUsageToUlx(body.usage),\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n\n if (toolCalls?.length && !response.finish_reason) {\n response.finish_reason = \"tool_calls\";\n }\n\n if (kimi) {\n response.metadata = {\n ...(response.metadata ?? {}),\n normalization: { kimi },\n };\n }\n\n return response;\n}\n\nexport function buildOpenAIPayload(request: Request): JsonObject {\n return {\n model: request.model,\n messages: toOpenAIMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n top_k: request.parameters.top_k,\n max_tokens: request.parameters.max_tokens,\n response_format:\n request.operation === Operation.Responses ? { type: \"text\" } : undefined,\n };\n}\n\nexport interface OpenAIProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class OpenAIProviderAdapter implements ProviderAdapter {\n key = \"openai\";\n providerFormat = \"openai\";\n\n constructor(private readonly config: OpenAIProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenAIProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new OpenAI({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: JsonObject | undefined;\n try {\n payload = buildOpenAIPayload(request);\n await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport type OpenAIConfig = OpenAIProviderConfig;\nexport interface OpenAIModelConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n",
20
+ "import OpenAI from \"openai\";\nimport { z } from \"zod\";\nimport {\n fixKimiResponse,\n type KimiFixMetadata,\n} from \"../../services/kimiFixer.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ContentBlock,\n Operation,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Role,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst OpenAIContentPartSchema = z\n .object({\n type: z.string().default(\"text\"),\n text: z.string().optional(),\n image_url: z\n .union([z.string(), z.object({ url: z.string().optional() }).strict()])\n .optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIToolCallSchema = z\n .object({\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.union([z.string(), z.number()]).transform(String),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIMessageSchema = z\n .object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIContentPartSchema)])\n .nullable()\n .optional(),\n tool_calls: z.array(OpenAIToolCallSchema).nullable().optional(),\n reasoning_content: z.string().nullable().optional(),\n })\n .passthrough();\n\nconst OpenAIChoiceSchema = z\n .object({\n finish_reason: z.string().nullable().optional(),\n message: OpenAIMessageSchema,\n })\n .passthrough();\n\nconst OpenAIResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n choices: z.array(OpenAIChoiceSchema).default([]),\n usage: z\n .object({\n prompt_tokens: z.number().optional(),\n completion_tokens: z.number().optional(),\n total_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype OpenAIParsedResponse = z.infer<typeof OpenAIResponseSchema>;\n\nfunction normalizeToolCalls(\n toolCalls:\n | Array<{\n id?: string | null;\n function?: { name?: unknown; arguments?: unknown } | null;\n }>\n | null\n | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n const fn = call?.function;\n if (!fn || (typeof fn.name !== \"string\" && typeof fn.name !== \"number\"))\n continue;\n const name = String(fn.name);\n // default to rand id\n const id =\n typeof call.id === \"string\" && call.id.length\n ? call.id\n : `${name}_call_${Math.random().toString(36).substring(2, 10)}`;\n normalized.push({\n id,\n type: \"function\",\n name: name,\n arguments: safeJsonString(fn.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIContent(content: unknown): ContentBlock[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n const entry = part as Record<string, unknown>;\n const type = typeof entry.type === \"string\" ? entry.type : \"text\";\n if (type === \"image_url\") {\n const value = entry.image_url;\n const url =\n typeof value === \"string\"\n ? value\n : typeof value === \"object\" && value !== null\n ? (value as { url?: string }).url\n : undefined;\n if (url) {\n blocks.push({ type: \"image_url\", url });\n }\n continue;\n }\n if (type === \"json\") {\n blocks.push({ type: \"json\", data: entry.data as JsonValue });\n continue;\n }\n const text =\n typeof entry.text === \"string\"\n ? entry.text\n : typeof entry.data === \"string\"\n ? entry.data\n : \"\";\n blocks.push({ type: \"text\", text });\n }\n return blocks;\n}\n\nfunction openAIUsageToUlx(\n usage?: OpenAIParsedResponse[\"usage\"],\n): Response[\"usage\"] {\n if (!usage) return undefined;\n const input = usage.prompt_tokens ?? undefined;\n const output = usage.completion_tokens ?? undefined;\n const total = usage.total_tokens ?? (input ?? 0) + (output ?? 0);\n return {\n input_tokens: input,\n output_tokens: output,\n total_tokens: total,\n };\n}\n\nfunction toOpenAIContent(blocks: ContentBlock[]): string | JsonValue {\n if (blocks.every((entry) => entry.type === \"text\")) {\n return blocks.map((entry) => entry.text ?? \"\").join(\"\");\n }\n\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n return entry as JsonObject;\n }) as JsonValue;\n}\n\nexport function toOpenAITool(tool: Tool): JsonObject {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n strict: tool.strict,\n },\n };\n}\n\nexport function toOpenAIMessages(messages: Request[\"messages\"]): JsonValue {\n return messages.map((msg) => {\n const reasoningBlocks = msg.content.filter((c) => c.type === \"reasoning\");\n const nonReasoningBlocks = msg.content.filter(\n (c) => c.type !== \"reasoning\",\n );\n\n const res: JsonObject = {\n role: msg.role === \"assistant\" ? \"assistant\" : msg.role,\n content: toOpenAIContent(nonReasoningBlocks),\n };\n\n if (reasoningBlocks.length > 0) {\n res.reasoning_content = reasoningBlocks.map((b) => b.text).join(\"\\n\\n\");\n }\n\n if (msg.role === \"tool\") {\n res.tool_call_id = msg.tool_call_id;\n }\n\n if (msg.tool_calls) {\n res.tool_calls = msg.tool_calls.map((call) => ({\n id: call.id,\n type: \"function\",\n function: {\n name: call.name,\n arguments: call.arguments,\n },\n }));\n }\n\n return res;\n });\n}\n\nexport function normalizeOpenAIProviderResponse(\n payload: ProviderResponse,\n request: Request,\n): { body: OpenAIParsedResponse; kimi?: KimiFixMetadata } | { error: string } {\n const parsed = OpenAIResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0]?.message ?? \"Invalid provider payload\";\n logger.error(\n { issues: parsed.error.issues },\n \"Failed to parse OpenAI payload\",\n );\n return { error: issue };\n }\n\n const cloned = structuredClone(parsed.data) as JsonObject;\n const { response, metadata } = fixKimiResponse(cloned, request);\n const normalized = OpenAIResponseSchema.safeParse(response);\n if (!normalized.success) {\n const issue =\n normalized.error.issues[0]?.message ??\n \"Provider payload invalid after normalization\";\n logger.error(\n { issues: normalized.error.issues },\n \"OpenAI payload invalid after normalization\",\n );\n return { error: issue };\n }\n\n return { body: normalized.data, kimi: metadata };\n}\n\nexport function openAIResponseToUlx(\n body: OpenAIParsedResponse,\n request: Request,\n kimi?: KimiFixMetadata,\n): Response {\n const [choice] = body.choices;\n const message = choice?.message;\n const contentBlocks = normalizeOpenAIContent(message?.content);\n const toolCalls = normalizeToolCalls(message?.tool_calls);\n\n const outputs: Response[\"output\"] = [];\n outputs.push({\n type: \"message\",\n role: (message?.role as Role) ?? \"assistant\",\n content: contentBlocks,\n tool_calls: toolCalls,\n status: choice?.finish_reason === \"length\" ? \"incomplete\" : \"completed\",\n });\n\n if (typeof message?.reasoning_content === \"string\") {\n const text = message.reasoning_content.trim();\n if (text) {\n outputs.push({\n type: \"reasoning\",\n content: [{ type: \"reasoning\", text }],\n summary: [],\n });\n }\n }\n\n const response: Response = {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: choice?.finish_reason ?? undefined,\n output: outputs,\n usage: openAIUsageToUlx(body.usage),\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n\n if (toolCalls?.length && !response.finish_reason) {\n response.finish_reason = \"tool_calls\";\n }\n\n if (kimi) {\n response.metadata = {\n ...(response.metadata ?? {}),\n normalization: { kimi },\n };\n }\n\n return response;\n}\n\nexport function buildOpenAIPayload(request: Request): JsonObject {\n return {\n model: request.model,\n messages: toOpenAIMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n top_k: request.parameters.top_k,\n max_tokens: request.parameters.max_tokens,\n response_format:\n request.operation === Operation.Responses ? { type: \"text\" } : undefined,\n };\n}\n\nexport interface OpenAIProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class OpenAIProviderAdapter implements ProviderAdapter {\n key = \"openai\";\n providerFormat = \"openai\";\n\n constructor(private readonly config: OpenAIProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenAIProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new OpenAI({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: JsonObject | undefined;\n try {\n payload = buildOpenAIPayload(request);\n await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport type OpenAIConfig = OpenAIProviderConfig;\nexport interface OpenAIModelConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n",
21
21
  "import { logger } from \"../utils/logger.js\";\nimport {\n isJsonObject,\n type JsonObject,\n type Request,\n getToolSchemas,\n findMatchingTool,\n} from \"../core/types.js\";\n\nconst TOOL_BLOCK_RE =\n /<\\|tool_call_begin\\|>\\s*(?<name>[^\\s]+)\\s*<\\|tool_call_argument_begin\\|>\\s*(?<args>.*?)\\s*<\\|tool_call_end\\|>/gs;\n\nconst TOOL_SECTION_BEGIN = \"<|tool_calls_section_begin|>\";\nconst TOOL_SECTION_END = \"<|tool_calls_section_end|>\";\n\nfunction cleanText(text: string): string {\n if (!text) return \"\";\n return text\n .replaceAll(\"(no content)\", \"\")\n .replace(/\\n\\s*\\n\\s*\\n+/g, \"\\n\\n\")\n .trim();\n}\n\ninterface CleanThinkingResult {\n cleaned: string;\n extractedThinking: string;\n}\n\nfunction cleanThinking(text: string, extract = false): CleanThinkingResult {\n if (!text) return { cleaned: \"\", extractedThinking: \"\" };\n\n text = cleanText(text);\n\n if (!extract) {\n // For reasoning content: keep inner text in place\n const tags = /<\\/?think(?:ing)?\\s*\\/?>/gi;\n const cleaned = text.replace(tags, \"\");\n return { cleaned, extractedThinking: \"\" };\n }\n\n const extracted: string[] = [];\n let cleaned = text;\n\n // Balanced <think>...</think> / <thinking>...</thinking>\n cleaned = cleaned.replace(\n /<(think|thinking)\\s*>([\\s\\S]*?)<\\/\\1\\s*>/gi,\n (_match, _tag, inner: string) => {\n const trimmed = inner.trim();\n if (trimmed) extracted.push(trimmed);\n return \"\";\n },\n );\n\n // Orphan closing tags: \"thinking...</think> actual\"\n while (true) {\n const match = cleaned.match(/<\\/(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const before = cleaned.slice(0, match.index).trim();\n if (before) extracted.push(before);\n\n cleaned = cleaned.slice(match.index + match[0].length);\n }\n\n // Orphan opening tags: \"<think>thinking...\" (no close)\n while (true) {\n const match = cleaned.match(/<(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const afterStart = match.index + match[0].length;\n const after = cleaned.slice(afterStart).trim();\n if (after) extracted.push(after);\n\n cleaned = cleaned.slice(0, match.index);\n }\n\n return {\n cleaned: cleaned.replace(/<\\/?think(?:ing)?\\s*\\/?>/gi, \"\").trim(),\n extractedThinking: extracted.join(\"\\n\\n\").trim(),\n };\n}\n\ninterface KimiToolCall extends JsonObject {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\n\nfunction parseToolCalls(section: string): KimiToolCall[] {\n const toolCalls: KimiToolCall[] = [];\n const matches = section.matchAll(TOOL_BLOCK_RE);\n let index = 0;\n\n for (const match of matches) {\n const rawName = match.groups?.name?.trim() ?? \"\";\n const argsStr = match.groups?.args?.trim() ?? \"\";\n\n let functionName = rawName;\n let callId = `call_${index}`;\n\n if (rawName.includes(\".\")) {\n const [, rest] = rawName.split(\".\", 2);\n functionName = rest;\n }\n\n if (functionName.includes(\":\")) {\n const [name, idPart] = functionName.split(\":\", 2);\n functionName = name;\n if (idPart) {\n callId = idPart;\n }\n }\n\n const argumentsJson = argsStr;\n\n toolCalls.push({\n id: callId,\n type: \"function\",\n function: {\n name: functionName,\n arguments: argumentsJson,\n },\n });\n\n index += 1;\n }\n\n return toolCalls;\n}\n\nexport interface KimiFixMetadata extends JsonObject {\n extractedToolCalls: number;\n extractedFromReasoning: number;\n extractedFromContent: number;\n cleanedReasoningContent: boolean;\n cleanedMessageContent: boolean;\n repairedToolNames: number;\n}\n\nexport interface KimiFixResult {\n response: JsonObject;\n metadata: KimiFixMetadata;\n}\n\nexport function repairToolNames(\n toolCalls: JsonObject[],\n request: Request,\n): number {\n const schemas = getToolSchemas(request);\n const toolNames = new Set(Object.keys(schemas));\n let repairedCount = 0;\n\n for (const call of toolCalls) {\n if (call.type !== \"function\" || !isJsonObject(call.function)) continue;\n\n const fn = call.function as JsonObject;\n if (typeof fn.name === \"number\") {\n fn.name = String(fn.name);\n }\n const name = fn.name;\n if (typeof name !== \"string\") continue;\n\n // If name is already valid, skip\n if (toolNames.has(name)) continue;\n\n // Try to find a match\n const match = findMatchingTool(request, fn.arguments);\n if (match) {\n logger.debug(`[KimiFixer] Repaired tool name: ${name} -> ${match}`);\n fn.name = match;\n repairedCount++;\n }\n }\n\n return repairedCount;\n}\n\nexport function fixKimiResponse(\n response: JsonObject,\n request: Request,\n): KimiFixResult {\n const metadata: KimiFixMetadata = {\n extractedToolCalls: 0,\n extractedFromReasoning: 0,\n extractedFromContent: 0,\n cleanedReasoningContent: false,\n cleanedMessageContent: false,\n repairedToolNames: 0,\n };\n\n try {\n const choices = response?.choices;\n if (!Array.isArray(choices) || !choices.length) {\n return { response, metadata };\n }\n\n for (const choice of choices) {\n if (!isJsonObject(choice)) {\n continue;\n }\n\n const message =\n choice.message !== undefined && isJsonObject(choice.message)\n ? choice.message\n : ((choice.message = {}) as JsonObject);\n\n const rawToolCalls = message.tool_calls;\n let aggregatedToolCalls = Array.isArray(rawToolCalls)\n ? [...(rawToolCalls as unknown as JsonObject[])]\n : [];\n\n if (typeof message.reasoning_content === \"string\") {\n const original = message.reasoning_content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n const cleanedReasoning = cleanThinking(cleanedText, false).cleaned;\n if (cleanedReasoning !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned reasoning content (thinking tags).\",\n );\n metadata.cleanedReasoningContent = true;\n message.reasoning_content = cleanedReasoning;\n }\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from reasoning content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromReasoning += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (typeof message.content === \"string\") {\n const original = message.content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n\n // Extract thinking tags from content and move to reasoning_content\n // Handle multiple formats:\n // 1. <thinking>thinking content</thinking> actual content\n // 2. thinking content</think> actual content\n // 3. thinking content... actual content (self-closing or incomplete tag)\n\n const { cleaned, extractedThinking } = cleanThinking(cleanedText, true);\n const normalizedContent = cleaned;\n const thinkingContent = extractedThinking;\n\n if (normalizedContent !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned message content (thinking tags and normalization).\",\n );\n metadata.cleanedMessageContent = true;\n message.content = normalizedContent;\n }\n\n if (thinkingContent) {\n // Add extracted thinking content to reasoning_content\n const existingReasoning =\n typeof message.reasoning_content === \"string\"\n ? message.reasoning_content\n : \"\";\n message.reasoning_content = existingReasoning\n ? `${existingReasoning}\\n\\n${thinkingContent}`\n : thinkingContent;\n logger.debug(\n \"[KimiFixer] Extracted thinking content from message.content to reasoning_content.\",\n );\n metadata.extractedFromContent += 1;\n }\n\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from message content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromContent += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (aggregatedToolCalls.length) {\n const repaired = repairToolNames(aggregatedToolCalls, request);\n if (repaired > 0) {\n metadata.repairedToolNames =\n (metadata.repairedToolNames || 0) + repaired;\n }\n message.tool_calls = aggregatedToolCalls;\n choice.finish_reason = \"tool_calls\";\n } else if (\"tool_calls\" in message) {\n delete message.tool_calls;\n }\n }\n\n return { response, metadata };\n } catch (error) {\n logger.error({ err: error }, \"Failed to fix Kimi response\");\n return { response, metadata };\n }\n}\n\nfunction extractToolCallSections(text: string): {\n cleanedText: string;\n extracted: KimiToolCall[];\n} {\n if (!text || !text.includes(TOOL_SECTION_BEGIN)) {\n return { cleanedText: text ?? \"\", extracted: [] };\n }\n\n let remaining = text;\n const extracted: KimiToolCall[] = [];\n\n while (remaining.includes(TOOL_SECTION_BEGIN)) {\n const start = remaining.indexOf(TOOL_SECTION_BEGIN);\n if (start === -1) {\n break;\n }\n const afterStart = start + TOOL_SECTION_BEGIN.length;\n const end = remaining.indexOf(TOOL_SECTION_END, afterStart);\n const section =\n end === -1\n ? remaining.slice(afterStart)\n : remaining.slice(afterStart, end);\n extracted.push(...parseToolCalls(section));\n remaining =\n end === -1\n ? remaining.slice(0, start)\n : `${remaining.slice(0, start)}${remaining.slice(\n end + TOOL_SECTION_END.length,\n )}`;\n }\n\n return { cleanedText: remaining.trim(), extracted };\n}\n",
22
22
  "import { OpenRouter } from \"@openrouter/sdk\";\nimport { HTTPClient } from \"@openrouter/sdk/lib/http.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n} from \"../types.js\";\nimport {\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n toOpenAIMessages,\n toOpenAITool,\n} from \"./openai.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nexport interface OpenRouterProviderConfig {\n apiKey: string;\n}\n\nfunction toOpenRouterMessages(messages: Request[\"messages\"]): JsonValue {\n const openAIMessages = toOpenAIMessages(messages);\n if (Array.isArray(openAIMessages)) {\n return openAIMessages.map((msg) => {\n const obj = msg as JsonObject;\n if (obj.role === \"tool\" && typeof obj.tool_call_id === \"string\") {\n const { tool_call_id, ...rest } = obj;\n return { ...rest, toolCallId: tool_call_id };\n }\n return msg;\n });\n }\n return openAIMessages;\n}\n\nexport class OpenRouterProviderAdapter implements ProviderAdapter {\n key = \"openrouter\";\n providerFormat = \"openrouter\";\n\n constructor(private readonly config: OpenRouterProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenRouterProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n\n const httpClient = new HTTPClient({ fetcher: trackingFetch });\n\n const client = new OpenRouter({\n apiKey: cfg.apiKey,\n httpClient,\n });\n\n try {\n payload = {\n model: request.model,\n messages: toOpenRouterMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n topP: request.parameters.top_p,\n maxTokens: request.parameters.max_tokens,\n };\n\n await client.chat.send(payload as never);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport interface OpenRouterConfig {\n apiKey: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n\nexport interface OpenRouterModelConfig {\n baseUrl?: string;\n apiKey?: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n",
23
- "import {\n VertexAI,\n type Content,\n type GenerateContentRequest,\n type FunctionDeclaration,\n type FunctionDeclarationSchema,\n type Part,\n type Tool as VertexTool,\n} from \"@google-cloud/vertexai\";\nimport {\n GoogleAuth,\n type GoogleAuthOptions,\n type JWTInput,\n} from \"google-auth-library\";\nimport OpenAI from \"openai\";\nimport { SignatureCache } from \"../../persistence/signatureCache.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n parseProviderError,\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport {\n buildOpenAIPayload,\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n} from \"./openai.js\";\n\nconst MAAS_MODEL_PATTERN = /\\/.*-maas$/i;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return entry.text ?? \"\";\n })\n .join(\"\");\n}\n\nfunction toVertexProviderErrorStatus(error: unknown): number {\n const genericStatus = toProviderErrorStatus(error, 0);\n if (genericStatus) return genericStatus;\n\n const { message } = parseProviderError(toProviderErrorBody(error));\n const match = message.match(/got status:\\s*(\\d{3})\\b/i);\n if (match?.[1]) {\n const parsed = Number.parseInt(match[1], 10);\n if (Number.isInteger(parsed) && parsed >= 100 && parsed <= 599) {\n return parsed;\n }\n }\n\n return 500;\n}\n\nexport class VertexProviderAdapter implements ProviderAdapter {\n key = \"vertex\";\n providerFormat = \"vertex\";\n\n private signatureCache?: SignatureCache;\n\n constructor(\n private readonly baseConfig?: VertexConfig,\n signatureCache?: SignatureCache,\n ) {\n this.signatureCache = signatureCache;\n }\n\n private getSignatureCache(): SignatureCache {\n if (!this.signatureCache) {\n this.signatureCache = new SignatureCache();\n }\n return this.signatureCache;\n }\n\n private requiresThoughtSignatures(model?: string): boolean {\n const normalized = (model ?? \"\").toLowerCase();\n return normalized.includes(\"gemini-3\") && !normalized.includes(\"image\");\n }\n\n private resolveConfig(overrides?: JsonObject): VertexConfig {\n const merged: Partial<VertexConfig> = { ...(this.baseConfig ?? {}) };\n const extras = (overrides ?? {}) as Partial<VertexModelConfig>;\n\n if (typeof extras.projectId === \"string\")\n merged.projectId = extras.projectId;\n if (typeof extras.location === \"string\") merged.location = extras.location;\n if (typeof extras.endpointOverride === \"string\")\n merged.endpointOverride = extras.endpointOverride;\n if (extras.credentials && typeof extras.credentials === \"object\") {\n merged.credentials = extras.credentials;\n merged.credentialsPath = undefined;\n }\n if (typeof extras.credentialsPath === \"string\") {\n merged.credentialsPath = extras.credentialsPath;\n merged.credentials = undefined;\n }\n if (extras.thinkingConfig) {\n merged.thinkingConfig = extras.thinkingConfig;\n }\n\n if (!merged.projectId || !merged.location) {\n throw new Error(\"Vertex provider requires projectId and location\");\n }\n if (!merged.credentials && !merged.credentialsPath) {\n throw new Error(\n \"Vertex provider requires credentials (path or inline JSON)\",\n );\n }\n\n return merged as VertexConfig;\n }\n\n private async getAccessToken(config: VertexConfig): Promise<string> {\n const authOptions: GoogleAuthOptions = {\n scopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n };\n if (config.credentialsPath) {\n authOptions.keyFilename = config.credentialsPath;\n } else if (config.credentials) {\n authOptions.credentials = config.credentials;\n }\n const auth = new GoogleAuth(authOptions);\n const token = await auth.getAccessToken();\n if (!token) {\n throw new Error(\"Unable to acquire access token for Vertex AI MaaS\");\n }\n return token;\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let vertexRequest: GenerateContentRequest | undefined;\n try {\n const resolved = this.resolveConfig(config);\n const modelId = this.normalizeModelId(request.model);\n const location = this.resolveLocation(modelId, resolved.location);\n\n if (modelId && MAAS_MODEL_PATTERN.test(modelId)) {\n return this.invokeMaaS(request, resolved, modelId, location);\n }\n\n const modelResource = this.resolveModelResource(\n modelId ?? request.model,\n resolved.projectId,\n location,\n );\n\n const systemInstruction = this.buildSystemInstruction(\n this.extractSystemParts(request),\n );\n const tools = this.toVertexTools(request.tools);\n\n const client = new VertexAI({\n project: resolved.projectId,\n location,\n apiEndpoint: this.resolveApiEndpoint(resolved, location, modelId),\n googleAuthOptions: {\n keyFilename: resolved.credentialsPath,\n credentials: resolved.credentials,\n },\n });\n\n const model = client.preview.getGenerativeModel({\n model: modelResource,\n systemInstruction,\n tools,\n });\n\n vertexRequest = {\n contents: this.toVertexContents(request.messages, request.model),\n systemInstruction,\n tools,\n generationConfig: {\n ...(resolved.thinkingConfig\n ? { thinkingConfig: resolved.thinkingConfig }\n : {}),\n ...this.toGenerationConfig(request),\n },\n };\n\n const response = await model.generateContent(vertexRequest);\n\n return {\n status: 200,\n body: response.response as unknown as JsonValue,\n headers: {},\n requestBody: vertexRequest as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex invocation failed\");\n const status = toVertexProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (vertexRequest as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n private async invokeMaaS(\n request: Request,\n config: VertexConfig,\n model: string,\n location: string,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n try {\n const token = await this.getAccessToken(config);\n const host = this.resolveApiEndpoint(config, location, model);\n const baseURL = `https://${host}/v1/projects/${config.projectId}/locations/${location}/endpoints/openapi`;\n\n const client = new OpenAI({\n baseURL,\n apiKey: token,\n defaultHeaders: {\n \"X-Goog-User-Project\": config.projectId,\n },\n });\n\n payload = buildOpenAIPayload(request);\n // Ensure model is set correctly for MaaS\n payload.model = model;\n\n const response = await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n\n return {\n status: 200,\n body: response as unknown as JsonValue,\n headers: {},\n requestBody: payload as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex MaaS invocation failed\");\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (payload as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n if (request.model && MAAS_MODEL_PATTERN.test(request.model)) {\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n\n if (!payload.body || typeof payload.body !== \"object\") {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return this.vertexResponseToUlx(\n payload.body as Record<string, unknown>,\n request,\n );\n }\n\n private vertexResponseToUlx(\n body: Record<string, unknown>,\n request: Request,\n ): Response {\n const candidates =\n (body.candidates as Array<Record<string, unknown>>) ?? [];\n const candidate = candidates[0];\n\n if (!candidate) {\n if (body.usageMetadata) {\n const usage = body.usageMetadata as {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n };\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n usage: {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n },\n };\n }\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Vertex response missing candidates\",\n code: \"invalid_response\",\n },\n };\n }\n\n const content =\n (candidate.content as { parts?: Array<Record<string, unknown>> })\n ?.parts ?? [];\n const messageBlocks: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n let toolCallIndex = 0;\n\n for (const part of content) {\n const text = part?.text;\n const isThought = part?.thought === true;\n const functionCall = part?.functionCall as\n | { name?: string; args?: unknown }\n | undefined;\n const thoughtSignature =\n typeof part.thoughtSignature === \"string\"\n ? part.thoughtSignature\n : typeof part.thought_signature === \"string\"\n ? part.thought_signature\n : undefined;\n\n if (typeof text === \"string\") {\n if (isThought) {\n messageBlocks.push({\n type: \"reasoning\",\n text,\n data: thoughtSignature\n ? { signature: thoughtSignature }\n : undefined,\n });\n } else {\n messageBlocks.push({ type: \"text\", text });\n }\n }\n\n if (functionCall?.name) {\n const id = `call_${request.id}_${toolCallIndex++}`;\n toolCalls.push({\n id,\n type: \"function\",\n name: functionCall.name,\n arguments: safeJsonString(functionCall.args ?? {}),\n });\n\n if (thoughtSignature) {\n this.getSignatureCache().store(id, thoughtSignature);\n }\n }\n }\n\n const usage = body.usageMetadata as\n | {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n }\n | undefined;\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n finish_reason:\n (candidate.finishReason as string | undefined) ?? undefined,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks,\n tool_calls: toolCalls.length ? toolCalls : undefined,\n status:\n candidate.finishReason === \"MAX_TOKENS\"\n ? \"incomplete\"\n : \"completed\",\n },\n ],\n usage: usage\n ? {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n }\n\n private toGenerationConfig(\n request: Request,\n ): GenerateContentRequest[\"generationConfig\"] {\n const config: GenerateContentRequest[\"generationConfig\"] = {};\n if (typeof request.parameters.temperature === \"number\")\n config.temperature = request.parameters.temperature;\n if (typeof request.parameters.top_p === \"number\")\n config.topP = request.parameters.top_p;\n if (typeof request.parameters.max_tokens === \"number\")\n config.maxOutputTokens = request.parameters.max_tokens;\n if (typeof request.parameters.top_k === \"number\")\n config.topK = request.parameters.top_k;\n if (request.parameters.thinking_config)\n (config as unknown as Record<string, unknown>).thinkingConfig =\n request.parameters.thinking_config;\n return config;\n }\n\n private buildSystemInstruction(system?: string[]): Content | undefined {\n if (!system?.length) return undefined;\n return {\n role: \"system\",\n parts: [{ text: system.join(\"\\n\") }],\n };\n }\n\n private extractSystemParts(request: Request): string[] | undefined {\n const parts: string[] = [];\n if (request.system?.length) parts.push(...request.system);\n for (const message of request.messages) {\n if (message.role !== \"system\" && message.role !== \"developer\") continue;\n const text = ulxContentToText(message.content);\n if (text) parts.push(text);\n }\n return parts.length ? parts : undefined;\n }\n\n private toVertexContents(\n messages: Request[\"messages\"],\n model?: string,\n ): Content[] {\n const toolNamesByCallId = new Map<string, string>();\n for (const message of messages) {\n if (message.role !== \"assistant\" || !message.tool_calls?.length) continue;\n for (const call of message.tool_calls) {\n if (call.id && call.name) toolNamesByCallId.set(call.id, call.name);\n }\n }\n\n const shouldAttachThoughtSignatures = this.requiresThoughtSignatures(model);\n\n const contents: Content[] = [];\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.role === \"system\" || message.role === \"developer\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n let parts = this.toVertexParts(message.content);\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length) {\n const toolCallParts = toolCalls.map((call, index) => {\n const part: Record<string, unknown> = {\n functionCall: {\n name: call.name,\n args: safeJsonParseObject(call.arguments),\n },\n };\n\n if (shouldAttachThoughtSignatures && index === 0) {\n const cached = this.getSignatureCache().retrieve(call.id);\n if (cached) {\n part.thoughtSignature = cached;\n } else {\n logger.warn(\n { tool_call_id: call.id, tool: call.name, model },\n \"Missing thought signature; using skip_thought_signature_validator\",\n );\n part.thoughtSignature = \"skip_thought_signature_validator\";\n }\n }\n\n return part as unknown as Part;\n });\n\n if (\n parts.length === 1 &&\n (parts[0] as { text?: string }).text === \"\"\n ) {\n parts = [];\n }\n parts = [...parts, ...toolCallParts];\n }\n\n contents.push({ role: \"model\", parts });\n\n if (toolCalls.length) {\n const callIds = new Set(toolCalls.map((call) => call.id));\n const outputByCallId = new Map<string, string>();\n\n let j = i + 1;\n while (j < messages.length) {\n const next = messages[j];\n if (next.role !== \"tool\") break;\n\n const toolCallId = next.tool_call_id;\n if (typeof toolCallId !== \"string\" || !toolCallId) break;\n if (!callIds.has(toolCallId)) break;\n\n const prev = outputByCallId.get(toolCallId) ?? \"\";\n outputByCallId.set(\n toolCallId,\n prev + ulxContentToText(next.content),\n );\n j++;\n }\n\n if (outputByCallId.size) {\n const responseParts: Part[] = toolCalls\n .filter((call) => outputByCallId.has(call.id))\n .map((call) => {\n const rawOutput = outputByCallId.get(call.id) ?? \"\";\n const parsedOutput = safeJsonParseObject(rawOutput);\n return {\n functionResponse: {\n name: call.name,\n response: {\n name: call.name,\n content: parsedOutput,\n },\n },\n } as unknown as Part;\n });\n\n if (responseParts.length) {\n contents.push({ role: \"user\", parts: responseParts });\n i = j - 1;\n }\n }\n }\n\n continue;\n }\n\n if (message.role === \"tool\") {\n const toolCallId = message.tool_call_id;\n const toolName =\n typeof toolCallId === \"string\" && toolCallId.length\n ? toolNamesByCallId.get(toolCallId)\n : undefined;\n\n if (toolName) {\n const rawOutput = ulxContentToText(message.content);\n const parsedOutput = safeJsonParseObject(rawOutput);\n\n contents.push({\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: parsedOutput,\n },\n },\n } as unknown as Part,\n ],\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n }\n\n return contents;\n }\n\n private toVertexParts(blocks: ContentBlock[]): Part[] {\n if (!blocks.length) return [{ text: \"\" }];\n return blocks.map((block) => {\n if (block.type === \"text\") return { text: block.text ?? \"\" } as Part;\n if (block.type === \"json\")\n return { text: JSON.stringify(block.data) } as Part;\n if (block.type === \"image_url\") {\n return {\n fileData: {\n mimeType: block.mime ?? \"application/octet-stream\",\n fileUri: block.url ?? \"\",\n },\n } as Part;\n }\n return { text: block.text ?? \"\" } as Part;\n });\n }\n\n private toVertexTools(tools?: Tool[]): VertexTool[] | undefined {\n if (!tools?.length) return undefined;\n return [\n {\n functionDeclarations: tools.map(\n (tool) =>\n ({\n name: tool.name,\n description: tool.description,\n parameters:\n tool.parameters as unknown as FunctionDeclarationSchema,\n }) as FunctionDeclaration,\n ),\n },\n ] as VertexTool[];\n }\n\n private normalizeModelId(model?: string): string | undefined {\n if (!model) return undefined;\n if (model.includes(\"gemini\") && !model.includes(\"/\")) {\n return `google/${model}`;\n }\n return model;\n }\n\n private resolveModelResource(\n model: string,\n project: string,\n location: string,\n ): string {\n if (model.startsWith(\"projects/\") || model.startsWith(\"models/\")) {\n return model;\n }\n\n if (model.includes(\"/\")) {\n if (model.startsWith(\"publishers/\")) {\n return `projects/${project}/locations/${location}/${model}`;\n }\n\n const parts = model.split(\"/\");\n if (parts.length === 2) {\n const [publisher, modelName] = parts;\n return `projects/${project}/locations/${location}/publishers/${publisher}/models/${modelName}`;\n }\n }\n\n return model;\n }\n\n private resolveLocation(\n model: string | undefined,\n configured: string,\n ): string {\n if (model && (model.includes(\"google/\") || model.includes(\"gemini\"))) {\n return \"global\";\n }\n return configured;\n }\n\n private resolveApiEndpoint(\n config: VertexConfig,\n location: string,\n model?: string,\n ): string | undefined {\n if (config.endpointOverride) {\n try {\n return new URL(config.endpointOverride).host || config.endpointOverride;\n } catch {\n return config.endpointOverride;\n }\n }\n\n if (location === \"global\") {\n return \"aiplatform.googleapis.com\";\n }\n\n if (model && MAAS_MODEL_PATTERN.test(model)) {\n return \"aiplatform.googleapis.com\";\n }\n\n return `${location}-aiplatform.googleapis.com`;\n }\n}\n\nexport interface VertexConfig {\n projectId: string;\n location: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n\nexport interface VertexModelConfig {\n projectId?: string;\n location?: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n",
23
+ "import {\n VertexAI,\n type Content,\n type GenerateContentRequest,\n type FunctionDeclaration,\n type FunctionDeclarationSchema,\n type Part,\n type Tool as VertexTool,\n} from \"@google-cloud/vertexai\";\nimport {\n GoogleAuth,\n type GoogleAuthOptions,\n type JWTInput,\n} from \"google-auth-library\";\nimport OpenAI from \"openai\";\nimport { SignatureCache } from \"../../persistence/signatureCache.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n parseProviderError,\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport {\n buildOpenAIPayload,\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n} from \"./openai.js\";\n\nconst MAAS_MODEL_PATTERN = /\\/.*-maas$/i;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return entry.text ?? \"\";\n })\n .join(\"\");\n}\n\nfunction toVertexProviderErrorStatus(error: unknown): number {\n const genericStatus = toProviderErrorStatus(error, 0);\n if (genericStatus) return genericStatus;\n\n const { message } = parseProviderError(toProviderErrorBody(error));\n const match = message.match(/got status:\\s*(\\d{3})\\b/i);\n if (match?.[1]) {\n const parsed = Number.parseInt(match[1], 10);\n if (Number.isInteger(parsed) && parsed >= 100 && parsed <= 599) {\n return parsed;\n }\n }\n\n return 500;\n}\n\nexport class VertexProviderAdapter implements ProviderAdapter {\n key = \"vertex\";\n providerFormat = \"vertex\";\n\n private signatureCache?: SignatureCache;\n\n constructor(\n private readonly baseConfig?: VertexConfig,\n signatureCache?: SignatureCache,\n ) {\n this.signatureCache = signatureCache;\n }\n\n private getSignatureCache(): SignatureCache {\n if (!this.signatureCache) {\n this.signatureCache = new SignatureCache();\n }\n return this.signatureCache;\n }\n\n private requiresThoughtSignatures(model?: string): boolean {\n const normalized = (model ?? \"\").toLowerCase();\n return normalized.includes(\"gemini-3\") && !normalized.includes(\"image\");\n }\n\n private resolveConfig(overrides?: JsonObject): VertexConfig {\n const merged: Partial<VertexConfig> = { ...(this.baseConfig ?? {}) };\n const extras = (overrides ?? {}) as Partial<VertexModelConfig>;\n\n if (typeof extras.projectId === \"string\")\n merged.projectId = extras.projectId;\n if (typeof extras.location === \"string\") merged.location = extras.location;\n if (typeof extras.endpointOverride === \"string\")\n merged.endpointOverride = extras.endpointOverride;\n if (extras.credentials && typeof extras.credentials === \"object\") {\n merged.credentials = extras.credentials;\n merged.credentialsPath = undefined;\n }\n if (typeof extras.credentialsPath === \"string\") {\n merged.credentialsPath = extras.credentialsPath;\n merged.credentials = undefined;\n }\n if (extras.thinkingConfig) {\n merged.thinkingConfig = extras.thinkingConfig;\n }\n\n if (!merged.projectId || !merged.location) {\n throw new Error(\"Vertex provider requires projectId and location\");\n }\n if (!merged.credentials && !merged.credentialsPath) {\n throw new Error(\n \"Vertex provider requires credentials (path or inline JSON)\",\n );\n }\n\n return merged as VertexConfig;\n }\n\n private async getAccessToken(config: VertexConfig): Promise<string> {\n const authOptions: GoogleAuthOptions = {\n scopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n };\n if (config.credentialsPath) {\n authOptions.keyFilename = config.credentialsPath;\n } else if (config.credentials) {\n authOptions.credentials = config.credentials;\n }\n const auth = new GoogleAuth(authOptions);\n const token = await auth.getAccessToken();\n if (!token) {\n throw new Error(\"Unable to acquire access token for Vertex AI MaaS\");\n }\n return token;\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let vertexRequest: GenerateContentRequest | undefined;\n try {\n const resolved = this.resolveConfig(config);\n const modelId = this.normalizeModelId(request.model);\n const location = this.resolveLocation(modelId, resolved.location);\n\n if (modelId && MAAS_MODEL_PATTERN.test(modelId)) {\n return this.invokeMaaS(request, resolved, modelId, location);\n }\n\n const modelResource = this.resolveModelResource(\n modelId ?? request.model,\n resolved.projectId,\n location,\n );\n\n const systemInstruction = this.buildSystemInstruction(\n this.extractSystemParts(request),\n );\n const tools = this.toVertexTools(request.tools);\n\n const client = new VertexAI({\n project: resolved.projectId,\n location,\n apiEndpoint: this.resolveApiEndpoint(resolved, location, modelId),\n googleAuthOptions: {\n keyFilename: resolved.credentialsPath,\n credentials: resolved.credentials,\n },\n });\n\n const model = client.preview.getGenerativeModel({\n model: modelResource,\n systemInstruction,\n tools,\n });\n\n vertexRequest = {\n contents: this.toVertexContents(request.messages, request.model),\n systemInstruction,\n tools,\n generationConfig: {\n ...(resolved.thinkingConfig\n ? { thinkingConfig: resolved.thinkingConfig }\n : {}),\n ...this.toGenerationConfig(request),\n },\n };\n\n const response = await model.generateContent(vertexRequest);\n\n return {\n status: 200,\n body: response.response as unknown as JsonValue,\n headers: {},\n requestBody: vertexRequest as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex invocation failed\");\n const status = toVertexProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (vertexRequest as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n private async invokeMaaS(\n request: Request,\n config: VertexConfig,\n model: string,\n location: string,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n try {\n const token = await this.getAccessToken(config);\n const host = this.resolveApiEndpoint(config, location, model);\n const baseURL = `https://${host}/v1/projects/${config.projectId}/locations/${location}/endpoints/openapi`;\n\n const client = new OpenAI({\n baseURL,\n apiKey: token,\n defaultHeaders: {\n \"X-Goog-User-Project\": config.projectId,\n },\n });\n\n payload = buildOpenAIPayload(request);\n // Ensure model is set correctly for MaaS\n payload.model = model;\n\n const response = await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n\n return {\n status: 200,\n body: response as unknown as JsonValue,\n headers: {},\n requestBody: payload as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex MaaS invocation failed\");\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (payload as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n if (request.model && MAAS_MODEL_PATTERN.test(request.model)) {\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n\n if (!payload.body || typeof payload.body !== \"object\") {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return this.vertexResponseToUlx(\n payload.body as Record<string, unknown>,\n request,\n );\n }\n\n private vertexResponseToUlx(\n body: Record<string, unknown>,\n request: Request,\n ): Response {\n const candidates =\n (body.candidates as Array<Record<string, unknown>>) ?? [];\n const candidate = candidates[0];\n\n if (!candidate) {\n if (body.usageMetadata) {\n const usage = body.usageMetadata as {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n };\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n usage: {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n },\n };\n }\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Vertex response missing candidates\",\n code: \"invalid_response\",\n },\n };\n }\n\n const content =\n (candidate.content as { parts?: Array<Record<string, unknown>> })\n ?.parts ?? [];\n const messageBlocks: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n let toolCallIndex = 0;\n\n for (const part of content) {\n const text = part?.text;\n const isThought = part?.thought === true;\n const functionCall = part?.functionCall as\n | { name?: string; args?: unknown }\n | undefined;\n const thoughtSignature =\n typeof part.thoughtSignature === \"string\"\n ? part.thoughtSignature\n : typeof part.thought_signature === \"string\"\n ? part.thought_signature\n : undefined;\n\n if (typeof text === \"string\") {\n if (isThought) {\n messageBlocks.push({\n type: \"reasoning\",\n text,\n data: thoughtSignature\n ? { signature: thoughtSignature }\n : undefined,\n });\n } else {\n messageBlocks.push({ type: \"text\", text });\n }\n }\n\n if (functionCall?.name) {\n const id = `call_${request.id}_${toolCallIndex++}`;\n toolCalls.push({\n id,\n type: \"function\",\n name: functionCall.name,\n arguments: safeJsonString(functionCall.args ?? {}),\n });\n\n if (thoughtSignature) {\n this.getSignatureCache().store(id, thoughtSignature);\n }\n }\n }\n\n const usage = body.usageMetadata as\n | {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n }\n | undefined;\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n finish_reason:\n (candidate.finishReason as string | undefined) ?? undefined,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks,\n tool_calls: toolCalls.length ? toolCalls : undefined,\n status:\n candidate.finishReason === \"MAX_TOKENS\"\n ? \"incomplete\"\n : \"completed\",\n },\n ],\n usage: usage\n ? {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n }\n\n private toGenerationConfig(\n request: Request,\n ): GenerateContentRequest[\"generationConfig\"] {\n const config: GenerateContentRequest[\"generationConfig\"] = {};\n if (typeof request.parameters.temperature === \"number\")\n config.temperature = request.parameters.temperature;\n if (typeof request.parameters.top_p === \"number\")\n config.topP = request.parameters.top_p;\n if (typeof request.parameters.max_tokens === \"number\")\n config.maxOutputTokens = request.parameters.max_tokens;\n if (typeof request.parameters.top_k === \"number\")\n config.topK = request.parameters.top_k;\n if (request.parameters.thinking_config)\n (config as unknown as Record<string, unknown>).thinkingConfig =\n request.parameters.thinking_config;\n return config;\n }\n\n private buildSystemInstruction(system?: string[]): Content | undefined {\n if (!system?.length) return undefined;\n return {\n role: \"system\",\n parts: [{ text: system.join(\"\\n\") }],\n };\n }\n\n private extractSystemParts(request: Request): string[] | undefined {\n const parts: string[] = [];\n if (request.system?.length) parts.push(...request.system);\n for (const message of request.messages) {\n if (message.role !== \"system\" && message.role !== \"developer\") continue;\n const text = ulxContentToText(message.content);\n if (text) parts.push(text);\n }\n return parts.length ? parts : undefined;\n }\n\n private toVertexContents(\n messages: Request[\"messages\"],\n model?: string,\n ): Content[] {\n const toolNamesByCallId = new Map<string, string>();\n for (const message of messages) {\n if (message.role !== \"assistant\" || !message.tool_calls?.length) continue;\n for (const call of message.tool_calls) {\n if (call.id && call.name) toolNamesByCallId.set(call.id, call.name);\n }\n }\n\n const shouldAttachThoughtSignatures = this.requiresThoughtSignatures(model);\n\n const contents: Content[] = [];\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.role === \"system\" || message.role === \"developer\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n let parts = this.toVertexParts(message.content);\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length) {\n const toolCallParts = toolCalls.map((call, index) => {\n const part: Record<string, unknown> = {\n functionCall: {\n name: call.name,\n args: safeJsonParseObject(call.arguments),\n },\n };\n\n if (shouldAttachThoughtSignatures && index === 0) {\n const cached = this.getSignatureCache().retrieve(call.id);\n if (cached) {\n part.thoughtSignature = cached;\n } else {\n logger.warn(\n { tool_call_id: call.id, tool: call.name, model },\n \"Missing thought signature; using skip_thought_signature_validator\",\n );\n part.thoughtSignature = \"skip_thought_signature_validator\";\n }\n }\n\n return part as unknown as Part;\n });\n\n if (\n parts.length === 1 &&\n (parts[0] as { text?: string }).text === \"\"\n ) {\n parts = [];\n }\n parts = [...parts, ...toolCallParts];\n }\n\n contents.push({ role: \"model\", parts });\n\n if (toolCalls.length) {\n const callIds = new Set(toolCalls.map((call) => call.id));\n const outputByCallId = new Map<string, string>();\n\n let j = i + 1;\n while (j < messages.length) {\n const next = messages[j];\n if (next.role !== \"tool\") break;\n\n const toolCallId = next.tool_call_id;\n if (typeof toolCallId !== \"string\" || !toolCallId) break;\n if (!callIds.has(toolCallId)) break;\n\n const prev = outputByCallId.get(toolCallId) ?? \"\";\n outputByCallId.set(\n toolCallId,\n prev + ulxContentToText(next.content),\n );\n j++;\n }\n\n if (outputByCallId.size) {\n const responseParts: Part[] = toolCalls\n .filter((call) => outputByCallId.has(call.id))\n .map((call) => {\n const rawOutput = outputByCallId.get(call.id) ?? \"\";\n const parsedOutput = safeJsonParseObject(rawOutput);\n return {\n functionResponse: {\n name: call.name,\n response: {\n name: call.name,\n content: parsedOutput,\n },\n },\n } as unknown as Part;\n });\n\n if (responseParts.length) {\n contents.push({ role: \"user\", parts: responseParts });\n i = j - 1;\n }\n }\n }\n\n continue;\n }\n\n if (message.role === \"tool\") {\n const toolCallId = message.tool_call_id;\n const toolName =\n typeof toolCallId === \"string\" && toolCallId.length\n ? toolNamesByCallId.get(toolCallId)\n : undefined;\n\n if (toolName) {\n const rawOutput = ulxContentToText(message.content);\n const parsedOutput = safeJsonParseObject(rawOutput);\n\n contents.push({\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: parsedOutput,\n },\n },\n } as unknown as Part,\n ],\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n }\n\n return contents;\n }\n\n private toVertexParts(blocks: ContentBlock[]): Part[] {\n if (!blocks.length) return [{ text: \"\" }];\n return blocks.map((block) => {\n if (block.type === \"text\") return { text: block.text ?? \"\" } as Part;\n if (block.type === \"json\")\n return { text: JSON.stringify(block.data) } as Part;\n if (block.type === \"image_url\") {\n return {\n fileData: {\n mimeType: block.mime ?? \"application/octet-stream\",\n fileUri: block.url ?? \"\",\n },\n } as Part;\n }\n return { text: block.text ?? \"\" } as Part;\n });\n }\n\n private toVertexTools(tools?: Tool[]): VertexTool[] | undefined {\n if (!tools?.length) return undefined;\n\n function flattenJsonSchema(schema: JsonValue): JsonValue | undefined {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema)) {\n return schema;\n }\n\n const obj = { ...schema } as JsonObject;\n const definitions = obj.definitions as\n | Record<string, JsonValue>\n | undefined;\n\n delete obj.definitions;\n\n function resolveRef(\n target: JsonValue | undefined,\n path: string[],\n ): JsonValue | undefined {\n if (!target || typeof target !== \"object\" || Array.isArray(target)) {\n return target;\n }\n\n const copy = { ...(target as JsonObject) };\n\n for (const key in copy) {\n const value = copy[key];\n\n if (\n key === \"$ref\" &&\n typeof value === \"string\" &&\n value.startsWith(\"#/definitions/\")\n ) {\n const defName = value.slice(14);\n const definition = definitions?.[defName];\n\n if (definition) {\n delete copy.$ref;\n const resolved = resolveRef(definition, [...path, defName]);\n\n if (\n resolved &&\n typeof resolved === \"object\" &&\n !Array.isArray(resolved)\n ) {\n Object.assign(copy, resolved);\n }\n }\n } else if (key === \"$ref\" && typeof value === \"string\") {\n delete copy.$ref;\n } else {\n copy[key] = resolveRef(value, path);\n }\n }\n\n return copy;\n }\n\n return resolveRef(obj, []);\n }\n\n return [\n {\n functionDeclarations: tools.map((tool) => {\n let parameters = tool.parameters as unknown as JsonValue;\n if (\n parameters &&\n typeof parameters === \"object\" &&\n !Array.isArray(parameters)\n ) {\n parameters = flattenJsonSchema(parameters) as JsonValue;\n }\n\n return {\n name: tool.name,\n description: tool.description,\n parameters: parameters as unknown as FunctionDeclarationSchema,\n } as FunctionDeclaration;\n }),\n },\n ] as VertexTool[];\n }\n\n private normalizeModelId(model?: string): string | undefined {\n if (!model) return undefined;\n if (model.includes(\"gemini\") && !model.includes(\"/\")) {\n return `google/${model}`;\n }\n return model;\n }\n\n private resolveModelResource(\n model: string,\n project: string,\n location: string,\n ): string {\n if (model.startsWith(\"projects/\") || model.startsWith(\"models/\")) {\n return model;\n }\n\n if (model.includes(\"/\")) {\n if (model.startsWith(\"publishers/\")) {\n return `projects/${project}/locations/${location}/${model}`;\n }\n\n const parts = model.split(\"/\");\n if (parts.length === 2) {\n const [publisher, modelName] = parts;\n return `projects/${project}/locations/${location}/publishers/${publisher}/models/${modelName}`;\n }\n }\n\n return model;\n }\n\n private resolveLocation(\n model: string | undefined,\n configured: string,\n ): string {\n if (model && (model.includes(\"google/\") || model.includes(\"gemini\"))) {\n return \"global\";\n }\n return configured;\n }\n\n private resolveApiEndpoint(\n config: VertexConfig,\n location: string,\n model?: string,\n ): string | undefined {\n if (config.endpointOverride) {\n try {\n return new URL(config.endpointOverride).host || config.endpointOverride;\n } catch {\n return config.endpointOverride;\n }\n }\n\n if (location === \"global\") {\n return \"aiplatform.googleapis.com\";\n }\n\n if (model && MAAS_MODEL_PATTERN.test(model)) {\n return \"aiplatform.googleapis.com\";\n }\n\n return `${location}-aiplatform.googleapis.com`;\n }\n}\n\nexport interface VertexConfig {\n projectId: string;\n location: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n\nexport interface VertexModelConfig {\n projectId?: string;\n location?: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n",
24
24
  "import { Database } from \"bun:sqlite\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport { logger } from \"../utils/logger.js\";\n\nexport interface CachedSignature {\n tool_call_id: string;\n signature: string;\n timestamp: number;\n}\n\nexport class SignatureCache {\n private db: Database;\n private memoryCache = new Map<string, CachedSignature>();\n private dbPath: string;\n\n constructor(cacheDir?: string) {\n // Determine cache directory\n const dir =\n cacheDir ||\n process.env.CACHE_DIR ||\n path.join(os.homedir(), \".cache\", \"gemini-proxy\");\n\n // Create directory if it doesn't exist\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n this.dbPath = path.join(dir, \"signatures.db\");\n this.db = new Database(this.dbPath, { create: true, strict: true });\n\n // Initialize database schema\n this.initSchema();\n\n // Run periodic cleanup\n this.scheduleCleanup();\n }\n\n private initSchema(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS signatures (\n tool_call_id TEXT PRIMARY KEY,\n signature TEXT NOT NULL,\n timestamp DATETIME DEFAULT CURRENT_TIMESTAMP\n );\n CREATE INDEX IF NOT EXISTS idx_signatures_timestamp ON signatures(timestamp);\n `);\n }\n\n private scheduleCleanup(): void {\n // Run cleanup periodically (every 100 operations)\n const timer = setInterval(() => {\n try {\n this.cleanup();\n } catch (err) {\n logger.error({ err }, \"Failed to cleanup signature cache\");\n }\n }, 60000); // Check every minute\n timer.unref?.();\n }\n\n store(toolCallId: string, signature: string): void {\n const cached: CachedSignature = {\n tool_call_id: toolCallId,\n signature,\n timestamp: Date.now(),\n };\n\n // Update memory cache\n this.memoryCache.set(toolCallId, cached);\n\n // Write to database\n try {\n this.db\n .prepare(\n \"INSERT OR REPLACE INTO signatures (tool_call_id, signature, timestamp) VALUES (?, ?, ?)\",\n )\n .run(toolCallId, signature, Math.floor(Date.now() / 1000));\n } catch (error) {\n logger.error(\n { err: error, toolCallId },\n \"Failed to store signature in database\",\n );\n }\n }\n\n retrieve(toolCallId: string): string | null {\n // Check memory cache first (fast path)\n const cached = this.memoryCache.get(toolCallId);\n if (cached) {\n return cached.signature;\n }\n\n // Fallback to database\n try {\n const row = this.db\n .prepare(\"SELECT signature FROM signatures WHERE tool_call_id = ?\")\n .get(toolCallId) as { signature: string } | undefined;\n\n if (row) {\n // Update memory cache\n const cached: CachedSignature = {\n tool_call_id: toolCallId,\n signature: row.signature,\n timestamp: Date.now(),\n };\n this.memoryCache.set(toolCallId, cached);\n return row.signature;\n }\n } catch (error) {\n logger.error(\n { err: error, toolCallId },\n \"Failed to retrieve signature from database\",\n );\n }\n\n return null;\n }\n\n batchRetrieve(toolCallIds: string[]): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Check memory cache first\n for (const id of toolCallIds) {\n const cached = this.memoryCache.get(id);\n if (cached) {\n result[id] = cached.signature;\n }\n }\n\n // Get remaining IDs from database\n const remainingIds = toolCallIds.filter((id) => !result[id]);\n if (remainingIds.length === 0) {\n return result;\n }\n\n try {\n const placeholders = remainingIds.map(() => \"?\").join(\",\");\n const rows = this.db\n .prepare(\n `SELECT tool_call_id, signature FROM signatures WHERE tool_call_id IN (${placeholders})`,\n )\n .all(...remainingIds) as Array<{\n tool_call_id: string;\n signature: string;\n }>;\n\n // Update memory cache and result\n for (const row of rows) {\n result[row.tool_call_id] = row.signature;\n this.memoryCache.set(row.tool_call_id, {\n tool_call_id: row.tool_call_id,\n signature: row.signature,\n timestamp: Date.now(),\n });\n }\n } catch (error) {\n logger.error(\n { err: error, toolCallIds: remainingIds },\n \"Failed to batch retrieve signatures from database\",\n );\n }\n\n return result;\n }\n\n cleanup(daysOld: number = 30): void {\n try {\n const cutoff = Math.floor(\n (Date.now() - daysOld * 24 * 60 * 60 * 1000) / 1000,\n );\n\n // Delete old signatures\n const info = this.db\n .prepare(\"DELETE FROM signatures WHERE timestamp < ?\")\n .run(cutoff);\n\n if (info.changes && info.changes > 0) {\n logger.info({ deleted: info.changes }, \"Cleaned up old signatures\");\n\n // Clean up memory cache\n const cutoffTime = Date.now() - daysOld * 24 * 60 * 60 * 1000;\n for (const [id, cached] of this.memoryCache.entries()) {\n if (cached.timestamp < cutoffTime) {\n this.memoryCache.delete(id);\n }\n }\n }\n } catch (error) {\n logger.error({ err: error }, \"Failed to cleanup signatures\");\n }\n }\n\n close(): void {\n this.db.close();\n }\n}\n",
25
25
  "import {\n Transform,\n TransformContext,\n ContentBlock as ContentBlock,\n ToolCall as ToolCall,\n OutputBlock,\n type Message,\n type Response,\n} from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n buildBaseInstruction,\n buildFinalAnswerRequirementInstruction,\n buildReminderInstruction,\n createTerminationToolDefinition,\n getEnsureToolCallState,\n getMessagesSinceLastUser,\n type EnsureToolCallState,\n} from \"./ensureToolCall.js\";\nimport { requestRetry, requestSyntheticResponse } from \"./pipelineControl.js\";\nimport { logger } from \"../utils/logger.js\";\n\nfunction normalizeContentBlocks(blocks: ContentBlock[]): ContentBlock[] {\n return blocks\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text ?? \"\" } as ContentBlock;\n }\n if (block.type === \"image_url\") {\n return block.url ? block : undefined;\n }\n if (block.type === \"json\") {\n return { type: \"json\", data: block.data } as ContentBlock;\n }\n return block;\n })\n .filter(Boolean) as ContentBlock[];\n}\n\nexport class NormalizeTransform implements Transform {\n name = \"normalize\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 0;\n\n applies(): boolean {\n return true;\n }\n\n transform(context: TransformContext): void {\n context.request.messages = context.request.messages.map((message) => ({\n ...message,\n content: normalizeContentBlocks(message.content ?? []),\n }));\n\n if (context.request.tools && !context.request.tools.length) {\n context.request.tools = undefined;\n }\n }\n}\n\nfunction normalizeToolCallArguments(\n toolCalls: ToolCall[] | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n if (!call.name) {\n continue;\n }\n normalized.push({\n ...call,\n id: call.id || call.name,\n arguments: safeJsonString(call.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction inferFinishReason(blocks: OutputBlock[]): string | undefined {\n const message = blocks.find((block) => block.type === \"message\");\n if (message && message.type === \"message\") {\n if (message.tool_calls?.length) return \"tool_calls\";\n return message.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n return undefined;\n}\n\nexport class NormalizeResponseTransform implements Transform {\n name = \"normalize-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 0;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n\n response.output = response.output.map((block) => {\n if (block.type === \"message\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n tool_calls: normalizeToolCallArguments(block.tool_calls),\n status:\n block.status ??\n (response.finish_reason === \"length\" ? \"incomplete\" : \"completed\"),\n };\n }\n if (block.type === \"reasoning\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n summary: normalizeContentBlocks(block.summary ?? []),\n };\n }\n return block;\n });\n\n if (!response.finish_reason) {\n response.finish_reason = inferFinishReason(response.output);\n }\n }\n}\n\nexport class PropagateFinishReasonsTransform implements Transform {\n name = \"propagate-finish-reasons\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n const messageBlock = response.output.find(\n (entry) => entry.type === \"message\",\n );\n if (!response.finish_reason && messageBlock?.type === \"message\") {\n response.finish_reason =\n messageBlock.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n }\n}\n\nexport class EnsureToolCallRequestTransform implements Transform {\n name = \"ensure-tool-call-request\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n if (!ensureState) return;\n\n if (this.shouldSkipEnforcement(context.request.messages, context.request)) {\n logger.debug(\n { requestId: context.request.id },\n \"EnsureToolCall skipped: termination pattern detected\",\n );\n return;\n }\n\n this.ensureToolRegistration(context, ensureState);\n const reminderAttached = this.ensureInstructionMessages(\n context.request.messages,\n ensureState,\n );\n\n if (reminderAttached) {\n logger.info(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"EnsureToolCall reminder appended to request\",\n );\n }\n }\n\n private ensureToolRegistration(\n context: TransformContext,\n state: EnsureToolCallState,\n ) {\n const existing = context.request.tools ? [...context.request.tools] : [];\n const termination = state.terminationToolName.toLowerCase();\n const hasTerminationTool = existing.some(\n (tool) => tool.name.toLowerCase() === termination,\n );\n if (!hasTerminationTool) {\n existing.push(createTerminationToolDefinition(state.terminationToolName));\n }\n context.request.tools = existing;\n }\n\n private ensureInstructionMessages(\n messages: Message[],\n state: EnsureToolCallState,\n ): boolean {\n const baseInstruction = buildBaseInstruction(state.terminationToolName);\n this.attachInstruction(messages, baseInstruction);\n\n let reminderAttached = false;\n if (state.pendingReminder) {\n const reminder = state.finalAnswerRequired\n ? buildFinalAnswerRequirementInstruction(state.terminationToolName)\n : buildReminderInstruction(state.terminationToolName);\n\n state.finalAnswerRequired = false;\n state.reminderCount += 1;\n state.pendingReminder = false;\n\n this.attachInstruction(messages, reminder);\n if (state.reminderHistory) {\n state.reminderHistory.push(reminder);\n } else {\n state.reminderHistory = [reminder];\n }\n\n reminderAttached = true;\n }\n\n return reminderAttached;\n }\n\n private attachInstruction(messages: Message[], content: string) {\n const systemMessage = messages.find((entry) => entry.role === \"system\") as\n | Message\n | undefined;\n\n if (systemMessage) {\n const combinedText = (systemMessage.content ?? [])\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\");\n\n if (combinedText.includes(content)) {\n return;\n }\n\n const blocks = systemMessage.content ?? (systemMessage.content = []);\n for (let i = blocks.length - 1; i >= 0; i--) {\n if (blocks[i]?.type === \"text\") {\n blocks[i] = {\n ...blocks[i],\n text: `${blocks[i].text ?? \"\"}\\n\\n${content}`,\n };\n return;\n }\n }\n\n blocks.push({ type: \"text\", text: content });\n return;\n }\n\n messages.unshift({\n role: \"system\",\n content: [{ type: \"text\", text: content }],\n tool_calls: undefined,\n });\n }\n\n private shouldSkipEnforcement(\n messages: Message[] | undefined,\n request: TransformContext[\"request\"],\n ): boolean {\n if (!Array.isArray(messages) || messages.length < 2) return false;\n\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length === 0) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected prior assistant termination; requesting synthetic response\",\n );\n return true;\n }\n\n if (\n toolCalls.length === 1 &&\n this.checkTerminationHeuristic(message, toolCalls[0], request)\n ) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected TodoWrite termination heuristic; requesting synthetic response\",\n );\n return true;\n }\n }\n\n return false;\n }\n\n private checkTerminationHeuristic(\n message: Message,\n toolCall: ToolCall,\n request: TransformContext[\"request\"],\n ): boolean {\n // Only apply heuristic to models with \"kimi\" in their name\n if (!request.model.toLowerCase().includes(\"kimi\")) {\n return false;\n }\n\n if (!hasCaseInsensitiveTerminationKeywords(message.content)) {\n return false;\n }\n\n return toolCall.name.toLowerCase() === \"todowrite\";\n }\n}\n\nfunction hasCaseInsensitiveTerminationKeywords(content: ContentBlock[]) {\n return content.some(\n (entry) =>\n entry.type === \"text\" && /summary|changes/i.test(entry.text ?? \"\"),\n );\n}\n\nexport class EnsureToolCallResponseTransform implements Transform {\n name = \"ensure-tool-call-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 50;\n\n applies(context: TransformContext): boolean {\n if (!context.response) return false;\n if (context.response.error) return false;\n if (context.response.metadata?.synthetic === true) return false;\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n const response = context.response;\n if (!ensureState || !response) return;\n\n if (this.checkTerminationHeuristic(response, context.request)) {\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id },\n \"EnsureToolCall satisfied by TodoWrite + keyword heuristics\",\n );\n return;\n }\n\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted message block; scheduling retry\",\n );\n return;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length === 0) {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted tool calls; scheduling retry\",\n );\n return;\n }\n\n const hasPreviousContent = this.hasMeaningfulAssistantContent(\n context.request.messages,\n );\n const hasCurrentContent = hasMeaningfulNonReasoningContent(\n messageBlock.content,\n );\n const hasContent = hasPreviousContent || hasCurrentContent;\n\n const remaining: typeof toolCalls = [];\n for (const toolCall of toolCalls) {\n if (this.isTerminationTool(toolCall.name, ensureState)) {\n const finalAnswer = extractFinalAnswer(toolCall.arguments);\n\n if (!hasContent && !finalAnswer) {\n ensureState.pendingReminder = true;\n ensureState.finalAnswerRequired = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Termination tool called without final_answer; scheduling retry\",\n );\n return;\n }\n\n if (!hasContent && finalAnswer) {\n messageBlock.content = [{ type: \"text\", text: finalAnswer }];\n } else if (hasContent && finalAnswer) {\n messageBlock.content.push({ type: \"text\", text: finalAnswer });\n }\n\n continue;\n }\n\n remaining.push(toolCall);\n }\n\n messageBlock.tool_calls = remaining.length ? remaining : undefined;\n\n const sawOnlyTermination =\n toolCalls.length > 0 && (messageBlock.tool_calls?.length ?? 0) === 0;\n if (\n sawOnlyTermination &&\n !hasMeaningfulNonReasoningContent(messageBlock.content)\n ) {\n messageBlock.content = [];\n response.output = response.output.filter(\n (block) => block.type !== \"reasoning\",\n );\n }\n\n if (\n (messageBlock.tool_calls?.length ?? 0) === 0 &&\n response.finish_reason === \"tool_calls\"\n ) {\n response.finish_reason = \"stop\";\n }\n\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id, observedToolCalls: toolCalls.length },\n \"EnsureToolCall satisfied by provider response\",\n );\n }\n\n private hasMeaningfulAssistantContent(messages: Message[]): boolean {\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n if (hasMeaningfulNonReasoningContent(message.content)) {\n return true;\n }\n }\n return false;\n }\n\n private checkTerminationHeuristic(\n response: Response,\n request: TransformContext[\"request\"],\n ): boolean {\n // Only apply heuristic to models with \"kimi\" in their name\n if (!request.model.toLowerCase().includes(\"kimi\")) {\n return false;\n }\n\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") return false;\n\n if (!hasCaseInsensitiveTerminationKeywords(messageBlock.content)) {\n return false;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length !== 1) return false;\n\n return toolCalls[0].name.toLowerCase() === \"todowrite\";\n }\n\n private isTerminationTool(\n toolName: string,\n state: EnsureToolCallState,\n ): boolean {\n const normalized = toolName.toLowerCase();\n if (normalized === state.terminationToolName.toLowerCase()) return true;\n if (normalized === \"final\") return true;\n return /^(call_*)?[0-9]+$/.test(normalized);\n }\n}\n\nfunction hasMeaningfulNonReasoningContent(content: ContentBlock[]): boolean {\n if (!content.length) return false;\n for (const entry of content) {\n if (entry.type === \"reasoning\") continue;\n if (entry.type === \"text\") {\n if ((entry.text ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"image_url\") {\n if ((entry.url ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"json\") {\n if (entry.data !== undefined && entry.data !== null) return true;\n continue;\n }\n return true;\n }\n return false;\n}\n\nfunction extractFinalAnswer(argumentsJson: string | undefined): string | null {\n if (!argumentsJson) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(argumentsJson);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n\n let args = parsed as Record<string, unknown>;\n if (\n typeof args.raw === \"object\" &&\n args.raw !== null &&\n !Array.isArray(args.raw)\n ) {\n args = args.raw as Record<string, unknown>;\n }\n\n const argName = /final[_-\\s]?answer|final|answer|summary/i;\n for (const [key, value] of Object.entries(args)) {\n if (!argName.test(key)) continue;\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (trimmed) return trimmed;\n }\n\n return null;\n}\n",
26
26
  "export type LoadBalancingStrategy =\n | \"first\"\n | \"round_robin\"\n | \"random\"\n | \"weighted_random\";\n\nexport interface ModelDefinition {\n name: string;\n provider: string;\n upstreamModel: string;\n weight?: number;\n strategy?: LoadBalancingStrategy;\n ensureToolCall?: boolean;\n /**\n * Profile identifier for alias routing.\n * When specified, this model can be accessed via the profile prefix in the URL.\n * Models without a profile are available globally.\n */\n profile?: string;\n /**\n * Provider-specific configuration (e.g., api_key, base_url, routing params)\n * Supports environment variable substitution with $ prefix (e.g., \"$API_KEY\")\n * Each provider defines its own typed interface (OpenAIModelConfig, OpenRouterModelConfig, etc.)\n * and validates this configuration during invocation.\n */\n providerConfig?: Record<string, unknown>;\n}\n\nexport interface ModelVariant extends ModelDefinition {\n weight: number;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ResolvedModelRoute {\n name: string;\n provider: string;\n upstreamModel: string;\n weight: number;\n strategy: LoadBalancingStrategy;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ModelSummary {\n name: string;\n strategy: LoadBalancingStrategy;\n variants: ModelVariant[];\n}\n\nexport class ModelRegistry {\n private readonly groups = new Map<string, ModelVariant[]>();\n private readonly roundRobinIndices = new Map<string, number>();\n private readonly summaries: ModelSummary[];\n\n constructor(\n definitions: ModelDefinition[],\n private readonly defaultStrategy: LoadBalancingStrategy = \"first\",\n ) {\n if (!definitions.length) {\n throw new Error(\"Model registry requires at least one model definition\");\n }\n\n for (const def of definitions) {\n const entry: ModelVariant = {\n ...def,\n weight:\n typeof def.weight === \"number\" && def.weight > 0 ? def.weight : 1,\n ensureToolCall: Boolean(def.ensureToolCall),\n };\n const list = this.groups.get(def.name) ?? [];\n list.push(entry);\n this.groups.set(def.name, list);\n }\n\n this.summaries = Array.from(this.groups.entries()).map(\n ([name, variants]) => ({\n name,\n strategy: this.resolveStrategy(variants),\n variants,\n }),\n );\n }\n\n resolve(modelName: string, profile?: string): ModelVariant {\n let variants = this.groups\n .get(modelName)\n ?.filter((v) => !v.profile || v.profile === profile);\n\n if (variants && variants.length > 0 && profile) {\n const filtered = variants.filter((v) => v.profile === profile);\n if (filtered.length > 0) {\n variants = filtered;\n }\n }\n\n if (!variants || variants.length === 0) {\n throw new Error(\n `Model \"${modelName}\" is not configured${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n\n const strategy = this.resolveStrategy(variants);\n let selectedVariant: ModelVariant | undefined;\n switch (strategy) {\n case \"round_robin\":\n selectedVariant = this.pickRoundRobin(modelName, variants);\n break;\n case \"random\":\n selectedVariant = variants[Math.floor(Math.random() * variants.length)];\n break;\n case \"weighted_random\":\n selectedVariant = this.pickWeighted(variants);\n break;\n case \"first\":\n default:\n selectedVariant = variants[0];\n break;\n }\n\n if (!selectedVariant) {\n throw new Error(\n `Failed to select variant for model \"${modelName}\"${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n return selectedVariant;\n }\n\n list(): ModelSummary[] {\n return this.summaries.map((summary) => ({\n name: summary.name,\n strategy: summary.strategy,\n variants: summary.variants.map((variant) => ({ ...variant })),\n }));\n }\n\n listRoutes(): ResolvedModelRoute[] {\n const routes: ResolvedModelRoute[] = [];\n for (const [name, variants] of this.groups.entries()) {\n const strategy = this.resolveStrategy(variants);\n for (const variant of variants) {\n routes.push({\n name,\n provider: variant.provider,\n upstreamModel: variant.upstreamModel,\n weight: variant.weight,\n strategy: variant.strategy ?? strategy,\n ensureToolCall: Boolean(variant.ensureToolCall),\n profile: variant.profile,\n });\n }\n }\n return routes;\n }\n\n private resolveStrategy(variants: ModelVariant[]): LoadBalancingStrategy {\n const explicit = variants.find((variant) => variant.strategy)?.strategy;\n return explicit ?? this.defaultStrategy;\n }\n\n private pickRoundRobin(\n modelName: string,\n variants: ModelVariant[],\n ): ModelVariant {\n const current = this.roundRobinIndices.get(modelName) ?? 0;\n const next = (current + 1) % variants.length;\n this.roundRobinIndices.set(modelName, next);\n return variants[current];\n }\n\n private pickWeighted(variants: ModelVariant[]): ModelVariant {\n const total = variants.reduce((sum, variant) => sum + variant.weight, 0);\n const needle = Math.random() * total;\n let cumulative = 0;\n for (const variant of variants) {\n cumulative += variant.weight;\n if (needle < cumulative) {\n return variant;\n }\n }\n return variants[variants.length - 1];\n }\n}\n",
@@ -31,7 +31,7 @@
31
31
  "import crypto from \"node:crypto\";\nimport { mkdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { makeAdapter } from \"@livestore/adapter-node\";\nimport {\n Schema,\n State,\n createStorePromise,\n defineEvent,\n defineMaterializer,\n makeSchema,\n type Store,\n} from \"@livestore/livestore\";\nimport type { HybridLogMetadata } from \"../persistence/hybridLogStore.js\";\n\nexport interface LiveLogDoc {\n id: string;\n numeric_id: number;\n request_id: string;\n timestamp: string;\n method: string;\n url: string;\n status_code: number;\n model: string | null;\n provider: string | null;\n profile: string | null;\n summary: string | null;\n}\n\nconst logsTable = State.SQLite.table({\n name: \"logs\",\n columns: {\n id: State.SQLite.text({ primaryKey: true }),\n numeric_id: State.SQLite.integer({}),\n request_id: State.SQLite.text({}),\n timestamp: State.SQLite.text({}),\n method: State.SQLite.text({}),\n url: State.SQLite.text({}),\n status_code: State.SQLite.integer({}),\n model: State.SQLite.text({ nullable: true }),\n provider: State.SQLite.text({ nullable: true }),\n profile: State.SQLite.text({ nullable: true }),\n summary: State.SQLite.text({ nullable: true }),\n },\n indexes: [\n { name: \"logs_timestamp\", columns: [\"timestamp\"] },\n { name: \"logs_status\", columns: [\"status_code\"] },\n { name: \"logs_model\", columns: [\"model\"] },\n ],\n});\n\nconst logUpserted = defineEvent({\n name: \"logs/upserted\",\n schema: Schema.Struct({\n id: Schema.String,\n numeric_id: Schema.Number,\n request_id: Schema.String,\n timestamp: Schema.String,\n method: Schema.String,\n url: Schema.String,\n status_code: Schema.Number,\n model: Schema.NullOr(Schema.String),\n provider: Schema.NullOr(Schema.String),\n profile: Schema.NullOr(Schema.String),\n summary: Schema.NullOr(Schema.String),\n }),\n});\n\nconst logUpsertedMaterializer = defineMaterializer(\n logUpserted,\n (event): { sql: string; bindValues: Record<string, unknown> } => ({\n sql: `\n INSERT OR REPLACE INTO logs (\n id,\n numeric_id,\n request_id,\n timestamp,\n method,\n url,\n status_code,\n model,\n provider,\n profile,\n summary\n ) VALUES (\n $id,\n $numeric_id,\n $request_id,\n $timestamp,\n $method,\n $url,\n $status_code,\n $model,\n $provider,\n $profile,\n $summary\n )\n `,\n bindValues: {\n id: event.id,\n numeric_id: event.numeric_id,\n request_id: event.request_id,\n timestamp: event.timestamp,\n method: event.method,\n url: event.url,\n status_code: event.status_code,\n model: event.model,\n provider: event.provider,\n profile: event.profile,\n summary: event.summary,\n },\n }),\n);\n\nconst state = State.SQLite.makeState({\n tables: [logsTable],\n materializers: {\n [logUpserted.name]: logUpsertedMaterializer,\n },\n});\n\nconst schema = makeSchema({\n state,\n events: [logUpserted],\n});\n\nexport interface LiveStoreRuntime {\n store: Store<typeof schema>;\n mirrorLog(log: HybridLogMetadata): Promise<void>;\n seedFromHybrid(\n logStore: {\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): { items: HybridLogMetadata[] };\n },\n options?: { batchSize?: number },\n ): Promise<number>;\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): Promise<LiveLogDoc[]>;\n latestCheckpoint(): Promise<{ timestamp: string; id: number } | undefined>;\n close(): Promise<void>;\n}\n\nfunction toLiveDoc(log: HybridLogMetadata): LiveLogDoc {\n return {\n id: String(log.id ?? log.request_id ?? crypto.randomUUID()),\n numeric_id: Number(log.id ?? 0),\n request_id: log.request_id,\n timestamp: log.timestamp,\n method: log.method,\n url: log.url,\n status_code: log.status_code,\n model: log.model ?? null,\n provider: log.provider ?? null,\n profile: log.profile ?? null,\n summary: log.summary ?? null,\n };\n}\n\nexport async function createLiveStoreRuntime(options: {\n storageDir: string;\n storeId?: string;\n}): Promise<LiveStoreRuntime> {\n const baseDir = path.resolve(options.storageDir);\n await mkdir(baseDir, { recursive: true });\n\n const adapter = makeAdapter({\n storage: { type: \"fs\", baseDirectory: baseDir },\n });\n\n const store = await createStorePromise({\n schema,\n adapter,\n storeId: options.storeId ?? \"logs\",\n });\n\n return {\n store,\n async mirrorLog(log: HybridLogMetadata) {\n store.commit(logUpserted(toLiveDoc(log)));\n },\n async seedFromHybrid(logStore, options = {}) {\n const batchSize = options.batchSize ?? 500;\n let checkpoint: { timestamp?: string; id?: number } = {};\n let total = 0;\n\n // Seed in small batches to avoid blocking the event loop during startup\n // and to keep LiveStore refresh work manageable.\n while (true) {\n const { items } = logStore.pullSince(checkpoint, batchSize);\n if (!items.length) break;\n\n store.commit(\n { skipRefresh: true },\n ...items.map((item) => logUpserted(toLiveDoc(item))),\n );\n store.manualRefresh({ label: \"seed-from-hybrid\" });\n\n checkpoint = {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.id,\n };\n total += items.length;\n }\n\n return total;\n },\n async pullSince(checkpoint, limit) {\n const clauses: string[] = [];\n const params: Record<string, string | number | null> = { limit };\n if (checkpoint.timestamp) {\n clauses.push(\n \"(timestamp > $ts OR (timestamp = $ts AND numeric_id > $id))\",\n );\n params.ts = checkpoint.timestamp;\n params.id = checkpoint.id ?? 0;\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const rows = store.query<LiveLogDoc[]>({\n query: `\n SELECT * FROM logs\n ${where}\n ORDER BY timestamp, numeric_id\n LIMIT $limit\n `,\n bindValues: params,\n });\n return rows;\n },\n async latestCheckpoint() {\n const rows = store.query<\n Array<{ timestamp: string; numeric_id: number }>\n >({\n query: `\n SELECT timestamp, numeric_id FROM logs\n ORDER BY timestamp DESC, numeric_id DESC\n LIMIT 1\n `,\n bindValues: {},\n });\n const latest = rows[0];\n if (!latest) return undefined;\n return { timestamp: latest.timestamp, id: latest.numeric_id };\n },\n async close() {\n await store.shutdown();\n },\n };\n}\n",
32
32
  "import { loadConfig } from \"./config.js\";\nimport { createServer } from \"./server.js\";\nimport { logger } from \"./utils/logger.js\";\n\nasync function bootstrap() {\n try {\n const config = loadConfig();\n const server = await createServer(config);\n await server.listen({ port: config.server.port, host: config.server.host });\n logger.info(\n `LLM proxy listening on ${config.server.host}:${config.server.port}`,\n );\n } catch (error) {\n logger.error({ err: error }, \"Failed to bootstrap server\");\n process.exit(1);\n }\n}\n\nbootstrap();\n"
33
33
  ],
34
- "mappings": "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",
35
- "debugId": "49E2D016D6E3465664756E2164756E21",
34
+ "mappings": "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",
35
+ "debugId": "58CB00416A249CAB64756E2164756E21",
36
36
  "names": []
37
37
  }