call-ai 0.0.0-dev-prompts

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 (55) hide show
  1. package/LICENSE.md +232 -0
  2. package/README.md +264 -0
  3. package/api-core.d.ts +13 -0
  4. package/api-core.js +238 -0
  5. package/api-core.js.map +1 -0
  6. package/api.d.ts +4 -0
  7. package/api.js +365 -0
  8. package/api.js.map +1 -0
  9. package/api.ts.off +595 -0
  10. package/env.d.ts +22 -0
  11. package/env.js +65 -0
  12. package/env.js.map +1 -0
  13. package/error-handling.d.ts +14 -0
  14. package/error-handling.js +144 -0
  15. package/error-handling.js.map +1 -0
  16. package/image.d.ts +2 -0
  17. package/image.js +72 -0
  18. package/image.js.map +1 -0
  19. package/index.d.ts +7 -0
  20. package/index.js +8 -0
  21. package/index.js.map +1 -0
  22. package/index.ts.bak +16 -0
  23. package/key-management.d.ts +29 -0
  24. package/key-management.js +190 -0
  25. package/key-management.js.map +1 -0
  26. package/non-streaming.d.ts +7 -0
  27. package/non-streaming.js +206 -0
  28. package/non-streaming.js.map +1 -0
  29. package/package.json +43 -0
  30. package/response-metadata.d.ts +6 -0
  31. package/response-metadata.js +22 -0
  32. package/response-metadata.js.map +1 -0
  33. package/strategies/index.d.ts +2 -0
  34. package/strategies/index.js +3 -0
  35. package/strategies/index.js.map +1 -0
  36. package/strategies/model-strategies.d.ts +6 -0
  37. package/strategies/model-strategies.js +138 -0
  38. package/strategies/model-strategies.js.map +1 -0
  39. package/strategies/strategy-selector.d.ts +2 -0
  40. package/strategies/strategy-selector.js +66 -0
  41. package/strategies/strategy-selector.js.map +1 -0
  42. package/streaming.d.ts +4 -0
  43. package/streaming.js +365 -0
  44. package/streaming.js.map +1 -0
  45. package/streaming.ts.off +571 -0
  46. package/tsconfig.json +18 -0
  47. package/types.d.ts +228 -0
  48. package/types.js +33 -0
  49. package/types.js.map +1 -0
  50. package/utils.d.ts +8 -0
  51. package/utils.js +42 -0
  52. package/utils.js.map +1 -0
  53. package/version.d.ts +1 -0
  54. package/version.js +2 -0
  55. package/version.js.map +1 -0
