@theokit/sdk 5.11.0 → 5.11.1
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/CHANGELOG.md +23 -0
- package/dist/{agent-GWKRARAL.js → agent-DFV52V6E.js} +7 -7
- package/dist/{agent-GWKRARAL.js.map → agent-DFV52V6E.js.map} +1 -1
- package/dist/{agent-5DOR5T3E.cjs → agent-OKP4LHG2.cjs} +8 -8
- package/dist/{agent-5DOR5T3E.cjs.map → agent-OKP4LHG2.cjs.map} +1 -1
- package/dist/{chunk-5OHB5HJF.cjs → chunk-35KBC4BX.cjs} +133 -93
- package/dist/chunk-35KBC4BX.cjs.map +1 -0
- package/dist/{chunk-N7ZIPW2N.cjs → chunk-3JANYJYS.cjs} +3 -3
- package/dist/{chunk-N7ZIPW2N.cjs.map → chunk-3JANYJYS.cjs.map} +1 -1
- package/dist/{chunk-Z5BAFHPU.js → chunk-6G4IRQUD.js} +3 -3
- package/dist/{chunk-Z5BAFHPU.js.map → chunk-6G4IRQUD.js.map} +1 -1
- package/dist/{chunk-74OA5DIM.js → chunk-BBJ77S62.js} +3 -3
- package/dist/{chunk-74OA5DIM.js.map → chunk-BBJ77S62.js.map} +1 -1
- package/dist/{chunk-5H2GJXGC.cjs → chunk-EQ5NCH2Y.cjs} +4 -4
- package/dist/{chunk-5H2GJXGC.cjs.map → chunk-EQ5NCH2Y.cjs.map} +1 -1
- package/dist/{chunk-TE6XVTOA.js → chunk-JLIRFWUG.js} +47 -17
- package/dist/chunk-JLIRFWUG.js.map +1 -0
- package/dist/{chunk-YEHQ3SIC.cjs → chunk-JV7JA7BM.cjs} +5 -5
- package/dist/{chunk-YEHQ3SIC.cjs.map → chunk-JV7JA7BM.cjs.map} +1 -1
- package/dist/{chunk-4PHSVR2R.js → chunk-MHIBYKWA.js} +83 -43
- package/dist/chunk-MHIBYKWA.js.map +1 -0
- package/dist/{chunk-WPO3VCY4.cjs → chunk-N7KS3TIR.cjs} +47 -17
- package/dist/chunk-N7KS3TIR.cjs.map +1 -0
- package/dist/{chunk-BZKF7TXX.cjs → chunk-P5N3Q2NH.cjs} +22 -22
- package/dist/{chunk-BZKF7TXX.cjs.map → chunk-P5N3Q2NH.cjs.map} +1 -1
- package/dist/{chunk-7Y23B7XX.js → chunk-Q34EBNYG.js} +3 -3
- package/dist/{chunk-7Y23B7XX.js.map → chunk-Q34EBNYG.js.map} +1 -1
- package/dist/{chunk-HI3W37FY.js → chunk-U27XHOEF.js} +3 -3
- package/dist/{chunk-HI3W37FY.js.map → chunk-U27XHOEF.js.map} +1 -1
- package/dist/{compact-session-F2UDGZCN.js → compact-session-4HAUP3HK.js} +4 -4
- package/dist/{compact-session-F2UDGZCN.js.map → compact-session-4HAUP3HK.js.map} +1 -1
- package/dist/{compact-session-2AETONOS.cjs → compact-session-Y56D3S57.cjs} +13 -13
- package/dist/{compact-session-2AETONOS.cjs.map → compact-session-Y56D3S57.cjs.map} +1 -1
- package/dist/cron.cjs +7 -7
- package/dist/cron.js +6 -6
- package/dist/eval.cjs +6 -6
- package/dist/eval.js +5 -5
- package/dist/index.cjs +33 -33
- package/dist/index.js +9 -9
- package/dist/{inject-session-E5UDFVLI.js → inject-session-LJX5JGV5.js} +3 -3
- package/dist/{inject-session-E5UDFVLI.js.map → inject-session-LJX5JGV5.js.map} +1 -1
- package/dist/{inject-session-W4UKACYJ.cjs → inject-session-R73PRM7B.cjs} +4 -4
- package/dist/{inject-session-W4UKACYJ.cjs.map → inject-session-R73PRM7B.cjs.map} +1 -1
- package/dist/internal/error-mappers/openai-compatible.d.ts +3 -1
- package/dist/internal/memory/adapters/index.cjs +3 -3
- package/dist/internal/memory/adapters/index.js +2 -2
- package/docs/error-codes.md +6 -3
- package/package.json +1 -1
- package/dist/chunk-4PHSVR2R.js.map +0 -1
- package/dist/chunk-5OHB5HJF.cjs.map +0 -1
- package/dist/chunk-TE6XVTOA.js.map +0 -1
- package/dist/chunk-WPO3VCY4.cjs.map +0 -1
|
@@ -73,6 +73,13 @@ function mapOpenAICompatibleError(args) {
|
|
|
73
73
|
if (status === 429) {
|
|
74
74
|
return new chunkUNFBHV46_cjs.RateLimitError(message, { code: `${providerId}_rate_limit`, metadata });
|
|
75
75
|
}
|
|
76
|
+
if (status === 404 && code === "model_unavailable") {
|
|
77
|
+
const detailed = formatMessage(providerId, status, code, extractOpenAiErrorMessage(body));
|
|
78
|
+
return new chunkUNFBHV46_cjs.ConfigurationError(detailed, {
|
|
79
|
+
code: `${providerId}_model_unavailable`,
|
|
80
|
+
metadata
|
|
81
|
+
});
|
|
82
|
+
}
|
|
76
83
|
if (status === 400) {
|
|
77
84
|
return new chunkUNFBHV46_cjs.ConfigurationError(message, { code: `${providerId}_${code}`, metadata });
|
|
78
85
|
}
|
|
@@ -92,24 +99,47 @@ function extractOpenAiErrorCode(body) {
|
|
|
92
99
|
if (typeof err.type === "string") return err.type;
|
|
93
100
|
return void 0;
|
|
94
101
|
}
|
|
102
|
+
function extractOpenAiErrorMessage(body) {
|
|
103
|
+
if (body === null || typeof body !== "object") return void 0;
|
|
104
|
+
const err = body.error;
|
|
105
|
+
if (err === void 0 || err === null) return void 0;
|
|
106
|
+
return typeof err.message === "string" ? err.message : void 0;
|
|
107
|
+
}
|
|
108
|
+
var MISSING_MODEL_MESSAGE = /no endpoints found/i;
|
|
95
109
|
function mapOpenAiStatusToCode(status, body) {
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
if (rawCode.includes("content_filter") || rawCode.includes("content_policy") || rawCode.includes("safety")) {
|
|
101
|
-
return "content_filtered";
|
|
102
|
-
}
|
|
103
|
-
if (rawCode.includes("model_not_found") || rawCode.includes("model_unavailable") || rawCode.includes("invalid_model")) {
|
|
104
|
-
return "model_unavailable";
|
|
105
|
-
}
|
|
106
|
-
if (rawCode.includes("insufficient_quota") || rawCode.includes("quota_exceeded")) {
|
|
107
|
-
return "quota_exceeded";
|
|
108
|
-
}
|
|
110
|
+
const fromBodyCode = classifyOpenAiBodyCode(extractOpenAiErrorCode(body)?.toLowerCase() ?? "");
|
|
111
|
+
if (fromBodyCode !== void 0) return fromBodyCode;
|
|
112
|
+
if (isMissingModel404(status, body)) return "model_unavailable";
|
|
109
113
|
return httpStatusToErrorCode(status);
|
|
110
114
|
}
|
|
111
|
-
function
|
|
112
|
-
return
|
|
115
|
+
function isMissingModel404(status, body) {
|
|
116
|
+
return status === 404 && MISSING_MODEL_MESSAGE.test(extractOpenAiErrorMessage(body) ?? "");
|
|
117
|
+
}
|
|
118
|
+
var BODY_CODE_RULES = [
|
|
119
|
+
{
|
|
120
|
+
fragments: ["context_length", "context_window", "too_many_tokens", "max_tokens"],
|
|
121
|
+
code: "context_too_long"
|
|
122
|
+
},
|
|
123
|
+
{ fragments: ["content_filter", "content_policy", "safety"], code: "content_filtered" },
|
|
124
|
+
{
|
|
125
|
+
fragments: ["model_not_found", "model_unavailable", "invalid_model"],
|
|
126
|
+
code: "model_unavailable"
|
|
127
|
+
},
|
|
128
|
+
// T3.7 — OpenRouter "Insufficient credits" / `insufficient_quota` in the BODY.
|
|
129
|
+
// The status-402 half of this rule moved to the shared ladder, where it now
|
|
130
|
+
// reaches all four mappers instead of this one; what stays here is the part
|
|
131
|
+
// that is genuinely a body dialect.
|
|
132
|
+
{ fragments: ["insufficient_quota", "quota_exceeded"], code: "quota_exceeded" }
|
|
133
|
+
];
|
|
134
|
+
function classifyOpenAiBodyCode(rawCode) {
|
|
135
|
+
const rule = BODY_CODE_RULES.find(
|
|
136
|
+
({ fragments }) => fragments.some((fragment) => rawCode.includes(fragment))
|
|
137
|
+
);
|
|
138
|
+
return rule?.code;
|
|
139
|
+
}
|
|
140
|
+
function formatMessage(providerId, status, code, detail) {
|
|
141
|
+
const base = `${providerId} API error: ${code} (HTTP ${status})`;
|
|
142
|
+
return detail === void 0 || detail === "" ? base : `${base}: ${detail}`;
|
|
113
143
|
}
|
|
114
144
|
|
|
115
145
|
exports.buildErrorMetadata = buildErrorMetadata;
|
|
@@ -117,5 +147,5 @@ exports.httpStatusToErrorCode = httpStatusToErrorCode;
|
|
|
117
147
|
exports.mapOpenAICompatibleError = mapOpenAICompatibleError;
|
|
118
148
|
exports.parseErrorBody = parseErrorBody;
|
|
119
149
|
exports.parseRetryAfter = parseRetryAfter;
|
|
120
|
-
//# sourceMappingURL=chunk-
|
|
121
|
-
//# sourceMappingURL=chunk-
|
|
150
|
+
//# sourceMappingURL=chunk-N7KS3TIR.cjs.map
|
|
151
|
+
//# sourceMappingURL=chunk-N7KS3TIR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/error-mappers/shared.ts","../src/internal/error-mappers/openai-compatible.ts"],"names":["redactSecrets","AuthenticationError","RateLimitError","ConfigurationError","NetworkError","UnknownAgentError"],"mappings":"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","file":"chunk-N7KS3TIR.cjs","sourcesContent":["/**\nimport type { ErrorCode } from \"../../errors.js\";\n * Helpers shared between provider HTTP error mappers (ADR D67).\n *\n * Extracted to dedupe identical logic in `anthropic.ts` and\n * `openai-compatible.ts` — retry-after parsing, raw-body truncation,\n * and metadata assembly are dialect-agnostic.\n *\n * @internal\n */\n\nimport type { ErrorCode, ErrorMetadata } from \"../../errors.js\";\nimport { redactSecrets } from \"../security/index.js\";\n\nconst RAW_MAX_BYTES = 2048;\n\n/**\n * Parse the `Retry-After` header (RFC 7231) into seconds. Both forms are\n * supported: numeric-seconds (`Retry-After: 30`) and HTTP-date\n * (`Retry-After: Wed, 21 Oct 2025 07:28:00 GMT` → seconds until that instant,\n * clamped at 0 for a past date). Garbage / missing header → `undefined`.\n *\n * @internal\n */\nexport function parseRetryAfter(headers: Headers | undefined): number | undefined {\n if (headers === undefined) return undefined;\n const raw = headers.get(\"retry-after\");\n if (raw === null) return undefined;\n const n = Number(raw);\n if (Number.isFinite(n) && n >= 0) return Math.ceil(n);\n // HTTP-date form — seconds until the given instant (0 if already elapsed).\n const dateMs = Date.parse(raw);\n if (Number.isFinite(dateMs)) return Math.max(0, Math.ceil((dateMs - Date.now()) / 1000));\n return undefined;\n}\n\n/**\n * Truncate raw response body to ~2KB and redact known credential\n * patterns so it can ride inside `ErrorMetadata.raw` without\n * ballooning logs OR leaking tokens. Returns `undefined` for\n * null/undefined input.\n *\n * Post T1.1 (secret-redaction-discipline, ADR D68): every error metadata\n * goes through `redactSecrets` before exposure. Note the shape change —\n * pre-T1.1 the function preserved the original `body` shape when ≤2KB;\n * now it always returns a (possibly redacted) string, because redaction\n * coerces non-strings to JSON. Consumers who used to do `err.metadata.raw.foo`\n * must now `JSON.parse(err.metadata.raw)` first — but a workspace-wide\n * grep at T1.1 land time confirmed zero such callers.\n *\n * @internal\n */\nexport function truncateRaw(body: unknown): unknown {\n if (body === null || body === undefined) return undefined;\n const s = typeof body === \"string\" ? body : JSON.stringify(body);\n const truncated = s.length <= RAW_MAX_BYTES ? s : `${s.slice(0, RAW_MAX_BYTES)}…`;\n return redactSecrets(truncated);\n}\n\n/**\n * Build an `ErrorMetadata` object with all optional fields included\n * conditionally (no `undefined` keys in the output). Caller passes\n * dialect-specific fields (`provider`, `endpoint`, `code`); shared\n * fields (`statusCode`, `retryAfter`, `raw`) are derived here.\n *\n * @internal\n */\nexport function buildErrorMetadata(args: {\n provider: string;\n endpoint: string;\n code: ErrorCode;\n status: number;\n headers: Headers | undefined;\n body: unknown;\n}): ErrorMetadata {\n const retryAfter = parseRetryAfter(args.headers);\n const raw = truncateRaw(args.body);\n return {\n provider: args.provider,\n endpoint: args.endpoint,\n code: args.code,\n statusCode: args.status,\n ...(retryAfter !== undefined ? { retryAfter } : {}),\n ...(raw !== undefined ? { raw } : {}),\n };\n}\n\n/**\n * D314: extract the provider's request id (`x-request-id` is OpenAI/most;\n * `request-id` is Anthropic). Returns `undefined` when neither is present.\n *\n * @internal\n */\nexport function parseRequestId(headers: Headers | undefined): string | undefined {\n if (headers === undefined) return undefined;\n return headers.get(\"x-request-id\") ?? headers.get(\"request-id\") ?? undefined;\n}\n\n/**\n * The HTTP status ladder — ONE definition, shared by every provider mapper.\n *\n * This is RFC 9110 semantics, not a vendor contract: a 429 means the same thing\n * whether Anthropic, OpenAI, Bedrock or Vertex sent it. It lived in four copies\n * until 2026-09-01 and the copies had already drifted in two measurable ways,\n * which is what moved it here beside the other dialect-agnostic helpers ADR D67\n * extracted:\n *\n * 1. **402 reached one mapper of four.** T3.7 added `quota_exceeded` and wired\n * it into `openai-compatible.ts` only. A Bedrock, Vertex or Anthropic\n * endpoint answering 402 fell through every arm and came back `unknown` —\n * the canonical bucket existed and three of four mappers could not reach it.\n * 2. **The 5xx arm had two different upper bounds.** `anthropic` and\n * `openai-compatible` guarded `>= 500 && < 600`; `bedrock` and `vertex`\n * guarded `>= 500` with no ceiling, so a malformed or proxy-injected 6xx was\n * `server_error` in two mappers and `unknown` in the other two.\n *\n * Neither was a vendor difference. Both were copy-drift, and that is the DRY\n * test in its textbook form: one piece of knowledge, four places to change it.\n *\n * The ladder is deliberately the FALLBACK, never the whole classifier. Each\n * mapper keeps its own body-dialect rules — Anthropic's `context_too_long`,\n * Bedrock's AWS `__type` strings, Vertex's `google.rpc` status enum — because\n * those ARE per-vendor contracts. The shape is\n * `classifyVendorBody(body) ?? httpStatusToErrorCode(status)`.\n *\n * 404 is deliberately NOT mapped here. Three mappers treat it as `unknown` and\n * Bedrock treats it as `invalid_request` via its own `__type` rules; folding it\n * in would silently change three mappers to close a divergence nobody measured.\n *\n * @internal\n */\nexport type HttpStatusErrorCode = Extract<\n ErrorCode,\n | \"auth_failed\"\n | \"quota_exceeded\"\n | \"timeout\"\n | \"rate_limit\"\n | \"invalid_request\"\n | \"server_error\"\n | \"unknown\"\n>;\n\nexport function httpStatusToErrorCode(status: number): HttpStatusErrorCode {\n if (status === 401 || status === 403) return \"auth_failed\";\n if (status === 402) return \"quota_exceeded\";\n if (status === 408) return \"timeout\";\n if (status === 429) return \"rate_limit\";\n if (status === 400) return \"invalid_request\";\n if (status >= 500 && status < 600) return \"server_error\";\n return \"unknown\";\n}\n\n/**\n * Reads an error body that may arrive already parsed, as a JSON string, or as neither.\n *\n * This is TRANSPORT knowledge, not vendor knowledge: it describes how `fetch` surfaces a body, which\n * is the same whichever provider sent it. It lived twice, character-for-character, in bedrock.ts and\n * vertex.ts — identical once the return type name was substituted. They had not drifted, so the cost\n * was only latent: a fix to one would have missed the other silently.\n *\n * Unparseable input yields `{}` rather than throwing, because a mapper's job is to classify a\n * failure that already happened; failing to read the body is not a second failure to report.\n */\nexport function parseErrorBody<T>(body: unknown): T {\n if (body !== null && typeof body === \"object\") return body as T;\n if (typeof body === \"string\") {\n try {\n return JSON.parse(body) as T;\n } catch {\n return {} as T;\n }\n }\n return {} as T;\n}\n","/**\n * OpenAI-compatible HTTP error mapper (ADR D67).\n *\n * Translates OpenAI-shaped API error responses (covers OpenAI, OpenRouter,\n * DeepSeek, Together, Mistral, Voyage, DeepInfra, etc.) into typed\n * `TheokitAgentError` subclasses with full `ErrorMetadata`.\n *\n * Body inspection: looks at `body.error.code` / `body.error.type` to detect\n * `context_too_long`, `content_filtered`, `model_unavailable` semantics, and at\n * `body.error.message` for a 404 that says no endpoint serves the model\n * (OpenRouter's numeric-code body for a retired model id).\n * Falls back to status-based mapping when body doesn't expose `.error`\n * (e.g., HTML server error page, DeepInfra's `{message: \"...\"}` shape).\n *\n * Never throws — caller is already in an error path.\n *\n * @internal\n */\n\nimport {\n AuthenticationError,\n ConfigurationError,\n type ErrorCode,\n NetworkError,\n RateLimitError,\n type TheokitAgentError,\n UnknownAgentError,\n} from \"../../errors.js\";\nimport { buildErrorMetadata, httpStatusToErrorCode } from \"./shared.js\";\n\ninterface MapOpenAiErrorArgs {\n providerId: string;\n status: number;\n body: unknown;\n headers: Headers | undefined;\n endpoint: string;\n}\n\nexport function mapOpenAICompatibleError(args: MapOpenAiErrorArgs): TheokitAgentError {\n const { providerId, status, body, headers, endpoint } = args;\n const code = mapOpenAiStatusToCode(status, body);\n const message = formatMessage(providerId, status, code);\n const metadata = buildErrorMetadata({\n provider: providerId,\n endpoint,\n code,\n status,\n headers,\n body,\n });\n\n if (status === 401 || status === 403) {\n return new AuthenticationError(message, { code: `${providerId}_auth_failed`, metadata });\n }\n if (status === 429) {\n return new RateLimitError(message, { code: `${providerId}_rate_limit`, metadata });\n }\n if (status === 404 && code === \"model_unavailable\") {\n // The model id lives only in the provider's text, so this case carries it.\n const detailed = formatMessage(providerId, status, code, extractOpenAiErrorMessage(body));\n return new ConfigurationError(detailed, {\n code: `${providerId}_model_unavailable`,\n metadata,\n });\n }\n if (status === 400) {\n return new ConfigurationError(message, { code: `${providerId}_${code}`, metadata });\n }\n if (status === 408) {\n return new NetworkError(message, { code: `${providerId}_timeout`, metadata });\n }\n if (status >= 500 && status < 600) {\n return new NetworkError(message, { code: `${providerId}_server_error`, metadata });\n }\n return new UnknownAgentError(message, { code: `${providerId}_unknown`, metadata });\n}\n\nfunction extractOpenAiErrorCode(body: unknown): string | undefined {\n if (body === null || typeof body !== \"object\") return undefined;\n const err = (body as { error?: { code?: unknown; type?: unknown } }).error;\n if (err === undefined || err === null) return undefined;\n if (typeof err.code === \"string\") return err.code;\n if (typeof err.type === \"string\") return err.type;\n return undefined;\n}\n\nfunction extractOpenAiErrorMessage(body: unknown): string | undefined {\n if (body === null || typeof body !== \"object\") return undefined;\n const err = (body as { error?: { message?: unknown } }).error;\n if (err === undefined || err === null) return undefined;\n return typeof err.message === \"string\" ? err.message : undefined;\n}\n\n// OpenRouter answers a model it does not serve with HTTP 404 and a numeric `error.code`,\n// so only the message tells it apart from a 404 for a wrong path (measured 2026-10-20).\nconst MISSING_MODEL_MESSAGE = /no endpoints found/i;\n\nfunction mapOpenAiStatusToCode(status: number, body: unknown): ErrorCode {\n const fromBodyCode = classifyOpenAiBodyCode(extractOpenAiErrorCode(body)?.toLowerCase() ?? \"\");\n if (fromBodyCode !== undefined) return fromBodyCode;\n if (isMissingModel404(status, body)) return \"model_unavailable\";\n\n // Everything below the body dialect is RFC 9110 and lives once, in shared.ts.\n return httpStatusToErrorCode(status);\n}\n\nfunction isMissingModel404(status: number, body: unknown): boolean {\n return status === 404 && MISSING_MODEL_MESSAGE.test(extractOpenAiErrorMessage(body) ?? \"\");\n}\n\n// The body dialect, in precedence order: the first rule whose fragment appears in the\n// lowercased body code wins.\nconst BODY_CODE_RULES: ReadonlyArray<{ fragments: readonly string[]; code: ErrorCode }> = [\n {\n fragments: [\"context_length\", \"context_window\", \"too_many_tokens\", \"max_tokens\"],\n code: \"context_too_long\",\n },\n { fragments: [\"content_filter\", \"content_policy\", \"safety\"], code: \"content_filtered\" },\n {\n fragments: [\"model_not_found\", \"model_unavailable\", \"invalid_model\"],\n code: \"model_unavailable\",\n },\n // T3.7 — OpenRouter \"Insufficient credits\" / `insufficient_quota` in the BODY.\n // The status-402 half of this rule moved to the shared ladder, where it now\n // reaches all four mappers instead of this one; what stays here is the part\n // that is genuinely a body dialect.\n { fragments: [\"insufficient_quota\", \"quota_exceeded\"], code: \"quota_exceeded\" },\n];\n\nfunction classifyOpenAiBodyCode(rawCode: string): ErrorCode | undefined {\n const rule = BODY_CODE_RULES.find(({ fragments }) =>\n fragments.some((fragment) => rawCode.includes(fragment)),\n );\n return rule?.code;\n}\n\nfunction formatMessage(\n providerId: string,\n status: number,\n code: ErrorCode,\n detail?: string,\n): string {\n const base = `${providerId} API error: ${code} (HTTP ${status})`;\n return detail === undefined || detail === \"\" ? base : `${base}: ${detail}`;\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkCQYBJOB2_cjs = require('./chunk-CQYBJOB2.cjs');
|
|
4
4
|
var chunkYJNYDJ2T_cjs = require('./chunk-YJNYDJ2T.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkN7KS3TIR_cjs = require('./chunk-N7KS3TIR.cjs');
|
|
6
6
|
var chunkQOGNZMHD_cjs = require('./chunk-QOGNZMHD.cjs');
|
|
7
7
|
var chunkYSTXFWQE_cjs = require('./chunk-YSTXFWQE.cjs');
|
|
8
8
|
var chunkFRITRLZQ_cjs = require('./chunk-FRITRLZQ.cjs');
|
|
@@ -120,7 +120,7 @@ function mapAnthropicError(args) {
|
|
|
120
120
|
const { status, body, headers, endpoint } = args;
|
|
121
121
|
const code = mapAnthropicStatusToCode(status, body);
|
|
122
122
|
const message = formatMessage(status, code);
|
|
123
|
-
const metadata =
|
|
123
|
+
const metadata = chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
124
124
|
provider: "anthropic",
|
|
125
125
|
endpoint,
|
|
126
126
|
code,
|
|
@@ -159,7 +159,7 @@ function mapAnthropicStatusToCode(status, body) {
|
|
|
159
159
|
}
|
|
160
160
|
return "invalid_request";
|
|
161
161
|
}
|
|
162
|
-
return
|
|
162
|
+
return chunkN7KS3TIR_cjs.httpStatusToErrorCode(status);
|
|
163
163
|
}
|
|
164
164
|
function formatMessage(status, code) {
|
|
165
165
|
return `Anthropic API error: ${code} (HTTP ${status})`;
|
|
@@ -741,10 +741,10 @@ function classifyBedrockError(args, awsType, message) {
|
|
|
741
741
|
return "invalid_request";
|
|
742
742
|
}
|
|
743
743
|
if (awsType.includes("Timeout")) return "timeout";
|
|
744
|
-
return
|
|
744
|
+
return chunkN7KS3TIR_cjs.httpStatusToErrorCode(args.status);
|
|
745
745
|
}
|
|
746
746
|
function buildBedrockMetadata(args, code) {
|
|
747
|
-
return
|
|
747
|
+
return chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
748
748
|
provider: "bedrock",
|
|
749
749
|
endpoint: args.endpoint,
|
|
750
750
|
code,
|
|
@@ -754,7 +754,7 @@ function buildBedrockMetadata(args, code) {
|
|
|
754
754
|
});
|
|
755
755
|
}
|
|
756
756
|
function mapBedrockError(args) {
|
|
757
|
-
const parsed =
|
|
757
|
+
const parsed = chunkN7KS3TIR_cjs.parseErrorBody(args.body);
|
|
758
758
|
const awsType = parsed.__type ?? "";
|
|
759
759
|
const message = parsed.message ?? parsed.Message ?? "Bedrock request failed";
|
|
760
760
|
const code = classifyBedrockError(args, awsType, message);
|
|
@@ -788,7 +788,7 @@ async function resolveBedrockToken(region) {
|
|
|
788
788
|
return cachedToken.value;
|
|
789
789
|
}
|
|
790
790
|
try {
|
|
791
|
-
const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-
|
|
791
|
+
const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-P5N3Q2NH.cjs', document.baseURI).href)));
|
|
792
792
|
const gen = r("@aws/bedrock-token-generator");
|
|
793
793
|
if (typeof gen.getToken !== "function") return void 0;
|
|
794
794
|
const providers = r("@aws-sdk/credential-providers");
|
|
@@ -880,7 +880,7 @@ var FaultInjectingLlmClient = class {
|
|
|
880
880
|
return yield* this.inner.stream(request, signal);
|
|
881
881
|
}
|
|
882
882
|
if (parsed.status >= 400) {
|
|
883
|
-
throw
|
|
883
|
+
throw chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
884
884
|
providerId: this.name,
|
|
885
885
|
status: parsed.status,
|
|
886
886
|
body: parsed.body,
|
|
@@ -955,7 +955,7 @@ function mapOllamaTransportError(args) {
|
|
|
955
955
|
if (args.providerId !== "ollama") return void 0;
|
|
956
956
|
const causeCode = extractCauseCode(args.cause);
|
|
957
957
|
if (causeCode !== "ECONNREFUSED" && causeCode !== "ENOTFOUND") return void 0;
|
|
958
|
-
const metadata =
|
|
958
|
+
const metadata = chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
959
959
|
provider: "ollama",
|
|
960
960
|
endpoint: args.endpoint,
|
|
961
961
|
code: "network",
|
|
@@ -973,7 +973,7 @@ function mapOllamaHttpError(args) {
|
|
|
973
973
|
const errString = extractErrorString(args.body).toLowerCase();
|
|
974
974
|
if (args.status === 404 && errString.includes("not found") && errString.includes("pull")) {
|
|
975
975
|
const modelHint = extractModelName(errString);
|
|
976
|
-
const metadata =
|
|
976
|
+
const metadata = chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
977
977
|
provider: "ollama",
|
|
978
978
|
endpoint: args.endpoint,
|
|
979
979
|
code: "model_unavailable",
|
|
@@ -988,7 +988,7 @@ function mapOllamaHttpError(args) {
|
|
|
988
988
|
);
|
|
989
989
|
}
|
|
990
990
|
if (args.status === 503 && errString.includes("model is loading")) {
|
|
991
|
-
const metadata =
|
|
991
|
+
const metadata = chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
992
992
|
provider: "ollama",
|
|
993
993
|
endpoint: args.endpoint,
|
|
994
994
|
code: "server_error",
|
|
@@ -1075,7 +1075,7 @@ var OllamaNativeClient = class {
|
|
|
1075
1075
|
endpoint: "/api/chat"
|
|
1076
1076
|
});
|
|
1077
1077
|
if (mapped !== void 0) throw mapped;
|
|
1078
|
-
throw
|
|
1078
|
+
throw chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
1079
1079
|
providerId: "ollama",
|
|
1080
1080
|
status: response.status,
|
|
1081
1081
|
body: bodyJson,
|
|
@@ -1734,7 +1734,7 @@ var OpenAIClient = class {
|
|
|
1734
1734
|
endpoint: "/v1/chat/completions"
|
|
1735
1735
|
});
|
|
1736
1736
|
if (ollamaMapped !== void 0) throw ollamaMapped;
|
|
1737
|
-
throw
|
|
1737
|
+
throw chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
1738
1738
|
providerId,
|
|
1739
1739
|
status: response.status,
|
|
1740
1740
|
body,
|
|
@@ -1770,7 +1770,7 @@ var OpenAIClient = class {
|
|
|
1770
1770
|
}
|
|
1771
1771
|
if (chunk.error !== void 0 && chunk.error !== null) {
|
|
1772
1772
|
const status = typeof chunk.error.code === "number" ? chunk.error.code : 502;
|
|
1773
|
-
throw
|
|
1773
|
+
throw chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
1774
1774
|
providerId,
|
|
1775
1775
|
status,
|
|
1776
1776
|
body: chunk,
|
|
@@ -2454,7 +2454,7 @@ var ResponsesApiClient = class {
|
|
|
2454
2454
|
body = JSON.parse(text);
|
|
2455
2455
|
} catch {
|
|
2456
2456
|
}
|
|
2457
|
-
return
|
|
2457
|
+
return chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
2458
2458
|
providerId,
|
|
2459
2459
|
status: response.status,
|
|
2460
2460
|
body,
|
|
@@ -2490,7 +2490,7 @@ var ResponsesApiClient = class {
|
|
|
2490
2490
|
const failure = ResponsesStreamAccumulator.failureMessage(event);
|
|
2491
2491
|
if (failure !== void 0) {
|
|
2492
2492
|
yield { type: "error", message: failure };
|
|
2493
|
-
throw
|
|
2493
|
+
throw chunkN7KS3TIR_cjs.mapOpenAICompatibleError({
|
|
2494
2494
|
providerId,
|
|
2495
2495
|
status: 502,
|
|
2496
2496
|
body: { error: { message: failure } },
|
|
@@ -2604,11 +2604,11 @@ function classifyVertexError(args, errStatus) {
|
|
|
2604
2604
|
for (const rule of VERTEX_RULES) {
|
|
2605
2605
|
if (rule.test(args.status, errStatus)) return rule.code;
|
|
2606
2606
|
}
|
|
2607
|
-
const shared =
|
|
2607
|
+
const shared = chunkN7KS3TIR_cjs.httpStatusToErrorCode(args.status);
|
|
2608
2608
|
return shared === "auth_failed" ? "auth_permission" : shared;
|
|
2609
2609
|
}
|
|
2610
2610
|
function vertexMetadata(args, code) {
|
|
2611
|
-
return
|
|
2611
|
+
return chunkN7KS3TIR_cjs.buildErrorMetadata({
|
|
2612
2612
|
provider: "vertex",
|
|
2613
2613
|
endpoint: args.endpoint,
|
|
2614
2614
|
code,
|
|
@@ -2640,7 +2640,7 @@ var VERTEX_ERROR_BUILDERS = {
|
|
|
2640
2640
|
unknown: (args, msg) => new chunkUNFBHV46_cjs.UnknownAgentError(`Vertex unknown: ${msg}`, { metadata: vertexMetadata(args, "unknown") })
|
|
2641
2641
|
};
|
|
2642
2642
|
function mapVertexError(args) {
|
|
2643
|
-
const parsed =
|
|
2643
|
+
const parsed = chunkN7KS3TIR_cjs.parseErrorBody(args.body);
|
|
2644
2644
|
const errStatus = parsed.error?.status ?? "";
|
|
2645
2645
|
const message = parsed.error?.message ?? "Vertex request failed";
|
|
2646
2646
|
const code = classifyVertexError(args, errStatus);
|
|
@@ -2662,7 +2662,7 @@ async function resolveVertexAccessToken() {
|
|
|
2662
2662
|
async function getAuthClientOrThrow() {
|
|
2663
2663
|
let mod;
|
|
2664
2664
|
try {
|
|
2665
|
-
const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-
|
|
2665
|
+
const r = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-P5N3Q2NH.cjs', document.baseURI).href)));
|
|
2666
2666
|
mod = r("google-auth-library");
|
|
2667
2667
|
} catch (err) {
|
|
2668
2668
|
const isModuleMissing = err instanceof Error && (err.message.includes("Cannot find module") || err.code === "MODULE_NOT_FOUND");
|
|
@@ -3471,5 +3471,5 @@ exports.shouldUseFixtureMode = shouldUseFixtureMode;
|
|
|
3471
3471
|
exports.shouldUseRealLocalRuntime = shouldUseRealLocalRuntime;
|
|
3472
3472
|
exports.tryFirstEvent = tryFirstEvent;
|
|
3473
3473
|
exports.validateApiKeyShape = validateApiKeyShape;
|
|
3474
|
-
//# sourceMappingURL=chunk-
|
|
3475
|
-
//# sourceMappingURL=chunk-
|
|
3474
|
+
//# sourceMappingURL=chunk-P5N3Q2NH.cjs.map
|
|
3475
|
+
//# sourceMappingURL=chunk-P5N3Q2NH.cjs.map
|