@polpo-ai/llm 0.15.14 → 0.15.16

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 (35) hide show
  1. package/dist/gateway-runtime-adapter.d.ts +14 -0
  2. package/dist/gateway-runtime-adapter.d.ts.map +1 -0
  3. package/dist/gateway-runtime-adapter.js +110 -0
  4. package/dist/gateway-runtime-adapter.js.map +1 -0
  5. package/dist/gateway-runtime-adapter.test.d.ts +2 -0
  6. package/dist/gateway-runtime-adapter.test.d.ts.map +1 -0
  7. package/dist/gateway-runtime-adapter.test.js +76 -0
  8. package/dist/gateway-runtime-adapter.test.js.map +1 -0
  9. package/dist/index.d.ts +6 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +6 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/model-resolver.d.ts +10 -0
  14. package/dist/model-resolver.d.ts.map +1 -1
  15. package/dist/model-resolver.js +25 -0
  16. package/dist/model-resolver.js.map +1 -1
  17. package/dist/model-resolver.test.js +36 -1
  18. package/dist/model-resolver.test.js.map +1 -1
  19. package/dist/model-runtime.d.ts +36 -0
  20. package/dist/model-runtime.d.ts.map +1 -0
  21. package/dist/model-runtime.js +2 -0
  22. package/dist/model-runtime.js.map +1 -0
  23. package/dist/model-runtime.test.d.ts +2 -0
  24. package/dist/model-runtime.test.d.ts.map +1 -0
  25. package/dist/model-runtime.test.js +32 -0
  26. package/dist/model-runtime.test.js.map +1 -0
  27. package/dist/provider-runtime-adapter.d.ts +13 -0
  28. package/dist/provider-runtime-adapter.d.ts.map +1 -0
  29. package/dist/provider-runtime-adapter.js +113 -0
  30. package/dist/provider-runtime-adapter.js.map +1 -0
  31. package/dist/provider-runtime-adapter.test.d.ts +2 -0
  32. package/dist/provider-runtime-adapter.test.d.ts.map +1 -0
  33. package/dist/provider-runtime-adapter.test.js +75 -0
  34. package/dist/provider-runtime-adapter.test.js.map +1 -0
  35. package/package.json +2 -2
