@providerprotocol/ai 0.0.39 → 0.0.40

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.
Files changed (130) hide show
  1. package/README.md +269 -34
  2. package/dist/anthropic/index.d.ts +3 -3
  3. package/dist/anthropic/index.js +7 -5
  4. package/dist/anthropic/index.js.map +1 -1
  5. package/dist/cerebras/index.d.ts +3 -3
  6. package/dist/cerebras/index.js +7 -5
  7. package/dist/cerebras/index.js.map +1 -1
  8. package/dist/{chunk-WU4U6IHF.js → chunk-6QCV4WXF.js} +4 -13
  9. package/dist/chunk-6QCV4WXF.js.map +1 -0
  10. package/dist/{chunk-5XPRVUOK.js → chunk-AC3VHSZJ.js} +2 -2
  11. package/dist/{chunk-5XPRVUOK.js.map → chunk-AC3VHSZJ.js.map} +1 -1
  12. package/dist/{chunk-ZDYEDI2A.js → chunk-CWGTARDE.js} +2 -2
  13. package/dist/{chunk-KNBODIQU.js → chunk-DI47UY2H.js} +2 -2
  14. package/dist/{chunk-KNBODIQU.js.map → chunk-DI47UY2H.js.map} +1 -1
  15. package/dist/{chunk-IDZR4ROP.js → chunk-EHR3LIPS.js} +2 -2
  16. package/dist/{chunk-IDZR4ROP.js.map → chunk-EHR3LIPS.js.map} +1 -1
  17. package/dist/chunk-EY2LLDGY.js +94 -0
  18. package/dist/chunk-EY2LLDGY.js.map +1 -0
  19. package/dist/{chunk-MJI74VEJ.js → chunk-F5ENANMJ.js} +18 -2
  20. package/dist/chunk-F5ENANMJ.js.map +1 -0
  21. package/dist/chunk-IKJH5ZSJ.js +1 -0
  22. package/dist/chunk-IKJH5ZSJ.js.map +1 -0
  23. package/dist/{chunk-IIMTP3XC.js → chunk-KBI45OXI.js} +2 -2
  24. package/dist/{chunk-SAMIK4WZ.js → chunk-KVUOTFYZ.js} +2 -2
  25. package/dist/{chunk-U6M3MXNI.js → chunk-L6QWKFGE.js} +3 -2
  26. package/dist/chunk-L6QWKFGE.js.map +1 -0
  27. package/dist/{chunk-RDC5GYST.js → chunk-N4LAFGLX.js} +7 -7
  28. package/dist/{chunk-ZKNPQBIE.js → chunk-R3T2IYOU.js} +5 -3
  29. package/dist/{chunk-ZKNPQBIE.js.map → chunk-R3T2IYOU.js.map} +1 -1
  30. package/dist/chunk-U2G5PHHL.js +25 -0
  31. package/dist/chunk-U2G5PHHL.js.map +1 -0
  32. package/dist/{chunk-SBGZJVTJ.js → chunk-VQZPADW6.js} +100 -33
  33. package/dist/chunk-VQZPADW6.js.map +1 -0
  34. package/dist/{chunk-O32SBS6S.js → chunk-XTWBAL42.js} +2 -2
  35. package/dist/{chunk-O32SBS6S.js.map → chunk-XTWBAL42.js.map} +1 -1
  36. package/dist/{chunk-WNB5PSY6.js → chunk-ZMESKGUY.js} +2 -2
  37. package/dist/{chunk-7ULSRWDH.js → chunk-ZSZVWLGE.js} +2 -2
  38. package/dist/{embedding-iNQCeXfk.d.ts → embedding-ts1npsDg.d.ts} +1 -1
  39. package/dist/google/index.d.ts +38 -4
  40. package/dist/google/index.js +5 -4
  41. package/dist/google/index.js.map +1 -1
  42. package/dist/groq/index.d.ts +3 -3
  43. package/dist/groq/index.js +7 -5
  44. package/dist/groq/index.js.map +1 -1
  45. package/dist/http/index.d.ts +5 -5
  46. package/dist/http/index.js +19 -22
  47. package/dist/{image-stream-ARno6XlS.d.ts → image-stream-BPml2YZZ.d.ts} +1 -1
  48. package/dist/index.d.ts +8 -8
  49. package/dist/index.js +306 -112
  50. package/dist/index.js.map +1 -1
  51. package/dist/{llm-CZqlijjK.d.ts → llm-BWLaTzzY.d.ts} +75 -29
  52. package/dist/middleware/logging/index.d.ts +3 -3
  53. package/dist/middleware/logging/index.js +3 -0
  54. package/dist/middleware/logging/index.js.map +1 -1
  55. package/dist/middleware/parsed-object/index.d.ts +3 -3
  56. package/dist/middleware/parsed-object/index.js +5 -1
  57. package/dist/middleware/parsed-object/index.js.map +1 -1
  58. package/dist/middleware/persistence/index.d.ts +3 -3
  59. package/dist/middleware/persistence/index.js +3 -2
  60. package/dist/middleware/persistence/index.js.map +1 -1
  61. package/dist/middleware/pipeline/index.d.ts +195 -0
  62. package/dist/middleware/pipeline/index.js +61 -0
  63. package/dist/middleware/pipeline/index.js.map +1 -0
  64. package/dist/middleware/pubsub/index.d.ts +13 -11
  65. package/dist/middleware/pubsub/index.js +31 -5
  66. package/dist/middleware/pubsub/index.js.map +1 -1
  67. package/dist/middleware/pubsub/server/express/index.d.ts +3 -3
  68. package/dist/middleware/pubsub/server/express/index.js +2 -2
  69. package/dist/middleware/pubsub/server/fastify/index.d.ts +3 -3
  70. package/dist/middleware/pubsub/server/fastify/index.js +2 -2
  71. package/dist/middleware/pubsub/server/h3/index.d.ts +3 -3
  72. package/dist/middleware/pubsub/server/h3/index.js +2 -2
  73. package/dist/middleware/pubsub/server/index.d.ts +50 -9
  74. package/dist/middleware/pubsub/server/index.js +5 -5
  75. package/dist/middleware/pubsub/server/index.js.map +1 -1
  76. package/dist/middleware/pubsub/server/webapi/index.d.ts +3 -3
  77. package/dist/middleware/pubsub/server/webapi/index.js +2 -2
  78. package/dist/moonshot/index.d.ts +3 -3
  79. package/dist/moonshot/index.js +7 -5
  80. package/dist/moonshot/index.js.map +1 -1
  81. package/dist/ollama/index.d.ts +24 -4
  82. package/dist/ollama/index.js +5 -4
  83. package/dist/ollama/index.js.map +1 -1
  84. package/dist/openai/index.d.ts +65 -4
  85. package/dist/openai/index.js +7 -5
  86. package/dist/openai/index.js.map +1 -1
  87. package/dist/openrouter/index.d.ts +4 -4
  88. package/dist/openrouter/index.js +7 -5
  89. package/dist/openrouter/index.js.map +1 -1
  90. package/dist/proxy/index.d.ts +5 -5
  91. package/dist/proxy/index.js +16 -15
  92. package/dist/proxy/index.js.map +1 -1
  93. package/dist/proxy/server/express/index.d.ts +8 -9
  94. package/dist/proxy/server/express/index.js +4 -3
  95. package/dist/proxy/server/fastify/index.d.ts +8 -9
  96. package/dist/proxy/server/fastify/index.js +4 -3
  97. package/dist/proxy/server/h3/index.d.ts +8 -9
  98. package/dist/proxy/server/h3/index.js +4 -3
  99. package/dist/proxy/server/index.d.ts +5 -5
  100. package/dist/proxy/server/index.js +14 -13
  101. package/dist/proxy/server/webapi/index.d.ts +8 -9
  102. package/dist/proxy/server/webapi/index.js +4 -3
  103. package/dist/responses/index.d.ts +3 -3
  104. package/dist/responses/index.js +7 -5
  105. package/dist/responses/index.js.map +1 -1
  106. package/dist/retry-DVfdPLIB.d.ts +322 -0
  107. package/dist/{stream-DVVUIKpz.d.ts → stream-bBd_4Ipu.d.ts} +27 -4
  108. package/dist/{tool-D22EhP5F.d.ts → tool-BmAfKNBq.d.ts} +1 -1
  109. package/dist/{types-CyXF0J7C.d.ts → types-nTwlpyJE.d.ts} +13 -1
  110. package/dist/utils/index.d.ts +66 -2
  111. package/dist/utils/index.js +13 -0
  112. package/dist/xai/index.d.ts +3 -3
  113. package/dist/xai/index.js +7 -5
  114. package/dist/xai/index.js.map +1 -1
  115. package/package.json +6 -1
  116. package/dist/chunk-ARVM24K2.js +0 -128
  117. package/dist/chunk-ARVM24K2.js.map +0 -1
  118. package/dist/chunk-MJI74VEJ.js.map +0 -1
  119. package/dist/chunk-SBGZJVTJ.js.map +0 -1
  120. package/dist/chunk-U6M3MXNI.js.map +0 -1
  121. package/dist/chunk-WU4U6IHF.js.map +0 -1
  122. package/dist/chunk-Y5H7C5J4.js +0 -263
  123. package/dist/chunk-Y5H7C5J4.js.map +0 -1
  124. package/dist/retry-C1eJbEMV.d.ts +0 -531
  125. /package/dist/{chunk-ZDYEDI2A.js.map → chunk-CWGTARDE.js.map} +0 -0
  126. /package/dist/{chunk-IIMTP3XC.js.map → chunk-KBI45OXI.js.map} +0 -0
  127. /package/dist/{chunk-SAMIK4WZ.js.map → chunk-KVUOTFYZ.js.map} +0 -0
  128. /package/dist/{chunk-RDC5GYST.js.map → chunk-N4LAFGLX.js.map} +0 -0
  129. /package/dist/{chunk-WNB5PSY6.js.map → chunk-ZMESKGUY.js.map} +0 -0
  130. /package/dist/{chunk-7ULSRWDH.js.map → chunk-ZSZVWLGE.js.map} +0 -0
