pi2dsh 0.3.1 → 0.3.2

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 (101) hide show
  1. package/README.md +15 -10
  2. package/README.zh.md +15 -10
  3. package/dist/all-Rt4K68QA.mjs +28512 -0
  4. package/dist/all-Rt4K68QA.mjs.map +1 -0
  5. package/dist/anthropic-messages-Beym0_aC.mjs +6438 -0
  6. package/dist/anthropic-messages-Beym0_aC.mjs.map +1 -0
  7. package/dist/azure-openai-responses-cHqZTgLD.mjs +209 -0
  8. package/dist/azure-openai-responses-cHqZTgLD.mjs.map +1 -0
  9. package/dist/{build-DsGYAgiT.mjs → build-BG7p2Lbr.mjs} +2 -2
  10. package/dist/{build-DsGYAgiT.mjs.map → build-BG7p2Lbr.mjs.map} +1 -1
  11. package/dist/cli.mjs +1 -1
  12. package/dist/compat/pi-ai.d.mts +16 -3
  13. package/dist/compat/pi-ai.d.mts.map +1 -1
  14. package/dist/compat/pi-ai.mjs +3 -3
  15. package/dist/compat/pi-coding-agent.d.mts +12 -1
  16. package/dist/compat/pi-coding-agent.d.mts.map +1 -1
  17. package/dist/compat/pi-coding-agent.mjs +2 -2
  18. package/dist/credentials-oauth.mjs +3 -3
  19. package/dist/deferred-tools-BD4g5QUx.mjs +32 -0
  20. package/dist/deferred-tools-BD4g5QUx.mjs.map +1 -0
  21. package/dist/diagnostics-CJye1UFh.mjs +99 -0
  22. package/dist/diagnostics-CJye1UFh.mjs.map +1 -0
  23. package/dist/dist-IQKOgQyt.mjs +10035 -0
  24. package/dist/dist-IQKOgQyt.mjs.map +1 -0
  25. package/dist/dist-QBBA-dL_.mjs +1246 -0
  26. package/dist/dist-QBBA-dL_.mjs.map +1 -0
  27. package/dist/error-body-DKA3lknR.mjs +104 -0
  28. package/dist/error-body-DKA3lknR.mjs.map +1 -0
  29. package/dist/github-copilot-headers-CZo2QHrt.mjs +25 -0
  30. package/dist/github-copilot-headers-CZo2QHrt.mjs.map +1 -0
  31. package/dist/google-generative-ai-B7OZs5lu.mjs +358 -0
  32. package/dist/google-generative-ai-B7OZs5lu.mjs.map +1 -0
  33. package/dist/google-shared-CRsAUItF.mjs +29042 -0
  34. package/dist/google-shared-CRsAUItF.mjs.map +1 -0
  35. package/dist/google-vertex-DmdaHQtB.mjs +402 -0
  36. package/dist/google-vertex-DmdaHQtB.mjs.map +1 -0
  37. package/dist/hash-Dbggamac.mjs +19 -0
  38. package/dist/hash-Dbggamac.mjs.map +1 -0
  39. package/dist/headers-CPzZhJQn.mjs +17 -0
  40. package/dist/headers-CPzZhJQn.mjs.map +1 -0
  41. package/dist/host.d.mts.map +1 -1
  42. package/dist/host.mjs +13 -3
  43. package/dist/host.mjs.map +1 -1
  44. package/dist/images-models-DJtHo9Rp.mjs +1068 -0
  45. package/dist/images-models-DJtHo9Rp.mjs.map +1 -0
  46. package/dist/index.d.mts.map +1 -1
  47. package/dist/index.mjs +1 -1
  48. package/dist/json-parse-CFyFZSLJ.mjs +384 -0
  49. package/dist/json-parse-CFyFZSLJ.mjs.map +1 -0
  50. package/dist/{mcp-config-gqg7GJEE.mjs → mcp-config-D2B3kv-Z.mjs} +34 -16
  51. package/dist/mcp-config-D2B3kv-Z.mjs.map +1 -0
  52. package/dist/mistral-conversations-HHZCcFv_.mjs +42007 -0
  53. package/dist/mistral-conversations-HHZCcFv_.mjs.map +1 -0
  54. package/dist/multipart-parser-CIa5BbwO.mjs +301 -0
  55. package/dist/multipart-parser-CIa5BbwO.mjs.map +1 -0
  56. package/dist/{oauth-bridge-BpPrppjR.mjs → oauth-bridge-C6fL1qSv.mjs} +20 -4
  57. package/dist/oauth-bridge-C6fL1qSv.mjs.map +1 -0
  58. package/dist/openai-DkzRh5_G.mjs +6732 -0
  59. package/dist/openai-DkzRh5_G.mjs.map +1 -0
  60. package/dist/openai-codex-responses-vmovNu-q.mjs +1169 -0
  61. package/dist/openai-codex-responses-vmovNu-q.mjs.map +1 -0
  62. package/dist/openai-completions-fXHhRolF.mjs +947 -0
  63. package/dist/openai-completions-fXHhRolF.mjs.map +1 -0
  64. package/dist/openai-prompt-cache-BDWtZRKh.mjs +11 -0
  65. package/dist/openai-prompt-cache-BDWtZRKh.mjs.map +1 -0
  66. package/dist/openai-responses-DKdCYf3h.mjs +247 -0
  67. package/dist/openai-responses-DKdCYf3h.mjs.map +1 -0
  68. package/dist/openai-responses-shared-D0Jq7yVP.mjs +572 -0
  69. package/dist/openai-responses-shared-D0Jq7yVP.mjs.map +1 -0
  70. package/dist/openrouter-images-fG3Aj6M4.mjs +127 -0
  71. package/dist/openrouter-images-fG3Aj6M4.mjs.map +1 -0
  72. package/dist/otel-BQSQRBLF.mjs +24935 -0
  73. package/dist/otel-BQSQRBLF.mjs.map +1 -0
  74. package/dist/{pi-ai-CWFlgigJ.mjs → pi-ai-DhYGgq4Y.mjs} +49 -12
  75. package/dist/{pi-ai-CWFlgigJ.mjs.map → pi-ai-DhYGgq4Y.mjs.map} +1 -1
  76. package/dist/{pi-coding-agent-Z1hTs61i.mjs → pi-coding-agent-fPHwKP4d.mjs} +27 -3
  77. package/dist/{pi-coding-agent-Z1hTs61i.mjs.map → pi-coding-agent-fPHwKP4d.mjs.map} +1 -1
  78. package/dist/pi-messages-CV-Ts8An.mjs +306 -0
  79. package/dist/pi-messages-CV-Ts8An.mjs.map +1 -0
  80. package/dist/provider-env-C72pF4vP.mjs +40 -0
  81. package/dist/provider-env-C72pF4vP.mjs.map +1 -0
  82. package/dist/provider-retry-Cw6YJ4cr.mjs +80 -0
  83. package/dist/provider-retry-Cw6YJ4cr.mjs.map +1 -0
  84. package/dist/rolldown-runtime-CTfmNlz1.mjs +44 -0
  85. package/dist/{runtime-6DefpI6h.mjs → runtime-B9R7bDWT.mjs} +874 -37
  86. package/dist/runtime-B9R7bDWT.mjs.map +1 -0
  87. package/dist/runtime.d.mts.map +1 -1
  88. package/dist/runtime.mjs +1 -1
  89. package/dist/sanitize-unicode-wLA11KvZ.mjs +29 -0
  90. package/dist/sanitize-unicode-wLA11KvZ.mjs.map +1 -0
  91. package/dist/src-C3WBfOks.mjs +5031 -0
  92. package/dist/src-C3WBfOks.mjs.map +1 -0
  93. package/dist/transform-messages-DGq9mvhA.mjs +379 -0
  94. package/dist/transform-messages-DGq9mvhA.mjs.map +1 -0
  95. package/dist/uuid-DtFT7tOE.mjs +65 -0
  96. package/dist/uuid-DtFT7tOE.mjs.map +1 -0
  97. package/package.json +1 -1
  98. package/dist/mcp-config-gqg7GJEE.mjs.map +0 -1
  99. package/dist/oauth-bridge-BpPrppjR.mjs.map +0 -1
  100. package/dist/rolldown-runtime-D-uZhY3_.mjs +0 -16
  101. package/dist/runtime-6DefpI6h.mjs.map +0 -1