@@ -0,0 +1,14 @@
1
+ import type { GatewayConfig } from "./gateway-config.js";
2
+ import type { BillingOwner, ModelInvocationUsage, ModelRef, ModelRuntimeAdapter, NormalizedModelError, UsageExtractionInput } from "./model-runtime.js";
3
+ export interface GatewayRuntimeAdapterOptions {
4
+ config?: GatewayConfig;
5
+ billingOwner?: BillingOwner;
6
+ }
7
+ export declare function createGatewayRuntimeAdapter(options?: GatewayRuntimeAdapterOptions): ModelRuntimeAdapter;
8
+ export declare function splitGatewayModelRef(ref: ModelRef): {
9
+ provider: string;
10
+ modelId: string;
11
+ };
12
+ export declare function extractGatewayInvocationUsage(input: UsageExtractionInput, billingOwner?: BillingOwner): ModelInvocationUsage;
13
+ export declare function classifyGatewayError(error: unknown): NormalizedModelError;
14
+ //# sourceMappingURL=gateway-runtime-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-adapter.d.ts","sourceRoot":"","sources":["../src/gateway-runtime-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EAEZ,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,4BAAiC,GAAG,mBAAmB,CAgB3G;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAczF;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,oBAAoB,EAC3B,YAAY,GAAE,YAAyB,GACtC,oBAAoB,CA2BtB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CA2BzE"}
@@ -0,0 +1,110 @@
1
+ import { createGatewayModel } from "./provider-factory.js";
2
+ export function createGatewayRuntimeAdapter(options = {}) {
3
+ const billingOwner = options.billingOwner ?? "external";
4
+ return {
5
+ mode: "gateway",
6
+ createLanguageModel(input) {
7
+ const { provider, modelId } = splitGatewayModelRef(input.ref);
8
+ return createGatewayModel(provider, modelId, options.config);
9
+ },
10
+ extractUsage(input) {
11
+ return extractGatewayInvocationUsage(input, billingOwner);
12
+ },
13
+ classifyError(error) {
14
+ return classifyGatewayError(error);
15
+ },
16
+ };
17
+ }
18
+ export function splitGatewayModelRef(ref) {
19
+ if (ref.provider) {
20
+ return { provider: ref.provider, modelId: ref.model };
21
+ }
22
+ const slash = ref.model.indexOf("/");
23
+ if (slash > 0 && slash < ref.model.length - 1) {
24
+ return {
25
+ provider: ref.model.slice(0, slash),
26
+ modelId: ref.model.slice(slash + 1),
27
+ };
28
+ }
29
+ throw new Error(`Gateway model references must include a provider prefix: ${ref.model}`);
30
+ }
31
+ export function extractGatewayInvocationUsage(input, billingOwner = "external") {
32
+ const result = asRecord(input.result);
33
+ const usage = asRecord(result?.totalUsage) ?? asRecord(result?.usage);
34
+ const inputTokens = numberFrom(usage?.inputTokens);
35
+ const outputTokens = numberFrom(usage?.outputTokens);
36
+ const reasoningTokens = numberFrom(asRecord(usage?.outputTokenDetails)?.reasoningTokens);
37
+ const cachedTokens = numberFrom(asRecord(usage?.inputTokenDetails)?.cacheReadTokens);
38
+ const providerMetadata = asRecord(result?.providerMetadata);
39
+ const gatewayMetadata = asRecord(providerMetadata?.gateway);
40
+ const reportedCost = numberFrom(gatewayMetadata?.marketCost, gatewayMetadata?.cost, gatewayMetadata?.actualCost);
41
+ const costSource = reportedCost === undefined ? "unknown" : "gateway-metadata";
42
+ return {
43
+ ...(inputTokens !== undefined ? { inputTokens } : {}),
44
+ ...(outputTokens !== undefined ? { outputTokens } : {}),
45
+ ...(reasoningTokens !== undefined ? { reasoningTokens } : {}),
46
+ ...(cachedTokens !== undefined ? { cachedTokens } : {}),
47
+ ...(reportedCost !== undefined ? { estimatedCostUsd: reportedCost } : {}),
48
+ ...(billingOwner === "platform" && reportedCost !== undefined ? { billableCostUsd: reportedCost } : {}),
49
+ costSource,
50
+ billingOwner,
51
+ };
52
+ }
53
+ export function classifyGatewayError(error) {
54
+ const message = getErrorMessage(error);
55
+ const lower = message.toLowerCase();
56
+ if (lower.includes("cancel") || lower.includes("abort")) {
57
+ return { class: "cancelled", retryable: false, message };
58
+ }
59
+ if (lower.includes("rate limit") || lower.includes("429")) {
60
+ return { class: "rate-limit", retryable: true, message };
61
+ }
62
+ if (lower.includes("timeout") || lower.includes("timed out") || lower.includes("etimedout")) {
63
+ return { class: "timeout", retryable: true, message };
64
+ }
65
+ if (lower.includes("overload") || lower.includes("temporarily unavailable") || lower.includes("503")) {
66
+ return { class: "overloaded", retryable: true, message };
67
+ }
68
+ if (lower.includes("unauthorized") || lower.includes("forbidden") || lower.includes("api key") || lower.includes("401") || lower.includes("403")) {
69
+ return { class: "auth", retryable: false, message };
70
+ }
71
+ if (lower.includes("context") && lower.includes("length")) {
72
+ return { class: "context-length", retryable: false, message };
73
+ }
74
+ if (lower.includes("invalid") || lower.includes("400") || lower.includes("must be non-empty")) {
75
+ return { class: "invalid-request", retryable: false, message };
76
+ }
77
+ return { class: "unknown", retryable: false, message, raw: error };
78
+ }
79
+ function asRecord(value) {
80
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
81
+ }
82
+ function numberFrom(...values) {
83
+ for (const value of values) {
84
+ if (typeof value === "number" && Number.isFinite(value))
85
+ return value;
86
+ if (typeof value === "string") {
87
+ const parsed = Number.parseFloat(value);
88
+ if (Number.isFinite(parsed))
89
+ return parsed;
90
+ }
91
+ const record = asRecord(value);
92
+ if (record) {
93
+ const nested = numberFrom(record.total);
94
+ if (nested !== undefined)
95
+ return nested;
96
+ }
97
+ }
98
+ return undefined;
99
+ }
100
+ function getErrorMessage(error) {
101
+ if (error instanceof Error)
102
+ return error.message;
103
+ if (typeof error === "string")
104
+ return error;
105
+ const record = asRecord(error);
106
+ if (typeof record?.message === "string")
107
+ return record.message;
108
+ return "";
109
+ }
110
+ //# sourceMappingURL=gateway-runtime-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-adapter.js","sourceRoot":"","sources":["../src/gateway-runtime-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gateway-runtime-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-adapter.test.d.ts","sourceRoot":"","sources":["../src/gateway-runtime-adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { classifyGatewayError, createGatewayRuntimeAdapter, extractGatewayInvocationUsage, splitGatewayModelRef, } from "./gateway-runtime-adapter.js";
3
+ describe("gateway runtime adapter", () => {
4
+ it("is exposed as the generic gateway runtime mode", () => {
5
+ const adapter = createGatewayRuntimeAdapter();
6
+ expect(adapter.mode).toBe("gateway");
7
+ });
8
+ it("splits provider/model refs for gateway model ids", () => {
9
+ expect(splitGatewayModelRef({ model: "openai/gpt-4o" })).toEqual({
10
+ provider: "openai",
11
+ modelId: "gpt-4o",
12
+ });
13
+ expect(splitGatewayModelRef({ provider: "anthropic", model: "claude-sonnet-5" })).toEqual({
14
+ provider: "anthropic",
15
+ modelId: "claude-sonnet-5",
16
+ });
17
+ });
18
+ it("requires a provider prefix when one is not supplied separately", () => {
19
+ expect(() => splitGatewayModelRef({ model: "gpt-4o" })).toThrow(/provider prefix/);
20
+ });
21
+ it("extracts gateway usage as external by default", () => {
22
+ const usage = extractGatewayInvocationUsage({
23
+ mode: "gateway",
24
+ operation: "chat",
25
+ requested: { model: "openai/gpt-4o" },
26
+ context: {},
27
+ result: {
28
+ totalUsage: {
29
+ inputTokens: 12,
30
+ outputTokens: 7,
31
+ inputTokenDetails: { cacheReadTokens: 3 },
32
+ outputTokenDetails: { reasoningTokens: 2 },
33
+ },
34
+ providerMetadata: {
35
+ gateway: { marketCost: "0.0012" },
36
+ },
37
+ },
38
+ });
39
+ expect(usage).toEqual({
40
+ inputTokens: 12,
41
+ outputTokens: 7,
42
+ reasoningTokens: 2,
43
+ cachedTokens: 3,
44
+ estimatedCostUsd: 0.0012,
45
+ costSource: "gateway-metadata",
46
+ billingOwner: "external",
47
+ });
48
+ });
49
+ it("only marks billable cost when the host decorates billing ownership as platform", () => {
50
+ const usage = extractGatewayInvocationUsage({
51
+ mode: "gateway",
52
+ operation: "chat",
53
+ requested: { model: "openai/gpt-4o" },
54
+ context: {},
55
+ result: {
56
+ providerMetadata: {
57
+ gateway: { marketCost: 0.01 },
58
+ },
59
+ },
60
+ }, "platform");
61
+ expect(usage.estimatedCostUsd).toBe(0.01);
62
+ expect(usage.billableCostUsd).toBe(0.01);
63
+ expect(usage.billingOwner).toBe("platform");
64
+ });
65
+ it("classifies common retryable gateway failures without changing runtime mode", () => {
66
+ expect(classifyGatewayError(new Error("upstream rate limit 429"))).toMatchObject({
67
+ class: "rate-limit",
68
+ retryable: true,
69
+ });
70
+ expect(classifyGatewayError(new Error("messages: text content blocks must be non-empty"))).toMatchObject({
71
+ class: "invalid-request",
72
+ retryable: false,
73
+ });
74
+ });
75
+ });
76
+ //# sourceMappingURL=gateway-runtime-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-runtime-adapter.test.js","sourceRoot":"","sources":["../src/gateway-runtime-adapter.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,6 +10,12 @@ export { parseModelSpec, resolveModel, resolveModelSpec, resolveModelWithFallbac
10
10
  export type { ResolvedModel, ParsedModelSpec, ProviderValidationResult } from "./model-resolver.js";