@@ -1,13 +1,13 @@
1
- import { e as Provider, h as ModelReference } from '../llm-CZqlijjK.js';
1
+ import { e as Provider, h as ModelReference } from '../llm-BWLaTzzY.js';
2
2
  export { AdapterOptions, ParsedBody, ProxyHandler, RequestMeta, server } from './server/index.js';
3
- import { M as Message, a as MessageJSON, T as Turn, b as TurnJSON, S as StreamEvent } from '../stream-DVVUIKpz.js';
3
+ import { M as Message, a as MessageJSON, T as Turn, b as TurnJSON, S as StreamEvent } from '../stream-bBd_4Ipu.js';
4
4
  export { ParsedEmbeddingRequest, ParsedImageRequest, ParsedRequest, bindTools, parseBody, parseEmbeddingBody, parseImageBody, toEmbeddingJSON, toError, toImageJSON, toImageSSE, toJSON, toSSE, webapi } from './server/webapi/index.js';
5
5
  export { express } from './server/express/index.js';
6
6
  export { fastify } from './server/fastify/index.js';
7
7
  export { h3 } from './server/h3/index.js';
8
- import '../tool-D22EhP5F.js';
9
- import '../embedding-iNQCeXfk.js';
10
- import '../image-stream-ARno6XlS.js';
8
+ import '../tool-BmAfKNBq.js';
9
+ import '../embedding-ts1npsDg.js';
10
+ import '../image-stream-BPml2YZZ.js';
11
11
 
