@providerprotocol/ai 0.0.36 → 0.0.37
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/README.md +28 -0
- package/dist/anthropic/index.d.ts +2 -2
- package/dist/anthropic/index.js +12 -10
- package/dist/anthropic/index.js.map +1 -1
- package/dist/cerebras/index.d.ts +2 -2
- package/dist/cerebras/index.js +12 -10
- package/dist/cerebras/index.js.map +1 -1
- package/dist/{chunk-UFFJDYCE.js → chunk-7GTWHZY2.js} +2 -2
- package/dist/{chunk-OIEWDFQU.js → chunk-FYSZFIZS.js} +2 -2
- package/dist/chunk-GIDT7C6I.js +37 -0
- package/dist/chunk-GIDT7C6I.js.map +1 -0
- package/dist/{chunk-IDZOVWP3.js → chunk-IK6NRCW5.js} +7 -7
- package/dist/{chunk-VGKZIGVI.js → chunk-LTEMH3CI.js} +2 -2
- package/dist/{chunk-RJGTRQ47.js → chunk-MJI74VEJ.js} +6 -1
- package/dist/chunk-MJI74VEJ.js.map +1 -0
- package/dist/{chunk-AY55T37A.js → chunk-SBGZJVTJ.js} +4 -30
- package/dist/chunk-SBGZJVTJ.js.map +1 -0
- package/dist/{chunk-A2IM7PGT.js → chunk-TUTYMOBL.js} +2 -2
- package/dist/{chunk-BRP5XJ6Q.js → chunk-WU4U6IHF.js} +2 -2
- package/dist/chunk-WU4U6IHF.js.map +1 -0
- package/dist/{chunk-C4JP64VW.js → chunk-YQLR3XOA.js} +2 -2
- package/dist/chunk-ZKNPQBIE.js +265 -0
- package/dist/chunk-ZKNPQBIE.js.map +1 -0
- package/dist/{chunk-4OGB7JZA.js → chunk-ZRVNAET3.js} +2 -2
- package/dist/{embedding-BXA72PlJ.d.ts → embedding-CwZ1ZNWv.d.ts} +1 -1
- package/dist/google/index.d.ts +2 -2
- package/dist/google/index.js +12 -10
- package/dist/google/index.js.map +1 -1
- package/dist/groq/index.d.ts +2 -2
- package/dist/groq/index.js +12 -10
- package/dist/groq/index.js.map +1 -1
- package/dist/http/index.d.ts +3 -3
- package/dist/http/index.js +2 -1
- package/dist/{image-stream-CCgwB7ve.d.ts → image-stream-CeQHtjxS.d.ts} +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +86 -283
- package/dist/index.js.map +1 -1
- package/dist/{llm-ByUFPcFH.d.ts → llm-DS_-l71X.d.ts} +11 -3
- package/dist/middleware/logging/index.d.ts +2 -2
- package/dist/middleware/parsed-object/index.d.ts +2 -2
- package/dist/middleware/parsed-object/index.js +1 -1
- package/dist/middleware/persistence/index.d.ts +128 -0
- package/dist/middleware/persistence/index.js +144 -0
- package/dist/middleware/persistence/index.js.map +1 -0
- package/dist/middleware/pubsub/index.d.ts +4 -4
- package/dist/middleware/pubsub/server/express/index.d.ts +2 -2
- package/dist/middleware/pubsub/server/fastify/index.d.ts +2 -2
- package/dist/middleware/pubsub/server/h3/index.d.ts +2 -2
- package/dist/middleware/pubsub/server/index.d.ts +2 -2
- package/dist/middleware/pubsub/server/webapi/index.d.ts +2 -2
- package/dist/ollama/index.d.ts +2 -2
- package/dist/ollama/index.js +12 -10
- package/dist/ollama/index.js.map +1 -1
- package/dist/openai/index.d.ts +2 -2
- package/dist/openai/index.js +12 -10
- package/dist/openai/index.js.map +1 -1
- package/dist/openrouter/index.d.ts +2 -2
- package/dist/openrouter/index.js +12 -10
- package/dist/openrouter/index.js.map +1 -1
- package/dist/proxy/index.d.ts +4 -4
- package/dist/proxy/index.js +20 -18
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/server/express/index.d.ts +4 -4
- package/dist/proxy/server/express/index.js +3 -3
- package/dist/proxy/server/fastify/index.d.ts +4 -4
- package/dist/proxy/server/fastify/index.js +3 -3
- package/dist/proxy/server/h3/index.d.ts +4 -4
- package/dist/proxy/server/h3/index.js +3 -3
- package/dist/proxy/server/index.d.ts +4 -4
- package/dist/proxy/server/index.js +9 -9
- package/dist/proxy/server/webapi/index.d.ts +4 -4
- package/dist/proxy/server/webapi/index.js +3 -3
- package/dist/responses/index.d.ts +2 -2
- package/dist/responses/index.js +12 -10
- package/dist/responses/index.js.map +1 -1
- package/dist/{retry-BDMo4AVu.d.ts → retry-CgoBNa51.d.ts} +1 -1
- package/dist/{stream-S7nwQRqM.d.ts → stream-sXhBtWjl.d.ts} +4 -0
- package/dist/{types-CE4B7pno.d.ts → types-Cr4F0tVy.d.ts} +1 -1
- package/dist/xai/index.d.ts +2 -2
- package/dist/xai/index.js +12 -10
- package/dist/xai/index.js.map +1 -1
- package/package.json +6 -1
- package/dist/chunk-AY55T37A.js.map +0 -1
- package/dist/chunk-BRP5XJ6Q.js.map +0 -1
- package/dist/chunk-RJGTRQ47.js.map +0 -1
- /package/dist/{chunk-UFFJDYCE.js.map → chunk-7GTWHZY2.js.map} +0 -0
- /package/dist/{chunk-OIEWDFQU.js.map → chunk-FYSZFIZS.js.map} +0 -0
- /package/dist/{chunk-IDZOVWP3.js.map → chunk-IK6NRCW5.js.map} +0 -0
- /package/dist/{chunk-VGKZIGVI.js.map → chunk-LTEMH3CI.js.map} +0 -0
- /package/dist/{chunk-A2IM7PGT.js.map → chunk-TUTYMOBL.js.map} +0 -0
- /package/dist/{chunk-C4JP64VW.js.map → chunk-YQLR3XOA.js.map} +0 -0
- /package/dist/{chunk-4OGB7JZA.js.map → chunk-ZRVNAET3.js.map} +0 -0
package/dist/proxy/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { e as Provider, h as ModelReference } from '../llm-DS_-l71X.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-
|
|
3
|
+
import { M as Message, a as MessageJSON, T as Turn, b as TurnJSON, S as StreamEvent } from '../stream-sXhBtWjl.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 '../embedding-
|
|
9
|
-
import '../image-stream-
|
|
8
|
+
import '../embedding-CwZ1ZNWv.js';
|
|
9
|
+
import '../image-stream-CeQHtjxS.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @fileoverview Proxy provider types.
|
package/dist/proxy/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
server
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-IK6NRCW5.js";
|
|
4
|
+
import {
|
|
5
|
+
h3
|
|
6
|
+
} from "../chunk-ZRVNAET3.js";
|
|
4
7
|
import {
|
|
5
8
|
fastify
|
|
6
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-7GTWHZY2.js";
|
|
7
10
|
import {
|
|
8
11
|
bindTools,
|
|
9
12
|
parseBody,
|
|
@@ -16,13 +19,10 @@ import {
|
|
|
16
19
|
toJSON,
|
|
17
20
|
toSSE,
|
|
18
21
|
webapi
|
|
19
|
-
} from "../chunk-
|
|
22
|
+
} from "../chunk-LTEMH3CI.js";
|
|
20
23
|
import {
|
|
21
24
|
express
|
|
22
|
-
} from "../chunk-
|
|
23
|
-
import {
|
|
24
|
-
h3
|
|
25
|
-
} from "../chunk-4OGB7JZA.js";
|
|
25
|
+
} from "../chunk-FYSZFIZS.js";
|
|
26
26
|
import {
|
|
27
27
|
deserializeImageResponse,
|
|
28
28
|
deserializeImageStreamEvent,
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
serializeMessage,
|
|
34
34
|
serializeStreamEvent,
|
|
35
35
|
serializeTurn
|
|
36
|
-
} from "../chunk-
|
|
36
|
+
} from "../chunk-YQLR3XOA.js";
|
|
37
37
|
import "../chunk-ETBFOLQN.js";
|
|
38
38
|
import {
|
|
39
39
|
emptyUsage
|
|
@@ -41,28 +41,30 @@ import {
|
|
|
41
41
|
import "../chunk-N5DX5JW3.js";
|
|
42
42
|
import {
|
|
43
43
|
parseJsonResponse
|
|
44
|
-
} from "../chunk-
|
|
44
|
+
} from "../chunk-TUTYMOBL.js";
|
|
45
45
|
import {
|
|
46
46
|
createProvider
|
|
47
47
|
} from "../chunk-JA3UZALR.js";
|
|
48
|
-
import {
|
|
49
|
-
AssistantMessage
|
|
50
|
-
} from "../chunk-BRP5XJ6Q.js";
|
|
51
48
|
import {
|
|
52
49
|
doFetch,
|
|
53
50
|
doStreamFetch,
|
|
54
|
-
normalizeHttpError
|
|
51
|
+
normalizeHttpError
|
|
52
|
+
} from "../chunk-SBGZJVTJ.js";
|
|
53
|
+
import {
|
|
54
|
+
StreamEventType,
|
|
55
|
+
objectDelta
|
|
56
|
+
} from "../chunk-MJI74VEJ.js";
|
|
57
|
+
import {
|
|
58
|
+
AssistantMessage
|
|
59
|
+
} from "../chunk-WU4U6IHF.js";
|
|
60
|
+
import {
|
|
55
61
|
toError
|
|
56
|
-
} from "../chunk-
|
|
62
|
+
} from "../chunk-GIDT7C6I.js";
|
|
57
63
|
import {
|
|
58
64
|
ErrorCode,
|
|
59
65
|
ModalityType,
|
|
60
66
|
UPPError
|
|
61
67
|
} from "../chunk-COS4ON4G.js";
|
|
62
|
-
import {
|
|
63
|
-
StreamEventType,
|
|
64
|
-
objectDelta
|
|
65
|
-
} from "../chunk-RJGTRQ47.js";
|
|
66
68
|
|
|
67
69
|
// src/providers/proxy/headers.ts
|
|
68
70
|
function mergeHeaders(requestHeaders, defaultHeaders) {
|
package/dist/proxy/index.js.map
CHANGED
|
@@ -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 } 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,7 +1,7 @@
|
|
|
1
|
-
import { T as Turn, i as StreamResult } from '../../../stream-
|
|
2
|
-
import { d as EmbeddingResult } from '../../../embedding-
|
|
3
|
-
import { N as ImageResult } from '../../../llm-
|
|
4
|
-
import { I as ImageStreamLike } from '../../../image-stream-
|
|
1
|
+
import { T as Turn, i as StreamResult } from '../../../stream-sXhBtWjl.js';
|
|
2
|
+
import { d as EmbeddingResult } from '../../../embedding-CwZ1ZNWv.js';
|
|
3
|
+
import { N as ImageResult } from '../../../llm-DS_-l71X.js';
|
|
4
|
+
import { I as ImageStreamLike } from '../../../image-stream-CeQHtjxS.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @fileoverview Express/Connect adapter for proxy server.
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
sendJSON,
|
|
7
7
|
streamImageSSE,
|
|
8
8
|
streamSSE
|
|
9
|
-
} from "../../../chunk-
|
|
10
|
-
import "../../../chunk-
|
|
9
|
+
} from "../../../chunk-FYSZFIZS.js";
|
|
10
|
+
import "../../../chunk-YQLR3XOA.js";
|
|
11
11
|
import "../../../chunk-ETBFOLQN.js";
|
|
12
12
|
import "../../../chunk-N5DX5JW3.js";
|
|
13
|
-
import "../../../chunk-
|
|
13
|
+
import "../../../chunk-WU4U6IHF.js";
|
|
14
14
|
import "../../../chunk-COS4ON4G.js";
|
|
15
15
|
export {
|
|
16
16
|
express,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as Turn, i as StreamResult } from '../../../stream-
|
|
2
|
-
import { d as EmbeddingResult } from '../../../embedding-
|
|
3
|
-
import { N as ImageResult } from '../../../llm-
|
|
4
|
-
import { I as ImageStreamLike } from '../../../image-stream-
|
|
1
|
+
import { T as Turn, i as StreamResult } from '../../../stream-sXhBtWjl.js';
|
|
2
|
+
import { d as EmbeddingResult } from '../../../embedding-CwZ1ZNWv.js';
|
|
3
|
+
import { N as ImageResult } from '../../../llm-DS_-l71X.js';
|
|
4
|
+
import { I as ImageStreamLike } from '../../../image-stream-CeQHtjxS.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @fileoverview Fastify adapter for proxy server.
|
|
@@ -6,11 +6,11 @@ import {
|
|
|
6
6
|
sendJSON,
|
|
7
7
|
streamImageSSE,
|
|
8
8
|
streamSSE
|
|
9
|
-
} from "../../../chunk-
|
|
10
|
-
import "../../../chunk-
|
|
9
|
+
} from "../../../chunk-7GTWHZY2.js";
|
|
10
|
+
import "../../../chunk-YQLR3XOA.js";
|
|
11
11
|
import "../../../chunk-ETBFOLQN.js";
|
|
12
12
|
import "../../../chunk-N5DX5JW3.js";
|
|
13
|
-
import "../../../chunk-
|
|
13
|
+
import "../../../chunk-WU4U6IHF.js";
|
|
14
14
|
import "../../../chunk-COS4ON4G.js";
|
|
15
15
|
export {
|
|
16
16
|
fastify,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as Turn, i as StreamResult } from '../../../stream-
|
|
2
|
-
import { d as EmbeddingResult } from '../../../embedding-
|
|
3
|
-
import { N as ImageResult } from '../../../llm-
|
|
4
|
-
import { I as ImageStreamLike } from '../../../image-stream-
|
|
1
|
+
import { T as Turn, i as StreamResult } from '../../../stream-sXhBtWjl.js';
|
|
2
|
+
import { d as EmbeddingResult } from '../../../embedding-CwZ1ZNWv.js';
|
|
3
|
+
import { N as ImageResult } from '../../../llm-DS_-l71X.js';
|
|
4
|
+
import { I as ImageStreamLike } from '../../../image-stream-CeQHtjxS.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @fileoverview H3/Nitro/Nuxt adapter for proxy server.
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
sendJSON,
|
|
9
9
|
streamImageSSE,
|
|
10
10
|
streamSSE
|
|
11
|
-
} from "../../../chunk-
|
|
12
|
-
import "../../../chunk-
|
|
11
|
+
} from "../../../chunk-ZRVNAET3.js";
|
|
12
|
+
import "../../../chunk-YQLR3XOA.js";
|
|
13
13
|
import "../../../chunk-ETBFOLQN.js";
|
|
14
14
|
import "../../../chunk-N5DX5JW3.js";
|
|
15
|
-
import "../../../chunk-
|
|
15
|
+
import "../../../chunk-WU4U6IHF.js";
|
|
16
16
|
import "../../../chunk-COS4ON4G.js";
|
|
17
17
|
export {
|
|
18
18
|
createImageSSEStream,
|
|
@@ -6,10 +6,10 @@ 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, J as JSONSchema, H as ToolMetadata, T as Turn, i as StreamResult } from '../../stream-
|
|
10
|
-
import '../../embedding-
|
|
11
|
-
import '../../llm-
|
|
12
|
-
import '../../image-stream-
|
|
9
|
+
import { M as Message, J as JSONSchema, H as ToolMetadata, T as Turn, i as StreamResult } from '../../stream-sXhBtWjl.js';
|
|
10
|
+
import '../../embedding-CwZ1ZNWv.js';
|
|
11
|
+
import '../../llm-DS_-l71X.js';
|
|
12
|
+
import '../../image-stream-CeQHtjxS.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* @fileoverview Shared types for proxy server adapters.
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
server
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-IK6NRCW5.js";
|
|
4
|
+
import {
|
|
5
|
+
h3
|
|
6
|
+
} from "../../chunk-ZRVNAET3.js";
|
|
4
7
|
import {
|
|
5
8
|
fastify
|
|
6
|
-
} from "../../chunk-
|
|
9
|
+
} from "../../chunk-7GTWHZY2.js";
|
|
7
10
|
import {
|
|
8
11
|
bindTools,
|
|
9
12
|
parseBody,
|
|
@@ -16,17 +19,14 @@ import {
|
|
|
16
19
|
toJSON,
|
|
17
20
|
toSSE,
|
|
18
21
|
webapi
|
|
19
|
-
} from "../../chunk-
|
|
22
|
+
} from "../../chunk-LTEMH3CI.js";
|
|
20
23
|
import {
|
|
21
24
|
express
|
|
22
|
-
} from "../../chunk-
|
|
23
|
-
import
|
|
24
|
-
h3
|
|
25
|
-
} from "../../chunk-4OGB7JZA.js";
|
|
26
|
-
import "../../chunk-C4JP64VW.js";
|
|
25
|
+
} from "../../chunk-FYSZFIZS.js";
|
|
26
|
+
import "../../chunk-YQLR3XOA.js";
|
|
27
27
|
import "../../chunk-ETBFOLQN.js";
|
|
28
28
|
import "../../chunk-N5DX5JW3.js";
|
|
29
|
-
import "../../chunk-
|
|
29
|
+
import "../../chunk-WU4U6IHF.js";
|
|
30
30
|
import "../../chunk-COS4ON4G.js";
|
|
31
31
|
export {
|
|
32
32
|
bindTools,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { M as Message, J as JSONSchema, H as ToolMetadata, T as Turn, i as StreamResult, d as Tool } from '../../../stream-
|
|
2
|
-
import {
|
|
3
|
-
import { d as EmbeddingResult } from '../../../embedding-
|
|
4
|
-
import { I as ImageStreamLike } from '../../../image-stream-
|
|
1
|
+
import { M as Message, J as JSONSchema, H as ToolMetadata, T as Turn, i as StreamResult, d as Tool } from '../../../stream-sXhBtWjl.js';
|
|
2
|
+
import { o as Image, E as EmbeddingInput, N as ImageResult } from '../../../llm-DS_-l71X.js';
|
|
3
|
+
import { d as EmbeddingResult } from '../../../embedding-CwZ1ZNWv.js';
|
|
4
|
+
import { I as ImageStreamLike } from '../../../image-stream-CeQHtjxS.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @fileoverview Media serialization utilities for proxy transport.
|
|
@@ -10,11 +10,11 @@ import {
|
|
|
10
10
|
toJSON,
|
|
11
11
|
toSSE,
|
|
12
12
|
webapi
|
|
13
|
-
} from "../../../chunk-
|
|
14
|
-
import "../../../chunk-
|
|
13
|
+
} from "../../../chunk-LTEMH3CI.js";
|
|
14
|
+
import "../../../chunk-YQLR3XOA.js";
|
|
15
15
|
import "../../../chunk-ETBFOLQN.js";
|
|
16
16
|
import "../../../chunk-N5DX5JW3.js";
|
|
17
|
-
import "../../../chunk-
|
|
17
|
+
import "../../../chunk-WU4U6IHF.js";
|
|
18
18
|
import "../../../chunk-COS4ON4G.js";
|
|
19
19
|
export {
|
|
20
20
|
bindTools,
|
package/dist/responses/index.js
CHANGED
|
@@ -3,35 +3,37 @@ import {
|
|
|
3
3
|
} from "../chunk-PMK5LZ5Z.js";
|
|
4
4
|
import {
|
|
5
5
|
parseJsonResponse
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-TUTYMOBL.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveApiKey
|
|
9
9
|
} from "../chunk-ARVM24K2.js";
|
|
10
10
|
import {
|
|
11
11
|
createProvider
|
|
12
12
|
} from "../chunk-JA3UZALR.js";
|
|
13
|
+
import {
|
|
14
|
+
doFetch,
|
|
15
|
+
doStreamFetch,
|
|
16
|
+
normalizeHttpError
|
|
17
|
+
} from "../chunk-SBGZJVTJ.js";
|
|
18
|
+
import {
|
|
19
|
+
StreamEventType,
|
|
20
|
+
objectDelta
|
|
21
|
+
} from "../chunk-MJI74VEJ.js";
|
|
13
22
|
import {
|
|
14
23
|
AssistantMessage,
|
|
15
24
|
generateId,
|
|
16
25
|
isAssistantMessage,
|
|
17
26
|
isToolResultMessage,
|
|
18
27
|
isUserMessage
|
|
19
|
-
} from "../chunk-
|
|
28
|
+
} from "../chunk-WU4U6IHF.js";
|
|
20
29
|
import {
|
|
21
|
-
doFetch,
|
|
22
|
-
doStreamFetch,
|
|
23
|
-
normalizeHttpError,
|
|
24
30
|
toError
|
|
25
|
-
} from "../chunk-
|
|
31
|
+
} from "../chunk-GIDT7C6I.js";
|
|
26
32
|
import {
|
|
27
33
|
ErrorCode,
|
|
28
34
|
ModalityType,
|
|
29
35
|
UPPError
|
|
30
36
|
} from "../chunk-COS4ON4G.js";
|
|
31
|
-
import {
|
|
32
|
-
StreamEventType,
|
|
33
|
-
objectDelta
|
|
34
|
-
} from "../chunk-RJGTRQ47.js";
|
|
35
37
|
|
|
36
38
|
// src/providers/responses/transform.ts
|
|
37
39
|
function normalizeSystem(system) {
|