11
11
  export type { GatewayConfig } from "./gateway-config.js";
12
12
  export type { ResolveModelOptions } from "./model-resolver.js";
13
+ export { MODEL_RUNTIME_MODES, isModelRuntimeMode, } from "./model-runtime.js";
14
+ export type { BillingOwner, CostSource, CreateModelInput, CredentialType, InvocationContext, ModelInvocationRecord, ModelInvocationStatus, ModelInvocationUsage, ModelOperation, ModelRef, ModelRuntimeAdapter, ModelRuntimeMode, NormalizedModelError, ProviderOptionInput, UsageExtractionInput, } from "./model-runtime.js";
15
+ export { classifyGatewayError, createGatewayRuntimeAdapter, extractGatewayInvocationUsage, splitGatewayModelRef, } from "./gateway-runtime-adapter.js";
16
+ export type { GatewayRuntimeAdapterOptions } from "./gateway-runtime-adapter.js";
17
+ export { classifyProviderRuntimeError, createProviderRuntimeAdapter, extractProviderInvocationUsage, splitProviderModelRef, } from "./provider-runtime-adapter.js";
18
+ export type { ProviderRuntimeAdapterOptions } from "./provider-runtime-adapter.js";
13
19
  export { createCustomProviderModel, createGatewayModel, mapReasoningToProviderOptions, buildStreamOpts, } from "./provider-factory.js";
14
20
  export { resolveApiKey, resolveApiKeyAsync, hasOAuthProfiles, PROVIDER_ENV_MAP, } from "./api-keys.js";
15
21
  export { estimateCost } from "./cost.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,YAAY,EAEZ,aAAa,EACb,UAAU,EACV,0BAA0B,EAE1B,oBAAoB,EACpB,oBAAoB,EAEpB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EAErB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,yBAAyB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,YAAY,EAEZ,aAAa,EACb,UAAU,EACV,0BAA0B,EAE1B,oBAAoB,EACpB,oBAAoB,EAEpB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EAErB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAGnF,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -18,6 +18,12 @@ setProviderOverrides, getProviderOverrides,
18
18
  setModelAllowlist, getModelAllowlist, isModelAllowed, enforceModelAllowlist,
19
19
  // Provider validation
20
20
  validateProviderKeys, validateProviderKeysDetailed, } from "./model-resolver.js";
21
+ // ─── Model Runtime Contracts ─────────────────────────
22
+ export { MODEL_RUNTIME_MODES, isModelRuntimeMode, } from "./model-runtime.js";
23
+ // ─── Gateway Runtime Adapter ─────────────────────────
24
+ export { classifyGatewayError, createGatewayRuntimeAdapter, extractGatewayInvocationUsage, splitGatewayModelRef, } from "./gateway-runtime-adapter.js";
25
+ // ─── Provider Runtime Adapter ────────────────────────
26
+ export { classifyProviderRuntimeError, createProviderRuntimeAdapter, extractProviderInvocationUsage, splitProviderModelRef, } from "./provider-runtime-adapter.js";
21
27
  // ─── Provider Factory ─────────────────────────────────
