pagegraph 0.13.0 → 0.14.0

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 (80) hide show
  1. package/README.md +48 -41
  2. package/dist/anthropic-messages-TqKpKmfW.js +1067 -0
  3. package/dist/anthropic-messages-TqKpKmfW.js.map +1 -0
  4. package/dist/audit.d.ts +2 -0
  5. package/dist/audit.js +1 -1
  6. package/dist/audit.js.map +1 -1
  7. package/dist/azure-openai-responses-DJjBLwoI.js +231 -0
  8. package/dist/azure-openai-responses-DJjBLwoI.js.map +1 -0
  9. package/dist/cli.js +10487 -38044
  10. package/dist/cli.js.map +1 -1
  11. package/dist/cloudflare-workers-ai-system-one-f3ZrvNYZ.js +41 -0
  12. package/dist/cloudflare-workers-ai-system-one-f3ZrvNYZ.js.map +1 -0
  13. package/dist/config.d.ts +6 -6
  14. package/dist/config.js.map +1 -1
  15. package/dist/diagnostics-Wt5faNDM.js +108 -0
  16. package/dist/diagnostics-Wt5faNDM.js.map +1 -0
  17. package/dist/dist-B6zg_Z3Z.js +4794 -0
  18. package/dist/dist-B6zg_Z3Z.js.map +1 -0
  19. package/dist/env-api-keys-C-OA0yM-.js +124 -0
  20. package/dist/env-api-keys-C-OA0yM-.js.map +1 -0
  21. package/dist/error-body-CyiejW4b.js +103 -0
  22. package/dist/error-body-CyiejW4b.js.map +1 -0
  23. package/dist/github-copilot-headers-CEpMOpQF.js +24 -0
  24. package/dist/github-copilot-headers-CEpMOpQF.js.map +1 -0
  25. package/dist/google-generative-ai-BxABKIKO.js +330 -0
  26. package/dist/google-generative-ai-BxABKIKO.js.map +1 -0
  27. package/dist/google-shared-0gpM2jFi.js +19471 -0
  28. package/dist/google-shared-0gpM2jFi.js.map +1 -0
  29. package/dist/google-vertex-D8Eb5cbu.js +376 -0
  30. package/dist/google-vertex-D8Eb5cbu.js.map +1 -0
  31. package/dist/hash-Dp7EzZUo.js +18 -0
  32. package/dist/hash-Dp7EzZUo.js.map +1 -0
  33. package/dist/headers-BRNMVpzu.js +19 -0
  34. package/dist/headers-BRNMVpzu.js.map +1 -0
  35. package/dist/json-parse-C10znB7l.js +383 -0
  36. package/dist/json-parse-C10znB7l.js.map +1 -0
  37. package/dist/mistral-conversations-CvaqBWjR.js +690 -0
  38. package/dist/mistral-conversations-CvaqBWjR.js.map +1 -0
  39. package/dist/models-DcT5qOEL.js +1203 -0
  40. package/dist/models-DcT5qOEL.js.map +1 -0
  41. package/dist/node-Ccvru9GE.js +26 -0
  42. package/dist/node-Ccvru9GE.js.map +1 -0
  43. package/dist/node-MEosBOF2.js +2403 -0
  44. package/dist/node-MEosBOF2.js.map +1 -0
  45. package/dist/openai-BCBEd2eO.js +17350 -0
  46. package/dist/openai-BCBEd2eO.js.map +1 -0
  47. package/dist/openai-codex-responses-vJqxeeRC.js +1268 -0
  48. package/dist/openai-codex-responses-vJqxeeRC.js.map +1 -0
  49. package/dist/openai-completions-Cb_fRAbI.js +989 -0
  50. package/dist/openai-completions-Cb_fRAbI.js.map +1 -0
  51. package/dist/openai-prompt-cache-Bc6qNWt0.js +10 -0
  52. package/dist/openai-prompt-cache-Bc6qNWt0.js.map +1 -0
  53. package/dist/openai-responses-sDuh82G5.js +268 -0
  54. package/dist/openai-responses-sDuh82G5.js.map +1 -0
  55. package/dist/openai-responses-shared-mhuo1Jov.js +599 -0
  56. package/dist/openai-responses-shared-mhuo1Jov.js.map +1 -0
  57. package/dist/openrouter-images-CRmBkzpX.js +127 -0
  58. package/dist/openrouter-images-CRmBkzpX.js.map +1 -0
  59. package/dist/pi-Bvw6J0gh.js +56795 -0
  60. package/dist/pi-Bvw6J0gh.js.map +1 -0
  61. package/dist/pi-messages-CejiVYvO.js +308 -0
  62. package/dist/pi-messages-CejiVYvO.js.map +1 -0
  63. package/dist/provider-env-t38GK5FF.js +39 -0
  64. package/dist/provider-env-t38GK5FF.js.map +1 -0
  65. package/dist/provider-retry-DzKoh1X7.js +80 -0
  66. package/dist/provider-retry-DzKoh1X7.js.map +1 -0
  67. package/dist/rolldown-runtime-B-lAHAz2.js +37 -0
  68. package/dist/sanitize-unicode-Ds14l9Om.js +28 -0
  69. package/dist/sanitize-unicode-Ds14l9Om.js.map +1 -0
  70. package/dist/sdk-C9_wiO6w.js +12503 -0
  71. package/dist/sdk-C9_wiO6w.js.map +1 -0
  72. package/dist/state-BuJP_3Lr.js +28102 -0
  73. package/dist/state-BuJP_3Lr.js.map +1 -0
  74. package/dist/system-one-shared-Dl10ZF7Z.js +167 -0
  75. package/dist/system-one-shared-Dl10ZF7Z.js.map +1 -0
  76. package/dist/transform-messages-BLJ8EfK6.js +468 -0
  77. package/dist/transform-messages-BLJ8EfK6.js.map +1 -0
  78. package/dist/typesafe-system-one-CwEWMV8P.js +25 -0
  79. package/dist/typesafe-system-one-CwEWMV8P.js.map +1 -0
  80. package/package.json +4 -8