@@ -0,0 +1,209 @@
1
+
2
+ import { a as AssistantMessageEventStream } from "./diagnostics-CJye1UFh.mjs";
3
+ import { o as clampThinkingLevel } from "./images-models-DJtHo9Rp.mjs";
4
+ import { t as headersToRecord } from "./headers-CPzZhJQn.mjs";
5
+ import { t as getProviderEnvValue } from "./provider-env-C72pF4vP.mjs";
6
+ import { t as retryProviderRequest } from "./provider-retry-Cw6YJ4cr.mjs";
7
+ import { c as createGrammarToolInputProperties, i as buildBaseOptions } from "./transform-messages-DGq9mvhA.mjs";
8
+ import { t as AzureOpenAI } from "./openai-DkzRh5_G.mjs";
9
+ import { n as normalizeProviderError, t as formatProviderError } from "./error-body-DKA3lknR.mjs";
10
+ import { t as clampOpenAIPromptCacheKey } from "./openai-prompt-cache-BDWtZRKh.mjs";
11
+ import { n as convertResponsesTools, r as processResponsesStream, t as convertResponsesMessages } from "./openai-responses-shared-D0Jq7yVP.mjs";
12
+ //#region node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js
13
+ const DEFAULT_AZURE_API_VERSION = "v1";
14
+ const AZURE_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set([
15
+ "openai",
16
+ "openai-codex",
17
+ "opencode",
18
+ "azure-openai-responses"
19
+ ]);
20
+ const OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;
21
+ function parseDeploymentNameMap(value) {
22
+ const map = /* @__PURE__ */ new Map();
23
+ if (!value) return map;
24
+ for (const entry of value.split(",")) {
25
+ const trimmed = entry.trim();
26
+ if (!trimmed) continue;
27
+ const [modelId, deploymentName] = trimmed.split("=", 2);
28
+ if (!modelId || !deploymentName) continue;
29
+ map.set(modelId.trim(), deploymentName.trim());
30
+ }
31
+ return map;
32
+ }
33
+ function resolveDeploymentName(model, options) {
34
+ if (options?.azureDeploymentName) return options.azureDeploymentName;
35
+ return parseDeploymentNameMap(getProviderEnvValue("AZURE_OPENAI_DEPLOYMENT_NAME_MAP", options?.env)).get(model.id) || model.id;
36
+ }
37
+ function formatAzureOpenAIError(error) {
38
+ return formatProviderError(normalizeProviderError(error), "Azure OpenAI API error");
39
+ }
40
+ /**
41
+ * Generate function for Azure OpenAI Responses API
42
+ */
43
+ const stream = (model, context, options) => {
44
+ const stream = new AssistantMessageEventStream();
45
+ (async () => {
46
+ const deploymentName = resolveDeploymentName(model, options);
47
+ const output = {
48
+ role: "assistant",
49
+ content: [],
50
+ api: "azure-openai-responses",
51
+ provider: model.provider,
52
+ model: model.id,
53
+ usage: {
54
+ input: 0,
55
+ output: 0,
56
+ cacheRead: 0,
57
+ cacheWrite: 0,
58
+ totalTokens: 0,
59
+ cost: {
60
+ input: 0,
61
+ output: 0,
62
+ cacheRead: 0,
63
+ cacheWrite: 0,
64
+ total: 0
65
+ }
66
+ },
67
+ stopReason: "pending",
68
+ timestamp: Date.now()
69
+ };
70
+ try {
71
+ const apiKey = options?.apiKey;
72
+ if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
73
+ const client = createClient(model, apiKey, options);
74
+ const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false);
75
+ let params = buildParams(model, context, options, deploymentName, grammarToolInputProperties);
76
+ const nextParams = await options?.onPayload?.(params, model);
77
+ if (nextParams !== void 0) params = nextParams;
78
+ const requestOptions = {
79
+ ...options?.signal ? { signal: options.signal } : {},
80
+ ...options?.timeoutMs !== void 0 ? { timeout: options.timeoutMs } : {},
81
+ maxRetries: 0
82
+ };
83
+ const { data: openaiStream, response } = await retryProviderRequest(() => client.responses.create(params, requestOptions).withResponse(), {
84
+ maxRetries: options?.maxRetries,
85
+ maxRetryDelayMs: options?.maxRetryDelayMs,
86
+ signal: options?.signal
87
+ });
88
+ await options?.onResponse?.({
89
+ status: response.status,
90
+ headers: headersToRecord(response.headers)
91
+ }, model);
92
+ stream.push({
93
+ type: "start",
94
+ partial: output
95
+ });
96
+ await processResponsesStream(openaiStream, output, stream, model, { grammarToolInputProperties });
97
+ if (options?.signal?.aborted) throw new Error("Request was aborted");
98
+ if (output.stopReason === "pending") throw new Error("Azure OpenAI Responses stream ended without a stop reason");
99
+ if (output.stopReason === "aborted" || output.stopReason === "error") throw new Error(output.errorMessage || "An unknown error occurred");
100
+ stream.push({
101
+ type: "done",
102
+ reason: output.stopReason,
103
+ message: output
104
+ });
105
+ stream.end();
106
+ } catch (error) {
107
+ for (const block of output.content) {
108
+ delete block.index;
109
+ delete block.partialJson;
110
+ delete block.customInput;
111
+ }
112
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
113
+ output.errorMessage = formatAzureOpenAIError(error);
114
+ stream.push({
115
+ type: "error",
116
+ reason: output.stopReason,
117
+ error: output
118
+ });
119
+ stream.end();
120
+ }
121
+ })();
122
+ return stream;
123
+ };
124
+ const streamSimple = (model, context, options) => {
125
+ const apiKey = options?.apiKey;
126
+ if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
127
+ const base = buildBaseOptions(model, context, options, apiKey);
128
+ const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : void 0;
129
+ const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning;
130
+ return stream(model, context, {
131
+ ...base,
132
+ reasoningEffort
133
+ });
134
+ };
135
+ function normalizeAzureBaseUrl(baseUrl) {
136
+ const trimmed = baseUrl.trim().replace(/\/+$/, "");
137
+ let url;
138
+ try {
139
+ url = new URL(trimmed);
140
+ } catch {
141
+ throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`);
142
+ }
143
+ const isAzureHost = url.hostname.endsWith(".openai.azure.com") || url.hostname.endsWith(".cognitiveservices.azure.com") || url.hostname.endsWith(".ai.azure.com");
144
+ const normalizedPath = url.pathname.replace(/\/+$/, "");
145
+ if (isAzureHost && (normalizedPath === "" || normalizedPath === "/" || normalizedPath === "/openai" || normalizedPath === "/openai/v1/responses")) {
146
+ url.pathname = "/openai/v1";
147
+ url.search = "";
148
+ }
149
+ return url.toString().replace(/\/+$/, "");
150
+ }
151
+ function buildDefaultBaseUrl(resourceName) {
152
+ return `https://${resourceName}.openai.azure.com/openai/v1`;
153
+ }
154
+ function resolveAzureConfig(model, options) {
155
+ const apiVersion = options?.azureApiVersion || getProviderEnvValue("AZURE_OPENAI_API_VERSION", options?.env) || DEFAULT_AZURE_API_VERSION;
156
+ const baseUrl = options?.azureBaseUrl?.trim() || getProviderEnvValue("AZURE_OPENAI_BASE_URL", options?.env)?.trim() || void 0;
157
+ const resourceName = options?.azureResourceName || getProviderEnvValue("AZURE_OPENAI_RESOURCE_NAME", options?.env);
158
+ let resolvedBaseUrl = baseUrl;
159
+ if (!resolvedBaseUrl && resourceName) resolvedBaseUrl = buildDefaultBaseUrl(resourceName);
160
+ if (!resolvedBaseUrl && model.baseUrl) resolvedBaseUrl = model.baseUrl;
161
+ if (!resolvedBaseUrl) throw new Error("Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.");
162
+ return {
163
+ baseUrl: normalizeAzureBaseUrl(resolvedBaseUrl),
164
+ apiVersion
165
+ };
166
+ }
167
+ function createClient(model, apiKey, options) {
168
+ const headers = { ...model.headers };
169
+ if (options?.headers) Object.assign(headers, options.headers);
170
+ const { baseUrl, apiVersion } = resolveAzureConfig(model, options);
171
+ return new AzureOpenAI({
172
+ apiKey,
173
+ apiVersion,
174
+ dangerouslyAllowBrowser: true,
175
+ fetch: options?.fetch,
176
+ defaultHeaders: headers,
177
+ baseURL: baseUrl
178
+ });
179
+ }
180
+ function buildParams(model, context, options, deploymentName, grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false)) {
181
+ const params = {
182
+ model: deploymentName,
183
+ input: convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, { grammarToolInputProperties }),
184
+ stream: true,
185
+ prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),
186
+ store: false
187
+ };
188
+ if (options?.maxTokens) params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);
189
+ if (options?.temperature !== void 0) params.temperature = options?.temperature;
190
+ if (context.tools && context.tools.length > 0) params.tools = convertResponsesTools(context.tools, {
191
+ supportsStrictMode: model.compat?.supportsStrictMode ?? true,
192
+ supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false
193
+ });
194
+ if (model.reasoning) {
195
+ if (options?.reasoningEffort || options?.reasoningSummary) {
196
+ params.reasoning = {
197
+ effort: options?.reasoningEffort ? model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort : "medium",
198
+ summary: options?.reasoningSummary || "auto"
199
+ };
200
+ params.include = ["reasoning.encrypted_content"];
201
+ } else if (model.thinkingLevelMap?.off !== null) params.reasoning = { effort: model.thinkingLevelMap?.off ?? "none" };
202
+ }
203
+ if (options?.samplingParams) Object.assign(params, options.samplingParams);
204
+ return params;
205
+ }
206
+ //#endregion
207
+ export { stream, streamSimple };
208
+
209
+ //# sourceMappingURL=azure-openai-responses-cHqZTgLD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-responses-cHqZTgLD.mjs","names":[],"sources":["../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js"],"sourcesContent":["import { AzureOpenAI } from \"openai\";\nimport { clampThinkingLevel } from \"../models.js\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.js\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.js\";\nimport { headersToRecord } from \"../utils/headers.js\";\nimport { getProviderEnvValue } from \"../utils/provider-env.js\";\nimport { retryProviderRequest } from \"../utils/provider-retry.js\";\nimport { createGrammarToolInputProperties } from \"./constrained-sampling.js\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.js\";\nimport { convertResponsesMessages, convertResponsesTools, processResponsesStream } from \"./openai-responses-shared.js\";\nimport { buildBaseOptions } from \"./simple-options.js\";\nconst DEFAULT_AZURE_API_VERSION = \"v1\";\nconst AZURE_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\", \"azure-openai-responses\"]);\n// OpenAI Responses rejects max_output_tokens below 16: https://github.com/earendil-works/pi/issues/6265\nconst OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;\nfunction parseDeploymentNameMap(value) {\n const map = new Map();\n if (!value)\n return map;\n for (const entry of value.split(\",\")) {\n const trimmed = entry.trim();\n if (!trimmed)\n continue;\n const [modelId, deploymentName] = trimmed.split(\"=\", 2);\n if (!modelId || !deploymentName)\n continue;\n map.set(modelId.trim(), deploymentName.trim());\n }\n return map;\n}\nfunction resolveDeploymentName(model, options) {\n if (options?.azureDeploymentName) {\n return options.azureDeploymentName;\n }\n const mappedDeployment = parseDeploymentNameMap(getProviderEnvValue(\"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\", options?.env)).get(model.id);\n return mappedDeployment || model.id;\n}\nfunction formatAzureOpenAIError(error) {\n return formatProviderError(normalizeProviderError(error), \"Azure OpenAI API error\");\n}\n/**\n * Generate function for Azure OpenAI Responses API\n */\nexport const stream = (model, context, options) => {\n const stream = new AssistantMessageEventStream();\n // Start async processing\n (async () => {\n const deploymentName = resolveDeploymentName(model, options);\n const output = {\n role: \"assistant\",\n content: [],\n api: \"azure-openai-responses\",\n provider: model.provider,\n model: model.id,\n usage: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n },\n stopReason: \"pending\",\n timestamp: Date.now(),\n };\n try {\n // Create Azure OpenAI client\n const apiKey = options?.apiKey;\n if (!apiKey) {\n throw new Error(`No API key for provider: ${model.provider}`);\n }\n const client = createClient(model, apiKey, options);\n const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false);\n let params = buildParams(model, context, options, deploymentName, grammarToolInputProperties);\n const nextParams = await options?.onPayload?.(params, model);\n if (nextParams !== undefined) {\n params = nextParams;\n }\n const requestOptions = {\n ...(options?.signal ? { signal: options.signal } : {}),\n ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),\n maxRetries: 0,\n };\n const { data: openaiStream, response } = await retryProviderRequest(() => client.responses.create(params, requestOptions).withResponse(), {\n maxRetries: options?.maxRetries,\n maxRetryDelayMs: options?.maxRetryDelayMs,\n signal: options?.signal,\n });\n await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n stream.push({ type: \"start\", partial: output });\n await processResponsesStream(openaiStream, output, stream, model, { grammarToolInputProperties });\n if (options?.signal?.aborted) {\n throw new Error(\"Request was aborted\");\n }\n if (output.stopReason === \"pending\") {\n throw new Error(\"Azure OpenAI Responses stream ended without a stop reason\");\n }\n if (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n throw new Error(output.errorMessage || \"An unknown error occurred\");\n }\n stream.push({ type: \"done\", reason: output.stopReason, message: output });\n stream.end();\n }\n catch (error) {\n for (const block of output.content) {\n delete block.index;\n // Streaming scratch buffers are only used during parsing; never persist them.\n delete block.partialJson;\n delete block.customInput;\n }\n output.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n output.errorMessage = formatAzureOpenAIError(error);\n stream.push({ type: \"error\", reason: output.stopReason, error: output });\n stream.end();\n }\n })();\n return stream;\n};\nexport const streamSimple = (model, context, options) => {\n const apiKey = options?.apiKey;\n if (!apiKey) {\n throw new Error(`No API key for provider: ${model.provider}`);\n }\n const base = buildBaseOptions(model, context, options, apiKey);\n const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;\n const reasoningEffort = clampedReasoning === \"off\" ? undefined : clampedReasoning;\n return stream(model, context, {\n ...base,\n reasoningEffort,\n });\n};\nfunction normalizeAzureBaseUrl(baseUrl) {\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\n let url;\n try {\n url = new URL(trimmed);\n }\n catch {\n throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`);\n }\n const isAzureHost = url.hostname.endsWith(\".openai.azure.com\") ||\n url.hostname.endsWith(\".cognitiveservices.azure.com\") ||\n url.hostname.endsWith(\".ai.azure.com\");\n const normalizedPath = url.pathname.replace(/\\/+$/, \"\");\n // Ensure Azure hosts have /openai/v1 as base path so the AzureOpenAI SDK\n // can append /deployments/<model>/... and ?api-version=v1 correctly.\n if (isAzureHost &&\n (normalizedPath === \"\" ||\n normalizedPath === \"/\" ||\n normalizedPath === \"/openai\" ||\n normalizedPath === \"/openai/v1/responses\")) {\n url.pathname = \"/openai/v1\";\n url.search = \"\";\n }\n return url.toString().replace(/\\/+$/, \"\");\n}\nfunction buildDefaultBaseUrl(resourceName) {\n return `https://${resourceName}.openai.azure.com/openai/v1`;\n}\nfunction resolveAzureConfig(model, options) {\n const apiVersion = options?.azureApiVersion ||\n getProviderEnvValue(\"AZURE_OPENAI_API_VERSION\", options?.env) ||\n DEFAULT_AZURE_API_VERSION;\n const baseUrl = options?.azureBaseUrl?.trim() || getProviderEnvValue(\"AZURE_OPENAI_BASE_URL\", options?.env)?.trim() || undefined;\n const resourceName = options?.azureResourceName || getProviderEnvValue(\"AZURE_OPENAI_RESOURCE_NAME\", options?.env);\n let resolvedBaseUrl = baseUrl;\n if (!resolvedBaseUrl && resourceName) {\n resolvedBaseUrl = buildDefaultBaseUrl(resourceName);\n }\n if (!resolvedBaseUrl && model.baseUrl) {\n resolvedBaseUrl = model.baseUrl;\n }\n if (!resolvedBaseUrl) {\n throw new Error(\"Azure OpenAI base URL is required. Set AZURE_OPENAI_BASE_URL or AZURE_OPENAI_RESOURCE_NAME, or pass azureBaseUrl, azureResourceName, or model.baseUrl.\");\n }\n return {\n baseUrl: normalizeAzureBaseUrl(resolvedBaseUrl),\n apiVersion,\n };\n}\nfunction createClient(model, apiKey, options) {\n const headers = { ...model.headers };\n if (options?.headers) {\n Object.assign(headers, options.headers);\n }\n const { baseUrl, apiVersion } = resolveAzureConfig(model, options);\n return new AzureOpenAI({\n apiKey,\n apiVersion,\n dangerouslyAllowBrowser: true,\n fetch: options?.fetch,\n defaultHeaders: headers,\n baseURL: baseUrl,\n });\n}\nfunction buildParams(model, context, options, deploymentName, grammarToolInputProperties = createGrammarToolInputProperties(context.tools, model.compat?.supportsOpenAIGrammarTools ?? false)) {\n const messages = convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, {\n grammarToolInputProperties,\n });\n const params = {\n model: deploymentName,\n input: messages,\n stream: true,\n prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),\n store: false,\n };\n if (options?.maxTokens) {\n params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);\n }\n if (options?.temperature !== undefined) {\n params.temperature = options?.temperature;\n }\n if (context.tools && context.tools.length > 0) {\n params.tools = convertResponsesTools(context.tools, {\n supportsStrictMode: model.compat?.supportsStrictMode ?? true,\n supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n });\n }\n if (model.reasoning) {\n if (options?.reasoningEffort || options?.reasoningSummary) {\n const effort = options?.reasoningEffort\n ? (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)\n : \"medium\";\n params.reasoning = {\n effort: effort,\n summary: options?.reasoningSummary || \"auto\",\n };\n params.include = [\"reasoning.encrypted_content\"];\n }\n else if (model.thinkingLevelMap?.off !== null) {\n params.reasoning = {\n effort: (model.thinkingLevelMap?.off ?? \"none\"),\n };\n }\n }\n // Last so custom keys override the named request fields.\n if (options?.samplingParams) {\n Object.assign(params, options.samplingParams);\n }\n return params;\n}\n//# sourceMappingURL=azure-openai-responses.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
 
2
- import { t as __exportAll } from "./rolldown-runtime-D-uZhY3_.mjs";
2
+ import { r as __exportAll } from "./rolldown-runtime-CTfmNlz1.mjs";
3
3
  //#region src/compat/vendor/pi-uuid.ts
4
4
  let lastTimestamp = -Infinity;
5
5
  let sequence = 0;
@@ -4413,4 +4413,4 @@ var typebox_exports = /* @__PURE__ */ __exportAll({
4413
4413
  //#endregion
4414
4414
  export { _Object_$1 as a, uuidv7 as c, Boolean$1 as i, String$2 as n, Optional$2 as o, Number$2 as r, _Array_ as s, typebox_exports as t };
4415
4415
 
4416
- //# sourceMappingURL=build-DsGYAgiT.mjs.map
4416
+ //# sourceMappingURL=build-BG7p2Lbr.mjs.map