22
28
  export { createCustomProviderModel, createGatewayModel, mapReasoningToProviderOptions, buildStreamOpts, } from "./provider-factory.js";
23
29
  // ─── API Keys ────────────────────────────────────────
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0DAA0D;AAC1D,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,wDAAwD;AACxD,OAAO;AACL,kBAAkB;AAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,YAAY;AACZ,wCAAwC;AACxC,aAAa,EACb,UAAU,EACV,0BAA0B;AAC1B,qBAAqB;AACrB,oBAAoB,EACpB,oBAAoB;AACpB,kBAAkB;AAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB;AACrB,sBAAsB;AACtB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAO7B,yDAAyD;AACzD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,wDAAwD;AACxD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,wDAAwD;AACxD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,0DAA0D;AAC1D,OAAO,EACL,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,uDAAuD;AACvD,OAAO,EACL,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0DAA0D;AAC1D,OAAO,EACL,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,wDAAwD;AACxD,OAAO;AACL,kBAAkB;AAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,wBAAwB,EACxB,6BAA6B,EAC7B,YAAY;AACZ,wCAAwC;AACxC,aAAa,EACb,UAAU,EACV,0BAA0B;AAC1B,qBAAqB;AACrB,oBAAoB,EACpB,oBAAoB;AACpB,kBAAkB;AAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB;AACrB,sBAAsB;AACtB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAO7B,wDAAwD;AACxD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAmB5B,wDAAwD;AACxD,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAGtC,wDAAwD;AACxD,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,yDAAyD;AACzD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,wDAAwD;AACxD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,0DAA0D;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,wDAAwD;AACxD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,0DAA0D;AAC1D,OAAO,EACL,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,uDAAuD;AACvD,OAAO,EACL,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
@@ -8,6 +8,7 @@ import type { ProviderConfig, ModelConfig, ModelAllowlistEntry } from "@polpo-ai
8
8
  export type { ParsedModelSpec } from "@polpo-ai/core";
9
9
  import { type ModelInfo } from "./gateway-catalog.js";
10
10
  import type { GatewayConfig } from "./gateway-config.js";
11
+ import type { ModelRuntimeMode } from "./model-runtime.js";
11
12
  /**
12
13
  * A resolved model: metadata (from gateway catalog or custom provider config)
13
14
  * plus an AI SDK LanguageModel instance ready for generateText/streamText.
@@ -34,6 +35,8 @@ export interface ResolvedModel {
34
35
  cacheRead: number;
35
36
  cacheWrite: number;
36
37
  };
38
+ /** Runtime family used to create the AI SDK model. */
39
+ runtimeMode?: ModelRuntimeMode;
37
40
  /** The AI SDK model instance to pass to generateText/streamText. */
38
41
  aiModel: LanguageModel;
39
42
  }
@@ -70,6 +73,13 @@ export declare function parseModelSpec(spec?: string): {
70
73
  export interface ResolveModelOptions {
71
74
  /** Gateway configuration — passed per-request for multi-tenant support. */
72
75
  gateway?: GatewayConfig;
76
+ /**
77
+ * Runtime family for model creation.
78
+ *
79
+ * Defaults to `gateway` to preserve existing behavior. Use `provider` only
80
+ * when the host explicitly wants direct provider SDK execution.
81
+ */
82
+ mode?: ModelRuntimeMode;
73
83
  }
74
84
  export declare function resolveModel(spec?: string, opts?: ResolveModelOptions): ResolvedModel;
75
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  import { parseModelSpec as _parseModelSpec } from "@polpo-ai/core";
7
7
  import { getCatalogSync } from "./gateway-catalog.js";
8
8
  import { createCustomProviderModel, createGatewayModel } from "./provider-factory.js";
9
+ import { createProviderRuntimeAdapter } from "./provider-runtime-adapter.js";
9
10
  import { resolveApiKey, resolveApiKeyAsync, hasOAuthProfiles, PROVIDER_ENV_MAP } from "./api-keys.js";
10
11
  // ─── Provider Override Management ────────────────────
11
12
  /** Provider overrides from polpo.json — set by the orchestrator at init time. */
@@ -60,6 +61,7 @@ export function parseModelSpec(spec) {
60
61
  export function resolveModel(spec, opts) {
61
62
  const { provider, modelId } = parseModelSpec(spec);
62
63
  const override = providerOverrides[provider];
64
+ const runtimeMode = opts?.mode ?? "gateway";
63
65
  // Custom provider with baseUrl override -> use @ai-sdk/openai with custom endpoint
64
66
  if (override?.baseUrl) {
65
67
  const customDef = override.models?.find(m => m.id === modelId);
@@ -74,6 +76,7 @@ export function resolveModel(spec, opts) {
74
76
  cost: customDef.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
75
77
  contextWindow: customDef.contextWindow ?? 200_000,
76
78
  maxTokens: customDef.maxTokens ?? 8192,
79
+ runtimeMode: "provider",
77
80
  aiModel,
78
81
  };
79
82
  }
@@ -87,6 +90,7 @@ export function resolveModel(spec, opts) {
87
90
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
88
91
  contextWindow: 200_000,
89
92
  maxTokens: 8192,
93
+ runtimeMode: "provider",
90
94
  aiModel,
91
95
  };
92
96
  }
@@ -101,6 +105,25 @@ export function resolveModel(spec, opts) {
101
105
  `or set ${PROVIDER_ENV_MAP[provider] ?? `the API key env var for "${provider}"`} for direct provider access. ` +
102
106
  `See: https://docs.polpo.sh/docs/quickstart`);
103
107
  }
108
+ if (runtimeMode === "provider") {
109
+ const providerAdapter = createProviderRuntimeAdapter();
110
+ const aiModel = providerAdapter.createLanguageModel({
111
+ ref: { provider, model: modelId },
112
+ context: {},
113
+ });
114
+ return {
115
+ id: modelId,
116
+ name: modelId,
117
+ provider,
118
+ reasoning: false,
119
+ input: ["text"],
120
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
121
+ contextWindow: 200_000,
122
+ maxTokens: 8192,
123
+ runtimeMode: "provider",
124
+ aiModel,
125
+ };
126
+ }
104
127
  // Standard provider -> route through gateway (explicit config > env var fallback)
105
128
  const aiModel = createGatewayModel(provider, modelId, opts?.gateway);
106
129
  // Try to get metadata from cached catalog
@@ -123,6 +146,7 @@ export function resolveModel(spec, opts) {
123
146
  cacheRead: pricing?.cachedInputTokens ? parseFloat(pricing.cachedInputTokens) : 0,
124
147
  cacheWrite: pricing?.cacheCreationInputTokens ? parseFloat(pricing.cacheCreationInputTokens) : 0,
125
148
  },
149
+ runtimeMode: "gateway",
126
150
  aiModel,
127
151
  };
