@amux.ai/adapter-openai 0.1.1
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.cjs +1546 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +390 -0
- package/dist/index.d.ts +390 -0
- package/dist/index.js +1543 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/inbound/error-parser.ts","../src/inbound/request-parser.ts","../src/inbound/response-parser.ts","../src/inbound/stream-parser.ts","../src/outbound/request-builder.ts","../src/outbound/response-builder.ts","../src/outbound/stream-builder.ts","../src/adapter.ts","../src/responses/request-parser.ts","../src/responses/response-parser.ts","../src/responses/stream-parser.ts","../src/responses/request-builder.ts","../src/responses/response-builder.ts","../src/responses/stream-builder.ts","../src/responses-adapter.ts"],"names":["mapFinishReason","parseToolChoice","parseContent","buildContent"],"mappings":"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","file":"index.js","sourcesContent":["import { parseOpenAICompatibleError } from '@amux.ai/llm-bridge'\nimport type { LLMErrorIR } from '@amux.ai/llm-bridge'\n\n/**\n * Parse OpenAI error to IR\n */\nexport function parseError(error: unknown): LLMErrorIR {\n return parseOpenAICompatibleError(error)\n}\n","import type {\n LLMRequestIR,\n Message,\n Tool,\n ToolChoice,\n ContentPart,\n TextContent,\n ImageContent,\n} from '@amux.ai/llm-bridge'\n\nimport type { OpenAIRequest, OpenAIMessage, OpenAITool, OpenAIContentPart } from '../types'\n\n/**\n * Parse OpenAI request to IR\n */\nexport function parseRequest(request: unknown): LLMRequestIR {\n const req = request as OpenAIRequest\n\n // Extract system message if present\n let system: string | undefined\n const messages: Message[] = []\n\n for (const msg of req.messages) {\n if (msg.role === 'system') {\n // Collect system messages\n if (typeof msg.content === 'string') {\n system = system ? `${system}\\n${msg.content}` : msg.content\n }\n } else {\n messages.push(parseMessage(msg))\n }\n }\n\n // Parse tools\n const tools: Tool[] | undefined = req.tools?.map((tool) => parseTool(tool))\n\n // Parse tool choice\n const toolChoice: ToolChoice | undefined = req.tool_choice\n ? parseToolChoice(req.tool_choice)\n : undefined\n\n return {\n messages,\n model: req.model,\n tools,\n toolChoice,\n stream: req.stream,\n system,\n generation: {\n temperature: req.temperature,\n topP: req.top_p,\n maxTokens: req.max_tokens ?? req.max_completion_tokens,\n stopSequences: req.stop\n ? Array.isArray(req.stop)\n ? req.stop\n : [req.stop]\n : undefined,\n presencePenalty: req.presence_penalty,\n frequencyPenalty: req.frequency_penalty,\n n: req.n,\n seed: req.seed,\n responseFormat: req.response_format\n ? {\n type: req.response_format.type,\n jsonSchema: req.response_format.json_schema,\n }\n : undefined,\n logprobs: req.logprobs,\n topLogprobs: req.top_logprobs,\n },\n metadata: {\n userId: req.user,\n },\n raw: request,\n }\n}\n\nfunction parseMessage(msg: OpenAIMessage): Message {\n return {\n role: msg.role,\n content: parseContent(msg.content),\n name: msg.name,\n toolCalls: msg.tool_calls,\n toolCallId: msg.tool_call_id,\n }\n}\n\nfunction parseContent(\n content: string | OpenAIContentPart[] | null | undefined\n): string | ContentPart[] {\n if (content === null || content === undefined) {\n return ''\n }\n\n if (typeof content === 'string') {\n return content\n }\n\n // Parse multimodal content\n return content.map((part): ContentPart => {\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n } as TextContent\n }\n\n if (part.type === 'image_url') {\n const url = part.image_url.url\n\n // Check if it's a base64 data URL\n if (url.startsWith('data:')) {\n const match = url.match(/^data:([^;]+);base64,(.+)$/)\n if (match) {\n return {\n type: 'image',\n source: {\n type: 'base64',\n mediaType: match[1],\n data: match[2],\n },\n } as ImageContent\n }\n }\n\n // Regular URL\n return {\n type: 'image',\n source: {\n type: 'url',\n url: url,\n },\n } as ImageContent\n }\n\n // Fallback for unknown types\n return {\n type: 'text',\n text: JSON.stringify(part),\n } as TextContent\n })\n}\n\nfunction parseTool(tool: OpenAITool): Tool {\n return {\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n strict: tool.function.strict,\n },\n }\n}\n\nfunction parseToolChoice(\n choice: 'auto' | 'none' | 'required' | { type: 'function'; function: { name: string } }\n): ToolChoice {\n if (typeof choice === 'string') {\n return choice as ToolChoice\n }\n return {\n type: 'function',\n function: {\n name: choice.function.name,\n },\n }\n}\n","import type { LLMResponseIR, Choice, Role } from '@amux.ai/llm-bridge'\nimport { mapFinishReason, parseOpenAIUsage } from '@amux.ai/llm-bridge'\n\nimport type { OpenAIResponse } from '../types'\n\n/**\n * Parse OpenAI response to IR\n */\nexport function parseResponse(response: unknown): LLMResponseIR {\n const res = response as OpenAIResponse\n\n const choices: Choice[] = res.choices.map((choice) => ({\n index: choice.index,\n message: {\n role: choice.message.role as Role,\n content: choice.message.content ?? '',\n toolCalls: choice.message.tool_calls,\n },\n finishReason: mapFinishReason(choice.finish_reason),\n logprobs: choice.logprobs,\n }))\n\n return {\n id: res.id,\n model: res.model,\n choices,\n created: res.created,\n systemFingerprint: res.system_fingerprint,\n usage: parseOpenAIUsage(res.usage),\n raw: response,\n }\n}\n","import type { LLMStreamEvent, FinishReason } from '@amux.ai/llm-bridge'\n\nimport type { OpenAIStreamChunk } from '../types'\n\n/**\n * Map OpenAI finish reason to IR finish reason\n */\nfunction mapFinishReason(reason: string): FinishReason {\n const reasonMap: Record<string, FinishReason> = {\n stop: 'stop',\n length: 'length',\n tool_calls: 'tool_calls',\n content_filter: 'content_filter',\n function_call: 'tool_calls',\n }\n return reasonMap[reason] ?? 'stop'\n}\n\n/**\n * Parse OpenAI stream chunk to IR stream event\n */\nexport function parseStream(\n chunk: unknown\n): LLMStreamEvent | LLMStreamEvent[] | null {\n const data = chunk as OpenAIStreamChunk\n\n if (!data.choices || data.choices.length === 0) {\n // Check for usage-only chunk (sent at the end when stream_options.include_usage is true)\n if (data.usage) {\n return {\n type: 'end',\n id: data.id,\n model: data.model,\n usage: {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens,\n details: data.usage.completion_tokens_details\n ? {\n reasoningTokens: data.usage.completion_tokens_details.reasoning_tokens,\n }\n : undefined,\n },\n raw: chunk,\n }\n }\n return null\n }\n\n const choice = data.choices[0]\n if (!choice) {\n return null\n }\n const delta = choice.delta\n\n // Start event (first chunk with role)\n if (delta.role && !delta.content && !delta.tool_calls) {\n return {\n type: 'start',\n id: data.id,\n model: data.model,\n raw: chunk,\n }\n }\n\n // Content delta\n if (delta.content) {\n return {\n type: 'content',\n id: data.id,\n model: data.model,\n content: {\n type: 'content',\n delta: delta.content,\n index: choice.index,\n },\n raw: chunk,\n }\n }\n\n // Tool call delta\n if (delta.tool_calls && delta.tool_calls.length > 0) {\n const toolCall = delta.tool_calls[0]\n if (toolCall) {\n return {\n type: 'tool_call',\n id: data.id,\n model: data.model,\n toolCall: {\n type: 'tool_call',\n id: toolCall.id,\n name: toolCall.function?.name,\n arguments: toolCall.function?.arguments,\n index: toolCall.index,\n },\n raw: chunk,\n }\n }\n }\n\n // End event\n if (choice.finish_reason) {\n return {\n type: 'end',\n id: data.id,\n model: data.model,\n finishReason: mapFinishReason(choice.finish_reason),\n usage: data.usage\n ? {\n promptTokens: data.usage.prompt_tokens,\n completionTokens: data.usage.completion_tokens,\n totalTokens: data.usage.total_tokens,\n details: data.usage.completion_tokens_details\n ? {\n reasoningTokens: data.usage.completion_tokens_details.reasoning_tokens,\n }\n : undefined,\n }\n : undefined,\n raw: chunk,\n }\n }\n\n return null\n}\n","import type { LLMRequestIR, ContentPart, ImageContent } from '@amux.ai/llm-bridge'\n\nimport type { OpenAIRequest, OpenAIMessage, OpenAIContentPart } from '../types'\n\n/**\n * Build OpenAI request from IR\n */\nexport function buildRequest(ir: LLMRequestIR): OpenAIRequest {\n const messages: OpenAIMessage[] = []\n\n // Add system message if present\n if (ir.system) {\n messages.push({\n role: 'system',\n content: ir.system,\n })\n }\n\n // Add conversation messages\n for (const msg of ir.messages) {\n messages.push({\n role: msg.role,\n content: buildContent(msg.content),\n name: msg.name,\n tool_calls: msg.toolCalls,\n tool_call_id: msg.toolCallId,\n })\n }\n\n const request: OpenAIRequest = {\n model: ir.model ?? 'gpt-4',\n messages,\n stream: ir.stream,\n }\n\n // Add tools if present\n if (ir.tools && ir.tools.length > 0) {\n request.tools = ir.tools.map((tool) => ({\n type: 'function',\n function: {\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n strict: tool.function.strict,\n },\n }))\n }\n\n // Add tool choice if present\n if (ir.toolChoice) {\n request.tool_choice = ir.toolChoice\n }\n\n // Add generation parameters\n if (ir.generation) {\n if (ir.generation.temperature !== undefined) {\n request.temperature = ir.generation.temperature\n }\n if (ir.generation.topP !== undefined) {\n request.top_p = ir.generation.topP\n }\n if (ir.generation.maxTokens !== undefined) {\n request.max_tokens = ir.generation.maxTokens\n }\n if (ir.generation.stopSequences && ir.generation.stopSequences.length > 0) {\n request.stop = ir.generation.stopSequences\n }\n if (ir.generation.presencePenalty !== undefined) {\n request.presence_penalty = ir.generation.presencePenalty\n }\n if (ir.generation.frequencyPenalty !== undefined) {\n request.frequency_penalty = ir.generation.frequencyPenalty\n }\n if (ir.generation.n !== undefined) {\n request.n = ir.generation.n\n }\n if (ir.generation.seed !== undefined) {\n request.seed = ir.generation.seed\n }\n if (ir.generation.responseFormat) {\n request.response_format = {\n type: ir.generation.responseFormat.type,\n json_schema: ir.generation.responseFormat.jsonSchema,\n }\n }\n if (ir.generation.logprobs !== undefined) {\n request.logprobs = ir.generation.logprobs\n }\n if (ir.generation.topLogprobs !== undefined) {\n request.top_logprobs = ir.generation.topLogprobs\n }\n }\n\n // Add user ID if present\n if (ir.metadata?.userId) {\n request.user = ir.metadata.userId as string\n }\n\n // Add stream options for usage in streaming\n if (ir.stream) {\n request.stream_options = { include_usage: true }\n }\n\n return request\n}\n\nfunction buildContent(\n content: string | ContentPart[]\n): string | OpenAIContentPart[] | null {\n if (typeof content === 'string') {\n return content || null\n }\n\n if (!content || content.length === 0) {\n return null\n }\n\n // Check if all parts are text - if so, concatenate them\n const allText = content.every((part) => part.type === 'text')\n if (allText) {\n return content\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('')\n }\n\n // Build multimodal content\n return content.map((part): OpenAIContentPart => {\n if (part.type === 'text') {\n return { type: 'text', text: part.text }\n }\n\n if (part.type === 'image') {\n const imgPart = part as ImageContent\n if (imgPart.source.type === 'url') {\n return {\n type: 'image_url',\n image_url: { url: imgPart.source.url },\n }\n }\n // Base64 image\n return {\n type: 'image_url',\n image_url: {\n url: `data:${imgPart.source.mediaType};base64,${imgPart.source.data}`,\n },\n }\n }\n\n // Fallback for other types\n return { type: 'text', text: JSON.stringify(part) }\n })\n}\n","import type { LLMResponseIR } from '@amux.ai/llm-bridge'\nimport { contentToString } from '@amux.ai/llm-bridge'\n\nimport type { OpenAIResponse } from '../types'\n\n/**\n * Build OpenAI response from IR\n */\nexport function buildResponse(ir: LLMResponseIR): OpenAIResponse {\n return {\n id: ir.id,\n object: 'chat.completion',\n created: ir.created ?? Math.floor(Date.now() / 1000),\n model: ir.model,\n system_fingerprint: ir.systemFingerprint,\n choices: ir.choices.map((choice) => ({\n index: choice.index,\n message: {\n role: choice.message.role,\n content: contentToString(choice.message.content),\n tool_calls: choice.message.toolCalls,\n },\n finish_reason: choice.finishReason ?? 'stop',\n logprobs: choice.logprobs,\n })),\n usage: ir.usage\n ? {\n prompt_tokens: ir.usage.promptTokens,\n completion_tokens: ir.usage.completionTokens,\n total_tokens: ir.usage.totalTokens,\n completion_tokens_details: ir.usage.details?.reasoningTokens\n ? {\n reasoning_tokens: ir.usage.details.reasoningTokens,\n }\n : undefined,\n }\n : undefined,\n }\n}\n","import type { LLMStreamEvent, SSEEvent, StreamEventBuilder } from '@amux.ai/llm-bridge'\n\n/**\n * OpenAI stream event builder\n * Converts IR stream events to OpenAI SSE format\n *\n * OpenAI uses a simpler SSE format compared to Anthropic:\n * - All events use \"data:\" prefix (no event type)\n * - Each chunk contains the full delta structure\n * - Stream ends with \"data: [DONE]\"\n */\nexport function createStreamBuilder(): StreamEventBuilder {\n let chunkId = `chatcmpl-${Date.now()}`\n let model = ''\n const created = Math.floor(Date.now() / 1000)\n const toolCallsState: Map<number, { id: string; name: string }> = new Map()\n\n return {\n process(event: LLMStreamEvent): SSEEvent[] {\n const events: SSEEvent[] = []\n\n // Update metadata from event\n if (event.id) chunkId = event.id\n if (event.model) model = event.model\n\n // Handle start event\n if (event.type === 'start') {\n // OpenAI doesn't have a separate start event\n // The first content chunk serves as the start\n events.push({\n event: 'data',\n data: {\n id: chunkId,\n object: 'chat.completion.chunk',\n created,\n model,\n choices: [{\n index: 0,\n delta: { role: 'assistant', content: '' },\n finish_reason: null,\n }],\n },\n })\n }\n\n // Handle content delta\n if (event.type === 'content' && event.content?.delta) {\n events.push({\n event: 'data',\n data: {\n id: chunkId,\n object: 'chat.completion.chunk',\n created,\n model,\n choices: [{\n index: 0,\n delta: { content: event.content.delta },\n finish_reason: null,\n }],\n },\n })\n }\n\n // Handle reasoning delta (for models like o1)\n if (event.type === 'reasoning' && event.reasoning?.delta) {\n // OpenAI doesn't have a standard reasoning format in streaming\n // We'll include it as regular content for now\n events.push({\n event: 'data',\n data: {\n id: chunkId,\n object: 'chat.completion.chunk',\n created,\n model,\n choices: [{\n index: 0,\n delta: { content: event.reasoning.delta },\n finish_reason: null,\n }],\n },\n })\n }\n\n // Handle tool call\n if (event.type === 'tool_call' && event.toolCall) {\n const toolIndex = event.toolCall.index ?? 0\n const toolCallDelta: {\n index: number\n id?: string\n type?: string\n function?: { name?: string; arguments?: string }\n } = { index: toolIndex }\n\n // If this is a new tool call (has name)\n if (event.toolCall.name) {\n toolCallDelta.id = event.toolCall.id || `call_${Date.now()}_${toolIndex}`\n toolCallDelta.type = 'function'\n toolCallDelta.function = { name: event.toolCall.name }\n toolCallsState.set(toolIndex, {\n id: toolCallDelta.id,\n name: event.toolCall.name,\n })\n }\n\n // If this has arguments\n if (event.toolCall.arguments) {\n toolCallDelta.function = {\n ...toolCallDelta.function,\n arguments: event.toolCall.arguments,\n }\n }\n\n events.push({\n event: 'data',\n data: {\n id: chunkId,\n object: 'chat.completion.chunk',\n created,\n model,\n choices: [{\n index: 0,\n delta: { tool_calls: [toolCallDelta] },\n finish_reason: null,\n }],\n },\n })\n }\n\n // Handle end event\n if (event.type === 'end') {\n const finishReason = mapFinishReason(event.finishReason)\n\n // Emit final chunk with finish_reason\n const finalChunk: {\n id: string\n object: string\n created: number\n model: string\n choices: Array<{\n index: number\n delta: Record<string, never>\n finish_reason: string\n }>\n usage?: {\n prompt_tokens: number\n completion_tokens: number\n total_tokens: number\n }\n } = {\n id: chunkId,\n object: 'chat.completion.chunk',\n created,\n model,\n choices: [{\n index: 0,\n delta: {},\n finish_reason: finishReason,\n }],\n }\n\n // Include usage if available\n if (event.usage) {\n finalChunk.usage = {\n prompt_tokens: event.usage.promptTokens ?? 0,\n completion_tokens: event.usage.completionTokens ?? 0,\n total_tokens: event.usage.totalTokens ?? 0,\n }\n }\n\n events.push({ event: 'data', data: finalChunk })\n }\n\n // Handle error event\n if (event.type === 'error' && event.error) {\n events.push({\n event: 'data',\n data: {\n error: {\n message: event.error.message,\n type: 'server_error',\n code: event.error.code,\n },\n },\n })\n }\n\n return events\n },\n\n finalize(): SSEEvent[] {\n // OpenAI streams end with [DONE]\n return [{ event: 'data', data: '[DONE]' }]\n },\n }\n}\n\n/**\n * Map IR finish reason to OpenAI finish reason\n */\nfunction mapFinishReason(reason?: string): string {\n if (!reason) return 'stop'\n\n const reasonMap: Record<string, string> = {\n stop: 'stop',\n length: 'length',\n tool_calls: 'tool_calls',\n content_filter: 'content_filter',\n end_turn: 'stop',\n max_tokens: 'length',\n }\n\n return reasonMap[reason] ?? 'stop'\n}\n","import type {\n LLMAdapter,\n LLMRequestIR,\n LLMResponseIR,\n LLMStreamEvent,\n LLMErrorIR,\n AdapterInfo,\n} from '@amux.ai/llm-bridge'\n\nimport { parseError } from './inbound/error-parser'\nimport { parseRequest } from './inbound/request-parser'\nimport { parseResponse } from './inbound/response-parser'\nimport { parseStream } from './inbound/stream-parser'\nimport { buildRequest } from './outbound/request-builder'\nimport { buildResponse } from './outbound/response-builder'\nimport { createStreamBuilder } from './outbound/stream-builder'\n\n/**\n * OpenAI adapter implementation\n * This adapter handles conversion between OpenAI API format and IR\n */\nexport const openaiAdapter: LLMAdapter = {\n name: 'openai',\n version: '1.0.0',\n capabilities: {\n streaming: true,\n tools: true,\n vision: true,\n multimodal: true,\n systemPrompt: true,\n toolChoice: true,\n reasoning: false,\n webSearch: false,\n jsonMode: true,\n logprobs: true,\n seed: true,\n },\n\n inbound: {\n parseRequest: (request: unknown): LLMRequestIR => {\n return parseRequest(request)\n },\n\n parseResponse: (response: unknown): LLMResponseIR => {\n return parseResponse(response)\n },\n\n parseStream: (chunk: unknown): LLMStreamEvent | LLMStreamEvent[] | null => {\n return parseStream(chunk)\n },\n\n parseError: (error: unknown): LLMErrorIR => {\n return parseError(error)\n },\n },\n\n outbound: {\n buildRequest: (ir: LLMRequestIR): unknown => {\n return buildRequest(ir)\n },\n\n buildResponse: (ir: LLMResponseIR): unknown => {\n return buildResponse(ir)\n },\n\n createStreamBuilder,\n },\n\n getInfo(): AdapterInfo {\n return {\n name: this.name,\n version: this.version,\n capabilities: this.capabilities,\n endpoint: {\n baseUrl: 'https://api.openai.com',\n chatPath: '/v1/chat/completions',\n modelsPath: '/v1/models',\n },\n }\n },\n}\n","import type {\n LLMRequestIR,\n Message,\n Tool,\n ToolChoice,\n ContentPart,\n TextContent,\n ImageContent,\n ResponseFormat,\n GenerationConfig,\n} from '@amux.ai/llm-bridge'\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesContentPart,\n ResponsesTool,\n} from '../types'\n\n/**\n * Parse Responses API request to IR\n */\nexport function parseResponsesRequest(request: unknown): LLMRequestIR {\n const req = request as ResponsesRequest\n\n // Extract system message from instructions\n let system = req.instructions\n\n // Parse input to messages\n const { messages, developerSystem } = parseInput(req.input)\n\n // Combine instructions and developer system messages\n if (developerSystem) {\n system = system ? `${system}\\n${developerSystem}` : developerSystem\n }\n\n // Parse tools\n const tools: Tool[] | undefined = req.tools\n ?.filter((tool): tool is ResponsesTool & { type: 'function' } => tool.type === 'function')\n .map((tool) => ({\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n strict: tool.strict,\n },\n }))\n\n // Parse tool choice\n const toolChoice: ToolChoice | undefined = req.tool_choice\n ? parseToolChoice(req.tool_choice)\n : undefined\n\n // Parse response format from text.format\n let responseFormat: ResponseFormat | undefined\n if (req.text?.format) {\n if (req.text.format.type === 'json_object') {\n responseFormat = { type: 'json_object' }\n } else if (req.text.format.type === 'json_schema' && req.text.format.json_schema) {\n responseFormat = {\n type: 'json_schema',\n jsonSchema: {\n name: req.text.format.json_schema.name,\n description: req.text.format.json_schema.description,\n schema: req.text.format.json_schema.schema,\n strict: req.text.format.json_schema.strict,\n }\n }\n }\n }\n\n // Build generation config with responseFormat\n const generation: GenerationConfig = {\n temperature: req.temperature,\n topP: req.top_p,\n maxTokens: req.max_output_tokens,\n responseFormat,\n }\n\n return {\n messages,\n model: req.model,\n tools: tools && tools.length > 0 ? tools : undefined,\n toolChoice,\n stream: req.stream,\n system,\n generation,\n metadata: {\n userId: req.user,\n ...(req.metadata || {}),\n },\n extensions: {\n responses: {\n truncation: req.truncation,\n store: req.store,\n reasoning: req.reasoning,\n previousResponseId: req.previous_response_id,\n parallelToolCalls: req.parallel_tool_calls,\n text: req.text,\n // Track built-in tools for outbound\n builtInTools: req.tools?.filter((t) => t.type !== 'function'),\n },\n },\n raw: request,\n }\n}\n\nfunction parseInput(input: string | ResponsesInputItem[]): { messages: Message[]; developerSystem?: string } {\n if (typeof input === 'string') {\n return {\n messages: [\n {\n role: 'user',\n content: input,\n },\n ],\n }\n }\n\n const messages: Message[] = []\n let developerSystem: string | undefined\n\n for (const item of input) {\n // Handle item_reference type\n if (item.type === 'item_reference') {\n continue\n }\n\n // Get role and content (works for both explicit type:'message' and shorthand format)\n const role = item.role\n const content = item.content\n\n // Handle system/developer messages - extract as system prompt\n if (role === 'system' || role === 'developer') {\n if (typeof content === 'string') {\n developerSystem = developerSystem ? `${developerSystem}\\n${content}` : content\n } else {\n // Extract text from content parts\n const text = content\n .filter((p) => p.type === 'input_text')\n .map((p) => (p as { type: 'input_text'; text: string }).text)\n .join('')\n developerSystem = developerSystem ? `${developerSystem}\\n${text}` : text\n }\n continue\n }\n\n // Handle user/assistant messages\n messages.push({\n role: role as 'user' | 'assistant',\n content: parseContent(content),\n })\n }\n\n return { messages, developerSystem }\n}\n\nfunction parseContent(content: string | ResponsesContentPart[]): string | ContentPart[] {\n if (typeof content === 'string') {\n return content\n }\n\n return content.map((part): ContentPart => {\n if (part.type === 'input_text') {\n return {\n type: 'text',\n text: part.text,\n } as TextContent\n }\n\n if (part.type === 'input_image') {\n // Check if it's a base64 data URL\n if (part.image_url.startsWith('data:')) {\n const match = part.image_url.match(/^data:([^;]+);base64,(.+)$/)\n if (match) {\n return {\n type: 'image',\n source: {\n type: 'base64',\n mediaType: match[1],\n data: match[2],\n },\n } as ImageContent\n }\n }\n\n return {\n type: 'image',\n source: {\n type: 'url',\n url: part.image_url,\n },\n } as ImageContent\n }\n\n // input_file - convert to text representation\n if (part.type === 'input_file') {\n return {\n type: 'text',\n text: `[File: ${part.file_id}]`,\n } as TextContent\n }\n\n // Fallback\n return {\n type: 'text',\n text: JSON.stringify(part),\n } as TextContent\n })\n}\n\nfunction parseToolChoice(\n choice: 'auto' | 'none' | 'required' | { type: 'function'; name: string }\n): ToolChoice {\n if (typeof choice === 'string') {\n return choice as ToolChoice\n }\n return {\n type: 'function',\n function: {\n name: choice.name,\n },\n }\n}\n","import type { LLMResponseIR, Choice, FinishReason, Role, ToolCall } from '@amux.ai/llm-bridge'\n\nimport type { ResponsesResponse, ResponsesOutputItem } from '../types'\n\n/**\n * Map Responses API status to IR finish reason\n */\nfunction mapFinishReason(status: string): FinishReason {\n const statusMap: Record<string, FinishReason> = {\n completed: 'stop',\n failed: 'stop',\n incomplete: 'length',\n in_progress: 'stop',\n }\n return statusMap[status] ?? 'stop'\n}\n\n/**\n * Parse Responses API response to IR\n */\nexport function parseResponsesResponse(response: unknown): LLMResponseIR {\n const res = response as ResponsesResponse\n\n // Extract content and tool calls from output\n const { content, toolCalls, reasoning } = extractOutputContent(res.output, res.output_text)\n\n const choices: Choice[] = [\n {\n index: 0,\n message: {\n role: 'assistant' as Role,\n content: content,\n toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\n reasoningContent: reasoning || undefined,\n },\n finishReason: mapFinishReason(res.status),\n },\n ]\n\n return {\n id: res.id,\n model: res.model,\n choices,\n created: res.created_at,\n usage: res.usage\n ? {\n promptTokens: res.usage.input_tokens,\n completionTokens: res.usage.output_tokens,\n totalTokens: res.usage.total_tokens,\n details: {\n ...(res.usage.output_tokens_details?.reasoning_tokens\n ? { reasoningTokens: res.usage.output_tokens_details.reasoning_tokens }\n : {}),\n ...(res.usage.input_tokens_details?.cached_tokens\n ? { cachedTokens: res.usage.input_tokens_details.cached_tokens }\n : {}),\n },\n }\n : undefined,\n raw: response,\n }\n}\n\nfunction extractOutputContent(output: ResponsesOutputItem[], outputText?: string): {\n content: string\n toolCalls: ToolCall[]\n reasoning: string | null\n} {\n let content = ''\n const toolCalls: ToolCall[] = []\n let reasoning: string | null = null\n\n // Use output_text shortcut if available and no complex output\n if (outputText && (!output || output.length === 0)) {\n return { content: outputText, toolCalls: [], reasoning: null }\n }\n\n for (const item of output) {\n if (item.type === 'message') {\n // Extract text content\n for (const part of item.content) {\n if (part.type === 'output_text') {\n content += part.text\n } else if (part.type === 'refusal') {\n content += `[Refusal: ${part.refusal}]`\n }\n }\n } else if (item.type === 'function_call') {\n toolCalls.push({\n id: item.call_id,\n type: 'function',\n function: {\n name: item.name,\n arguments: item.arguments,\n },\n })\n } else if (item.type === 'reasoning') {\n // Extract reasoning content from summary array\n const reasoningItem = item as { type: 'reasoning'; summary?: Array<{ type: string; text: string }>; content?: Array<{ type: string; text: string }> }\n if (reasoningItem.summary && reasoningItem.summary.length > 0) {\n reasoning = reasoningItem.summary\n .filter((s) => s.type === 'summary_text')\n .map((s) => s.text)\n .join('')\n } else if (reasoningItem.content && reasoningItem.content.length > 0) {\n // Fallback to content array for backwards compatibility\n reasoning = reasoningItem.content\n .filter((c) => c.type === 'reasoning_text')\n .map((c) => c.text)\n .join('')\n }\n }\n }\n\n // Fallback to output_text if no content extracted from output array\n if (!content && outputText) {\n content = outputText\n }\n\n return { content, toolCalls, reasoning }\n}\n","import type { LLMStreamEvent, FinishReason } from '@amux.ai/llm-bridge'\n\nimport type { ResponsesStreamEvent } from '../types'\n\n/**\n * Map Responses API status to IR finish reason\n */\nfunction mapFinishReason(status: string): FinishReason {\n const statusMap: Record<string, FinishReason> = {\n completed: 'stop',\n failed: 'stop',\n incomplete: 'length',\n }\n return statusMap[status] ?? 'stop'\n}\n\n/**\n * Parse Responses API stream event to IR stream event\n */\nexport function parseResponsesStream(\n chunk: unknown\n): LLMStreamEvent | LLMStreamEvent[] | null {\n const event = chunk as ResponsesStreamEvent\n\n switch (event.type) {\n case 'response.created':\n case 'response.in_progress':\n return {\n type: 'start',\n id: event.response?.id ?? '',\n model: event.response?.model ?? '',\n raw: chunk,\n }\n\n case 'response.output_text.delta':\n return {\n type: 'content',\n id: '',\n model: '',\n content: {\n type: 'content',\n delta: event.delta ?? '',\n index: event.output_index ?? 0,\n },\n raw: chunk,\n }\n\n case 'response.reasoning_summary_text.delta':\n return {\n type: 'reasoning',\n id: '',\n model: '',\n reasoning: {\n type: 'reasoning',\n delta: event.delta ?? '',\n },\n raw: chunk,\n }\n\n case 'response.function_call_arguments.delta':\n return {\n type: 'tool_call',\n id: '',\n model: '',\n toolCall: {\n type: 'tool_call',\n arguments: event.delta,\n index: event.output_index ?? 0,\n },\n raw: chunk,\n }\n\n case 'response.output_item.added':\n if (event.item?.type === 'function_call') {\n return {\n type: 'tool_call',\n id: '',\n model: '',\n toolCall: {\n type: 'tool_call',\n id: event.item.call_id,\n name: event.item.name,\n index: event.output_index ?? 0,\n },\n raw: chunk,\n }\n }\n return null\n\n case 'response.completed':\n case 'response.failed':\n case 'response.incomplete':\n return {\n type: 'end',\n id: event.response?.id ?? '',\n model: event.response?.model ?? '',\n finishReason: mapFinishReason(event.response?.status ?? 'completed'),\n usage: event.response?.usage\n ? {\n promptTokens: event.response.usage.input_tokens,\n completionTokens: event.response.usage.output_tokens,\n totalTokens: event.response.usage.total_tokens,\n details: event.response.usage.output_tokens_details?.reasoning_tokens\n ? {\n reasoningTokens: event.response.usage.output_tokens_details.reasoning_tokens,\n }\n : undefined,\n }\n : undefined,\n raw: chunk,\n }\n\n case 'error':\n return {\n type: 'error',\n id: '',\n model: '',\n error: {\n type: 'api',\n message: event.error?.message ?? 'Unknown error',\n code: event.error?.code,\n },\n raw: chunk,\n }\n\n default:\n return null\n }\n}\n","import type { LLMRequestIR, ContentPart, ImageContent } from '@amux.ai/llm-bridge'\n\nimport type {\n ResponsesRequest,\n ResponsesInputItem,\n ResponsesContentPart,\n ResponsesTool,\n ResponsesTextFormat,\n} from '../types'\n\n/**\n * Build Responses API request from IR\n */\nexport function buildResponsesRequest(ir: LLMRequestIR): ResponsesRequest {\n const input: ResponsesInputItem[] = []\n\n // Add conversation messages\n for (const msg of ir.messages) {\n if (msg.role === 'system') {\n // System messages go to instructions, skip here\n continue\n }\n\n input.push({\n type: 'message',\n role: msg.role as 'user' | 'assistant',\n content: buildContent(msg.content),\n })\n }\n\n const request: ResponsesRequest = {\n model: ir.model ?? 'gpt-5',\n input: input.length === 1 && input[0]?.type === 'message' && typeof input[0].content === 'string' && input[0].role === 'user'\n ? input[0].content // Simple string input for single user message\n : input,\n stream: ir.stream,\n }\n\n // Add instructions from system prompt\n if (ir.system) {\n request.instructions = ir.system\n }\n\n // Build tools\n const tools: ResponsesTool[] = []\n\n // Add function tools\n if (ir.tools && ir.tools.length > 0) {\n for (const tool of ir.tools) {\n tools.push({\n type: 'function',\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters,\n strict: tool.function.strict,\n })\n }\n }\n\n // Add built-in tools from extensions\n const responsesExt = ir.extensions?.responses as {\n builtInTools?: ResponsesTool[]\n truncation?: 'auto' | 'disabled'\n store?: boolean\n reasoning?: { effort?: 'low' | 'medium' | 'high'; summary?: 'auto' | 'concise' | 'detailed' }\n previousResponseId?: string\n parallelToolCalls?: boolean\n text?: ResponsesTextFormat\n } | undefined\n\n const builtInTools = responsesExt?.builtInTools\n if (builtInTools) {\n tools.push(...builtInTools)\n }\n\n if (tools.length > 0) {\n request.tools = tools\n }\n\n // Add tool choice\n if (ir.toolChoice) {\n if (typeof ir.toolChoice === 'string') {\n request.tool_choice = ir.toolChoice\n } else if (ir.toolChoice.type === 'function' && ir.toolChoice.function) {\n request.tool_choice = {\n type: 'function',\n name: ir.toolChoice.function.name,\n }\n }\n }\n\n // Add generation parameters\n if (ir.generation) {\n if (ir.generation.temperature !== undefined) {\n request.temperature = ir.generation.temperature\n }\n if (ir.generation.topP !== undefined) {\n request.top_p = ir.generation.topP\n }\n if (ir.generation.maxTokens !== undefined) {\n request.max_output_tokens = ir.generation.maxTokens\n }\n }\n\n // Add user ID\n if (ir.metadata?.userId) {\n request.user = ir.metadata.userId as string\n }\n\n // Add Responses API specific options from extensions\n if (responsesExt) {\n if (responsesExt.truncation !== undefined) {\n request.truncation = responsesExt.truncation\n }\n if (responsesExt.store !== undefined) {\n request.store = responsesExt.store\n }\n if (responsesExt.reasoning !== undefined) {\n request.reasoning = responsesExt.reasoning\n }\n if (responsesExt.previousResponseId !== undefined) {\n request.previous_response_id = responsesExt.previousResponseId\n }\n if (responsesExt.parallelToolCalls !== undefined) {\n request.parallel_tool_calls = responsesExt.parallelToolCalls\n }\n if (responsesExt.text !== undefined) {\n request.text = responsesExt.text\n }\n }\n\n // Handle JSON mode from IR generation.responseFormat\n if (ir.generation?.responseFormat) {\n if (ir.generation.responseFormat.type === 'json_object') {\n request.text = {\n format: { type: 'json_object' }\n }\n } else if (ir.generation.responseFormat.type === 'json_schema' && ir.generation.responseFormat.jsonSchema) {\n request.text = {\n format: {\n type: 'json_schema',\n json_schema: {\n name: ir.generation.responseFormat.jsonSchema.name,\n description: ir.generation.responseFormat.jsonSchema.description,\n schema: ir.generation.responseFormat.jsonSchema.schema as Record<string, unknown>,\n strict: ir.generation.responseFormat.jsonSchema.strict,\n }\n }\n }\n }\n }\n\n return request\n}\n\nfunction buildContent(content: string | ContentPart[]): string | ResponsesContentPart[] {\n if (typeof content === 'string') {\n return content\n }\n\n if (!content || content.length === 0) {\n return ''\n }\n\n // Check if all parts are text - if so, concatenate them\n const allText = content.every((part) => part.type === 'text')\n if (allText) {\n return content\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('')\n }\n\n // Build multimodal content\n return content.map((part): ResponsesContentPart => {\n if (part.type === 'text') {\n return { type: 'input_text', text: part.text }\n }\n\n if (part.type === 'image') {\n const imgPart = part as ImageContent\n if (imgPart.source.type === 'url') {\n return {\n type: 'input_image',\n image_url: imgPart.source.url,\n }\n }\n // Base64 image\n return {\n type: 'input_image',\n image_url: `data:${imgPart.source.mediaType};base64,${imgPart.source.data}`,\n }\n }\n\n // Fallback for other types\n return { type: 'input_text', text: JSON.stringify(part) }\n })\n}\n","import type { LLMResponseIR, ContentPart } from '@amux.ai/llm-bridge'\n\nimport type { ResponsesResponse, ResponsesOutputItem, ResponsesOutputContent } from '../types'\n\n/**\n * Convert content to appropriate format for Responses API\n */\nfunction contentToOutput(content: string | ContentPart[]): ResponsesOutputContent[] {\n if (typeof content === 'string') {\n return content ? [{ type: 'output_text', text: content }] : []\n }\n\n if (!content || content.length === 0) {\n return []\n }\n\n // Concatenate text parts\n const text = content\n .filter((part) => part.type === 'text')\n .map((part) => (part.type === 'text' ? part.text : ''))\n .join('')\n\n return text ? [{ type: 'output_text', text }] : []\n}\n\n/**\n * Build Responses API response from IR\n */\nexport function buildResponsesResponse(ir: LLMResponseIR): ResponsesResponse {\n const output: ResponsesOutputItem[] = []\n\n // Build message output from first choice\n const choice = ir.choices[0]\n if (choice) {\n // Add message content\n const messageContent = contentToOutput(choice.message.content)\n if (messageContent.length > 0) {\n output.push({\n type: 'message',\n id: `msg_${ir.id}`,\n role: 'assistant',\n content: messageContent,\n status: 'completed',\n })\n }\n\n // Add function calls\n if (choice.message.toolCalls) {\n for (const toolCall of choice.message.toolCalls) {\n output.push({\n type: 'function_call',\n id: `fc_${toolCall.id}`,\n call_id: toolCall.id,\n name: toolCall.function.name,\n arguments: toolCall.function.arguments,\n status: 'completed',\n })\n }\n }\n\n // Add reasoning if present (should be first in output array)\n if (choice.message.reasoningContent) {\n // Insert reasoning at the beginning of output array\n output.unshift({\n type: 'reasoning',\n id: `rs_${ir.id}`,\n content: [{ type: 'reasoning_text', text: choice.message.reasoningContent }],\n })\n }\n }\n\n return {\n id: ir.id,\n object: 'response',\n created_at: ir.created ?? Math.floor(Date.now() / 1000),\n model: ir.model,\n status: 'completed',\n output,\n usage: ir.usage\n ? {\n input_tokens: ir.usage.promptTokens,\n output_tokens: ir.usage.completionTokens,\n total_tokens: ir.usage.totalTokens,\n output_tokens_details: ir.usage.details?.reasoningTokens\n ? {\n reasoning_tokens: ir.usage.details.reasoningTokens,\n }\n : undefined,\n }\n : undefined,\n }\n}\n","import type { LLMStreamEvent, SSEEvent, StreamEventBuilder } from '@amux.ai/llm-bridge'\n\n/**\n * Create a stream builder for Responses API format\n * Converts IR stream events to OpenAI Responses API SSE format\n *\n * OpenAI Responses API streaming events require:\n * - item_id: identifier for the output item\n * - sequence_number: monotonically increasing number for event ordering\n *\n * For reasoning models (o1, o3, etc.), the output structure is:\n * - output[0]: reasoning item (type: \"reasoning\") with summary array\n * - output[1]: message item (type: \"message\") with content array\n *\n * Reasoning uses these events:\n * - response.reasoning_summary_part.added\n * - response.reasoning_summary_text.delta (with summary_index)\n * - response.reasoning_summary_text.done\n * - response.reasoning_summary_part.done\n */\nexport function createResponsesStreamBuilder(): StreamEventBuilder {\n let responseId = ''\n let model = ''\n let currentOutputIndex = -1\n let reasoningItemAdded = false // Track if we've added the reasoning output item\n let reasoningPartAdded = false // Track if we've added the reasoning summary part\n let messageItemAdded = false // Track if we've added the message output item\n let contentPartAdded = false // Track if we've added the text content part\n let accumulatedText = '' // Accumulate text content for final output\n let accumulatedReasoning = '' // Accumulate reasoning content\n let sequenceNumber = 0 // Sequence number for event ordering\n let reasoningItemId = '' // Reasoning item ID\n let messageItemId = '' // Message item ID\n\n /**\n * Get next sequence number\n */\n function nextSeq(): number {\n return sequenceNumber++\n }\n\n /**\n * Helper function to add reasoning output item if not already added\n */\n function ensureReasoningItemAdded(events: SSEEvent[]): void {\n if (!reasoningItemAdded) {\n reasoningItemAdded = true\n currentOutputIndex++\n reasoningItemId = `rs_${responseId || Date.now()}`\n events.push({\n event: 'response.output_item.added',\n data: {\n type: 'response.output_item.added',\n output_index: currentOutputIndex,\n item_id: reasoningItemId,\n sequence_number: nextSeq(),\n item: {\n type: 'reasoning',\n id: reasoningItemId,\n summary: [],\n status: 'in_progress',\n },\n },\n })\n }\n }\n\n /**\n * Helper function to add reasoning summary part if not already added\n */\n function ensureReasoningPartAdded(events: SSEEvent[]): void {\n if (!reasoningPartAdded) {\n reasoningPartAdded = true\n events.push({\n event: 'response.reasoning_summary_part.added',\n data: {\n type: 'response.reasoning_summary_part.added',\n item_id: reasoningItemId,\n output_index: currentOutputIndex,\n summary_index: 0,\n sequence_number: nextSeq(),\n part: {\n type: 'summary_text',\n text: '',\n },\n },\n })\n }\n }\n\n /**\n * Helper function to add message output item if not already added\n */\n function ensureMessageItemAdded(events: SSEEvent[]): void {\n if (!messageItemAdded) {\n messageItemAdded = true\n currentOutputIndex++\n messageItemId = `msg_${responseId || Date.now()}`\n events.push({\n event: 'response.output_item.added',\n data: {\n type: 'response.output_item.added',\n output_index: currentOutputIndex,\n item_id: messageItemId,\n sequence_number: nextSeq(),\n item: {\n type: 'message',\n id: messageItemId,\n role: 'assistant',\n content: [],\n status: 'in_progress',\n },\n },\n })\n }\n }\n\n /**\n * Helper function to add text content part if not already added\n */\n function ensureContentPartAdded(events: SSEEvent[]): void {\n if (!contentPartAdded) {\n contentPartAdded = true\n events.push({\n event: 'response.content_part.added',\n data: {\n type: 'response.content_part.added',\n output_index: currentOutputIndex,\n item_id: messageItemId,\n content_index: 0,\n sequence_number: nextSeq(),\n part: {\n type: 'output_text',\n text: '',\n },\n },\n })\n }\n }\n\n return {\n process(event: LLMStreamEvent): SSEEvent[] {\n const events: SSEEvent[] = []\n\n // Update metadata from event\n if (event.id) responseId = event.id || `resp_${Date.now()}`\n if (event.model) model = event.model || ''\n\n // Handle start event\n if (event.type === 'start') {\n events.push({\n event: 'response.created',\n data: {\n type: 'response.created',\n sequence_number: nextSeq(),\n response: {\n id: responseId,\n object: 'response',\n created_at: Math.floor(Date.now() / 1000),\n model,\n status: 'in_progress',\n output: [],\n },\n },\n })\n }\n\n // Handle reasoning delta (for reasoning models like DeepSeek-reasoner, o1, o3, etc.)\n // Reasoning is a separate output item with type \"reasoning\"\n if (event.type === 'reasoning' && event.reasoning?.delta) {\n ensureReasoningItemAdded(events)\n ensureReasoningPartAdded(events)\n accumulatedReasoning += event.reasoning.delta\n\n // Use response.reasoning_summary_text.delta with summary_index\n events.push({\n event: 'response.reasoning_summary_text.delta',\n data: {\n type: 'response.reasoning_summary_text.delta',\n item_id: reasoningItemId,\n output_index: 0, // Reasoning is always at output_index 0\n summary_index: 0,\n sequence_number: nextSeq(),\n delta: event.reasoning.delta,\n },\n })\n }\n\n // Handle content delta\n if (event.type === 'content' && event.content?.delta) {\n // Add message output item if not already added\n ensureMessageItemAdded(events)\n // Add content part if not already added\n ensureContentPartAdded(events)\n accumulatedText += event.content.delta\n events.push({\n event: 'response.output_text.delta',\n data: {\n type: 'response.output_text.delta',\n output_index: currentOutputIndex,\n item_id: messageItemId,\n content_index: 0,\n sequence_number: nextSeq(),\n delta: event.content.delta,\n },\n })\n }\n\n // Handle tool call\n if (event.type === 'tool_call' && event.toolCall) {\n // If this is a new tool call (has name), emit item added event\n if (event.toolCall.name) {\n currentOutputIndex++\n const toolItemId = `fc_${event.toolCall.id || currentOutputIndex}`\n events.push({\n event: 'response.output_item.added',\n data: {\n type: 'response.output_item.added',\n output_index: currentOutputIndex,\n item_id: toolItemId,\n sequence_number: nextSeq(),\n item: {\n type: 'function_call',\n id: toolItemId,\n call_id: event.toolCall.id || `call_${currentOutputIndex}`,\n name: event.toolCall.name,\n arguments: '',\n status: 'in_progress',\n },\n },\n })\n }\n\n // Arguments delta\n if (event.toolCall.arguments) {\n events.push({\n event: 'response.function_call_arguments.delta',\n data: {\n type: 'response.function_call_arguments.delta',\n output_index: currentOutputIndex,\n item_id: messageItemId,\n sequence_number: nextSeq(),\n delta: event.toolCall.arguments,\n },\n })\n }\n }\n\n // Handle end event\n if (event.type === 'end') {\n // Build the output array\n const output: Array<Record<string, unknown>> = []\n\n // Add reasoning output item if present\n if (reasoningItemAdded) {\n output.push({\n type: 'reasoning',\n id: reasoningItemId,\n summary: accumulatedReasoning\n ? [{ type: 'summary_text', text: accumulatedReasoning }]\n : [],\n status: 'completed',\n })\n\n // Emit done events for reasoning\n events.push({\n event: 'response.reasoning_summary_text.done',\n data: {\n type: 'response.reasoning_summary_text.done',\n item_id: reasoningItemId,\n output_index: 0,\n summary_index: 0,\n sequence_number: nextSeq(),\n text: accumulatedReasoning,\n },\n })\n\n events.push({\n event: 'response.reasoning_summary_part.done',\n data: {\n type: 'response.reasoning_summary_part.done',\n item_id: reasoningItemId,\n output_index: 0,\n summary_index: 0,\n sequence_number: nextSeq(),\n part: {\n type: 'summary_text',\n text: accumulatedReasoning,\n },\n },\n })\n\n events.push({\n event: 'response.output_item.done',\n data: {\n type: 'response.output_item.done',\n output_index: 0,\n item_id: reasoningItemId,\n sequence_number: nextSeq(),\n item: {\n type: 'reasoning',\n id: reasoningItemId,\n summary: [{ type: 'summary_text', text: accumulatedReasoning }],\n status: 'completed',\n },\n },\n })\n }\n\n // Add message output item if present\n if (messageItemAdded) {\n const messageOutputIndex = reasoningItemAdded ? 1 : 0\n output.push({\n type: 'message',\n id: messageItemId,\n role: 'assistant',\n content: accumulatedText\n ? [{ type: 'output_text', text: accumulatedText }]\n : [],\n status: 'completed',\n })\n\n // Emit done events for message content\n if (contentPartAdded) {\n events.push({\n event: 'response.output_text.done',\n data: {\n type: 'response.output_text.done',\n output_index: messageOutputIndex,\n item_id: messageItemId,\n content_index: 0,\n sequence_number: nextSeq(),\n text: accumulatedText,\n },\n })\n\n events.push({\n event: 'response.content_part.done',\n data: {\n type: 'response.content_part.done',\n output_index: messageOutputIndex,\n item_id: messageItemId,\n content_index: 0,\n sequence_number: nextSeq(),\n part: {\n type: 'output_text',\n text: accumulatedText,\n },\n },\n })\n }\n\n events.push({\n event: 'response.output_item.done',\n data: {\n type: 'response.output_item.done',\n output_index: messageOutputIndex,\n item_id: messageItemId,\n sequence_number: nextSeq(),\n item: {\n type: 'message',\n id: messageItemId,\n role: 'assistant',\n content: accumulatedText\n ? [{ type: 'output_text', text: accumulatedText }]\n : [],\n status: 'completed',\n },\n },\n })\n }\n\n // response.completed - marks the entire response as complete\n events.push({\n event: 'response.completed',\n data: {\n type: 'response.completed',\n sequence_number: nextSeq(),\n response: {\n id: responseId,\n object: 'response',\n created_at: Math.floor(Date.now() / 1000),\n model,\n status: 'completed',\n output,\n output_text: accumulatedText || undefined,\n usage: event.usage\n ? {\n input_tokens: event.usage.promptTokens,\n output_tokens: event.usage.completionTokens,\n total_tokens: event.usage.totalTokens,\n output_tokens_details: event.usage.details?.reasoningTokens\n ? {\n reasoning_tokens: event.usage.details.reasoningTokens,\n }\n : undefined,\n }\n : undefined,\n },\n },\n })\n }\n\n // Handle error event\n if (event.type === 'error' && event.error) {\n events.push({\n event: 'error',\n data: {\n type: 'error',\n sequence_number: nextSeq(),\n error: {\n type: 'api_error',\n code: event.error.code || 'unknown',\n message: event.error.message,\n },\n },\n })\n }\n\n return events\n },\n\n finalize(): SSEEvent[] {\n // Responses API doesn't use [DONE] marker\n return []\n },\n }\n}\n","import type {\n LLMAdapter,\n LLMRequestIR,\n LLMResponseIR,\n LLMStreamEvent,\n LLMErrorIR,\n AdapterInfo,\n} from '@amux.ai/llm-bridge'\n\nimport { parseError } from './inbound/error-parser'\nimport {\n parseResponsesRequest,\n parseResponsesResponse,\n parseResponsesStream,\n buildResponsesRequest,\n buildResponsesResponse,\n createResponsesStreamBuilder,\n} from './responses'\n\n/**\n * OpenAI Responses API adapter implementation\n * This adapter uses the new /v1/responses endpoint\n *\n * The Responses API is OpenAI's newer API that supports:\n * - Built-in tools (web search, code interpreter, file search)\n * - Agents and multi-turn conversations with state\n * - Enhanced streaming capabilities\n * - Reasoning models with thinking process\n * - Stateful context management via previous_response_id\n *\n * Key differences from Chat Completions API:\n * - Uses `input` instead of `messages`\n * - Uses `instructions` instead of system message\n * - Uses `max_output_tokens` instead of `max_tokens`\n * - Different response structure with `output` array\n * - Different streaming event format\n * - Uses `text.format` for JSON mode instead of `response_format`\n * - Supports `previous_response_id` for multi-turn state management\n */\nexport const openaiResponsesAdapter: LLMAdapter = {\n name: 'openai-responses',\n version: '1.0.0',\n capabilities: {\n streaming: true,\n tools: true,\n vision: true,\n multimodal: true,\n systemPrompt: true,\n toolChoice: true,\n reasoning: true, // Responses API supports reasoning models (o3, o4-mini)\n webSearch: true, // Built-in web search tool\n jsonMode: true, // Supported via text.format\n logprobs: false, // Not supported in Responses API\n seed: false, // Not supported in Responses API\n },\n\n inbound: {\n parseRequest: (request: unknown): LLMRequestIR => {\n return parseResponsesRequest(request)\n },\n\n parseResponse: (response: unknown): LLMResponseIR => {\n return parseResponsesResponse(response)\n },\n\n parseStream: (chunk: unknown): LLMStreamEvent | LLMStreamEvent[] | null => {\n return parseResponsesStream(chunk)\n },\n\n parseError: (error: unknown): LLMErrorIR => {\n return parseError(error)\n },\n },\n\n outbound: {\n buildRequest: (ir: LLMRequestIR): unknown => {\n return buildResponsesRequest(ir)\n },\n\n buildResponse: (ir: LLMResponseIR): unknown => {\n return buildResponsesResponse(ir)\n },\n\n createStreamBuilder: createResponsesStreamBuilder,\n },\n\n getInfo(): AdapterInfo {\n return {\n name: this.name,\n version: this.version,\n capabilities: this.capabilities,\n endpoint: {\n baseUrl: 'https://api.openai.com',\n chatPath: '/v1/responses',\n modelsPath: '/v1/models',\n },\n }\n },\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@amux.ai/adapter-openai",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "OpenAI adapter for Amux",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"amux",
|
|
7
|
+
"llm",
|
|
8
|
+
"openai",
|
|
9
|
+
"adapter"
|
|
10
|
+
],
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/isboyjc/amux.git",
|
|
14
|
+
"directory": "packages/adapter-openai"
|
|
15
|
+
},
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "isboyjc",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js",
|
|
23
|
+
"require": "./dist/index.cjs"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/index.cjs",
|
|
27
|
+
"module": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@amux.ai/llm-bridge": "0.2.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^20.11.5",
|
|
37
|
+
"tsup": "^8.0.1",
|
|
38
|
+
"typescript": "^5.3.3",
|
|
39
|
+
"vitest": "^1.2.1"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsup",
|
|
46
|
+
"dev": "tsup --watch",
|
|
47
|
+
"test": "vitest run",
|
|
48
|
+
"test:watch": "vitest",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"lint": "eslint src --ext .ts",
|
|
51
|
+
"clean": "rm -rf dist"
|
|
52
|
+
}
|
|
53
|
+
}
|