@absolutejs/absolute 0.19.0-beta.249 → 0.19.0-beta.250
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/.absolutejs/vue-tsc.tsbuildinfo +1 -1
- package/dist/ai/index.js +8 -20
- package/dist/ai/index.js.map +3 -3
- package/dist/ai/providers/openaiResponses.js +8 -20
- package/dist/ai/providers/openaiResponses.js.map +3 -3
- package/dist/src/ai/providers/openaiResponses.d.ts +0 -3
- package/package.json +1 -1
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ai/providers/openaiResponses.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type {\n\tAIChunk,\n\tAIProviderConfig,\n\tAIProviderContentBlock,\n\tAIProviderMessage,\n\tAIProviderStreamParams,\n\tAIProviderToolDefinition,\n\tAIUsage\n} from '../../../types/ai';\n\ntype OpenAIResponsesConfig = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\timageGeneration?: {\n\t\tpartialImages?: number;\n\t};\n};\n\ntype PendingFunctionCall = {\n\tcallId: string;\n\tname: string;\n\targuments: string;\n};\n\ntype StreamState = {\n\tbuffer: string;\n\tcurrentEvent: string;\n\tpendingCalls: Map<string, PendingFunctionCall>;\n\tusage: AIUsage | undefined;\n};\n\nconst DEFAULT_BASE_URL = 'https://api.openai.com';\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\n\nconst isRecordArray = (\n\tvalue: unknown\n): value is Array<Record<string, unknown>> =>\n\tArray.isArray(value) && value.length > 0 && isRecord(value[0]);\n\n/* ─── Message conversion ─── */\n\nconst mapContentToResponsesFormat = (\n\tcontent: string | AIProviderContentBlock[]\n): string | Array<Record<string, unknown>> => {\n\tif (typeof content === 'string') {\n\t\treturn content;\n\t}\n\n\tconst parts: Array<Record<string, unknown>> = [];\n\n\tfor (const block of content) {\n\t\tif (block.type === 'text') {\n\t\t\tparts.push({ text: block.content, type: 'input_text' });\n\t\t} else if (block.type === 'image') {\n\t\t\tparts.push({\n\t\t\t\timage_url: {\n\t\t\t\t\turl: `data:${block.source.media_type};base64,${block.source.data}`\n\t\t\t\t},\n\t\t\t\ttype: 'input_image'\n\t\t\t});\n\t\t} else if (block.type === 'document') {\n\t\t\tparts.push({\n\t\t\t\tfile: {\n\t\t\t\t\tfile_data: `data:${block.source.media_type};base64,${block.source.data}`,\n\t\t\t\t\tfilename: block.name ?? 'document.pdf'\n\t\t\t\t},\n\t\t\t\ttype: 'input_file'\n\t\t\t});\n\t\t}\n\t}\n\n\treturn parts.length > 0 ? parts : '';\n};\n\nconst hasToolBlocks = (content: AIProviderContentBlock[]) =>\n\tcontent.some(\n\t\t(block) => block.type === 'tool_use' || block.type === 'tool_result'\n\t);\n\nconst convertToolBlocks = (\n\tcontent: AIProviderContentBlock[]\n): Array<Record<string, unknown>> => {\n\tconst items: Array<Record<string, unknown>> = [];\n\n\tfor (const block of content) {\n\t\tif (block.type === 'tool_use') {\n\t\t\titems.push({\n\t\t\t\targuments:\n\t\t\t\t\ttypeof block.input === 'string'\n\t\t\t\t\t\t? block.input\n\t\t\t\t\t\t: JSON.stringify(block.input),\n\t\t\t\tcall_id: block.id,\n\t\t\t\tname: block.name,\n\t\t\t\ttype: 'function_call'\n\t\t\t});\n\t\t} else if (block.type === 'tool_result') {\n\t\t\titems.push({\n\t\t\t\tcall_id: block.tool_use_id,\n\t\t\t\toutput: typeof block.content === 'string' ? block.content : '',\n\t\t\t\ttype: 'function_call_output'\n\t\t\t});\n\t\t}\n\t}\n\n\treturn items;\n};\n\nconst convertMessage = (\n\tmsg: AIProviderMessage\n): Array<Record<string, unknown>> => {\n\tif (typeof msg.content !== 'string' && Array.isArray(msg.content)) {\n\t\tif (hasToolBlocks(msg.content)) {\n\t\t\treturn convertToolBlocks(msg.content);\n\t\t}\n\t}\n\n\tconst content = mapContentToResponsesFormat(msg.content);\n\n\treturn [\n\t\t{\n\t\t\tcontent,\n\t\t\trole: msg.role === 'system' ? 'developer' : msg.role,\n\t\t\ttype: 'message'\n\t\t}\n\t];\n};\n\nconst buildInput = (messages: AIProviderMessage[]) => {\n\tconst input: Array<Record<string, unknown>> = [];\n\n\tfor (const msg of messages) {\n\t\tinput.push(...convertMessage(msg));\n\t}\n\n\treturn input;\n};\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n\tdescription: tool.description,\n\tname: tool.name,\n\tparameters: tool.input_schema,\n\ttype: 'function'\n});\n\nconst buildTools = (\n\ttools: AIProviderToolDefinition[] | undefined,\n\timageGeneration: OpenAIResponsesConfig['imageGeneration']\n) => {\n\tconst result: Array<Record<string, unknown>> = [];\n\n\tif (tools) {\n\t\tfor (const tool of tools) {\n\t\t\tresult.push(mapToolDefinition(tool));\n\t\t}\n\t}\n\n\tif (imageGeneration) {\n\t\tconst imageGenTool: Record<string, unknown> = {\n\t\t\ttype: 'image_generation'\n\t\t};\n\n\t\tif (imageGeneration.partialImages !== undefined) {\n\t\t\timageGenTool.partial_images = imageGeneration.partialImages;\n\t\t}\n\n\t\tresult.push(imageGenTool);\n\t}\n\n\treturn result.length > 0 ? result : undefined;\n};\n\nconst buildRequestBody = (\n\tparams: AIProviderStreamParams,\n\timageGeneration: OpenAIResponsesConfig['imageGeneration']\n) => {\n\tconst body: Record<string, unknown> = {\n\t\tinput: buildInput(params.messages),\n\t\tmodel: params.model,\n\t\tstream: true\n\t};\n\n\tif (params.systemPrompt) {\n\t\tbody.instructions = params.systemPrompt;\n\t}\n\n\tconst tools = buildTools(params.tools, imageGeneration);\n\n\tif (tools) {\n\t\tbody.tools = tools;\n\t}\n\n\treturn body;\n};\n\n/* ─── SSE parsing ─── */\n\nconst parseJSON = (data: string) => {\n\ttry {\n\t\treturn JSON.parse(data);\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst parseToolInput = (rawArguments: string) => {\n\ttry {\n\t\treturn JSON.parse(rawArguments);\n\t} catch {\n\t\treturn rawArguments;\n\t}\n};\n\nconst extractUsage = (\n\tresponse: Record<string, unknown>\n): AIUsage | undefined => {\n\tif (!isRecord(response.usage)) {\n\t\treturn undefined;\n\t}\n\n\tconst { usage } = response;\n\n\treturn {\n\t\tinputTokens:\n\t\t\ttypeof usage.input_tokens === 'number' ? usage.input_tokens : 0,\n\t\toutputTokens:\n\t\t\ttypeof usage.output_tokens === 'number' ? usage.output_tokens : 0\n\t};\n};\n\nconst extractMimeFormat = (mimeType: unknown) => {\n\tif (typeof mimeType !== 'string') {\n\t\treturn 'png';\n\t}\n\n\tif (mimeType.includes('jpeg')) return 'jpeg';\n\tif (mimeType.includes('webp')) return 'webp';\n\n\treturn 'png';\n};\n\nconst processTextDelta = function* (parsed: Record<string, unknown>) {\n\tif (typeof parsed.delta === 'string') {\n\t\tyield { content: parsed.delta, type: 'text' as const };\n\t}\n};\n\nconst processPartialImage = function* (parsed: Record<string, unknown>) {\n\tconst itemId =\n\t\ttypeof parsed.item_id === 'string' ? parsed.item_id : undefined;\n\tconst b64 =\n\t\ttypeof parsed.partial_image_b64 === 'string'\n\t\t\t? parsed.partial_image_b64\n\t\t\t: undefined;\n\n\tif (b64) {\n\t\tyield {\n\t\t\tdata: b64,\n\t\t\tformat: 'png',\n\t\t\timageId: itemId,\n\t\t\tisPartial: true,\n\t\t\ttype: 'image' as const\n\t\t};\n\t}\n};\n\nconst processFunctionCallArgumentsDelta = (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) => {\n\tconst itemId = typeof parsed.item_id === 'string' ? parsed.item_id : '';\n\tconst callId = typeof parsed.call_id === 'string' ? parsed.call_id : '';\n\tconst delta =\n\t\ttypeof parsed.arguments_delta === 'string'\n\t\t\t? parsed.arguments_delta\n\t\t\t: '';\n\n\tconst existing = pendingCalls.get(itemId);\n\n\tif (existing) {\n\t\texisting.arguments += delta;\n\t} else {\n\t\tpendingCalls.set(itemId, {\n\t\t\targuments: delta,\n\t\t\tcallId,\n\t\t\tname: ''\n\t\t});\n\t}\n};\n\nconst processFunctionCallArgumentsDone = function* (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) {\n\tconst itemId = typeof parsed.item_id === 'string' ? parsed.item_id : '';\n\tconst callId = typeof parsed.call_id === 'string' ? parsed.call_id : '';\n\tconst fullArgs =\n\t\ttypeof parsed.arguments === 'string' ? parsed.arguments : '';\n\n\tconst pending = pendingCalls.get(itemId);\n\tconst name = pending?.name ?? '';\n\tconst args = fullArgs || pending?.arguments || '';\n\n\tpendingCalls.delete(itemId);\n\n\tyield {\n\t\tid: callId,\n\t\tinput: parseToolInput(args),\n\t\tname,\n\t\ttype: 'tool_use' as const\n\t};\n};\n\nconst processOutputItemAdded = (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) => {\n\tif (!isRecord(parsed.item)) {\n\t\treturn;\n\t}\n\n\tconst { item } = parsed;\n\tconst itemId = typeof item.id === 'string' ? item.id : '';\n\tconst itemType = typeof item.type === 'string' ? item.type : '';\n\n\tif (itemType === 'function_call') {\n\t\tconst callId = typeof item.call_id === 'string' ? item.call_id : '';\n\t\tconst name = typeof item.name === 'string' ? item.name : '';\n\n\t\tpendingCalls.set(itemId, {\n\t\t\targuments: '',\n\t\t\tcallId,\n\t\t\tname\n\t\t});\n\t}\n};\n\nconst extractImageFromOutput = function* (\n\toutput: Array<Record<string, unknown>>\n) {\n\tfor (const item of output) {\n\t\tif (item.type !== 'image_generation_call') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.status !== 'completed') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst data = typeof item.result === 'string' ? item.result : '';\n\n\t\tif (!data) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst format = extractMimeFormat(item.output_format);\n\t\tconst revisedPrompt =\n\t\t\ttypeof item.revised_prompt === 'string'\n\t\t\t\t? item.revised_prompt\n\t\t\t\t: undefined;\n\t\tconst imageId = typeof item.id === 'string' ? item.id : undefined;\n\n\t\tyield {\n\t\t\tdata,\n\t\t\tformat,\n\t\t\timageId,\n\t\t\tisPartial: false,\n\t\t\trevisedPrompt,\n\t\t\ttype: 'image' as const\n\t\t};\n\t}\n};\n\nconst processCompleted = function* (\n\tparsed: Record<string, unknown>\n): Generator<AIChunk> {\n\tif (!isRecord(parsed.response)) {\n\t\tyield { type: 'done' as const, usage: undefined };\n\n\t\treturn;\n\t}\n\n\tconst { response } = parsed;\n\tconst usage = extractUsage(response);\n\n\tif (isRecordArray(response.output)) {\n\t\tyield* extractImageFromOutput(response.output);\n\t}\n\n\tyield { type: 'done' as const, usage };\n};\n\nconst processSSEEvent = function* (\n\teventType: string,\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n): Generator<AIChunk> {\n\tswitch (eventType) {\n\t\tcase 'response.output_text.delta':\n\t\t\tyield* processTextDelta(parsed);\n\t\t\tbreak;\n\n\t\tcase 'response.image_generation_call.partial_image':\n\t\t\tyield* processPartialImage(parsed);\n\t\t\tbreak;\n\n\t\tcase 'response.output_item.added':\n\t\t\tprocessOutputItemAdded(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.function_call_arguments.delta':\n\t\t\tprocessFunctionCallArgumentsDelta(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.function_call_arguments.done':\n\t\t\tyield* processFunctionCallArgumentsDone(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.completed':\n\t\t\tyield* processCompleted(parsed);\n\t\t\tbreak;\n\t}\n};\n\nconst processSSELines = function* (\n\tlines: string[],\n\tstate: StreamState\n): Generator<AIChunk> {\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\n\t\tif (!trimmed) {\n\t\t\tif (state.currentEvent && state.buffer) {\n\t\t\t\tconst parsed = parseJSON(state.buffer);\n\n\t\t\t\tif (parsed) {\n\t\t\t\t\tyield* processSSEEvent(\n\t\t\t\t\t\tstate.currentEvent,\n\t\t\t\t\t\tparsed,\n\t\t\t\t\t\tstate.pendingCalls\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstate.currentEvent = '';\n\t\t\t\tstate.buffer = '';\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (trimmed.startsWith('event: ')) {\n\t\t\tstate.currentEvent = trimmed.slice(EVENT_PREFIX_LENGTH);\n\t\t} else if (trimmed.startsWith('data: ')) {\n\t\t\tstate.buffer = trimmed.slice(DATA_PREFIX_LENGTH);\n\t\t}\n\t}\n};\n\nconst drainReader = async function* (\n\treader: ReadableStreamDefaultReader<Uint8Array>,\n\tdecoder: TextDecoder,\n\tstate: StreamState,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tlet textBuffer = '';\n\n\tfor (\n\t\tlet result = await reader.read();\n\t\t!result.done && !signal?.aborted;\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tresult = await reader.read()\n\t) {\n\t\ttextBuffer += decoder.decode(result.value, { stream: true });\n\t\tconst lines = textBuffer.split('\\n');\n\t\ttextBuffer = lines.pop() ?? '';\n\n\t\tyield* processSSELines(lines, state);\n\t}\n\n\tif (textBuffer.trim()) {\n\t\tyield* processSSELines([textBuffer, ''], state);\n\t}\n};\n\nconst parseSSEStream = async function* (\n\tbody: ReadableStream<Uint8Array>,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tconst state: StreamState = {\n\t\tbuffer: '',\n\t\tcurrentEvent: '',\n\t\tpendingCalls: new Map(),\n\t\tusage: undefined\n\t};\n\n\ttry {\n\t\tyield* drainReader(reader, decoder, state, signal);\n\t} finally {\n\t\treader.releaseLock();\n\t}\n};\n\nconst fetchResponsesStream = async function* (\n\tbaseUrl: string,\n\tapiKey: string,\n\tbody: Record<string, unknown>,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tconst response = await fetch(`${baseUrl}/v1/responses`, {\n\t\tbody: JSON.stringify(body),\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tmethod: 'POST',\n\t\tsignal\n\t});\n\n\tif (!response.ok) {\n\t\tconst errorText = await response.text();\n\t\tthrow new Error(\n\t\t\t`OpenAI Responses API error ${response.status}: ${errorText}`\n\t\t);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error('OpenAI Responses API returned no response body');\n\t}\n\n\tyield* parseSSEStream(response.body, signal);\n};\n\nexport const openaiResponses = (\n\tconfig: OpenAIResponsesConfig\n): AIProviderConfig => {\n\tconst baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n\treturn {\n\t\tstream: (params: AIProviderStreamParams) => {\n\t\t\tconst body = buildRequestBody(params, config.imageGeneration);\n\n\t\t\treturn fetchResponsesStream(\n\t\t\t\tbaseUrl,\n\t\t\t\tconfig.apiKey,\n\t\t\t\tbody,\n\t\t\t\tparams.signal\n\t\t\t);\n\t\t}\n\t};\n};\n"
|
|
5
|
+
"import type {\n\tAIChunk,\n\tAIProviderConfig,\n\tAIProviderContentBlock,\n\tAIProviderMessage,\n\tAIProviderStreamParams,\n\tAIProviderToolDefinition,\n\tAIUsage\n} from '../../../types/ai';\n\ntype OpenAIResponsesConfig = {\n\tapiKey: string;\n\tbaseUrl?: string;\n};\n\ntype PendingFunctionCall = {\n\tcallId: string;\n\tname: string;\n\targuments: string;\n};\n\ntype StreamState = {\n\tbuffer: string;\n\tcurrentEvent: string;\n\tpendingCalls: Map<string, PendingFunctionCall>;\n\tusage: AIUsage | undefined;\n};\n\nconst DEFAULT_BASE_URL = 'https://api.openai.com';\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n\ttypeof value === 'object' && value !== null;\n\nconst isRecordArray = (\n\tvalue: unknown\n): value is Array<Record<string, unknown>> =>\n\tArray.isArray(value) && value.length > 0 && isRecord(value[0]);\n\n/* ─── Message conversion ─── */\n\nconst mapContentToResponsesFormat = (\n\tcontent: string | AIProviderContentBlock[]\n): string | Array<Record<string, unknown>> => {\n\tif (typeof content === 'string') {\n\t\treturn content;\n\t}\n\n\tconst parts: Array<Record<string, unknown>> = [];\n\n\tfor (const block of content) {\n\t\tif (block.type === 'text') {\n\t\t\tparts.push({ text: block.content, type: 'input_text' });\n\t\t} else if (block.type === 'image') {\n\t\t\tparts.push({\n\t\t\t\timage_url: {\n\t\t\t\t\turl: `data:${block.source.media_type};base64,${block.source.data}`\n\t\t\t\t},\n\t\t\t\ttype: 'input_image'\n\t\t\t});\n\t\t} else if (block.type === 'document') {\n\t\t\tparts.push({\n\t\t\t\tfile: {\n\t\t\t\t\tfile_data: `data:${block.source.media_type};base64,${block.source.data}`,\n\t\t\t\t\tfilename: block.name ?? 'document.pdf'\n\t\t\t\t},\n\t\t\t\ttype: 'input_file'\n\t\t\t});\n\t\t}\n\t}\n\n\treturn parts.length > 0 ? parts : '';\n};\n\nconst hasToolBlocks = (content: AIProviderContentBlock[]) =>\n\tcontent.some(\n\t\t(block) => block.type === 'tool_use' || block.type === 'tool_result'\n\t);\n\nconst convertToolBlocks = (\n\tcontent: AIProviderContentBlock[]\n): Array<Record<string, unknown>> => {\n\tconst items: Array<Record<string, unknown>> = [];\n\n\tfor (const block of content) {\n\t\tif (block.type === 'tool_use') {\n\t\t\titems.push({\n\t\t\t\targuments:\n\t\t\t\t\ttypeof block.input === 'string'\n\t\t\t\t\t\t? block.input\n\t\t\t\t\t\t: JSON.stringify(block.input),\n\t\t\t\tcall_id: block.id,\n\t\t\t\tname: block.name,\n\t\t\t\ttype: 'function_call'\n\t\t\t});\n\t\t} else if (block.type === 'tool_result') {\n\t\t\titems.push({\n\t\t\t\tcall_id: block.tool_use_id,\n\t\t\t\toutput: typeof block.content === 'string' ? block.content : '',\n\t\t\t\ttype: 'function_call_output'\n\t\t\t});\n\t\t}\n\t}\n\n\treturn items;\n};\n\nconst convertMessage = (\n\tmsg: AIProviderMessage\n): Array<Record<string, unknown>> => {\n\tif (typeof msg.content !== 'string' && Array.isArray(msg.content)) {\n\t\tif (hasToolBlocks(msg.content)) {\n\t\t\treturn convertToolBlocks(msg.content);\n\t\t}\n\t}\n\n\tconst content = mapContentToResponsesFormat(msg.content);\n\n\treturn [\n\t\t{\n\t\t\tcontent,\n\t\t\trole: msg.role === 'system' ? 'developer' : msg.role,\n\t\t\ttype: 'message'\n\t\t}\n\t];\n};\n\nconst buildInput = (messages: AIProviderMessage[]) => {\n\tconst input: Array<Record<string, unknown>> = [];\n\n\tfor (const msg of messages) {\n\t\tinput.push(...convertMessage(msg));\n\t}\n\n\treturn input;\n};\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n\tdescription: tool.description,\n\tname: tool.name,\n\tparameters: tool.input_schema,\n\ttype: 'function'\n});\n\nconst buildTools = (tools: AIProviderToolDefinition[] | undefined) => {\n\tif (!tools || tools.length === 0) {\n\t\treturn undefined;\n\t}\n\n\treturn tools.map((tool) => mapToolDefinition(tool));\n};\n\nconst buildRequestBody = (params: AIProviderStreamParams) => {\n\tconst body: Record<string, unknown> = {\n\t\tinput: buildInput(params.messages),\n\t\tmodel: params.model,\n\t\tstream: true\n\t};\n\n\tif (params.systemPrompt) {\n\t\tbody.instructions = params.systemPrompt;\n\t}\n\n\tconst tools = buildTools(params.tools);\n\n\tif (tools) {\n\t\tbody.tools = tools;\n\t}\n\n\treturn body;\n};\n\n/* ─── SSE parsing ─── */\n\nconst parseJSON = (data: string) => {\n\ttry {\n\t\treturn JSON.parse(data);\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst parseToolInput = (rawArguments: string) => {\n\ttry {\n\t\treturn JSON.parse(rawArguments);\n\t} catch {\n\t\treturn rawArguments;\n\t}\n};\n\nconst extractUsage = (\n\tresponse: Record<string, unknown>\n): AIUsage | undefined => {\n\tif (!isRecord(response.usage)) {\n\t\treturn undefined;\n\t}\n\n\tconst { usage } = response;\n\n\treturn {\n\t\tinputTokens:\n\t\t\ttypeof usage.input_tokens === 'number' ? usage.input_tokens : 0,\n\t\toutputTokens:\n\t\t\ttypeof usage.output_tokens === 'number' ? usage.output_tokens : 0\n\t};\n};\n\nconst extractMimeFormat = (mimeType: unknown) => {\n\tif (typeof mimeType !== 'string') {\n\t\treturn 'png';\n\t}\n\n\tif (mimeType.includes('jpeg')) return 'jpeg';\n\tif (mimeType.includes('webp')) return 'webp';\n\n\treturn 'png';\n};\n\nconst processTextDelta = function* (parsed: Record<string, unknown>) {\n\tif (typeof parsed.delta === 'string') {\n\t\tyield { content: parsed.delta, type: 'text' as const };\n\t}\n};\n\nconst processPartialImage = function* (parsed: Record<string, unknown>) {\n\tconst itemId =\n\t\ttypeof parsed.item_id === 'string' ? parsed.item_id : undefined;\n\tconst b64 =\n\t\ttypeof parsed.partial_image_b64 === 'string'\n\t\t\t? parsed.partial_image_b64\n\t\t\t: undefined;\n\n\tif (b64) {\n\t\tyield {\n\t\t\tdata: b64,\n\t\t\tformat: 'png',\n\t\t\timageId: itemId,\n\t\t\tisPartial: true,\n\t\t\ttype: 'image' as const\n\t\t};\n\t}\n};\n\nconst processFunctionCallArgumentsDelta = (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) => {\n\tconst itemId = typeof parsed.item_id === 'string' ? parsed.item_id : '';\n\tconst callId = typeof parsed.call_id === 'string' ? parsed.call_id : '';\n\tconst delta =\n\t\ttypeof parsed.arguments_delta === 'string'\n\t\t\t? parsed.arguments_delta\n\t\t\t: '';\n\n\tconst existing = pendingCalls.get(itemId);\n\n\tif (existing) {\n\t\texisting.arguments += delta;\n\t} else {\n\t\tpendingCalls.set(itemId, {\n\t\t\targuments: delta,\n\t\t\tcallId,\n\t\t\tname: ''\n\t\t});\n\t}\n};\n\nconst processFunctionCallArgumentsDone = function* (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) {\n\tconst itemId = typeof parsed.item_id === 'string' ? parsed.item_id : '';\n\tconst callId = typeof parsed.call_id === 'string' ? parsed.call_id : '';\n\tconst fullArgs =\n\t\ttypeof parsed.arguments === 'string' ? parsed.arguments : '';\n\n\tconst pending = pendingCalls.get(itemId);\n\tconst name = pending?.name ?? '';\n\tconst args = fullArgs || pending?.arguments || '';\n\n\tpendingCalls.delete(itemId);\n\n\tyield {\n\t\tid: callId,\n\t\tinput: parseToolInput(args),\n\t\tname,\n\t\ttype: 'tool_use' as const\n\t};\n};\n\nconst processOutputItemAdded = (\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n) => {\n\tif (!isRecord(parsed.item)) {\n\t\treturn;\n\t}\n\n\tconst { item } = parsed;\n\tconst itemId = typeof item.id === 'string' ? item.id : '';\n\tconst itemType = typeof item.type === 'string' ? item.type : '';\n\n\tif (itemType === 'function_call') {\n\t\tconst callId = typeof item.call_id === 'string' ? item.call_id : '';\n\t\tconst name = typeof item.name === 'string' ? item.name : '';\n\n\t\tpendingCalls.set(itemId, {\n\t\t\targuments: '',\n\t\t\tcallId,\n\t\t\tname\n\t\t});\n\t}\n};\n\nconst extractImageFromOutput = function* (\n\toutput: Array<Record<string, unknown>>\n) {\n\tfor (const item of output) {\n\t\tif (item.type !== 'image_generation_call') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (item.status !== 'completed') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst data = typeof item.result === 'string' ? item.result : '';\n\n\t\tif (!data) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst format = extractMimeFormat(item.output_format);\n\t\tconst revisedPrompt =\n\t\t\ttypeof item.revised_prompt === 'string'\n\t\t\t\t? item.revised_prompt\n\t\t\t\t: undefined;\n\t\tconst imageId = typeof item.id === 'string' ? item.id : undefined;\n\n\t\tyield {\n\t\t\tdata,\n\t\t\tformat,\n\t\t\timageId,\n\t\t\tisPartial: false,\n\t\t\trevisedPrompt,\n\t\t\ttype: 'image' as const\n\t\t};\n\t}\n};\n\nconst processCompleted = function* (\n\tparsed: Record<string, unknown>\n): Generator<AIChunk> {\n\tif (!isRecord(parsed.response)) {\n\t\tyield { type: 'done' as const, usage: undefined };\n\n\t\treturn;\n\t}\n\n\tconst { response } = parsed;\n\tconst usage = extractUsage(response);\n\n\tif (isRecordArray(response.output)) {\n\t\tyield* extractImageFromOutput(response.output);\n\t}\n\n\tyield { type: 'done' as const, usage };\n};\n\nconst processSSEEvent = function* (\n\teventType: string,\n\tparsed: Record<string, unknown>,\n\tpendingCalls: Map<string, PendingFunctionCall>\n): Generator<AIChunk> {\n\tswitch (eventType) {\n\t\tcase 'response.output_text.delta':\n\t\t\tyield* processTextDelta(parsed);\n\t\t\tbreak;\n\n\t\tcase 'response.image_generation_call.partial_image':\n\t\t\tyield* processPartialImage(parsed);\n\t\t\tbreak;\n\n\t\tcase 'response.output_item.added':\n\t\t\tprocessOutputItemAdded(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.function_call_arguments.delta':\n\t\t\tprocessFunctionCallArgumentsDelta(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.function_call_arguments.done':\n\t\t\tyield* processFunctionCallArgumentsDone(parsed, pendingCalls);\n\t\t\tbreak;\n\n\t\tcase 'response.completed':\n\t\t\tyield* processCompleted(parsed);\n\t\t\tbreak;\n\t}\n};\n\nconst processSSELines = function* (\n\tlines: string[],\n\tstate: StreamState\n): Generator<AIChunk> {\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\n\t\tif (!trimmed) {\n\t\t\tif (state.currentEvent && state.buffer) {\n\t\t\t\tconst parsed = parseJSON(state.buffer);\n\n\t\t\t\tif (parsed) {\n\t\t\t\t\tyield* processSSEEvent(\n\t\t\t\t\t\tstate.currentEvent,\n\t\t\t\t\t\tparsed,\n\t\t\t\t\t\tstate.pendingCalls\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstate.currentEvent = '';\n\t\t\t\tstate.buffer = '';\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (trimmed.startsWith('event: ')) {\n\t\t\tstate.currentEvent = trimmed.slice(EVENT_PREFIX_LENGTH);\n\t\t} else if (trimmed.startsWith('data: ')) {\n\t\t\tstate.buffer = trimmed.slice(DATA_PREFIX_LENGTH);\n\t\t}\n\t}\n};\n\nconst drainReader = async function* (\n\treader: ReadableStreamDefaultReader<Uint8Array>,\n\tdecoder: TextDecoder,\n\tstate: StreamState,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tlet textBuffer = '';\n\n\tfor (\n\t\tlet result = await reader.read();\n\t\t!result.done && !signal?.aborted;\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tresult = await reader.read()\n\t) {\n\t\ttextBuffer += decoder.decode(result.value, { stream: true });\n\t\tconst lines = textBuffer.split('\\n');\n\t\ttextBuffer = lines.pop() ?? '';\n\n\t\tyield* processSSELines(lines, state);\n\t}\n\n\tif (textBuffer.trim()) {\n\t\tyield* processSSELines([textBuffer, ''], state);\n\t}\n};\n\nconst parseSSEStream = async function* (\n\tbody: ReadableStream<Uint8Array>,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tconst reader = body.getReader();\n\tconst decoder = new TextDecoder();\n\tconst state: StreamState = {\n\t\tbuffer: '',\n\t\tcurrentEvent: '',\n\t\tpendingCalls: new Map(),\n\t\tusage: undefined\n\t};\n\n\ttry {\n\t\tyield* drainReader(reader, decoder, state, signal);\n\t} finally {\n\t\treader.releaseLock();\n\t}\n};\n\nconst fetchResponsesStream = async function* (\n\tbaseUrl: string,\n\tapiKey: string,\n\tbody: Record<string, unknown>,\n\tsignal?: AbortSignal\n): AsyncGenerator<AIChunk> {\n\tconst response = await fetch(`${baseUrl}/v1/responses`, {\n\t\tbody: JSON.stringify(body),\n\t\theaders: {\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tmethod: 'POST',\n\t\tsignal\n\t});\n\n\tif (!response.ok) {\n\t\tconst errorText = await response.text();\n\t\tthrow new Error(\n\t\t\t`OpenAI Responses API error ${response.status}: ${errorText}`\n\t\t);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error('OpenAI Responses API returned no response body');\n\t}\n\n\tyield* parseSSEStream(response.body, signal);\n};\n\nexport const openaiResponses = (\n\tconfig: OpenAIResponsesConfig\n): AIProviderConfig => {\n\tconst baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n\treturn {\n\t\tstream: (params: AIProviderStreamParams) => {\n\t\t\tconst body = buildRequestBody(params);\n\n\t\t\treturn fetchResponsesStream(\n\t\t\t\tbaseUrl,\n\t\t\t\tconfig.apiKey,\n\t\t\t\tbody,\n\t\t\t\tparams.signal\n\t\t\t);\n\t\t}\n\t};\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,IAAM,mBAAmB;AACzB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAE3B,IAAM,WAAW,CAAC,UACjB,OAAO,UAAU,YAAY,UAAU;AAExC,IAAM,gBAAgB,CACrB,UAEA,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,SAAS,MAAM,EAAE;AAI9D,IAAM,8BAA8B,CACnC,YAC6C;AAAA,EAC7C,IAAI,OAAO,YAAY,UAAU;AAAA,IAChC,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAwC,CAAC;AAAA,EAE/C,WAAW,SAAS,SAAS;AAAA,IAC5B,IAAI,MAAM,SAAS,QAAQ;AAAA,MAC1B,MAAM,KAAK,EAAE,MAAM,MAAM,SAAS,MAAM,aAAa,CAAC;AAAA,IACvD,EAAO,SAAI,MAAM,SAAS,SAAS;AAAA,MAClC,MAAM,KAAK;AAAA,QACV,WAAW;AAAA,UACV,KAAK,QAAQ,MAAM,OAAO,qBAAqB,MAAM,OAAO;AAAA,QAC7D;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AAAA,IACF,EAAO,SAAI,MAAM,SAAS,YAAY;AAAA,MACrC,MAAM,KAAK;AAAA,QACV,MAAM;AAAA,UACL,WAAW,QAAQ,MAAM,OAAO,qBAAqB,MAAM,OAAO;AAAA,UAClE,UAAU,MAAM,QAAQ;AAAA,QACzB;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,OAAO,MAAM,SAAS,IAAI,QAAQ;AAAA;AAGnC,IAAM,gBAAgB,CAAC,YACtB,QAAQ,KACP,CAAC,UAAU,MAAM,SAAS,cAAc,MAAM,SAAS,aACxD;AAED,IAAM,oBAAoB,CACzB,YACoC;AAAA,EACpC,MAAM,QAAwC,CAAC;AAAA,EAE/C,WAAW,SAAS,SAAS;AAAA,IAC5B,IAAI,MAAM,SAAS,YAAY;AAAA,MAC9B,MAAM,KAAK;AAAA,QACV,WACC,OAAO,MAAM,UAAU,WACpB,MAAM,QACN,KAAK,UAAU,MAAM,KAAK;AAAA,QAC9B,SAAS,MAAM;AAAA,QACf,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,MACP,CAAC;AAAA,IACF,EAAO,SAAI,MAAM,SAAS,eAAe;AAAA,MACxC,MAAM,KAAK;AAAA,QACV,SAAS,MAAM;AAAA,QACf,QAAQ,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU;AAAA,QAC5D,MAAM;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAGR,IAAM,iBAAiB,CACtB,QACoC;AAAA,EACpC,IAAI,OAAO,IAAI,YAAY,YAAY,MAAM,QAAQ,IAAI,OAAO,GAAG;AAAA,IAClE,IAAI,cAAc,IAAI,OAAO,GAAG;AAAA,MAC/B,OAAO,kBAAkB,IAAI,OAAO;AAAA,IACrC;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,4BAA4B,IAAI,OAAO;AAAA,EAEvD,OAAO;AAAA,IACN;AAAA,MACC;AAAA,MACA,MAAM,IAAI,SAAS,WAAW,cAAc,IAAI;AAAA,MAChD,MAAM;AAAA,IACP;AAAA,EACD;AAAA;AAGD,IAAM,aAAa,CAAC,aAAkC;AAAA,EACrD,MAAM,QAAwC,CAAC;AAAA,EAE/C,WAAW,OAAO,UAAU;AAAA,IAC3B,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC;AAAA,EAClC;AAAA,EAEA,OAAO;AAAA;AAGR,IAAM,oBAAoB,CAAC,UAAoC;AAAA,EAC9D,aAAa,KAAK;AAAA,EAClB,MAAM,KAAK;AAAA,EACX,YAAY,KAAK;AAAA,EACjB,MAAM;AACP;AAEA,IAAM,aAAa,CAAC,UAAkD;AAAA,EACrE,IAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAAA,IACjC;AAAA,EACD;AAAA,EAEA,OAAO,MAAM,IAAI,CAAC,SAAS,kBAAkB,IAAI,CAAC;AAAA;AAGnD,IAAM,mBAAmB,CAAC,WAAmC;AAAA,EAC5D,MAAM,OAAgC;AAAA,IACrC,OAAO,WAAW,OAAO,QAAQ;AAAA,IACjC,OAAO,OAAO;AAAA,IACd,QAAQ;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,cAAc;AAAA,IACxB,KAAK,eAAe,OAAO;AAAA,EAC5B;AAAA,EAEA,MAAM,QAAQ,WAAW,OAAO,KAAK;AAAA,EAErC,IAAI,OAAO;AAAA,IACV,KAAK,QAAQ;AAAA,EACd;AAAA,EAEA,OAAO;AAAA;AAKR,IAAM,YAAY,CAAC,SAAiB;AAAA,EACnC,IAAI;AAAA,IACH,OAAO,KAAK,MAAM,IAAI;AAAA,IACrB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,IAAM,iBAAiB,CAAC,iBAAyB;AAAA,EAChD,IAAI;AAAA,IACH,OAAO,KAAK,MAAM,YAAY;AAAA,IAC7B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,IAAM,eAAe,CACpB,aACyB;AAAA,EACzB,IAAI,CAAC,SAAS,SAAS,KAAK,GAAG;AAAA,IAC9B;AAAA,EACD;AAAA,EAEA,QAAQ,UAAU;AAAA,EAElB,OAAO;AAAA,IACN,aACC,OAAO,MAAM,iBAAiB,WAAW,MAAM,eAAe;AAAA,IAC/D,cACC,OAAO,MAAM,kBAAkB,WAAW,MAAM,gBAAgB;AAAA,EAClE;AAAA;AAGD,IAAM,oBAAoB,CAAC,aAAsB;AAAA,EAChD,IAAI,OAAO,aAAa,UAAU;AAAA,IACjC,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,SAAS,SAAS,MAAM;AAAA,IAAG,OAAO;AAAA,EACtC,IAAI,SAAS,SAAS,MAAM;AAAA,IAAG,OAAO;AAAA,EAEtC,OAAO;AAAA;AAGR,IAAM,mBAAmB,UAAU,CAAC,QAAiC;AAAA,EACpE,IAAI,OAAO,OAAO,UAAU,UAAU;AAAA,IACrC,MAAM,EAAE,SAAS,OAAO,OAAO,MAAM,OAAgB;AAAA,EACtD;AAAA;AAGD,IAAM,sBAAsB,UAAU,CAAC,QAAiC;AAAA,EACvE,MAAM,SACL,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EACvD,MAAM,MACL,OAAO,OAAO,sBAAsB,WACjC,OAAO,oBACP;AAAA,EAEJ,IAAI,KAAK;AAAA,IACR,MAAM;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AAAA,IACP;AAAA,EACD;AAAA;AAGD,IAAM,oCAAoC,CACzC,QACA,iBACI;AAAA,EACJ,MAAM,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EACrE,MAAM,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EACrE,MAAM,QACL,OAAO,OAAO,oBAAoB,WAC/B,OAAO,kBACP;AAAA,EAEJ,MAAM,WAAW,aAAa,IAAI,MAAM;AAAA,EAExC,IAAI,UAAU;AAAA,IACb,SAAS,aAAa;AAAA,EACvB,EAAO;AAAA,IACN,aAAa,IAAI,QAAQ;AAAA,MACxB,WAAW;AAAA,MACX;AAAA,MACA,MAAM;AAAA,IACP,CAAC;AAAA;AAAA;AAIH,IAAM,mCAAmC,UAAU,CAClD,QACA,cACC;AAAA,EACD,MAAM,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EACrE,MAAM,SAAS,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,EACrE,MAAM,WACL,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAAA,EAE3D,MAAM,UAAU,aAAa,IAAI,MAAM;AAAA,EACvC,MAAM,OAAO,SAAS,QAAQ;AAAA,EAC9B,MAAM,OAAO,YAAY,SAAS,aAAa;AAAA,EAE/C,aAAa,OAAO,MAAM;AAAA,EAE1B,MAAM;AAAA,IACL,IAAI;AAAA,IACJ,OAAO,eAAe,IAAI;AAAA,IAC1B;AAAA,IACA,MAAM;AAAA,EACP;AAAA;AAGD,IAAM,yBAAyB,CAC9B,QACA,iBACI;AAAA,EACJ,IAAI,CAAC,SAAS,OAAO,IAAI,GAAG;AAAA,IAC3B;AAAA,EACD;AAAA,EAEA,QAAQ,SAAS;AAAA,EACjB,MAAM,SAAS,OAAO,KAAK,OAAO,WAAW,KAAK,KAAK;AAAA,EACvD,MAAM,WAAW,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,EAE7D,IAAI,aAAa,iBAAiB;AAAA,IACjC,MAAM,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,IACjE,MAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,IAEzD,aAAa,IAAI,QAAQ;AAAA,MACxB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAGD,IAAM,yBAAyB,UAAU,CACxC,QACC;AAAA,EACD,WAAW,QAAQ,QAAQ;AAAA,IAC1B,IAAI,KAAK,SAAS,yBAAyB;AAAA,MAC1C;AAAA,IACD;AAAA,IAEA,IAAI,KAAK,WAAW,aAAa;AAAA,MAChC;AAAA,IACD;AAAA,IAEA,MAAM,OAAO,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,IAE7D,IAAI,CAAC,MAAM;AAAA,MACV;AAAA,IACD;AAAA,IAEA,MAAM,SAAS,kBAAkB,KAAK,aAAa;AAAA,IACnD,MAAM,gBACL,OAAO,KAAK,mBAAmB,WAC5B,KAAK,iBACL;AAAA,IACJ,MAAM,UAAU,OAAO,KAAK,OAAO,WAAW,KAAK,KAAK;AAAA,IAExD,MAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA,MAAM;AAAA,IACP;AAAA,EACD;AAAA;AAGD,IAAM,mBAAmB,UAAU,CAClC,QACqB;AAAA,EACrB,IAAI,CAAC,SAAS,OAAO,QAAQ,GAAG;AAAA,IAC/B,MAAM,EAAE,MAAM,QAAiB,OAAO,UAAU;AAAA,IAEhD;AAAA,EACD;AAAA,EAEA,QAAQ,aAAa;AAAA,EACrB,MAAM,QAAQ,aAAa,QAAQ;AAAA,EAEnC,IAAI,cAAc,SAAS,MAAM,GAAG;AAAA,IACnC,OAAO,uBAAuB,SAAS,MAAM;AAAA,EAC9C;AAAA,EAEA,MAAM,EAAE,MAAM,QAAiB,MAAM;AAAA;AAGtC,IAAM,kBAAkB,UAAU,CACjC,WACA,QACA,cACqB;AAAA,EACrB,QAAQ;AAAA,SACF;AAAA,MACJ,OAAO,iBAAiB,MAAM;AAAA,MAC9B;AAAA,SAEI;AAAA,MACJ,OAAO,oBAAoB,MAAM;AAAA,MACjC;AAAA,SAEI;AAAA,MACJ,uBAAuB,QAAQ,YAAY;AAAA,MAC3C;AAAA,SAEI;AAAA,MACJ,kCAAkC,QAAQ,YAAY;AAAA,MACtD;AAAA,SAEI;AAAA,MACJ,OAAO,iCAAiC,QAAQ,YAAY;AAAA,MAC5D;AAAA,SAEI;AAAA,MACJ,OAAO,iBAAiB,MAAM;AAAA,MAC9B;AAAA;AAAA;AAIH,IAAM,kBAAkB,UAAU,CACjC,OACA,OACqB;AAAA,EACrB,WAAW,QAAQ,OAAO;AAAA,IACzB,MAAM,UAAU,KAAK,KAAK;AAAA,IAE1B,IAAI,CAAC,SAAS;AAAA,MACb,IAAI,MAAM,gBAAgB,MAAM,QAAQ;AAAA,QACvC,MAAM,SAAS,UAAU,MAAM,MAAM;AAAA,QAErC,IAAI,QAAQ;AAAA,UACX,OAAO,gBACN,MAAM,cACN,QACA,MAAM,YACP;AAAA,QACD;AAAA,QAEA,MAAM,eAAe;AAAA,QACrB,MAAM,SAAS;AAAA,MAChB;AAAA,MAEA;AAAA,IACD;AAAA,IAEA,IAAI,QAAQ,WAAW,SAAS,GAAG;AAAA,MAClC,MAAM,eAAe,QAAQ,MAAM,mBAAmB;AAAA,IACvD,EAAO,SAAI,QAAQ,WAAW,QAAQ,GAAG;AAAA,MACxC,MAAM,SAAS,QAAQ,MAAM,kBAAkB;AAAA,IAChD;AAAA,EACD;AAAA;AAGD,IAAM,cAAc,gBAAgB,CACnC,QACA,SACA,OACA,QAC0B;AAAA,EAC1B,IAAI,aAAa;AAAA,EAEjB,SACK,SAAS,MAAM,OAAO,KAAK,EAC/B,CAAC,OAAO,QAAQ,CAAC,QAAQ,SAEzB,SAAS,MAAM,OAAO,KAAK,GAC1B;AAAA,IACD,cAAc,QAAQ,OAAO,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,IAC3D,MAAM,QAAQ,WAAW,MAAM;AAAA,CAAI;AAAA,IACnC,aAAa,MAAM,IAAI,KAAK;AAAA,IAE5B,OAAO,gBAAgB,OAAO,KAAK;AAAA,EACpC;AAAA,EAEA,IAAI,WAAW,KAAK,GAAG;AAAA,IACtB,OAAO,gBAAgB,CAAC,YAAY,EAAE,GAAG,KAAK;AAAA,EAC/C;AAAA;AAGD,IAAM,iBAAiB,gBAAgB,CACtC,MACA,QAC0B;AAAA,EAC1B,MAAM,SAAS,KAAK,UAAU;AAAA,EAC9B,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,QAAqB;AAAA,IAC1B,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,cAAc,IAAI;AAAA,IAClB,OAAO;AAAA,EACR;AAAA,EAEA,IAAI;AAAA,IACH,OAAO,YAAY,QAAQ,SAAS,OAAO,MAAM;AAAA,YAChD;AAAA,IACD,OAAO,YAAY;AAAA;AAAA;AAIrB,IAAM,uBAAuB,gBAAgB,CAC5C,SACA,QACA,MACA,QAC0B;AAAA,EAC1B,MAAM,WAAW,MAAM,MAAM,GAAG,wBAAwB;AAAA,IACvD,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB,SAAS;AAAA,MACR,eAAe,UAAU;AAAA,MACzB,gBAAgB;AAAA,IACjB;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACD,CAAC;AAAA,EAED,IAAI,CAAC,SAAS,IAAI;AAAA,IACjB,MAAM,YAAY,MAAM,SAAS,KAAK;AAAA,IACtC,MAAM,IAAI,MACT,8BAA8B,SAAS,WAAW,WACnD;AAAA,EACD;AAAA,EAEA,IAAI,CAAC,SAAS,MAAM;AAAA,IACnB,MAAM,IAAI,MAAM,gDAAgD;AAAA,EACjE;AAAA,EAEA,OAAO,eAAe,SAAS,MAAM,MAAM;AAAA;AAGrC,IAAM,kBAAkB,CAC9B,WACsB;AAAA,EACtB,MAAM,UAAU,OAAO,WAAW;AAAA,EAElC,OAAO;AAAA,IACN,QAAQ,CAAC,WAAmC;AAAA,MAC3C,MAAM,OAAO,iBAAiB,MAAM;AAAA,MAEpC,OAAO,qBACN,SACA,OAAO,QACP,MACA,OAAO,MACR;AAAA;AAAA,EAEF;AAAA;",
|
|
8
|
+
"debugId": "F2EE691602F8735C64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -2,9 +2,6 @@ import type { AIProviderConfig } from '../../../types/ai';
|
|
|
2
2
|
type OpenAIResponsesConfig = {
|
|
3
3
|
apiKey: string;
|
|
4
4
|
baseUrl?: string;
|
|
5
|
-
imageGeneration?: {
|
|
6
|
-
partialImages?: number;
|
|
7
|
-
};
|
|
8
5
|
};
|
|
9
6
|
export declare const openaiResponses: (config: OpenAIResponsesConfig) => AIProviderConfig;
|
|
10
7
|
export {};
|
package/package.json
CHANGED