128
152
  }
@@ -136,6 +160,7 @@ export function resolveModel(spec, opts) {
136
160
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
137
161
  contextWindow: 200_000,
138
162
  maxTokens: 8192,
163
+ runtimeMode: "gateway",
139
164
  aiModel,
140
165
  };
141
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,24 @@
1
1
  import { describe, it, expect, afterEach } from "vitest";
2
- import { validateProviderKeys, validateProviderKeysDetailed, setProviderOverrides, } from "./model-resolver.js";
2
+ import { resolveModel, validateProviderKeys, validateProviderKeysDetailed, setProviderOverrides, } from "./model-resolver.js";
3
3
  // A provider name that certainly has no env key, no OAuth profile, and no
4
4
  // entry in the static PROVIDER_ENV_MAP.
5
5
  const CUSTOM = "bench-custom";
6
+ const ORIGINAL_OPENAI_API_KEY = process.env.OPENAI_API_KEY;
7
+ const ORIGINAL_AI_GATEWAY_API_KEY = process.env.AI_GATEWAY_API_KEY;
6
8
  afterEach(() => {
7
9
  setProviderOverrides({});
10
+ if (ORIGINAL_OPENAI_API_KEY === undefined) {
11
+ delete process.env.OPENAI_API_KEY;
12
+ }
13
+ else {
14
+ process.env.OPENAI_API_KEY = ORIGINAL_OPENAI_API_KEY;
15
+ }
16
+ if (ORIGINAL_AI_GATEWAY_API_KEY === undefined) {
17
+ delete process.env.AI_GATEWAY_API_KEY;
18
+ }
19
+ else {
20
+ process.env.AI_GATEWAY_API_KEY = ORIGINAL_AI_GATEWAY_API_KEY;
21
+ }
8
22
  });