package/api-core.js ADDED
@@ -0,0 +1,238 @@
1
+ import { isToolUseType, isToolUseResponse, isOpenAIArray, CallAIError, } from "./types.js";
2
+ import { globalDebug } from "./key-management.js";
3
+ import { callAINonStreaming } from "./non-streaming.js";
4
+ import { callAIStreaming } from "./streaming.js";
5
+ import { PACKAGE_VERSION } from "./version.js";
6
+ import { callAiEnv } from "./env.js";
7
+ function callAi(prompt, options = {}) {
8
+ const debug = options.debug === undefined ? globalDebug : options.debug;
9
+ prepareRequestParams(prompt, options);
10
+ let schemaStrategy = {
11
+ strategy: "none",
12
+ model: options.model || "openai/gpt-3.5-turbo",
13
+ prepareRequest: () => {
14
+ throw new Error("Schema strategy not implemented");
15
+ },
16
+ processResponse: (response) => {
17
+ if (response && typeof response === "object") {
18
+ return JSON.stringify(response);
19
+ }
20
+ if (typeof response !== "string") {
21
+ throw new Error(`Unexpected response type: ${typeof response}`);
22
+ }
23
+ return response;
24
+ },
25
+ shouldForceStream: false,
26
+ };
27
+ if (options.schema) {
28
+ const model = options.model || "openai/gpt-3.5-turbo";
29
+ if (/claude/i.test(model) || /anthropic/i.test(model)) {
30
+ schemaStrategy = {
31
+ strategy: "tool_mode",
32
+ model,
33
+ shouldForceStream: false,
34
+ prepareRequest: (schema) => {
35
+ let toolDef = {};
36
+ if (typeof schema === "string") {
37
+ try {
38
+ toolDef = JSON.parse(schema);
39
+ }
40
+ catch (e) {
41
+ toolDef = { description: schema };
42
+ }
43
+ }
44
+ else if (schema) {
45
+ toolDef = schema;
46
+ }
47
+ const tools = [
48
+ {
49
+ type: "function",
50
+ function: {
51
+ name: toolDef.name || "execute_function",
52
+ description: toolDef.description || "Execute a function",
53
+ parameters: toolDef.parameters || {
54
+ type: "object",
55
+ properties: {},
56
+ },
57
+ },
58
+ },
59
+ ];
60
+ return {
61
+ tools,
62
+ tool_choice: {
63
+ type: "function",
64
+ function: { name: tools[0].function.name },
65
+ },
66
+ };
67
+ },
68
+ processResponse: (response) => {
69
+ if (typeof response === "string") {
70
+ return response;
71
+ }
72
+ if (isToolUseType(response)) {
73
+ return response.input || "{}";
74
+ }
75
+ if (isToolUseResponse(response)) {
76
+ return response.tool_use.input || "{}";
77
+ }
78
+ if (isOpenAIArray(response)) {
79
+ if (response.length > 0 && response[0].function && response[0].function.arguments) {
80
+ return response[0].function.arguments;
81
+ }
82
+ }
83
+ return typeof response === "string" ? response : JSON.stringify(response);
84
+ },
85
+ };
86
+ }
87
+ else {
88
+ schemaStrategy = {
89
+ strategy: "json_schema",
90
+ model,
91
+ shouldForceStream: false,
92
+ prepareRequest: (schema) => {
93
+ const schemaObj = schema || {};
94
+ return {
95
+ response_format: {
96
+ type: "json_schema",
97
+ json_schema: {
98
+ name: schemaObj.name || "result",
99
+ schema: {
100
+ type: "object",
101
+ properties: schemaObj.properties || {},
102
+ required: schemaObj.required || Object.keys(schemaObj.properties || {}),
103
+ additionalProperties: schemaObj.additionalProperties !== undefined ? schemaObj.additionalProperties : false,
104
+ },
105
+ },
106
+ },
107
+ };
108
+ },
109
+ processResponse: (response) => {
110
+ if (typeof response === "string") {
111
+ return response;
112
+ }
113
+ return JSON.stringify(response);
114
+ },
115
+ };
116
+ }
117
+ }
118
+ if (options.stream) {
119
+ if (debug) {
120
+ console.log(`[callAi:${PACKAGE_VERSION}] Making streaming request`);
121
+ }
122
+ const streamPromise = (async () => {
123
+ return callAIStreaming(prompt, {
124
+ ...options,
125
+ schemaStrategy,
126
+ });
127
+ })();
128
+ return createBackwardCompatStreamingProxy(streamPromise);
129
+ }
130
+ else {
131
+ if (debug) {
132
+ console.log(`[callAi:${PACKAGE_VERSION}] Making non-streaming request`);
133
+ }
134
+ const optionsWithSchema = {
135
+ ...options,
136
+ schemaStrategy,
137
+ };
138
+ return callAINonStreaming(prompt, optionsWithSchema);
139
+ }
140
+ }
141
+ async function bufferStreamingResults(generator) {
142
+ let result = "";
143
+ try {
144
+ for await (const chunk of generator) {
145
+ result += chunk;
146
+ }
147
+ return result;
148
+ }
149
+ catch (error) {
150
+ if (error instanceof Error) {
151
+ const enhancedError = new CallAIError({
152
+ message: `${error.message} (Partial content: ${result.slice(0, 100)}...)`,
153
+ status: 511,
154
+ partialContent: result,
155
+ originalError: error,
156
+ });
157
+ throw enhancedError;
158
+ }
159
+ else {
160
+ const newError = new CallAIError({
161
+ message: `Streaming error: ${String(error)}`,
162
+ status: 511,
163
+ partialContent: result,
164
+ originalError: error,
165
+ });
166
+ throw newError;
167
+ }
168
+ }
169
+ }
170
+ function createBackwardCompatStreamingProxy(promise) {
171
+ return new Proxy({}, {
172
+ get(_target, prop) {
173
+ if (prop === "next" || prop === "throw" || prop === "return" || prop === Symbol.asyncIterator) {
174
+ if (prop === Symbol.asyncIterator) {
175
+ return function () {
176
+ return {
177
+ async next(value) {
178
+ try {
179
+ const generator = await promise;
180
+ return generator.next(value);
181
+ }
182
+ catch (error) {
183
+ return Promise.reject(error);
184
+ }
185
+ },
186
+ };
187
+ };
188
+ }
189
+ return async function (value) {
190
+ const generator = await promise;
191
+ switch (prop) {
192
+ case "next":
193
+ return generator.next(value);
194
+ case "throw":
195
+ return generator.throw(value);
196
+ case "return":
197
+ return generator.return(value);
198
+ default:
199
+ throw new Error(`Unknown method: ${String(prop)}`);
200
+ }
201
+ };
202
+ }
203
+ if (prop === "then" || prop === "catch" || prop === "finally") {
204
+ return promise[prop].bind(promise);
205
+ }
206
+ return undefined;
207
+ },
208
+ });
209
+ }
210
+ function prepareRequestParams(prompt, options = {}) {
211
+ const apiKey = options.apiKey || callAiEnv.CALLAI_API_KEY;
212
+ if (!apiKey) {
213
+ throw new Error("API key is required. Provide it via options.apiKey or set window.CALLAI_API_KEY");
214
+ }
215
+ if (!prompt || (typeof prompt !== "string" && !Array.isArray(prompt))) {
216
+ throw new Error(`Invalid prompt: ${prompt}. Must be a string or an array of message objects.`);
217
+ }
218
+ const messages = Array.isArray(prompt) ? prompt : [{ role: "user", content: prompt }];
219
+ if (Array.isArray(prompt)) {
220
+ for (const message of prompt) {
221
+ if (!message.role || !message.content) {
222
+ throw new Error(`Invalid message format. Each message must have 'role' and 'content' properties. Received: ${JSON.stringify(message)}`);
223
+ }
224
+ if (typeof message.role !== "string" || (typeof message.content !== "string" && !Array.isArray(message.content))) {
225
+ throw new Error(`Invalid message format. 'role' must be a string and 'content' must be a string or array. Received role: ${typeof message.role}, content: ${typeof message.content}`);
226
+ }
227
+ }
228
+ }
229
+ if (options.provider && options.provider !== "auto" && options.model && !options.model.startsWith(options.provider + "/")) {
230
+ console.warn(`[callAi:${PACKAGE_VERSION}] WARNING: Specified provider '${options.provider}' doesn't match model '${options.model}'. Using model as specified.`);
231
+ }
232
+ return {
233
+ messages,
234
+ apiKey,
235
+ };
236
+ }
237
+ export { callAi, bufferStreamingResults, createBackwardCompatStreamingProxy, prepareRequestParams, PACKAGE_VERSION };
238
+ //# sourceMappingURL=api-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-core.js","sourceRoot":"","sources":["../jsr/api-core.ts"],"names":[],"mappings":"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"}
package/api.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { CallAIOptions, Message, StreamResponse } from "./types.js";
2
+ import { getMeta } from "./response-metadata.js";
3
+ export { getMeta };
4
+ export declare function callAi(prompt: string | Message[], options?: CallAIOptions): Promise<string | StreamResponse>;
package/api.js ADDED
@@ -0,0 +1,365 @@
1
+ import { CallAIError } from "./types.js";
2
+ import { chooseSchemaStrategy } from "./strategies/index.js";
3
+ import { responseMetadata, boxString, getMeta } from "./response-metadata.js";
4
+ import { keyStore, globalDebug } from "./key-management.js";
5
+ import { handleApiError, checkForInvalidModelError } from "./error-handling.js";
6
+ import { createBackwardCompatStreamingProxy } from "./api-core.js";
7
+ import { extractContent, extractClaudeResponse, PACKAGE_VERSION } from "./non-streaming.js";
8
+ import { createStreamingGenerator } from "./streaming.js";
9
+ import { callAiFetch } from "./utils.js";
10
+ import { callAiEnv } from "./env.js";
11
+ export { getMeta };
12
+ const FALLBACK_MODEL = "openrouter/auto";
13
+ export function callAi(prompt, options = {}) {
14
+ const schemaStrategy = chooseSchemaStrategy(options.model, options.schema || null);
15
+ if (!options.stream && schemaStrategy.shouldForceStream) {
16
+ return bufferStreamingResults(prompt, options);
17
+ }
18
+ if (options.stream !== true) {
19
+ return callAINonStreaming(prompt, options);
20
+ }
21
+ const streamPromise = (async () => {
22
+ const { endpoint, requestOptions, model, schemaStrategy } = prepareRequestParams(prompt, { ...options, stream: true });
23
+ const debug = options.debug || globalDebug;
24
+ if (debug) {
25
+ console.log(`[callAi:${PACKAGE_VERSION}] Making fetch request to: ${endpoint}`);
26
+ console.log(`[callAi:${PACKAGE_VERSION}] With model: ${model}`);
27
+ console.log(`[callAi:${PACKAGE_VERSION}] Request headers:`, JSON.stringify(requestOptions.headers));
28
+ }
29
+ let response;
30
+ try {
31
+ response = await callAiFetch(options)(endpoint, requestOptions);
32
+ if (options.debug) {
33
+ console.log(`[callAi:${PACKAGE_VERSION}] Fetch completed with status:`, response.status, response.statusText);
34
+ console.log(`[callAi:${PACKAGE_VERSION}] Response headers:`);
35
+ response.headers.forEach((value, name) => {
36
+ console.log(`[callAi:${PACKAGE_VERSION}] ${name}: ${value}`);
37
+ });
38
+ const diagnosticResponse = response.clone();
39
+ try {
40
+ const responseText = await diagnosticResponse.text();
41
+ console.log(`[callAi:${PACKAGE_VERSION}] First 500 chars of response body:`, responseText.substring(0, 500) + (responseText.length > 500 ? "..." : ""));
42
+ }
43
+ catch (e) {
44
+ console.log(`[callAi:${PACKAGE_VERSION}] Could not read response body for diagnostics:`, e);
45
+ }
46
+ }
47
+ }
48
+ catch (fetchError) {
49
+ if (options.debug) {
50
+ console.error(`[callAi:${PACKAGE_VERSION}] Network error during fetch:`, fetchError);
51
+ }
52
+ throw fetchError;
53
+ }
54
+ const contentType = response?.headers?.get?.("content-type") || "";
55
+ if (options.debug) {
56
+ console.log(`[callAi:${PACKAGE_VERSION}] Response.ok =`, response.ok);
57
+ console.log(`[callAi:${PACKAGE_VERSION}] Response.status =`, response.status);
58
+ console.log(`[callAi:${PACKAGE_VERSION}] Response.statusText =`, response.statusText);
59
+ console.log(`[callAi:${PACKAGE_VERSION}] Response.type =`, response.type);
60
+ console.log(`[callAi:${PACKAGE_VERSION}] Content-Type =`, contentType);
61
+ }
62
+ const hasHttpError = !response.ok || response.status >= 400;
63
+ const hasJsonError = contentType.includes("application/json");
64
+ if (hasHttpError || hasJsonError) {
65
+ if (options.debug) {
66
+ console.log(`[callAi:${PACKAGE_VERSION}] ⚠️ Error detected - HTTP Status: ${response.status}, Content-Type: ${contentType}`);
67
+ }
68
+ if (!options.skipRetry) {
69
+ const clonedResponse = response.clone();
70
+ let isInvalidModel = false;
71
+ try {
72
+ const modelCheckResult = await checkForInvalidModelError(clonedResponse, model, options.debug);
73
+ isInvalidModel = modelCheckResult.isInvalidModel;
74
+ if (isInvalidModel) {
75
+ if (options.debug) {
76
+ console.log(`[callAi:${PACKAGE_VERSION}] Retrying with fallback model: ${FALLBACK_MODEL}`);
77
+ }
78
+ return (await callAi(prompt, {
79
+ ...options,
80
+ model: FALLBACK_MODEL,
81
+ }));
82
+ }
83
+ }
84
+ catch (modelCheckError) {
85
+ console.error(`[callAi:${PACKAGE_VERSION}] Error during model check:`, modelCheckError);
86
+ // Continue with normal error handling
87
+ }
88
+ }
89
+ try {
90
+ const errorBody = await response.text();
91
+ if (options.debug) {
92
+ console.log(`[callAi:${PACKAGE_VERSION}] Error body:`, errorBody);
93
+ }
94
+ try {
95
+ const errorJson = JSON.parse(errorBody);
96
+ if (options.debug) {
97
+ console.log(`[callAi:${PACKAGE_VERSION}] Parsed error:`, errorJson);
98
+ }
99
+ let errorMessage = "";
100
+ if (errorJson.error && typeof errorJson.error === "object" && errorJson.error.message) {
101
+ errorMessage = errorJson.error.message;
102
+ }
103
+ else if (errorJson.error && typeof errorJson.error === "string") {
104
+ errorMessage = errorJson.error;
105
+ }
106
+ else if (errorJson.message) {
107
+ errorMessage = errorJson.message;
108
+ }
109
+ else {
110
+ errorMessage = `API returned ${response.status}: ${response.statusText}`;
111
+ }
112
+ if (!errorMessage.includes(response.status.toString())) {
113
+ errorMessage = `${errorMessage} (Status: ${response.status})`;
114
+ }
115
+ if (options.debug) {
116
+ console.log(`[callAi:${PACKAGE_VERSION}] Extracted error message:`, errorMessage);
117
+ }
118
+ const error = new CallAIError({
119
+ message: errorMessage,
120
+ status: response.status,
121
+ statusText: response.statusText,
122
+ details: errorJson,
123
+ contentType,
124
+ });
125
+ throw error;
126
+ }
127
+ catch (jsonError) {
128
+ if (options.debug) {
129
+ console.log(`[callAi:${PACKAGE_VERSION}] JSON parse error:`, jsonError);
130
+ }
131
+ let errorMessage = "";
132
+ if (errorBody && errorBody.trim().length > 0) {
133
+ errorMessage = errorBody.length > 100 ? errorBody.substring(0, 100) + "..." : errorBody;
134
+ }
135
+ else {
136
+ errorMessage = `API error: ${response.status} ${response.statusText}`;
137
+ }
138
+ if (!errorMessage.includes(response.status.toString())) {
139
+ errorMessage = `${errorMessage} (Status: ${response.status})`;
140
+ }
141
+ if (options.debug) {
142
+ console.log(`[callAi:${PACKAGE_VERSION}] Extracted text error message:`, errorMessage);
143
+ }
144
+ const error = new CallAIError({
145
+ message: errorMessage,
146
+ status: response.status,
147
+ statusText: response.statusText,
148
+ details: errorBody,
149
+ contentType,
150
+ });
151
+ throw error;
152
+ }
153
+ }
154
+ catch (responseError) {
155
+ if (responseError instanceof Error) {
156
+ throw responseError;
157
+ }
158
+ const error = new CallAIError({
159
+ message: `API returned ${response.status}: ${response.statusText}`,
160
+ status: response.status,
161
+ statusText: response.statusText,
162
+ contentType,
163
+ });
164
+ throw error;
165
+ }
166
+ }
167
+ if (options.debug) {
168
+ console.log(`[callAi:${PACKAGE_VERSION}] Response OK, creating streaming generator`);
169
+ }
170
+ return createStreamingGenerator(response, options, schemaStrategy, model);
171
+ })();
172
+ if (process.env.NODE_ENV !== "production") {
173
+ if (options.debug) {
174
+ console.warn(`[callAi:${PACKAGE_VERSION}] No await found - using legacy streaming pattern. This will be removed in a future version and may cause issues with certain models.`);
175
+ }
176
+ }
177
+ return createBackwardCompatStreamingProxy(streamPromise);
178
+ }
179
+ async function bufferStreamingResults(prompt, options) {
180
+ const streamingOptions = {
181
+ ...options,
182
+ stream: true,
183
+ };
184
+ try {
185
+ const generator = (await callAi(prompt, streamingOptions));
186
+ const isClaudeJson = /claude/.test(options.model || "") && options.schema;
187
+ if (isClaudeJson) {
188
+ let lastChunk = "";
189
+ for await (const chunk of generator) {
190
+ lastChunk = chunk;
191
+ }
192
+ return lastChunk;
193
+ }
194
+ else {
195
+ let result = "";
196
+ for await (const chunk of generator) {
197
+ result += chunk;
198
+ }
199
+ return result;
200
+ }
201
+ }
202
+ catch (error) {
203
+ await handleApiError(error, "Buffered streaming", options.debug, {
204
+ apiKey: options.apiKey,
205
+ endpoint: options.endpoint,
206
+ skipRefresh: options.skipRefresh,
207
+ refreshToken: options.refreshToken,
208
+ updateRefreshToken: options.updateRefreshToken,
209
+ });
210
+ return bufferStreamingResults(prompt, {
211
+ ...options,
212
+ apiKey: keyStore().current,
213
+ });
214
+ }
215
+ throw new Error("Unexpected code path in bufferStreamingResults");
216
+ }
217
+ function prepareRequestParams(prompt, options) {
218
+ const apiKey = options.apiKey ||
219
+ keyStore().current ||
220
+ callAiEnv.CALLAI_API_KEY ||
221
+ null;
222
+ const schema = options.schema || null;
223
+ const schemaStrategy = chooseSchemaStrategy(options.model, schema);
224
+ const model = schemaStrategy.model;
225
+ const customChatOrigin = options.chatUrl || callAiEnv.def.CALLAI_CHAT_URL || null;
226
+ const endpoint = options.endpoint ||
227
+ (customChatOrigin ? `${customChatOrigin}/api/v1/chat/completions` : "https://openrouter.ai/api/v1/chat/completions");
228
+ const messages = Array.isArray(prompt) ? prompt : [{ role: "user", content: prompt }];
229
+ const requestParams = {
230
+ model,
231
+ messages,
232
+ stream: options.stream !== undefined ? options.stream : false,
233
+ };
234
+ if (options.temperature !== undefined) {
235
+ requestParams.temperature = options.temperature;
236
+ }
237
+ if (options.topP !== undefined) {
238
+ requestParams.top_p = options.topP;
239
+ }
240
+ if (options.maxTokens !== undefined) {
241
+ requestParams.max_tokens = options.maxTokens;
242
+ }
243
+ if (options.stop) {
244
+ requestParams.stop = Array.isArray(options.stop) ? options.stop : [options.stop];
245
+ }
246
+ if (options.responseFormat === "json") {
247
+ requestParams.response_format = { type: "json_object" };
248
+ }
249
+ if (schema) {
250
+ Object.assign(requestParams, schemaStrategy.prepareRequest(schema, messages));
251
+ }
252
+ const headers = {
253
+ Authorization: `Bearer ${apiKey}`,
254
+ "Content-Type": "application/json",
255
+ "HTTP-Referer": options.referer || "https://vibes.diy",
256
+ "X-Title": options.title || "Vibes",
257
+ };
258
+ if (options.headers) {
259
+ Object.assign(headers, options.headers);
260
+ }
261
+ const requestOptions = {
262
+ method: "POST",
263
+ headers: {
264
+ ...headers,
265
+ "Content-Type": "application/json",
266
+ },
267
+ body: JSON.stringify(requestParams),
268
+ };
269
+ if (!apiKey) {
270
+ throw new Error("API key is required. Provide it via options.apiKey or set window.CALLAI_API_KEY");
271
+ }
272
+ if (options.debug) {
273
+ console.log(`[callAi-prepareRequest:raw] Endpoint: ${endpoint}`);
274
+ console.log(`[callAi-prepareRequest:raw] Model: ${model}`);
275
+ console.log(`[callAi-prepareRequest:raw] Payload:`, JSON.stringify(requestParams));
276
+ }
277
+ return { apiKey, model, endpoint, requestOptions, schemaStrategy };
278
+ }
279
+ async function callAINonStreaming(prompt, options = {}, isRetry = false) {
280
+ try {
281
+ const startTime = Date.now();
282
+ const meta = {
283
+ model: options.model || "unknown",
284
+ timing: {
285
+ startTime: startTime,
286
+ },
287
+ };
288
+ const { endpoint, requestOptions, model, schemaStrategy } = prepareRequestParams(prompt, options);
289
+ const response = await callAiFetch(options)(endpoint, requestOptions);
290
+ if (!response.ok || response.status >= 400) {
291
+ const { isInvalidModel } = await checkForInvalidModelError(response, model, options.debug);
292
+ if (isInvalidModel && !options.skipRetry) {
293
+ return callAINonStreaming(prompt, { ...options, model: FALLBACK_MODEL }, true);
294
+ }
295
+ const error = new CallAIError({
296
+ message: `HTTP error! Status: ${response.status}`,
297
+ status: response.status,
298
+ statusCode: response.status,
299
+ contentType: "text/plain",
300
+ });
301
+ throw error;
302
+ }
303
+ let result;
304
+ if (/claude/i.test(model)) {
305
+ try {
306
+ result = await extractClaudeResponse(response);
307
+ }
308
+ catch (error) {
309
+ handleApiError(error, "Claude API response processing failed", options.debug);
310
+ }
311
+ }
312
+ else {
313
+ result = await response.json();
314
+ }
315
+ if (options.debug) {
316
+ console.log(`[callAi-nonStreaming:raw] Response:`, JSON.stringify(result));
317
+ }
318
+ if (result.error) {
319
+ if (options.debug) {
320
+ console.error("API returned an error:", result.error);
321
+ }
322
+ if (!isRetry &&
323
+ !options.skipRetry &&
324
+ result.error.message &&
325
+ result.error.message.toLowerCase().includes("not a valid model")) {
326
+ if (options.debug) {
327
+ console.warn(`Model ${model} error, retrying with ${FALLBACK_MODEL}`);
328
+ }
329
+ return callAINonStreaming(prompt, { ...options, model: FALLBACK_MODEL }, true);
330
+ }
331
+ return JSON.stringify({
332
+ error: result.error,
333
+ message: result.error.message || "API returned an error",
334
+ });
335
+ }
336
+ const content = extractContent(result, schemaStrategy);
337
+ if (result) {
338
+ meta.rawResponse = result;
339
+ }
340
+ meta.model = model;
341
+ if (meta.timing) {
342
+ meta.timing.endTime = Date.now();
343
+ meta.timing.duration = meta.timing.endTime - meta.timing.startTime;
344
+ }
345
+ const processedContent = schemaStrategy.processResponse(content);
346
+ const boxed = boxString(processedContent);
347
+ responseMetadata.set(boxed, meta);
348
+ return processedContent;
349
+ }
350
+ catch (error) {
351
+ await handleApiError(error, "Non-streaming API call", options.debug, {
352
+ apiKey: options.apiKey,
353
+ endpoint: options.endpoint,
354
+ skipRefresh: options.skipRefresh,
355
+ refreshToken: options.refreshToken,
356
+ updateRefreshToken: options.updateRefreshToken,
357
+ });
358
+ return callAINonStreaming(prompt, {
359
+ ...options,
360
+ apiKey: keyStore().current,
361
+ }, true);
362
+ }
363
+ throw new Error("Unexpected code path in callAINonStreaming");
364
+ }
365
+ //# sourceMappingURL=api.js.map
package/api.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../jsr/api.ts"],"names":[],"mappings":"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"}