12
12
  /**
13
13
  * @fileoverview Proxy provider types.
@@ -1,15 +1,6 @@
1
1
  import {
2
2
  server
3
- } from "../chunk-RDC5GYST.js";
4
- import {
5
- express
6
- } from "../chunk-O32SBS6S.js";
7
- import {
8
- h3
9
- } from "../chunk-KNBODIQU.js";
10
- import {
11
- fastify
12
- } from "../chunk-IDZR4ROP.js";
3
+ } from "../chunk-N4LAFGLX.js";
13
4
  import {
14
5
  bindTools,
15
6
  parseBody,
@@ -22,7 +13,16 @@ import {
22
13
  toJSON,
23
14
  toSSE,
24
15
  webapi
25
- } from "../chunk-5XPRVUOK.js";
16
+ } from "../chunk-AC3VHSZJ.js";
17
+ import {
18
+ express
19
+ } from "../chunk-XTWBAL42.js";
20
+ import {
21
+ h3
22
+ } from "../chunk-DI47UY2H.js";
23
+ import {
24
+ fastify
25
+ } from "../chunk-EHR3LIPS.js";
26
26
  import {
27
27
  deserializeImageResponse,
28
28
  deserializeImageStreamEvent,
@@ -35,7 +35,7 @@ import {
35
35
  serializeMessage,
36
36
  serializeStreamEvent,
37
37
  serializeTurn
38
- } from "../chunk-7ULSRWDH.js";
38
+ } from "../chunk-ZSZVWLGE.js";
39
39
  import "../chunk-ETBFOLQN.js";
40
40
  import {
41
41
  emptyUsage
@@ -51,14 +51,15 @@ import {
51
51
  doFetch,
52
52
  doStreamFetch,
53
53
  normalizeHttpError
54
- } from "../chunk-SBGZJVTJ.js";
54
+ } from "../chunk-VQZPADW6.js";
55
55
  import {
56
56
  StreamEventType,
57
57
  objectDelta
58
- } from "../chunk-MJI74VEJ.js";
58
+ } from "../chunk-F5ENANMJ.js";
59
59
  import {
60
60
  AssistantMessage
61
- } from "../chunk-WU4U6IHF.js";
61
+ } from "../chunk-6QCV4WXF.js";
62
+ import "../chunk-U2G5PHHL.js";
62
63
  import {
63
64
  toError
64
65
  } from "../chunk-GIDT7C6I.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/proxy/headers.ts","../../src/providers/proxy/llm.ts","../../src/providers/proxy/embedding.ts","../../src/providers/proxy/image.ts","../../src/providers/proxy/index.ts"],"sourcesContent":["/**\n * @fileoverview Header merging utilities for proxy provider.\n *\n * @module providers/proxy/headers\n */\n\n/**\n * Merge request headers with provider default headers.\n */\nexport function mergeHeaders(\n requestHeaders: Record<string, string | undefined> | undefined,\n defaultHeaders: Record<string, string>\n): Record<string, string> {\n const headers: Record<string, string> = { ...defaultHeaders };\n if (requestHeaders) {\n for (const [key, value] of Object.entries(requestHeaders)) {\n if (value !== undefined) {\n headers[key] = value;\n }\n }\n }\n return headers;\n}\n","/**\n * @fileoverview Proxy LLM handler implementation.\n *\n * Transports PP LLM requests over HTTP to a backend server.\n * Supports both synchronous completion and streaming via SSE.\n * Full support for retry strategies, timeouts, and custom headers.\n *\n * @module providers/proxy/llm\n */\n\nimport type {\n BoundLLMModel,\n LLMRequest,\n LLMResponse,\n LLMStreamResult,\n LLMCapabilities,\n} from '../../types/llm.ts';\nimport type { LLMHandler } from '../../types/provider.ts';\nimport type { LLMProvider } from '../../types/provider.ts';\nimport type { StreamEvent } from '../../types/stream.ts';\nimport { StreamEventType, objectDelta } from '../../types/stream.ts';\nimport type { TurnJSON } from '../../types/turn.ts';\nimport { AssistantMessage } from '../../types/messages.ts';\nimport { emptyUsage } from '../../types/turn.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch, doStreamFetch } from '../../http/fetch.ts';\nimport { normalizeHttpError } from '../../http/errors.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport { toError } from '../../utils/error.ts';\nimport type { ProxyLLMParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport {\n serializeMessage,\n deserializeMessage,\n deserializeStreamEvent,\n} from './serialization.ts';\n\n/**\n * Capability flags for proxy provider.\n * All capabilities are enabled since the backend determines actual support.\n */\nconst PROXY_CAPABILITIES: LLMCapabilities = {\n streaming: true,\n tools: true,\n structuredOutput: true,\n imageInput: true,\n documentInput: true,\n videoInput: true,\n audioInput: true,\n};\n\n/**\n * Serialize an LLMRequest for HTTP transport.\n */\nfunction serializeRequest(\n request: LLMRequest<ProxyLLMParams>,\n modelId: string\n): Record<string, unknown> {\n return {\n model: modelId,\n messages: request.messages.map(serializeMessage),\n system: request.system,\n params: request.params,\n tools: request.tools?.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n metadata: t.metadata,\n })),\n structure: request.structure,\n };\n}\n\nfunction mapCompletionStopReason(reason: string): string {\n switch (reason) {\n case 'stop':\n return 'end_turn';\n case 'length':\n return 'max_tokens';\n case 'tool_calls':\n return 'tool_use';\n case 'content_filter':\n return 'content_filter';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapAnthropicStopReason(reason: string): string {\n switch (reason) {\n case 'tool_use':\n return 'tool_use';\n case 'max_tokens':\n return 'max_tokens';\n case 'end_turn':\n return 'end_turn';\n case 'stop_sequence':\n return 'end_turn';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapGoogleStopReason(reason: string): string {\n switch (reason) {\n case 'STOP':\n return 'end_turn';\n case 'MAX_TOKENS':\n return 'max_tokens';\n case 'SAFETY':\n return 'content_filter';\n case 'RECITATION':\n return 'content_filter';\n case 'OTHER':\n return 'end_turn';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapOllamaStopReason(reason: string): string {\n if (reason === 'length') {\n return 'max_tokens';\n }\n if (reason === 'stop') {\n return 'end_turn';\n }\n return 'end_turn';\n}\n\nfunction deriveStopReason(message: AssistantMessage | undefined): string {\n if (!message) {\n return 'end_turn';\n }\n\n if (message.toolCalls && message.toolCalls.length > 0) {\n return 'tool_use';\n }\n\n const metadata = message.metadata;\n const openaiMeta = metadata?.openai as { finish_reason?: string; status?: string } | undefined;\n if (openaiMeta?.status) {\n if (openaiMeta.status === 'failed') {\n return 'error';\n }\n if (openaiMeta.status === 'completed') {\n return 'end_turn';\n }\n }\n if (openaiMeta?.finish_reason) {\n return mapCompletionStopReason(openaiMeta.finish_reason);\n }\n\n const openrouterMeta = metadata?.openrouter as { finish_reason?: string } | undefined;\n if (openrouterMeta?.finish_reason) {\n return mapCompletionStopReason(openrouterMeta.finish_reason);\n }\n\n const xaiMeta = metadata?.xai as { finish_reason?: string; status?: string } | undefined;\n if (xaiMeta?.status) {\n if (xaiMeta.status === 'failed') {\n return 'error';\n }\n if (xaiMeta.status === 'completed') {\n return 'end_turn';\n }\n }\n if (xaiMeta?.finish_reason) {\n return mapCompletionStopReason(xaiMeta.finish_reason);\n }\n\n const anthropicMeta = metadata?.anthropic as { stop_reason?: string } | undefined;\n if (anthropicMeta?.stop_reason) {\n return mapAnthropicStopReason(anthropicMeta.stop_reason);\n }\n\n const googleMeta = metadata?.google as { finishReason?: string } | undefined;\n if (googleMeta?.finishReason) {\n return mapGoogleStopReason(googleMeta.finishReason);\n }\n\n const ollamaMeta = metadata?.ollama as { done_reason?: string } | undefined;\n if (ollamaMeta?.done_reason) {\n return mapOllamaStopReason(ollamaMeta.done_reason);\n }\n\n return 'end_turn';\n}\n\n/**\n * Convert TurnJSON to LLMResponse.\n */\nfunction turnJSONToLLMResponse(data: TurnJSON): LLMResponse {\n const messages = data.messages.map(deserializeMessage);\n const lastAssistant = messages\n .filter((m): m is AssistantMessage => m.type === 'assistant')\n .pop();\n\n const stopReason = deriveStopReason(lastAssistant);\n\n return {\n message: lastAssistant ?? new AssistantMessage(''),\n usage: data.usage ?? emptyUsage(),\n stopReason,\n data: data.data,\n };\n}\n\n/**\n * Creates a proxy LLM handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An LLM handler that transports requests over HTTP\n *\n * @example\n * ```typescript\n * import { llm } from '@providerprotocol/ai';\n * import { proxy } from '@providerprotocol/ai/proxy';\n * import { ExponentialBackoff } from '@providerprotocol/ai/http';\n *\n * const claude = llm({\n * model: proxy('https://api.myplatform.com/ai'),\n * config: {\n * headers: { 'Authorization': 'Bearer user-token' },\n * retryStrategy: new ExponentialBackoff({ maxAttempts: 3 }),\n * timeout: 30000,\n * },\n * });\n * ```\n */\nexport function createLLMHandler(options: ProxyProviderOptions): LLMHandler<ProxyLLMParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: LLMProvider<ProxyLLMParams> | null = null;\n\n return {\n _setProvider(provider: LLMProvider<ProxyLLMParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundLLMModel<ProxyLLMParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.LLM\n );\n }\n\n const model: BoundLLMModel<ProxyLLMParams> = {\n modelId,\n capabilities: PROXY_CAPABILITIES,\n\n get provider(): LLMProvider<ProxyLLMParams> {\n return provider;\n },\n\n async complete(request: LLMRequest<ProxyLLMParams>): Promise<LLMResponse> {\n const body = serializeRequest(request, modelId);\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'llm'\n );\n\n const data = await parseJsonResponse<TurnJSON>(response, 'proxy', 'llm');\n return turnJSONToLLMResponse(data);\n },\n\n stream(request: LLMRequest<ProxyLLMParams>): LLMStreamResult {\n const body = serializeRequest(request, modelId);\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n let resolveResponse: (value: LLMResponse) => void;\n let rejectResponse: (error: Error) => void;\n let responseSettled = false;\n const responsePromise = new Promise<LLMResponse>((resolve, reject) => {\n resolveResponse = (value) => {\n if (!responseSettled) {\n responseSettled = true;\n resolve(value);\n }\n };\n rejectResponse = (error) => {\n if (!responseSettled) {\n responseSettled = true;\n reject(error);\n }\n };\n });\n\n const generator = async function* (): AsyncGenerator<StreamEvent> {\n try {\n const response = await doStreamFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'llm'\n );\n\n if (!response.ok) {\n throw await normalizeHttpError(response, 'proxy', 'llm');\n }\n\n if (!response.body) {\n throw new UPPError(\n 'Response body is null',\n ErrorCode.ProviderError,\n 'proxy',\n ModalityType.LLM\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n\n // Check if this is the final turn data\n if ('messages' in parsed && 'usage' in parsed && 'cycles' in parsed) {\n resolveResponse(turnJSONToLLMResponse(parsed as TurnJSON));\n } else {\n // It's a StreamEvent - deserialize (middleware handles parsing)\n const event = deserializeStreamEvent(parsed as StreamEvent);\n yield event;\n // Also emit ObjectDelta for structured output - gives developers explicit hook\n if (request.structure && event.type === StreamEventType.TextDelta) {\n yield objectDelta(event.delta.text ?? '', event.index);\n }\n // Handle tool-based structured output (e.g., Anthropic)\n if (request.structure && event.type === StreamEventType.ToolCallDelta && event.delta.argumentsJson) {\n yield objectDelta(event.delta.argumentsJson, event.index);\n }\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n const remaining = decoder.decode();\n if (remaining) {\n buffer += remaining;\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n try {\n const parsed = JSON.parse(data);\n if ('messages' in parsed && 'usage' in parsed && 'cycles' in parsed) {\n resolveResponse(turnJSONToLLMResponse(parsed as TurnJSON));\n } else {\n const event = deserializeStreamEvent(parsed as StreamEvent);\n yield event;\n // Also emit ObjectDelta for structured output - gives developers explicit hook\n if (request.structure && event.type === StreamEventType.TextDelta) {\n yield objectDelta(event.delta.text ?? '', event.index);\n }\n // Handle tool-based structured output (e.g., Anthropic)\n if (request.structure && event.type === StreamEventType.ToolCallDelta && event.delta.argumentsJson) {\n yield objectDelta(event.delta.argumentsJson, event.index);\n }\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (!responseSettled) {\n rejectResponse(new UPPError(\n 'Stream ended without final response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.LLM\n ));\n }\n } catch (error) {\n rejectResponse(toError(error));\n throw error;\n }\n };\n\n return {\n [Symbol.asyncIterator]: generator,\n response: responsePromise,\n };\n },\n };\n\n return model;\n },\n };\n}\n","/**\n * @fileoverview Proxy embedding handler implementation.\n *\n * Transports PP embedding requests over HTTP to a backend server.\n * The proxy is a pure transport layer - PP types go in, PP types come out.\n *\n * @module providers/proxy/embedding\n */\n\nimport type {\n EmbeddingHandler,\n BoundEmbeddingModel,\n EmbeddingRequest,\n EmbeddingResponse,\n EmbeddingProvider,\n} from '../../types/provider.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch } from '../../http/fetch.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport type { ProxyEmbeddingParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport { serializeEmbeddingInput } from './serialization.media.ts';\n\nconst DEFAULT_MAX_BATCH_SIZE = Number.MAX_SAFE_INTEGER;\nconst DEFAULT_MAX_INPUT_LENGTH = Number.MAX_SAFE_INTEGER;\nconst DEFAULT_DIMENSIONS = 0;\n\ninterface ProxyEmbeddingVector {\n vector: number[] | string;\n index?: number;\n tokens?: number;\n metadata?: Record<string, unknown>;\n dimensions?: number;\n}\n\ninterface ProxyEmbeddingResponsePayload {\n embeddings: ProxyEmbeddingVector[];\n usage?: {\n totalTokens?: number;\n };\n metadata?: Record<string, unknown>;\n}\n\nfunction normalizeEmbeddingResponse(\n data: ProxyEmbeddingResponsePayload\n): EmbeddingResponse {\n if (!data || typeof data !== 'object' || !Array.isArray(data.embeddings)) {\n throw new UPPError(\n 'Invalid embedding response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const embeddings = data.embeddings.map((embedding, index) => {\n if (!embedding || typeof embedding !== 'object') {\n throw new UPPError(\n 'Invalid embedding entry',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const vector = embedding.vector;\n if (!Array.isArray(vector) && typeof vector !== 'string') {\n throw new UPPError(\n 'Invalid embedding vector',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const resolvedIndex = typeof embedding.index === 'number' ? embedding.index : index;\n const tokens = typeof embedding.tokens === 'number' ? embedding.tokens : undefined;\n\n return {\n vector,\n index: resolvedIndex,\n tokens,\n metadata: embedding.metadata,\n };\n });\n\n const totalTokens = typeof data.usage?.totalTokens === 'number'\n ? data.usage.totalTokens\n : 0;\n\n return {\n embeddings,\n usage: { totalTokens },\n metadata: data.metadata,\n };\n}\n\n/**\n * Creates a proxy embedding handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An embedding handler that transports requests over HTTP\n */\nexport function createEmbeddingHandler(\n options: ProxyProviderOptions\n): EmbeddingHandler<ProxyEmbeddingParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: EmbeddingProvider<ProxyEmbeddingParams> | null = null;\n\n return {\n supportedInputs: ['text', 'image'],\n\n _setProvider(provider: EmbeddingProvider<ProxyEmbeddingParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundEmbeddingModel<ProxyEmbeddingParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const model: BoundEmbeddingModel<ProxyEmbeddingParams> = {\n modelId,\n maxBatchSize: DEFAULT_MAX_BATCH_SIZE,\n maxInputLength: DEFAULT_MAX_INPUT_LENGTH,\n dimensions: DEFAULT_DIMENSIONS,\n\n get provider(): EmbeddingProvider<ProxyEmbeddingParams> {\n return provider;\n },\n\n async embed(\n request: EmbeddingRequest<ProxyEmbeddingParams>\n ): Promise<EmbeddingResponse> {\n const body = {\n model: modelId,\n inputs: request.inputs.map(serializeEmbeddingInput),\n params: request.params,\n };\n\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'embedding'\n );\n\n const data = await parseJsonResponse<ProxyEmbeddingResponsePayload>(\n response,\n 'proxy',\n 'embedding'\n );\n\n return normalizeEmbeddingResponse(data);\n },\n };\n\n return model;\n },\n };\n}\n","/**\n * @fileoverview Proxy image handler implementation.\n *\n * Transports PP image generation requests over HTTP to a backend server.\n * Supports generate, edit, and streaming operations via SSE.\n *\n * @module providers/proxy/image\n */\n\nimport type {\n BoundImageModel,\n ImageRequest,\n ImageEditRequest,\n ImageResponse,\n ImageProviderStreamResult,\n ImageStreamEvent,\n ImageCapabilities,\n} from '../../types/image.ts';\nimport type { ImageProvider, ImageHandler } from '../../types/provider.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch, doStreamFetch } from '../../http/fetch.ts';\nimport { normalizeHttpError } from '../../http/errors.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport { toError } from '../../utils/error.ts';\nimport type { ProxyImageParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport {\n serializeImage,\n deserializeImageResponse,\n deserializeImageStreamEvent,\n type SerializedImageResponse,\n type SerializedImageStreamEvent,\n} from './serialization.media.ts';\n\nconst PROXY_IMAGE_CAPABILITIES: ImageCapabilities = {\n generate: true,\n streaming: true,\n edit: true,\n};\n\ninterface ProxyImageRequestBody {\n model: string;\n prompt: string;\n params?: ProxyImageParams;\n image?: ReturnType<typeof serializeImage>;\n mask?: ReturnType<typeof serializeImage>;\n}\n\nfunction buildImageRequestBody(\n modelId: string,\n request: ImageRequest<ProxyImageParams>\n): ProxyImageRequestBody {\n return {\n model: modelId,\n prompt: request.prompt,\n params: request.params,\n };\n}\n\nfunction buildImageEditRequestBody(\n modelId: string,\n request: ImageEditRequest<ProxyImageParams>\n): ProxyImageRequestBody {\n return {\n model: modelId,\n prompt: request.prompt,\n params: request.params,\n image: serializeImage(request.image),\n mask: request.mask ? serializeImage(request.mask) : undefined,\n };\n}\n\nfunction isImageResponsePayload(\n payload: SerializedImageStreamEvent | SerializedImageResponse\n): payload is SerializedImageResponse {\n return !!payload\n && typeof payload === 'object'\n && 'images' in payload\n && Array.isArray((payload as SerializedImageResponse).images);\n}\n\nasync function executeImageRequest(\n endpoint: string,\n body: ProxyImageRequestBody,\n request: ImageRequest<ProxyImageParams> | ImageEditRequest<ProxyImageParams>,\n defaultHeaders: Record<string, string>\n): Promise<ImageResponse> {\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'image'\n );\n\n const data = await parseJsonResponse<SerializedImageResponse>(\n response,\n 'proxy',\n 'image'\n );\n\n return deserializeImageResponse(data);\n}\n\nfunction executeImageStream(\n endpoint: string,\n body: ProxyImageRequestBody,\n request: ImageRequest<ProxyImageParams>,\n defaultHeaders: Record<string, string>\n): ImageProviderStreamResult {\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n let resolveResponse: (value: ImageResponse) => void;\n let rejectResponse: (error: Error) => void;\n let responseSettled = false;\n const responsePromise = new Promise<ImageResponse>((resolve, reject) => {\n resolveResponse = (value) => {\n if (!responseSettled) {\n responseSettled = true;\n resolve(value);\n }\n };\n rejectResponse = (error) => {\n if (!responseSettled) {\n responseSettled = true;\n reject(error);\n }\n };\n });\n\n const generator = async function* generator(): AsyncGenerator<ImageStreamEvent> {\n try {\n const response = await doStreamFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'image'\n );\n\n if (!response.ok) {\n throw await normalizeHttpError(response, 'proxy', 'image');\n }\n\n if (!response.body) {\n throw new UPPError(\n 'Response body is null',\n ErrorCode.ProviderError,\n 'proxy',\n ModalityType.Image\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data) as SerializedImageStreamEvent | SerializedImageResponse;\n if (isImageResponsePayload(parsed)) {\n resolveResponse(deserializeImageResponse(parsed));\n } else {\n yield deserializeImageStreamEvent(parsed);\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n const remaining = decoder.decode();\n if (remaining) {\n buffer += remaining;\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n try {\n const parsed = JSON.parse(data) as SerializedImageStreamEvent | SerializedImageResponse;\n if (isImageResponsePayload(parsed)) {\n resolveResponse(deserializeImageResponse(parsed));\n } else {\n yield deserializeImageStreamEvent(parsed);\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (!responseSettled) {\n rejectResponse(new UPPError(\n 'Stream ended without final response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Image\n ));\n }\n } catch (error) {\n rejectResponse(toError(error));\n throw error;\n }\n };\n\n return {\n [Symbol.asyncIterator]: generator,\n response: responsePromise,\n };\n}\n\n/**\n * Creates a proxy image handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An image handler that transports requests over HTTP\n */\nexport function createImageHandler(\n options: ProxyProviderOptions\n): ImageHandler<ProxyImageParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: ImageProvider<ProxyImageParams> | null = null;\n\n return {\n _setProvider(provider: ImageProvider<ProxyImageParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundImageModel<ProxyImageParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.Image\n );\n }\n\n const model: BoundImageModel<ProxyImageParams> = {\n modelId,\n capabilities: PROXY_IMAGE_CAPABILITIES,\n\n get provider(): ImageProvider<ProxyImageParams> {\n return provider;\n },\n\n async generate(request: ImageRequest<ProxyImageParams>): Promise<ImageResponse> {\n const body = buildImageRequestBody(modelId, request);\n return executeImageRequest(endpoint, body, request, defaultHeaders);\n },\n\n async edit(request: ImageEditRequest<ProxyImageParams>): Promise<ImageResponse> {\n const body = buildImageEditRequestBody(modelId, request);\n return executeImageRequest(endpoint, body, request, defaultHeaders);\n },\n };\n\n model.stream = function stream(\n request: ImageRequest<ProxyImageParams>\n ): ImageProviderStreamResult {\n const body = buildImageRequestBody(modelId, request);\n return executeImageStream(endpoint, body, request, defaultHeaders);\n };\n\n return model;\n },\n };\n}\n","import { createProvider } from '../../core/provider.ts';\nimport type { ModelReference } from '../../types/provider.ts';\nimport { createLLMHandler } from './llm.ts';\nimport { createEmbeddingHandler } from './embedding.ts';\nimport { createImageHandler } from './image.ts';\nimport type {\n ProxyProviderOptions,\n ProxyRequestOptions,\n} from './types.ts';\n\n/**\n * Creates a proxy provider that transports PP requests over HTTP to a backend server.\n *\n * The proxy acts as a pure transport layer - PP types go in, PP types come out.\n * The modelId is passed through to the backend, which decides which actual model to use.\n *\n * @param options - Configuration for the proxy endpoint\n * @returns A provider that can be used with llm()\n *\n * @example\n * ```typescript\n * import { proxy } from './providers/proxy';\n * import { llm } from './core/llm';\n *\n * const backend = proxy({ endpoint: '/api/ai' });\n *\n * const model = llm({\n * model: backend('gpt-4o'),\n * system: 'You are a helpful assistant.',\n * });\n *\n * const turn = await model.generate('Hello!');\n * ```\n */\nexport function proxy(options: ProxyProviderOptions) {\n return createProvider<ProxyRequestOptions>({\n name: 'proxy',\n version: '1.0.0',\n handlers: {\n llm: createLLMHandler(options),\n embedding: createEmbeddingHandler(options),\n image: createImageHandler(options),\n },\n });\n}\n\n/**\n * Shorthand for creating a proxy model reference with default model ID.\n *\n * Creates a proxy provider and immediately returns a model reference using\n * 'default' as the model identifier. Useful for simple single-endpoint setups.\n *\n * @param endpoint - The URL to proxy requests to\n * @returns A model reference for use with llm()\n *\n * @example\n * ```typescript\n * import { proxyModel } from './providers/proxy';\n * import { llm } from './core/llm';\n *\n * const model = llm({ model: proxyModel('/api/ai') });\n * const turn = await model.generate('Hello!');\n * ```\n */\nexport function proxyModel(endpoint: string): ModelReference<ProxyRequestOptions> {\n return proxy({ endpoint })('default');\n}\n\n// Re-export types\nexport type {\n ProxyLLMParams,\n ProxyEmbeddingParams,\n ProxyImageParams,\n ProxyProviderOptions,\n ProxyRequestOptions,\n} from './types.ts';\n\n// Re-export serialization utilities\nexport {\n serializeMessage,\n deserializeMessage,\n serializeTurn,\n serializeStreamEvent,\n deserializeStreamEvent,\n} from './serialization.ts';\n\n// Re-export server adapters\nexport { server, express, fastify, h3 } from './server/index.ts';\nexport type { ParsedBody, ProxyHandler, RequestMeta, AdapterOptions } from './server/index.ts';\n"],"mappings":"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","names":["generator"]}
1
+ {"version":3,"sources":["../../src/providers/proxy/headers.ts","../../src/providers/proxy/llm.ts","../../src/providers/proxy/embedding.ts","../../src/providers/proxy/image.ts","../../src/providers/proxy/index.ts"],"sourcesContent":["/**\n * @fileoverview Header merging utilities for proxy provider.\n *\n * @module providers/proxy/headers\n */\n\n/**\n * Merge request headers with provider default headers.\n */\nexport function mergeHeaders(\n requestHeaders: Record<string, string | undefined> | undefined,\n defaultHeaders: Record<string, string>\n): Record<string, string> {\n const headers: Record<string, string> = { ...defaultHeaders };\n if (requestHeaders) {\n for (const [key, value] of Object.entries(requestHeaders)) {\n if (value !== undefined) {\n headers[key] = value;\n }\n }\n }\n return headers;\n}\n","/**\n * @fileoverview Proxy LLM handler implementation.\n *\n * Transports PP LLM requests over HTTP to a backend server.\n * Supports both synchronous completion and streaming via SSE.\n * Full support for retry strategies, timeouts, and custom headers.\n *\n * @module providers/proxy/llm\n */\n\nimport type {\n BoundLLMModel,\n LLMRequest,\n LLMResponse,\n LLMStreamResult,\n LLMCapabilities,\n} from '../../types/llm.ts';\nimport type { LLMHandler } from '../../types/provider.ts';\nimport type { LLMProvider } from '../../types/provider.ts';\nimport type { StreamEvent } from '../../types/stream.ts';\nimport { StreamEventType, objectDelta } from '../../types/stream.ts';\nimport type { TurnJSON } from '../../types/turn.ts';\nimport { AssistantMessage } from '../../types/messages.ts';\nimport { emptyUsage } from '../../types/turn.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch, doStreamFetch } from '../../http/fetch.ts';\nimport { normalizeHttpError } from '../../http/errors.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport { toError } from '../../utils/error.ts';\nimport type { ProxyLLMParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport {\n serializeMessage,\n deserializeMessage,\n deserializeStreamEvent,\n} from './serialization.ts';\n\n/**\n * Capability flags for proxy provider.\n * All capabilities are enabled since the backend determines actual support.\n */\nconst PROXY_CAPABILITIES: LLMCapabilities = {\n streaming: true,\n tools: true,\n structuredOutput: true,\n imageInput: true,\n documentInput: true,\n videoInput: true,\n audioInput: true,\n};\n\n/**\n * Serialize an LLMRequest for HTTP transport.\n */\nfunction serializeRequest(\n request: LLMRequest<ProxyLLMParams>,\n modelId: string\n): Record<string, unknown> {\n return {\n model: modelId,\n messages: request.messages.map(serializeMessage),\n system: request.system,\n params: request.params,\n tools: request.tools?.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n metadata: t.metadata,\n })),\n structure: request.structure,\n };\n}\n\nfunction mapCompletionStopReason(reason: string): string {\n switch (reason) {\n case 'stop':\n return 'end_turn';\n case 'length':\n return 'max_tokens';\n case 'tool_calls':\n return 'tool_use';\n case 'content_filter':\n return 'content_filter';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapAnthropicStopReason(reason: string): string {\n switch (reason) {\n case 'tool_use':\n return 'tool_use';\n case 'max_tokens':\n return 'max_tokens';\n case 'end_turn':\n return 'end_turn';\n case 'stop_sequence':\n return 'end_turn';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapGoogleStopReason(reason: string): string {\n switch (reason) {\n case 'STOP':\n return 'end_turn';\n case 'MAX_TOKENS':\n return 'max_tokens';\n case 'SAFETY':\n return 'content_filter';\n case 'RECITATION':\n return 'content_filter';\n case 'OTHER':\n return 'end_turn';\n default:\n return 'end_turn';\n }\n}\n\nfunction mapOllamaStopReason(reason: string): string {\n if (reason === 'length') {\n return 'max_tokens';\n }\n if (reason === 'stop') {\n return 'end_turn';\n }\n return 'end_turn';\n}\n\nfunction deriveStopReason(message: AssistantMessage | undefined): string {\n if (!message) {\n return 'end_turn';\n }\n\n if (message.toolCalls && message.toolCalls.length > 0) {\n return 'tool_use';\n }\n\n const metadata = message.metadata;\n const openaiMeta = metadata?.openai as { finish_reason?: string; status?: string } | undefined;\n if (openaiMeta?.status) {\n if (openaiMeta.status === 'failed') {\n return 'error';\n }\n if (openaiMeta.status === 'completed') {\n return 'end_turn';\n }\n }\n if (openaiMeta?.finish_reason) {\n return mapCompletionStopReason(openaiMeta.finish_reason);\n }\n\n const openrouterMeta = metadata?.openrouter as { finish_reason?: string } | undefined;\n if (openrouterMeta?.finish_reason) {\n return mapCompletionStopReason(openrouterMeta.finish_reason);\n }\n\n const xaiMeta = metadata?.xai as { finish_reason?: string; status?: string } | undefined;\n if (xaiMeta?.status) {\n if (xaiMeta.status === 'failed') {\n return 'error';\n }\n if (xaiMeta.status === 'completed') {\n return 'end_turn';\n }\n }\n if (xaiMeta?.finish_reason) {\n return mapCompletionStopReason(xaiMeta.finish_reason);\n }\n\n const anthropicMeta = metadata?.anthropic as { stop_reason?: string } | undefined;\n if (anthropicMeta?.stop_reason) {\n return mapAnthropicStopReason(anthropicMeta.stop_reason);\n }\n\n const googleMeta = metadata?.google as { finishReason?: string } | undefined;\n if (googleMeta?.finishReason) {\n return mapGoogleStopReason(googleMeta.finishReason);\n }\n\n const ollamaMeta = metadata?.ollama as { done_reason?: string } | undefined;\n if (ollamaMeta?.done_reason) {\n return mapOllamaStopReason(ollamaMeta.done_reason);\n }\n\n return 'end_turn';\n}\n\n/**\n * Convert TurnJSON to LLMResponse.\n */\nfunction turnJSONToLLMResponse(data: TurnJSON): LLMResponse {\n const messages = data.messages.map(deserializeMessage);\n const lastAssistant = messages\n .filter((m): m is AssistantMessage => m.type === 'assistant')\n .pop();\n\n const stopReason = deriveStopReason(lastAssistant);\n\n return {\n message: lastAssistant ?? new AssistantMessage(''),\n usage: data.usage ?? emptyUsage(),\n stopReason,\n data: data.data,\n };\n}\n\n/**\n * Creates a proxy LLM handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An LLM handler that transports requests over HTTP\n *\n * @example\n * ```typescript\n * import { llm, exponentialBackoff } from '@providerprotocol/ai';\n * import { proxy } from '@providerprotocol/ai/proxy';\n *\n * const claude = llm({\n * model: proxy('https://api.myplatform.com/ai'),\n * config: {\n * headers: { 'Authorization': 'Bearer user-token' },\n * retryStrategy: exponentialBackoff({ maxAttempts: 3 }),\n * timeout: 30000,\n * },\n * });\n * ```\n */\nexport function createLLMHandler(options: ProxyProviderOptions): LLMHandler<ProxyLLMParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: LLMProvider<ProxyLLMParams> | null = null;\n\n return {\n _setProvider(provider: LLMProvider<ProxyLLMParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundLLMModel<ProxyLLMParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.LLM\n );\n }\n\n const model: BoundLLMModel<ProxyLLMParams> = {\n modelId,\n capabilities: PROXY_CAPABILITIES,\n\n get provider(): LLMProvider<ProxyLLMParams> {\n return provider;\n },\n\n async complete(request: LLMRequest<ProxyLLMParams>): Promise<LLMResponse> {\n const body = serializeRequest(request, modelId);\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'llm'\n );\n\n const data = await parseJsonResponse<TurnJSON>(response, 'proxy', 'llm');\n return turnJSONToLLMResponse(data);\n },\n\n stream(request: LLMRequest<ProxyLLMParams>): LLMStreamResult {\n const body = serializeRequest(request, modelId);\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n let resolveResponse: (value: LLMResponse) => void;\n let rejectResponse: (error: Error) => void;\n let responseSettled = false;\n const responsePromise = new Promise<LLMResponse>((resolve, reject) => {\n resolveResponse = (value) => {\n if (!responseSettled) {\n responseSettled = true;\n resolve(value);\n }\n };\n rejectResponse = (error) => {\n if (!responseSettled) {\n responseSettled = true;\n reject(error);\n }\n };\n });\n\n const generator = async function* (): AsyncGenerator<StreamEvent> {\n try {\n const response = await doStreamFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'llm'\n );\n\n if (!response.ok) {\n throw await normalizeHttpError(response, 'proxy', 'llm');\n }\n\n if (!response.body) {\n throw new UPPError(\n 'Response body is null',\n ErrorCode.ProviderError,\n 'proxy',\n ModalityType.LLM\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data);\n\n // Check if this is the final turn data\n if ('messages' in parsed && 'usage' in parsed && 'cycles' in parsed) {\n resolveResponse(turnJSONToLLMResponse(parsed as TurnJSON));\n } else {\n // It's a StreamEvent - deserialize (middleware handles parsing)\n const event = deserializeStreamEvent(parsed as StreamEvent);\n yield event;\n // Also emit ObjectDelta for structured output - gives developers explicit hook\n if (request.structure && event.type === StreamEventType.TextDelta) {\n yield objectDelta(event.delta.text ?? '', event.index);\n }\n // Handle tool-based structured output (e.g., Anthropic)\n if (request.structure && event.type === StreamEventType.ToolCallDelta && event.delta.argumentsJson) {\n yield objectDelta(event.delta.argumentsJson, event.index);\n }\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n const remaining = decoder.decode();\n if (remaining) {\n buffer += remaining;\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n try {\n const parsed = JSON.parse(data);\n if ('messages' in parsed && 'usage' in parsed && 'cycles' in parsed) {\n resolveResponse(turnJSONToLLMResponse(parsed as TurnJSON));\n } else {\n const event = deserializeStreamEvent(parsed as StreamEvent);\n yield event;\n // Also emit ObjectDelta for structured output - gives developers explicit hook\n if (request.structure && event.type === StreamEventType.TextDelta) {\n yield objectDelta(event.delta.text ?? '', event.index);\n }\n // Handle tool-based structured output (e.g., Anthropic)\n if (request.structure && event.type === StreamEventType.ToolCallDelta && event.delta.argumentsJson) {\n yield objectDelta(event.delta.argumentsJson, event.index);\n }\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (!responseSettled) {\n rejectResponse(new UPPError(\n 'Stream ended without final response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.LLM\n ));\n }\n } catch (error) {\n rejectResponse(toError(error));\n throw error;\n }\n };\n\n return {\n [Symbol.asyncIterator]: generator,\n response: responsePromise,\n };\n },\n };\n\n return model;\n },\n };\n}\n","/**\n * @fileoverview Proxy embedding handler implementation.\n *\n * Transports PP embedding requests over HTTP to a backend server.\n * The proxy is a pure transport layer - PP types go in, PP types come out.\n *\n * @module providers/proxy/embedding\n */\n\nimport type {\n EmbeddingHandler,\n BoundEmbeddingModel,\n EmbeddingRequest,\n EmbeddingResponse,\n EmbeddingProvider,\n} from '../../types/provider.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch } from '../../http/fetch.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport type { ProxyEmbeddingParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport { serializeEmbeddingInput } from './serialization.media.ts';\n\nconst DEFAULT_MAX_BATCH_SIZE = Number.MAX_SAFE_INTEGER;\nconst DEFAULT_MAX_INPUT_LENGTH = Number.MAX_SAFE_INTEGER;\nconst DEFAULT_DIMENSIONS = 0;\n\ninterface ProxyEmbeddingVector {\n vector: number[] | string;\n index?: number;\n tokens?: number;\n metadata?: Record<string, unknown>;\n dimensions?: number;\n}\n\ninterface ProxyEmbeddingResponsePayload {\n embeddings: ProxyEmbeddingVector[];\n usage?: {\n totalTokens?: number;\n };\n metadata?: Record<string, unknown>;\n}\n\nfunction normalizeEmbeddingResponse(\n data: ProxyEmbeddingResponsePayload\n): EmbeddingResponse {\n if (!data || typeof data !== 'object' || !Array.isArray(data.embeddings)) {\n throw new UPPError(\n 'Invalid embedding response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const embeddings = data.embeddings.map((embedding, index) => {\n if (!embedding || typeof embedding !== 'object') {\n throw new UPPError(\n 'Invalid embedding entry',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const vector = embedding.vector;\n if (!Array.isArray(vector) && typeof vector !== 'string') {\n throw new UPPError(\n 'Invalid embedding vector',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const resolvedIndex = typeof embedding.index === 'number' ? embedding.index : index;\n const tokens = typeof embedding.tokens === 'number' ? embedding.tokens : undefined;\n\n return {\n vector,\n index: resolvedIndex,\n tokens,\n metadata: embedding.metadata,\n };\n });\n\n const totalTokens = typeof data.usage?.totalTokens === 'number'\n ? data.usage.totalTokens\n : 0;\n\n return {\n embeddings,\n usage: { totalTokens },\n metadata: data.metadata,\n };\n}\n\n/**\n * Creates a proxy embedding handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An embedding handler that transports requests over HTTP\n */\nexport function createEmbeddingHandler(\n options: ProxyProviderOptions\n): EmbeddingHandler<ProxyEmbeddingParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: EmbeddingProvider<ProxyEmbeddingParams> | null = null;\n\n return {\n supportedInputs: ['text', 'image'],\n\n _setProvider(provider: EmbeddingProvider<ProxyEmbeddingParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundEmbeddingModel<ProxyEmbeddingParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.Embedding\n );\n }\n\n const model: BoundEmbeddingModel<ProxyEmbeddingParams> = {\n modelId,\n maxBatchSize: DEFAULT_MAX_BATCH_SIZE,\n maxInputLength: DEFAULT_MAX_INPUT_LENGTH,\n dimensions: DEFAULT_DIMENSIONS,\n\n get provider(): EmbeddingProvider<ProxyEmbeddingParams> {\n return provider;\n },\n\n async embed(\n request: EmbeddingRequest<ProxyEmbeddingParams>\n ): Promise<EmbeddingResponse> {\n const body = {\n model: modelId,\n inputs: request.inputs.map(serializeEmbeddingInput),\n params: request.params,\n };\n\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'embedding'\n );\n\n const data = await parseJsonResponse<ProxyEmbeddingResponsePayload>(\n response,\n 'proxy',\n 'embedding'\n );\n\n return normalizeEmbeddingResponse(data);\n },\n };\n\n return model;\n },\n };\n}\n","/**\n * @fileoverview Proxy image handler implementation.\n *\n * Transports PP image generation requests over HTTP to a backend server.\n * Supports generate, edit, and streaming operations via SSE.\n *\n * @module providers/proxy/image\n */\n\nimport type {\n BoundImageModel,\n ImageRequest,\n ImageEditRequest,\n ImageResponse,\n ImageProviderStreamResult,\n ImageStreamEvent,\n ImageCapabilities,\n} from '../../types/image.ts';\nimport type { ImageProvider, ImageHandler } from '../../types/provider.ts';\nimport { UPPError, ErrorCode, ModalityType } from '../../types/errors.ts';\nimport { doFetch, doStreamFetch } from '../../http/fetch.ts';\nimport { normalizeHttpError } from '../../http/errors.ts';\nimport { parseJsonResponse } from '../../http/json.ts';\nimport { toError } from '../../utils/error.ts';\nimport type { ProxyImageParams, ProxyProviderOptions } from './types.ts';\nimport { mergeHeaders } from './headers.ts';\nimport {\n serializeImage,\n deserializeImageResponse,\n deserializeImageStreamEvent,\n type SerializedImageResponse,\n type SerializedImageStreamEvent,\n} from './serialization.media.ts';\n\nconst PROXY_IMAGE_CAPABILITIES: ImageCapabilities = {\n generate: true,\n streaming: true,\n edit: true,\n};\n\ninterface ProxyImageRequestBody {\n model: string;\n prompt: string;\n params?: ProxyImageParams;\n image?: ReturnType<typeof serializeImage>;\n mask?: ReturnType<typeof serializeImage>;\n}\n\nfunction buildImageRequestBody(\n modelId: string,\n request: ImageRequest<ProxyImageParams>\n): ProxyImageRequestBody {\n return {\n model: modelId,\n prompt: request.prompt,\n params: request.params,\n };\n}\n\nfunction buildImageEditRequestBody(\n modelId: string,\n request: ImageEditRequest<ProxyImageParams>\n): ProxyImageRequestBody {\n return {\n model: modelId,\n prompt: request.prompt,\n params: request.params,\n image: serializeImage(request.image),\n mask: request.mask ? serializeImage(request.mask) : undefined,\n };\n}\n\nfunction isImageResponsePayload(\n payload: SerializedImageStreamEvent | SerializedImageResponse\n): payload is SerializedImageResponse {\n return !!payload\n && typeof payload === 'object'\n && 'images' in payload\n && Array.isArray((payload as SerializedImageResponse).images);\n}\n\nasync function executeImageRequest(\n endpoint: string,\n body: ProxyImageRequestBody,\n request: ImageRequest<ProxyImageParams> | ImageEditRequest<ProxyImageParams>,\n defaultHeaders: Record<string, string>\n): Promise<ImageResponse> {\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n const response = await doFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'image'\n );\n\n const data = await parseJsonResponse<SerializedImageResponse>(\n response,\n 'proxy',\n 'image'\n );\n\n return deserializeImageResponse(data);\n}\n\nfunction executeImageStream(\n endpoint: string,\n body: ProxyImageRequestBody,\n request: ImageRequest<ProxyImageParams>,\n defaultHeaders: Record<string, string>\n): ImageProviderStreamResult {\n const headers = mergeHeaders(request.config.headers, defaultHeaders);\n\n let resolveResponse: (value: ImageResponse) => void;\n let rejectResponse: (error: Error) => void;\n let responseSettled = false;\n const responsePromise = new Promise<ImageResponse>((resolve, reject) => {\n resolveResponse = (value) => {\n if (!responseSettled) {\n responseSettled = true;\n resolve(value);\n }\n };\n rejectResponse = (error) => {\n if (!responseSettled) {\n responseSettled = true;\n reject(error);\n }\n };\n });\n\n const generator = async function* generator(): AsyncGenerator<ImageStreamEvent> {\n try {\n const response = await doStreamFetch(\n endpoint,\n {\n method: 'POST',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n body: JSON.stringify(body),\n signal: request.signal,\n },\n request.config,\n 'proxy',\n 'image'\n );\n\n if (!response.ok) {\n throw await normalizeHttpError(response, 'proxy', 'image');\n }\n\n if (!response.body) {\n throw new UPPError(\n 'Response body is null',\n ErrorCode.ProviderError,\n 'proxy',\n ModalityType.Image\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n\n try {\n const parsed = JSON.parse(data) as SerializedImageStreamEvent | SerializedImageResponse;\n if (isImageResponsePayload(parsed)) {\n resolveResponse(deserializeImageResponse(parsed));\n } else {\n yield deserializeImageStreamEvent(parsed);\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n const remaining = decoder.decode();\n if (remaining) {\n buffer += remaining;\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n for (const line of lines) {\n if (!line.trim() || line.startsWith(':')) continue;\n if (line.startsWith('data:')) {\n let data = line.slice(5);\n if (data.startsWith(' ')) {\n data = data.slice(1);\n }\n if (data === '[DONE]') continue;\n try {\n const parsed = JSON.parse(data) as SerializedImageStreamEvent | SerializedImageResponse;\n if (isImageResponsePayload(parsed)) {\n resolveResponse(deserializeImageResponse(parsed));\n } else {\n yield deserializeImageStreamEvent(parsed);\n }\n } catch {\n // Skip malformed JSON\n }\n }\n }\n }\n\n if (!responseSettled) {\n rejectResponse(new UPPError(\n 'Stream ended without final response',\n ErrorCode.InvalidResponse,\n 'proxy',\n ModalityType.Image\n ));\n }\n } catch (error) {\n rejectResponse(toError(error));\n throw error;\n }\n };\n\n return {\n [Symbol.asyncIterator]: generator,\n response: responsePromise,\n };\n}\n\n/**\n * Creates a proxy image handler.\n *\n * Supports full ProviderConfig options including retry strategies, timeouts,\n * custom headers, and custom fetch implementations. This allows client-side\n * retry logic for network failures to the proxy server.\n *\n * @param options - Proxy configuration options\n * @returns An image handler that transports requests over HTTP\n */\nexport function createImageHandler(\n options: ProxyProviderOptions\n): ImageHandler<ProxyImageParams> {\n const { endpoint, headers: defaultHeaders = {} } = options;\n\n let providerRef: ImageProvider<ProxyImageParams> | null = null;\n\n return {\n _setProvider(provider: ImageProvider<ProxyImageParams>) {\n providerRef = provider;\n },\n\n bind(modelId: string): BoundImageModel<ProxyImageParams> {\n const provider = providerRef;\n if (!provider) {\n throw new UPPError(\n 'Provider reference not set. Handler must be used with createProvider().',\n ErrorCode.InvalidRequest,\n 'proxy',\n ModalityType.Image\n );\n }\n\n const model: BoundImageModel<ProxyImageParams> = {\n modelId,\n capabilities: PROXY_IMAGE_CAPABILITIES,\n\n get provider(): ImageProvider<ProxyImageParams> {\n return provider;\n },\n\n async generate(request: ImageRequest<ProxyImageParams>): Promise<ImageResponse> {\n const body = buildImageRequestBody(modelId, request);\n return executeImageRequest(endpoint, body, request, defaultHeaders);\n },\n\n async edit(request: ImageEditRequest<ProxyImageParams>): Promise<ImageResponse> {\n const body = buildImageEditRequestBody(modelId, request);\n return executeImageRequest(endpoint, body, request, defaultHeaders);\n },\n };\n\n model.stream = function stream(\n request: ImageRequest<ProxyImageParams>\n ): ImageProviderStreamResult {\n const body = buildImageRequestBody(modelId, request);\n return executeImageStream(endpoint, body, request, defaultHeaders);\n };\n\n return model;\n },\n };\n}\n","import { createProvider } from '../../core/provider.ts';\nimport type { ModelReference } from '../../types/provider.ts';\nimport { createLLMHandler } from './llm.ts';\nimport { createEmbeddingHandler } from './embedding.ts';\nimport { createImageHandler } from './image.ts';\nimport type {\n ProxyProviderOptions,\n ProxyRequestOptions,\n} from './types.ts';\n\n/**\n * Creates a proxy provider that transports PP requests over HTTP to a backend server.\n *\n * The proxy acts as a pure transport layer - PP types go in, PP types come out.\n * The modelId is passed through to the backend, which decides which actual model to use.\n *\n * @param options - Configuration for the proxy endpoint\n * @returns A provider that can be used with llm()\n *\n * @example\n * ```typescript\n * import { proxy } from './providers/proxy';\n * import { llm } from './core/llm';\n *\n * const backend = proxy({ endpoint: '/api/ai' });\n *\n * const model = llm({\n * model: backend('gpt-4o'),\n * system: 'You are a helpful assistant.',\n * });\n *\n * const turn = await model.generate('Hello!');\n * ```\n */\nexport function proxy(options: ProxyProviderOptions) {\n return createProvider<ProxyRequestOptions>({\n name: 'proxy',\n version: '1.0.0',\n handlers: {\n llm: createLLMHandler(options),\n embedding: createEmbeddingHandler(options),\n image: createImageHandler(options),\n },\n });\n}\n\n/**\n * Shorthand for creating a proxy model reference with default model ID.\n *\n * Creates a proxy provider and immediately returns a model reference using\n * 'default' as the model identifier. Useful for simple single-endpoint setups.\n *\n * @param endpoint - The URL to proxy requests to\n * @returns A model reference for use with llm()\n *\n * @example\n * ```typescript\n * import { proxyModel } from './providers/proxy';\n * import { llm } from './core/llm';\n *\n * const model = llm({ model: proxyModel('/api/ai') });\n * const turn = await model.generate('Hello!');\n * ```\n */\nexport function proxyModel(endpoint: string): ModelReference<ProxyRequestOptions> {\n return proxy({ endpoint })('default');\n}\n\n// Re-export types\nexport type {\n ProxyLLMParams,\n ProxyEmbeddingParams,\n ProxyImageParams,\n ProxyProviderOptions,\n ProxyRequestOptions,\n} from './types.ts';\n\n// Re-export serialization utilities\nexport {\n serializeMessage,\n deserializeMessage,\n serializeTurn,\n serializeStreamEvent,\n deserializeStreamEvent,\n} from './serialization.ts';\n\n// Re-export server adapters\nexport { server, express, fastify, h3 } from './server/index.ts';\nexport type { ParsedBody, ProxyHandler, RequestMeta, AdapterOptions } from './server/index.ts';\n"],"mappings":"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","names":["generator"]}
@@ -1,8 +1,8 @@
1
- import { T as Turn, g as StreamResult } from '../../../stream-DVVUIKpz.js';
2
- import { d as EmbeddingResult } from '../../../embedding-iNQCeXfk.js';
3
- import { N as ImageResult } from '../../../llm-CZqlijjK.js';
4
- import { I as ImageStreamLike } from '../../../image-stream-ARno6XlS.js';
5
- import '../../../tool-D22EhP5F.js';
1
+ import { T as Turn, g as StreamResult } from '../../../stream-bBd_4Ipu.js';
2
+ import { d as EmbeddingResult } from '../../../embedding-ts1npsDg.js';
3
+ import { O as ImageResult } from '../../../llm-BWLaTzzY.js';
4
+ import { I as ImageStreamLike } from '../../../image-stream-BPml2YZZ.js';
5
+ import '../../../tool-BmAfKNBq.js';
6
6
 
7
7
  /**
8
8
  * @fileoverview Express/Connect adapter for proxy server.
@@ -108,9 +108,8 @@ declare function sendError(message: string, status: number, res: ExpressResponse
108
108
  * @example API Gateway with authentication
109
109
  * ```typescript
110
110
  * import express from 'express';
111
- * import { llm } from '@providerprotocol/ai';
111
+ * import { llm, exponentialBackoff, roundRobinKeys } from '@providerprotocol/ai';
112
112
  * import { anthropic } from '@providerprotocol/ai/anthropic';
113
- * import { ExponentialBackoff, RoundRobinKeys } from '@providerprotocol/ai/http';
114
113
  * import { parseBody } from '@providerprotocol/ai/proxy';
115
114
  * import { express as expressAdapter } from '@providerprotocol/ai/proxy/server';
116
115
  *
@@ -130,8 +129,8 @@ declare function sendError(message: string, status: number, res: ExpressResponse
130
129
  * const claude = llm({
131
130
  * model: anthropic('claude-sonnet-4-20250514'),
132
131
  * config: {
133
- * apiKey: new RoundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
134
- * retryStrategy: new ExponentialBackoff({ maxAttempts: 3 }),
132
+ * apiKey: roundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
133
+ * retryStrategy: exponentialBackoff({ maxAttempts: 3 }),
135
134
  * },
136
135
  * });
137
136
  *
@@ -6,12 +6,13 @@ import {
6
6
  sendJSON,
7
7
  streamImageSSE,
8
8
  streamSSE
9
- } from "../../../chunk-O32SBS6S.js";
9
+ } from "../../../chunk-XTWBAL42.js";
10
10
  import "../../../chunk-BIBMNP7Y.js";
11
- import "../../../chunk-7ULSRWDH.js";
11
+ import "../../../chunk-ZSZVWLGE.js";
12
12
  import "../../../chunk-ETBFOLQN.js";
13
13
  import "../../../chunk-N5DX5JW3.js";
14
- import "../../../chunk-WU4U6IHF.js";
14
+ import "../../../chunk-6QCV4WXF.js";
15
+ import "../../../chunk-U2G5PHHL.js";
15
16
  import "../../../chunk-COS4ON4G.js";
16
17
  export {
17
18
  express,
@@ -1,8 +1,8 @@
1
- import { T as Turn, g as StreamResult } from '../../../stream-DVVUIKpz.js';
2
- import { d as EmbeddingResult } from '../../../embedding-iNQCeXfk.js';
3
- import { N as ImageResult } from '../../../llm-CZqlijjK.js';
4
- import { I as ImageStreamLike } from '../../../image-stream-ARno6XlS.js';
5
- import '../../../tool-D22EhP5F.js';
1
+ import { T as Turn, g as StreamResult } from '../../../stream-bBd_4Ipu.js';
2
+ import { d as EmbeddingResult } from '../../../embedding-ts1npsDg.js';
3
+ import { O as ImageResult } from '../../../llm-BWLaTzzY.js';
4
+ import { I as ImageStreamLike } from '../../../image-stream-BPml2YZZ.js';
5
+ import '../../../tool-BmAfKNBq.js';
6
6
 
7
7
  /**
8
8
  * @fileoverview Fastify adapter for proxy server.
@@ -109,9 +109,8 @@ declare function sendError(message: string, status: number, reply: FastifyReply)
109
109
  * @example API Gateway with authentication
110
110
  * ```typescript
111
111
  * import Fastify from 'fastify';
112
- * import { llm } from '@providerprotocol/ai';
112
+ * import { llm, exponentialBackoff, roundRobinKeys } from '@providerprotocol/ai';
113
113
  * import { anthropic } from '@providerprotocol/ai/anthropic';
114
- * import { ExponentialBackoff, RoundRobinKeys } from '@providerprotocol/ai/http';
115
114
  * import { parseBody } from '@providerprotocol/ai/proxy';
116
115
  * import { fastify as fastifyAdapter } from '@providerprotocol/ai/proxy/server';
117
116
  *
@@ -121,8 +120,8 @@ declare function sendError(message: string, status: number, reply: FastifyReply)
121
120
  * const claude = llm({
122
121
  * model: anthropic('claude-sonnet-4-20250514'),
123
122
  * config: {
124
- * apiKey: new RoundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
125
- * retryStrategy: new ExponentialBackoff({ maxAttempts: 3 }),
123
+ * apiKey: roundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
124
+ * retryStrategy: exponentialBackoff({ maxAttempts: 3 }),
126
125
  * },
127
126
  * });
128
127
  *
@@ -6,12 +6,13 @@ import {
6
6
  sendJSON,
7
7
  streamImageSSE,
8
8
  streamSSE
9
- } from "../../../chunk-IDZR4ROP.js";
9
+ } from "../../../chunk-EHR3LIPS.js";
10
10
  import "../../../chunk-BIBMNP7Y.js";
11
- import "../../../chunk-7ULSRWDH.js";
11
+ import "../../../chunk-ZSZVWLGE.js";
12
12
  import "../../../chunk-ETBFOLQN.js";
13
13
  import "../../../chunk-N5DX5JW3.js";
14
- import "../../../chunk-WU4U6IHF.js";
14
+ import "../../../chunk-6QCV4WXF.js";
15
+ import "../../../chunk-U2G5PHHL.js";
15
16
  import "../../../chunk-COS4ON4G.js";
16
17
  export {
17
18
  fastify,
@@ -1,8 +1,8 @@
1
- import { T as Turn, g as StreamResult } from '../../../stream-DVVUIKpz.js';
2
- import { d as EmbeddingResult } from '../../../embedding-iNQCeXfk.js';
3
- import { N as ImageResult } from '../../../llm-CZqlijjK.js';
4
- import { I as ImageStreamLike } from '../../../image-stream-ARno6XlS.js';
5
- import '../../../tool-D22EhP5F.js';
1
+ import { T as Turn, g as StreamResult } from '../../../stream-bBd_4Ipu.js';
2
+ import { d as EmbeddingResult } from '../../../embedding-ts1npsDg.js';
3
+ import { O as ImageResult } from '../../../llm-BWLaTzzY.js';
4
+ import { I as ImageStreamLike } from '../../../image-stream-BPml2YZZ.js';
5
+ import '../../../tool-BmAfKNBq.js';
6
6
 
7
7
  /**
8
8
  * @fileoverview H3/Nitro/Nuxt adapter for proxy server.
@@ -138,20 +138,19 @@ declare function sendError(message: string, status: number, event: H3Event): {
138
138
  * ```typescript
139
139
  * // server/api/ai.post.ts
140
140
  * import { sendStream } from 'h3';
141
- * import { llm } from '@providerprotocol/ai';
141
+ * import { llm, exponentialBackoff, roundRobinKeys } from '@providerprotocol/ai';
142
142
  * import { anthropic } from '@providerprotocol/ai/anthropic';
143
- * import { ExponentialBackoff, RoundRobinKeys } from '@providerprotocol/ai/http';
144
143
  * import { parseBody, h3 as h3Adapter } from '@providerprotocol/ai/proxy';
145
144
  *
146
145
  * // Server manages AI provider keys - users never see them
147
146
  * const claude = llm({
148
147
  * model: anthropic('claude-sonnet-4-20250514'),
149
148
  * config: {
150
- * apiKey: new RoundRobinKeys([
149
+ * apiKey: roundRobinKeys([
151
150
  * process.env.ANTHROPIC_KEY_1!,
152
151
  * process.env.ANTHROPIC_KEY_2!,
153
152
  * ]),
154
- * retryStrategy: new ExponentialBackoff({ maxAttempts: 3 }),
153
+ * retryStrategy: exponentialBackoff({ maxAttempts: 3 }),
155
154
  * },
156
155
  * });
157
156
  *
@@ -8,12 +8,13 @@ import {
8
8
  sendJSON,
9
9
  streamImageSSE,
10
10
  streamSSE
11
- } from "../../../chunk-KNBODIQU.js";
11
+ } from "../../../chunk-DI47UY2H.js";
12
12
  import "../../../chunk-BIBMNP7Y.js";
13
- import "../../../chunk-7ULSRWDH.js";
13
+ import "../../../chunk-ZSZVWLGE.js";
14
14
  import "../../../chunk-ETBFOLQN.js";
15
15
  import "../../../chunk-N5DX5JW3.js";
16
- import "../../../chunk-WU4U6IHF.js";
16
+ import "../../../chunk-6QCV4WXF.js";
17
+ import "../../../chunk-U2G5PHHL.js";
17
18
  import "../../../chunk-COS4ON4G.js";
18
19
  export {
19
20
  createImageSSEStream,
@@ -6,11 +6,11 @@ import { sendJSON, sendEmbeddingJSON, sendImageJSON, streamSSE, streamImageSSE,
6
6
  export { express } from './express/index.js';
7
7
  import { parseBody, parseEmbeddingBody, parseImageBody, toJSON, toEmbeddingJSON, toImageJSON, toSSE, toImageSSE, toError, bindTools } from './webapi/index.js';
8
8
  export { ParsedEmbeddingRequest, ParsedImageRequest, ParsedRequest, webapi } from './webapi/index.js';
9
- import { M as Message, T as Turn, g as StreamResult } from '../../stream-DVVUIKpz.js';
10
- import { J as JSONSchema, j as ToolMetadata } from '../../tool-D22EhP5F.js';
11
- import '../../embedding-iNQCeXfk.js';
12
- import '../../llm-CZqlijjK.js';
13
- import '../../image-stream-ARno6XlS.js';
9
+ import { M as Message, T as Turn, g as StreamResult } from '../../stream-bBd_4Ipu.js';
10
+ import { J as JSONSchema, j as ToolMetadata } from '../../tool-BmAfKNBq.js';
11
+ import '../../embedding-ts1npsDg.js';
12
+ import '../../llm-BWLaTzzY.js';
13
+ import '../../image-stream-BPml2YZZ.js';
14
14
 
15
15
  /**
16
16
  * @fileoverview Shared types for proxy server adapters.
@@ -1,15 +1,6 @@
1
1
  import {
2
2
  server
3
- } from "../../chunk-RDC5GYST.js";
4
- import {
5
- express
6
- } from "../../chunk-O32SBS6S.js";
7
- import {
8
- h3
9
- } from "../../chunk-KNBODIQU.js";
10
- import {
11
- fastify
12
- } from "../../chunk-IDZR4ROP.js";
3
+ } from "../../chunk-N4LAFGLX.js";
13
4
  import {
14
5
  bindTools,
15
6
  parseBody,
@@ -22,12 +13,22 @@ import {
22
13
  toJSON,
23
14
  toSSE,
24
15
  webapi
25
- } from "../../chunk-5XPRVUOK.js";
16
+ } from "../../chunk-AC3VHSZJ.js";
17
+ import {
18
+ express
19
+ } from "../../chunk-XTWBAL42.js";
20
+ import {
21
+ h3
22
+ } from "../../chunk-DI47UY2H.js";
23
+ import {
24
+ fastify
25
+ } from "../../chunk-EHR3LIPS.js";
26
26
  import "../../chunk-BIBMNP7Y.js";
27
- import "../../chunk-7ULSRWDH.js";
27
+ import "../../chunk-ZSZVWLGE.js";
28
28
  import "../../chunk-ETBFOLQN.js";
29
29
  import "../../chunk-N5DX5JW3.js";
30
- import "../../chunk-WU4U6IHF.js";
30
+ import "../../chunk-6QCV4WXF.js";
31
+ import "../../chunk-U2G5PHHL.js";
31
32
  import "../../chunk-COS4ON4G.js";
32
33
  export {
33
34
  bindTools,
@@ -1,8 +1,8 @@
1
- import { M as Message, T as Turn, g as StreamResult } from '../../../stream-DVVUIKpz.js';
2
- import { o as Image, E as EmbeddingInput, N as ImageResult } from '../../../llm-CZqlijjK.js';
3
- import { J as JSONSchema, j as ToolMetadata, b as Tool } from '../../../tool-D22EhP5F.js';
4
- import { d as EmbeddingResult } from '../../../embedding-iNQCeXfk.js';
5
- import { I as ImageStreamLike } from '../../../image-stream-ARno6XlS.js';
1
+ import { M as Message, T as Turn, g as StreamResult } from '../../../stream-bBd_4Ipu.js';
2
+ import { o as Image, E as EmbeddingInput, O as ImageResult } from '../../../llm-BWLaTzzY.js';
3
+ import { J as JSONSchema, j as ToolMetadata, e as Tool } from '../../../tool-BmAfKNBq.js';
4
+ import { d as EmbeddingResult } from '../../../embedding-ts1npsDg.js';
5
+ import { I as ImageStreamLike } from '../../../image-stream-BPml2YZZ.js';
6
6
 
7
7
  /**
8
8
  * @fileoverview Media serialization utilities for proxy transport.
@@ -222,9 +222,8 @@ declare function bindTools(schemas: ParsedRequest['tools'], implementations: Rec
222
222
  *
223
223
  * @example API Gateway with authentication
224
224
  * ```typescript
225
- * import { llm } from '@providerprotocol/ai';
225
+ * import { llm, exponentialBackoff, roundRobinKeys } from '@providerprotocol/ai';
226
226
  * import { anthropic } from '@providerprotocol/ai/anthropic';
227
- * import { ExponentialBackoff, RoundRobinKeys } from '@providerprotocol/ai/http';
228
227
  * import { parseBody, toJSON, toSSE, toError } from '@providerprotocol/ai/proxy';
229
228
  *
230
229
  * // Your platform's user validation
@@ -237,8 +236,8 @@ declare function bindTools(schemas: ParsedRequest['tools'], implementations: Rec
237
236
  * const claude = llm({
238
237
  * model: anthropic('claude-sonnet-4-20250514'),
239
238
  * config: {
240
- * apiKey: new RoundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
241
- * retryStrategy: new ExponentialBackoff({ maxAttempts: 3 }),
239
+ * apiKey: roundRobinKeys([process.env.ANTHROPIC_KEY_1!, process.env.ANTHROPIC_KEY_2!]),
240
+ * retryStrategy: exponentialBackoff({ maxAttempts: 3 }),
242
241
  * },
243
242
  * });
244
243
  *
@@ -10,12 +10,13 @@ import {
10
10
  toJSON,
11
11
  toSSE,
12
12
  webapi
13
- } from "../../../chunk-5XPRVUOK.js";
13
+ } from "../../../chunk-AC3VHSZJ.js";
14
14
  import "../../../chunk-BIBMNP7Y.js";
15
- import "../../../chunk-7ULSRWDH.js";
15
+ import "../../../chunk-ZSZVWLGE.js";
16
16
  import "../../../chunk-ETBFOLQN.js";
17
17
  import "../../../chunk-N5DX5JW3.js";
18
- import "../../../chunk-WU4U6IHF.js";
18
+ import "../../../chunk-6QCV4WXF.js";
19
+ import "../../../chunk-U2G5PHHL.js";
19
20
  import "../../../chunk-COS4ON4G.js";
20
21
  export {
21
22
  bindTools,
@@ -1,6 +1,6 @@
1
- import { e as Provider } from '../llm-CZqlijjK.js';
2
- import '../stream-DVVUIKpz.js';
3
- import '../tool-D22EhP5F.js';
1
+ import { e as Provider } from '../llm-BWLaTzzY.js';
2
+ import '../stream-bBd_4Ipu.js';
3
+ import '../tool-BmAfKNBq.js';
4
4
 
5
5
  /**
6
6
  * @fileoverview OpenResponses Provider Type Definitions