9
23
  describe("validateProviderKeys — custom provider overrides", () => {
10
24
  it("flags an unknown provider without key as missing", () => {
@@ -34,4 +48,25 @@ describe("validateProviderKeysDetailed — custom provider overrides", () => {
34
48
  expect(results[0].hasKey).toBe(false);
35
49
  });
36
50
  });
51
+ describe("resolveModel — runtime mode selection", () => {
52
+ it("keeps gateway mode as the default for backward compatibility", () => {
53
+ process.env.OPENAI_API_KEY = "test-openai-key";
54
+ delete process.env.AI_GATEWAY_API_KEY;
55
+ const model = resolveModel("openai/gpt-4o");
56
+ expect(model.runtimeMode).toBe("gateway");
57
+ });
58
+ it("uses direct provider mode only when explicitly requested", () => {
59
+ process.env.OPENAI_API_KEY = "test-openai-key";
60
+ delete process.env.AI_GATEWAY_API_KEY;
61
+ const model = resolveModel("openai/gpt-4o", { mode: "provider" });
62
+ expect(model.runtimeMode).toBe("provider");
63
+ expect(model.provider).toBe("openai");
64
+ expect(model.id).toBe("gpt-4o");
65
+ });
66
+ it("fails direct provider mode explicitly when the provider key is missing", () => {
67
+ delete process.env.OPENAI_API_KEY;
68
+ delete process.env.AI_GATEWAY_API_KEY;
69
+ expect(() => resolveModel("openai/gpt-4o", { mode: "provider" })).toThrow(/Missing API key|No LLM gateway/);
70
+ });
71
+ });
37
72
  //# sourceMappingURL=model-resolver.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.test.js","sourceRoot":"","sources":["../src/model-resolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,0EAA0E;AAC1E,wCAAwC;AACxC,MAAM,MAAM,GAAG,cAAc,CAAC;AAE9B,SAAS,CAAC,GAAG,EAAE;IACb,oBAAoB,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,oBAAoB,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,4BAA4B,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,4BAA4B,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"model-resolver.test.js","sourceRoot":"","sources":["../src/model-resolver.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { LanguageModel } from "ai";
2
+ import type { ModelInvocationContext, ModelInvocationUsage, ModelRef, ModelRuntimeMode, NormalizedModelError, UsageExtractionInput } from "@polpo-ai/core/model-runtime";
3
+ export { MODEL_RUNTIME_MODES, isModelRuntimeMode, } from "@polpo-ai/core/model-runtime";
4
+ export type { BillingOwner, CostSource, CredentialType, ModelInvocationContext, ModelInvocationRecord, ModelInvocationStatus, ModelInvocationUsage, ModelOperation, ModelRef, ModelRuntimeMode, NormalizedModelError, UsageExtractionInput, } from "@polpo-ai/core/model-runtime";
5
+ export interface InvocationContext extends ModelInvocationContext {
6
+ projectId?: string;
7
+ orgId?: string;
8
+ runId?: string;
9
+ sessionId?: string;
10
+ turnId?: string;
11
+ agentName?: string;
12
+ externalUser?: string;
13
+ signal?: AbortSignal;
14
+ metadata?: Record<string, unknown>;
15
+ }
16
+ export interface CreateModelInput {
17
+ ref: ModelRef;
18
+ context: InvocationContext;
19
+ }
20
+ export interface ProviderOptionInput extends CreateModelInput {
21
+ reasoning?: string;
22
+ maxOutputTokens?: number;
23
+ }
24
+ export interface ModelRuntimeAdapter {
25
+ mode: ModelRuntimeMode;
26
+ createLanguageModel(input: CreateModelInput): Promise<LanguageModel> | LanguageModel;
27
+ createEmbeddingModel?(input: CreateModelInput): Promise<unknown> | unknown;
28
+ createImageModel?(input: CreateModelInput): Promise<unknown> | unknown;
29
+ createVideoModel?(input: CreateModelInput): Promise<unknown> | unknown;
30
+ createTranscriptionModel?(input: CreateModelInput): Promise<unknown> | unknown;
31
+ createSpeechModel?(input: CreateModelInput): Promise<unknown> | unknown;
32
+ buildProviderOptions?(input: ProviderOptionInput): Promise<Record<string, unknown> | undefined> | Record<string, unknown> | undefined;
33
+ extractUsage(input: UsageExtractionInput): Promise<ModelInvocationUsage> | ModelInvocationUsage;
34
+ classifyError(error: unknown): NormalizedModelError;
35
+ }
36
+ //# sourceMappingURL=model-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-runtime.d.ts","sourceRoot":"","sources":["../src/model-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,QAAQ,CAAC;IACd,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC;IACrF,oBAAoB,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC3E,gBAAgB,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACvE,gBAAgB,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACvE,wBAAwB,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC/E,iBAAiB,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACxE,oBAAoB,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtI,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAAC;IAChG,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAAC;CACrD"}
@@ -0,0 +1,2 @@
1
+ export { MODEL_RUNTIME_MODES, isModelRuntimeMode, } from "@polpo-ai/core/model-runtime";
2
+ //# sourceMappingURL=model-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-runtime.js","sourceRoot":"","sources":["../src/model-runtime.ts"],"names":[],"mappings":"AASA,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=model-runtime.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-runtime.test.d.ts","sourceRoot":"","sources":["../src/model-runtime.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { MODEL_RUNTIME_MODES, isModelRuntimeMode, } from "./model-runtime.js";
3
+ describe("model runtime contracts", () => {
4
+ it("only exposes provider and gateway as public runtime modes", () => {
5
+ expect(MODEL_RUNTIME_MODES).toEqual(["provider", "gateway"]);
6
+ expect(isModelRuntimeMode("provider")).toBe(true);
7
+ expect(isModelRuntimeMode("gateway")).toBe(true);
8
+ expect(isModelRuntimeMode("managed-gateway")).toBe(false);
9
+ });
10
+ it("allows platform billing to be a ledger decoration instead of a runtime mode", () => {
11
+ const record = {
12
+ mode: "gateway",
13
+ operation: "chat",
14
+ requestedModel: "anthropic/claude-sonnet-5",
15
+ status: "succeeded",
16
+ costSource: "gateway-metadata",
17
+ billingOwner: "platform",
18
+ billableCostUsd: 0.01,
19
+ };
20
+ expect(record.mode).toBe("gateway");
21
+ expect(record.billingOwner).toBe("platform");
22
+ });
23
+ it("keeps hosted gateway implementation details out of the adapter shape", () => {
24
+ const adapter = {
25
+ mode: "gateway",
26
+ classifyError: () => ({ class: "unknown", retryable: false }),
27
+ };
28
+ expect(adapter.mode).toBe("gateway");
29
+ expect(Object.keys(adapter)).not.toContain("managed");
30
+ });
31
+ });
32
+ //# sourceMappingURL=model-runtime.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-runtime.test.js","sourceRoot":"","sources":["../src/model-runtime.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,MAAM,GAA0B;YACpC,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,2BAA2B;YAC3C,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,kBAAkB;YAC9B,YAAY,EAAE,UAAU;YACxB,eAAe,EAAE,IAAI;SACtB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,OAAO,GAAwD;YACnE,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;SAC9D,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { BillingOwner, ModelInvocationUsage, ModelRef, ModelRuntimeAdapter, NormalizedModelError, UsageExtractionInput } from "./model-runtime.js";
2
+ export interface ProviderRuntimeAdapterOptions {
3
+ apiKeyResolver?: (provider: string) => string | undefined;
4
+ billingOwner?: BillingOwner;
5
+ }
6
+ export declare function createProviderRuntimeAdapter(options?: ProviderRuntimeAdapterOptions): ModelRuntimeAdapter;
7
+ export declare function splitProviderModelRef(ref: ModelRef): {
8
+ provider: string;
9
+ modelId: string;
10
+ };
11
+ export declare function extractProviderInvocationUsage(input: UsageExtractionInput, billingOwner?: BillingOwner): ModelInvocationUsage;
12
+ export declare function classifyProviderRuntimeError(error: unknown): NormalizedModelError;
13
+ //# sourceMappingURL=provider-runtime-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-runtime-adapter.d.ts","sourceRoot":"","sources":["../src/provider-runtime-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEZ,oBAAoB,EACpB,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,6BAA6B;IAC5C,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,6BAAkC,GAAG,mBAAmB,CA2B7G;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAc1F;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,YAAY,GAAE,YAAyB,GACtC,oBAAoB,CAgBtB;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CA2BjF"}
@@ -0,0 +1,113 @@
1
+ import { createOpenAI } from "@ai-sdk/openai";
2
+ import { resolveApiKey } from "./api-keys.js";
3
+ export function createProviderRuntimeAdapter(options = {}) {
4
+ const billingOwner = options.billingOwner ?? "external";
5
+ return {
6
+ mode: "provider",
7
+ createLanguageModel(input) {
8
+ const { provider, modelId } = splitProviderModelRef(input.ref);
9
+ const apiKey = options.apiKeyResolver?.(provider) ?? resolveApiKey(provider);
10
+ if (!apiKey) {
11
+ throw new Error(`Missing API key for provider "${provider}"`);
12
+ }
13
+ if (provider === "openai") {
14
+ const openai = createOpenAI({ apiKey });
15
+ return openai(modelId);
16
+ }
17
+ throw new Error(`Direct provider execution is not implemented for provider "${provider}"`);
18
+ },
19
+ extractUsage(input) {
20
+ return extractProviderInvocationUsage(input, billingOwner);
21
+ },
22
+ classifyError(error) {
23
+ return classifyProviderRuntimeError(error);
24
+ },
25
+ };
26
+ }
27
+ export function splitProviderModelRef(ref) {
28
+ if (ref.provider) {
29
+ return { provider: ref.provider, modelId: ref.model };
30
+ }
31
+ const slash = ref.model.indexOf("/");
32
+ if (slash > 0 && slash < ref.model.length - 1) {
33
+ return {
34
+ provider: ref.model.slice(0, slash),
35
+ modelId: ref.model.slice(slash + 1),
36
+ };
37
+ }
38
+ throw new Error(`Provider model references must include a provider prefix: ${ref.model}`);
39
+ }
40
+ export function extractProviderInvocationUsage(input, billingOwner = "external") {
41
+ const result = asRecord(input.result);
42
+ const usage = asRecord(result?.totalUsage) ?? asRecord(result?.usage);
43
+ const inputTokens = numberFrom(usage?.inputTokens);
44
+ const outputTokens = numberFrom(usage?.outputTokens);
45
+ const reasoningTokens = numberFrom(asRecord(usage?.outputTokenDetails)?.reasoningTokens);
46
+ const cachedTokens = numberFrom(asRecord(usage?.inputTokenDetails)?.cacheReadTokens);
47
+ return {
48
+ ...(inputTokens !== undefined ? { inputTokens } : {}),
49
+ ...(outputTokens !== undefined ? { outputTokens } : {}),
50
+ ...(reasoningTokens !== undefined ? { reasoningTokens } : {}),
51
+ ...(cachedTokens !== undefined ? { cachedTokens } : {}),
52
+ costSource: "unknown",
53
+ billingOwner,
54
+ };
55
+ }
56
+ export function classifyProviderRuntimeError(error) {
57
+ const message = getErrorMessage(error);
58
+ const lower = message.toLowerCase();
59
+ if (lower.includes("cancel") || lower.includes("abort")) {
60
+ return { class: "cancelled", retryable: false, message };
61
+ }
62
+ if (lower.includes("rate limit") || lower.includes("429")) {
63
+ return { class: "rate-limit", retryable: true, message };
64
+ }
65
+ if (lower.includes("timeout") || lower.includes("timed out") || lower.includes("etimedout")) {
66
+ return { class: "timeout", retryable: true, message };
67
+ }
68
+ if (lower.includes("overload") || lower.includes("temporarily unavailable") || lower.includes("503")) {
69
+ return { class: "overloaded", retryable: true, message };
70
+ }
71
+ if (lower.includes("unauthorized") || lower.includes("forbidden") || lower.includes("api key") || lower.includes("401") || lower.includes("403")) {
72
+ return { class: "auth", retryable: false, message };
73
+ }
74
+ if (lower.includes("context") && lower.includes("length")) {
75
+ return { class: "context-length", retryable: false, message };
76
+ }
77
+ if (lower.includes("invalid") || lower.includes("400") || lower.includes("must be non-empty")) {
78
+ return { class: "invalid-request", retryable: false, message };
79
+ }
80
+ return { class: "unknown", retryable: false, message, raw: error };
81
+ }
82
+ function asRecord(value) {
83
+ return value && typeof value === "object" && !Array.isArray(value) ? value : undefined;
84
+ }
85
+ function numberFrom(...values) {
86
+ for (const value of values) {
87
+ if (typeof value === "number" && Number.isFinite(value))
88
+ return value;
89
+ if (typeof value === "string") {
90
+ const parsed = Number.parseFloat(value);
91
+ if (Number.isFinite(parsed))
92
+ return parsed;
93
+ }
94
+ const record = asRecord(value);
95
+ if (record) {
96
+ const nested = numberFrom(record.total);
97
+ if (nested !== undefined)
98
+ return nested;
99
+ }
100
+ }
101
+ return undefined;
102
+ }
103
+ function getErrorMessage(error) {
104
+ if (error instanceof Error)
105
+ return error.message;
106
+ if (typeof error === "string")
107
+ return error;
108
+ const record = asRecord(error);
109
+ if (typeof record?.message === "string")
110
+ return record.message;
111
+ return "";
112
+ }
113
+ //# sourceMappingURL=provider-runtime-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-runtime-adapter.js","sourceRoot":"","sources":["../src/provider-runtime-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider-runtime-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-runtime-adapter.test.d.ts","sourceRoot":"","sources":["../src/provider-runtime-adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { classifyProviderRuntimeError, createProviderRuntimeAdapter, extractProviderInvocationUsage, splitProviderModelRef, } from "./provider-runtime-adapter.js";
3
+ describe("provider runtime adapter", () => {
4
+ it("is exposed as the direct provider runtime mode", () => {
5
+ const adapter = createProviderRuntimeAdapter({
6
+ apiKeyResolver: () => "test-key",
7
+ });
8
+ expect(adapter.mode).toBe("provider");
9
+ });
10
+ it("splits provider/model refs for direct provider model ids", () => {
11
+ expect(splitProviderModelRef({ model: "openai/gpt-4o" })).toEqual({
12
+ provider: "openai",
13
+ modelId: "gpt-4o",
14
+ });
15
+ expect(splitProviderModelRef({ provider: "openai", model: "gpt-4o" })).toEqual({
16
+ provider: "openai",
17
+ modelId: "gpt-4o",
18
+ });
19
+ });
20
+ it("requires a provider prefix when one is not supplied separately", () => {
21
+ expect(() => splitProviderModelRef({ model: "gpt-4o" })).toThrow(/provider prefix/);
22
+ });
23
+ it("creates OpenAI language models through the provider adapter", () => {
24
+ const adapter = createProviderRuntimeAdapter({
25
+ apiKeyResolver: () => "test-key",
26
+ });
27
+ const model = adapter.createLanguageModel({
28
+ ref: { provider: "openai", model: "gpt-4o" },
29
+ context: {},
30
+ });
31
+ expect(model).toBeTruthy();
32
+ });
33
+ it("fails explicitly for unsupported direct providers", () => {
34
+ const adapter = createProviderRuntimeAdapter({
35
+ apiKeyResolver: () => "test-key",
36
+ });
37
+ expect(() => adapter.createLanguageModel({
38
+ ref: { provider: "anthropic", model: "claude-sonnet-5" },
39
+ context: {},
40
+ })).toThrow(/not implemented/);
41
+ });
42
+ it("extracts provider usage without claiming platform spend", () => {
43
+ const usage = extractProviderInvocationUsage({
44
+ mode: "provider",
45
+ operation: "chat",
46
+ requested: { provider: "openai", model: "gpt-4o" },
47
+ context: {},
48
+ result: {
49
+ totalUsage: {
50
+ inputTokens: 5,
51
+ outputTokens: 8,
52
+ inputTokenDetails: { cacheReadTokens: 1 },
53
+ },
54
+ },
55
+ });
56
+ expect(usage).toEqual({
57
+ inputTokens: 5,
58
+ outputTokens: 8,
59
+ cachedTokens: 1,
60
+ costSource: "unknown",
61
+ billingOwner: "external",
62
+ });
63
+ });
64
+ it("classifies common provider failures", () => {
65
+ expect(classifyProviderRuntimeError(new Error("request timeout"))).toMatchObject({
66
+ class: "timeout",
67
+ retryable: true,
68
+ });
69
+ expect(classifyProviderRuntimeError(new Error("invalid message 400"))).toMatchObject({
70
+ class: "invalid-request",
71
+ retryable: false,
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=provider-runtime-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-runtime-adapter.test.js","sourceRoot":"","sources":["../src/provider-runtime-adapter.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/llm",
3
- "version": "0.15.14",
3
+ "version": "0.15.16",
4
4
  "description": "LLM abstraction for Polpo — multi-provider model resolution, streaming, cost tracking, and failover built on Vercel AI SDK + AI Gateway",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "dependencies": {
20
20
  "@ai-sdk/openai": "^3.0.48",
21
21
  "@ai-sdk/openai-compatible": "^2.0.37",
22
- "@polpo-ai/core": "0.15.14"
22
+ "@polpo-ai/core": "0.15.16"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@ai-sdk/gateway": ">=3.0.0",