@@ -0,0 +1,231 @@
1
+ import { t as getProviderEnvValue } from "./provider-env-t38GK5FF.js";
2
+ import { a as AssistantMessageEventStream } from "./diagnostics-Wt5faNDM.js";
3
+ import { f as getDeclaredTools, n as clampThinkingLevel, v as resolveTranscript, y as resolveTranscriptTools } from "./models-DcT5qOEL.js";
4
+ import { t as headersToRecord } from "./headers-BRNMVpzu.js";
5
+ import { c as createGrammarToolInputProperties, p as getPiUserAgent, r as buildBaseOptions } from "./transform-messages-BLJ8EfK6.js";
6
+ import { t as retryProviderRequest } from "./provider-retry-DzKoh1X7.js";
7
+ import { t as AzureOpenAI } from "./openai-BCBEd2eO.js";
8
+ import { n as normalizeProviderError, t as formatProviderError } from "./error-body-CyiejW4b.js";
9
+ import { t as clampOpenAIPromptCacheKey } from "./openai-prompt-cache-Bc6qNWt0.js";
10
+ import { n as convertResponsesTools, r as processResponsesStream, t as convertResponsesMessages } from "./openai-responses-shared-mhuo1Jov.js";
11
+ //#region node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.js
12
+ const DEFAULT_AZURE_API_VERSION = "v1";
13
+ const AZURE_TOOL_CALL_PROVIDERS = /* @__PURE__ */ new Set([
14
+ "openai",
15
+ "openai-codex",
16
+ "opencode",
17
+ "azure-openai-responses"
18
+ ]);
19
+ const OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;
20
+ function parseDeploymentNameMap(value) {
21
+ const map = /* @__PURE__ */ new Map();
22
+ if (!value) return map;
23
+ for (const entry of value.split(",")) {
24
+ const trimmed = entry.trim();
25
+ if (!trimmed) continue;
26
+ const [modelId, deploymentName] = trimmed.split("=", 2);
27
+ if (!modelId || !deploymentName) continue;
28
+ map.set(modelId.trim(), deploymentName.trim());
29
+ }
30
+ return map;
31
+ }
32
+ function resolveDeploymentName(model, options) {
33
+ if (options?.azureDeploymentName) return options.azureDeploymentName;
34
+ return parseDeploymentNameMap(getProviderEnvValue("AZURE_OPENAI_DEPLOYMENT_NAME_MAP", options?.env)).get(model.id) || model.id;
35
+ }
36
+ function formatAzureOpenAIError(error) {
37
+ return formatProviderError(normalizeProviderError(error), "Azure OpenAI API error");
38
+ }
39
+ /**
40
+ * Generate function for Azure OpenAI Responses API
41
+ */
42
+ const stream = (model, context, options) => {
43
+ const stream = new AssistantMessageEventStream();
44
+ const normalizedContext = resolveTranscript(context, model.compat?.supportsMidConvoSystemMessages);
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(getDeclaredTools(normalizedContext.messages), model.compat?.supportsOpenAIGrammarTools ?? false);
75
+ let params = buildParams(model, normalizedContext, 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, {
97
+ onProviderStreamEvent: options?.onProviderStreamEvent,
98
+ grammarToolInputProperties
99
+ });
100
+ if (options?.signal?.aborted) throw new Error("Request was aborted");
101
+ if (output.stopReason === "pending") throw new Error("Azure OpenAI Responses stream ended without a stop reason");
102
+ if (output.stopReason === "aborted" || output.stopReason === "error") throw new Error(output.errorMessage || "An unknown error occurred");
103
+ stream.push({
104
+ type: "done",
105
+ reason: output.stopReason,
106
+ message: output
107
+ });
108
+ stream.end();
109
+ } catch (error) {
110
+ for (const block of output.content) {
111
+ delete block.index;
112
+ delete block.partialJson;
113
+ delete block.customInput;
114
+ }
115
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
116
+ output.errorMessage = formatAzureOpenAIError(error);
117
+ stream.push({
118
+ type: "error",
119
+ reason: output.stopReason,
120
+ error: output
121
+ });
122
+ stream.end();
123
+ }
124
+ })();
125
+ return stream;
126
+ };
127
+ const streamSimple = (model, context, options) => {
128
+ const apiKey = options?.apiKey;
129
+ if (!apiKey) throw new Error(`No API key for provider: ${model.provider}`);
130
+ const base = {
131
+ ...buildBaseOptions(model, context, options, apiKey),
132
+ toolChoice: options?.toolChoice
133
+ };
134
+ const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : void 0;
135
+ const reasoningEffort = clampedReasoning === "off" ? void 0 : clampedReasoning;
136
+ return stream(model, context, {
137
+ ...base,
138
+ reasoningEffort
139
+ });
140
+ };
141
+ function normalizeAzureBaseUrl(baseUrl) {
142
+ const trimmed = baseUrl.trim().replace(/\/+$/, "");
143
+ let url;
144
+ try {
145
+ url = new URL(trimmed);
146
+ } catch {
147
+ throw new Error(`Invalid Azure OpenAI base URL: ${baseUrl}`);
148
+ }
149
+ const isAzureHost = url.hostname.endsWith(".openai.azure.com") || url.hostname.endsWith(".cognitiveservices.azure.com") || url.hostname.endsWith(".ai.azure.com");
150
+ const normalizedPath = url.pathname.replace(/\/+$/, "");
151
+ if (isAzureHost && (normalizedPath === "" || normalizedPath === "/" || normalizedPath === "/openai" || normalizedPath === "/openai/v1/responses")) {
152
+ url.pathname = "/openai/v1";
153
+ url.search = "";
154
+ }
155
+ return url.toString().replace(/\/+$/, "");
156
+ }
157
+ function buildDefaultBaseUrl(resourceName) {
158
+ return `https://${resourceName}.openai.azure.com/openai/v1`;
159
+ }
160
+ function resolveAzureConfig(model, options) {
161
+ const apiVersion = options?.azureApiVersion || getProviderEnvValue("AZURE_OPENAI_API_VERSION", options?.env) || DEFAULT_AZURE_API_VERSION;
162
+ const baseUrl = options?.azureBaseUrl?.trim() || getProviderEnvValue("AZURE_OPENAI_BASE_URL", options?.env)?.trim() || void 0;
163
+ const resourceName = options?.azureResourceName || getProviderEnvValue("AZURE_OPENAI_RESOURCE_NAME", options?.env);
164
+ let resolvedBaseUrl = baseUrl;
165
+ if (!resolvedBaseUrl && resourceName) resolvedBaseUrl = buildDefaultBaseUrl(resourceName);
166
+ if (!resolvedBaseUrl && model.baseUrl) resolvedBaseUrl = model.baseUrl;
167
+ 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.");
168
+ return {
169
+ baseUrl: normalizeAzureBaseUrl(resolvedBaseUrl),
170
+ apiVersion
171
+ };
172
+ }
173
+ function createClient(model, apiKey, options) {
174
+ const headers = {
175
+ "User-Agent": getPiUserAgent(),
176
+ ...model.headers
177
+ };
178
+ if (options?.headers) Object.assign(headers, options.headers);
179
+ const { baseUrl, apiVersion } = resolveAzureConfig(model, options);
180
+ return new AzureOpenAI({
181
+ apiKey,
182
+ apiVersion,
183
+ dangerouslyAllowBrowser: true,
184
+ fetch: options?.fetch,
185
+ defaultHeaders: headers,
186
+ baseURL: baseUrl
187
+ });
188
+ }
189
+ function buildParams(model, context, options, deploymentName, grammarToolInputProperties = createGrammarToolInputProperties(getDeclaredTools(context.messages), model.compat?.supportsOpenAIGrammarTools ?? false)) {
190
+ const supportsAdditionalTools = model.compat?.supportsAdditionalTools ?? false;
191
+ const supportsToolSearch = model.compat?.supportsToolSearch ?? false;
192
+ const transcriptTools = resolveTranscriptTools(context.messages, supportsAdditionalTools || supportsToolSearch);
193
+ const params = {
194
+ model: deploymentName,
195
+ input: convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, {
196
+ grammarToolInputProperties,
197
+ supportsMidConvoSystemMessages: model.compat?.supportsMidConvoSystemMessages ?? false,
198
+ supportsAdditionalTools,
199
+ supportsToolSearch,
200
+ toolOptions: {
201
+ supportsStrictMode: model.compat?.supportsStrictMode ?? true,
202
+ supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false
203
+ }
204
+ }),
205
+ stream: true,
206
+ prompt_cache_key: clampOpenAIPromptCacheKey(options?.sessionId),
207
+ store: false
208
+ };
209
+ if (options?.maxTokens) params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);
210
+ if (options?.temperature !== void 0) params.temperature = options?.temperature;
211
+ if (transcriptTools.requestTools.length > 0) params.tools = convertResponsesTools(transcriptTools.requestTools, {
212
+ supportsStrictMode: model.compat?.supportsStrictMode ?? true,
213
+ supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false
214
+ });
215
+ if (options?.toolChoice !== void 0) params.tool_choice = options.toolChoice;
216
+ if (model.reasoning) {
217
+ if (options?.reasoningEffort || options?.reasoningSummary) {
218
+ params.reasoning = {
219
+ effort: options?.reasoningEffort ? model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort : "medium",
220
+ summary: options?.reasoningSummary || "auto"
221
+ };
222
+ params.include = ["reasoning.encrypted_content"];
223
+ } else if (model.thinkingLevelMap?.off !== null) params.reasoning = { effort: model.thinkingLevelMap?.off ?? "none" };
224
+ }
225
+ Object.assign(params, model.samplingParams, options?.samplingParams);
226
+ return params;
227
+ }
228
+ //#endregion
229
+ export { stream, streamSimple };
230
+
231
+ //# sourceMappingURL=azure-openai-responses-DJjBLwoI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-openai-responses-DJjBLwoI.js","names":[],"sources":["../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 { getPiUserAgent } from \"../utils/pi-user-agent.js\";\nimport { getProviderEnvValue } from \"../utils/provider-env.js\";\nimport { retryProviderRequest } from \"../utils/provider-retry.js\";\nimport { getDeclaredTools, resolveTranscript, resolveTranscriptTools } from \"../utils/transcript.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 const normalizedContext = resolveTranscript(context, model.compat?.supportsMidConvoSystemMessages);\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(getDeclaredTools(normalizedContext.messages), model.compat?.supportsOpenAIGrammarTools ?? false);\n let params = buildParams(model, normalizedContext, 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, {\n onProviderStreamEvent: options?.onProviderStreamEvent,\n grammarToolInputProperties,\n });\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 = {\n ...buildBaseOptions(model, context, options, apiKey),\n toolChoice: options?.toolChoice,\n };\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 = { \"User-Agent\": getPiUserAgent(), ...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(getDeclaredTools(context.messages), model.compat?.supportsOpenAIGrammarTools ?? false)) {\n const supportsAdditionalTools = model.compat?.supportsAdditionalTools ?? false;\n const supportsToolSearch = model.compat?.supportsToolSearch ?? false;\n const transcriptTools = resolveTranscriptTools(context.messages, supportsAdditionalTools || supportsToolSearch);\n const messages = convertResponsesMessages(model, context, AZURE_TOOL_CALL_PROVIDERS, {\n grammarToolInputProperties,\n supportsMidConvoSystemMessages: model.compat?.supportsMidConvoSystemMessages ?? false,\n supportsAdditionalTools,\n supportsToolSearch,\n toolOptions: {\n supportsStrictMode: model.compat?.supportsStrictMode ?? true,\n supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n },\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 (transcriptTools.requestTools.length > 0) {\n params.tools = convertResponsesTools(transcriptTools.requestTools, {\n supportsStrictMode: model.compat?.supportsStrictMode ?? true,\n supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n });\n }\n if (options?.toolChoice !== undefined) {\n params.tool_choice = options.toolChoice;\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. Per-request keys override model defaults.\n Object.assign(params, model.samplingParams, options?.samplingParams);\n return params;\n}\n//# sourceMappingURL=azure-openai-responses.js.map"],"x_google_ignoreList":[0],"mappings":"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"}