@polpo-ai/llm 0.15.140 → 0.15.141

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=custom-gateway-output.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-gateway-output.test.d.ts","sourceRoot":"","sources":["../src/custom-gateway-output.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { generateText, Output } from "ai";
3
+ import { createGatewayModel } from "./provider-factory.js";
4
+ import { modelOutputForJsonSchema } from "./model-output.js";
5
+ import { streamModelTurn } from "./stream-turn.js";
6
+ const schema = {
7
+ type: "object",
8
+ additionalProperties: false,
9
+ properties: {
10
+ goal: { type: "string" },
11
+ constraints: { type: "array", items: { type: "string" } },
12
+ },
13
+ required: ["goal", "constraints"],
14
+ };
15
+ const value = { goal: "Create the site", constraints: [] };
16
+ const messages = [{ role: "user", content: "Create a design brief." }];
17
+ function gateway() {
18
+ return createGatewayModel("openai", "gpt-5.6-luna", {
19
+ url: "https://custom-gateway.test/v1",
20
+ apiKey: "test-key",
21
+ headers: { "x-project": "test-project" },
22
+ });
23
+ }
24
+ function mockTransport(text = JSON.stringify(value), providerError) {
25
+ const requests = [];
26
+ vi.stubGlobal("fetch", vi.fn(async (url, init) => {
27
+ const body = JSON.parse(String(init?.body));
28
+ requests.push({ url: String(url), headers: new Headers(init?.headers), body });
29
+ if (providerError) {
30
+ return Response.json({ error: { message: providerError, type: "invalid_request_error", code: "invalid_json_schema" } }, { status: 400 });
31
+ }
32
+ if (body.stream) {
33
+ const parts = [
34
+ { id: "completion-test", created: 1, model: body.model, choices: [{ index: 0, delta: { role: "assistant", content: text }, finish_reason: null }] },
35
+ { id: "completion-test", created: 1, model: body.model, choices: [{ index: 0, delta: {}, finish_reason: "stop" }], usage: { prompt_tokens: 10, completion_tokens: 10, total_tokens: 20 } },
36
+ ];
37
+ return new Response(parts.map((part) => `data: ${JSON.stringify(part)}\n\n`).join("") + "data: [DONE]\n\n", {
38
+ headers: { "Content-Type": "text/event-stream" },
39
+ });
40
+ }
41
+ return Response.json({
42
+ id: "completion-test", created: 1, model: body.model,
43
+ choices: [{ index: 0, message: { role: "assistant", content: text }, finish_reason: "stop" }],
44
+ usage: { prompt_tokens: 10, completion_tokens: 10, total_tokens: 20 },
45
+ });
46
+ }));
47
+ return requests;
48
+ }
49
+ afterEach(() => vi.unstubAllGlobals());
50
+ describe("custom gateway structured output HTTP contract", () => {
51
+ it.each([false, true])("sends the full strict schema (stream=%s)", async (stream) => {
52
+ const requests = mockTransport();
53
+ const output = modelOutputForJsonSchema(schema, "design_brief");
54
+ const result = stream
55
+ ? await streamModelTurn({ model: gateway(), messages, output })
56
+ : await generateText({ model: gateway(), messages, output, maxRetries: 0 });
57
+ expect(result.output).toEqual(value);
58
+ expect(requests).toHaveLength(1);
59
+ expect(requests[0].url).toBe("https://custom-gateway.test/v1/chat/completions");
60
+ expect(requests[0].headers.get("authorization")).toBe("Bearer test-key");
61
+ expect(requests[0].headers.get("x-project")).toBe("test-project");
62
+ expect(requests[0].body.model).toBe("openai/gpt-5.6-luna");
63
+ expect(requests[0].body.response_format).toEqual({
64
+ type: "json_schema",
65
+ json_schema: { name: "design_brief", strict: true, schema },
66
+ });
67
+ });
68
+ it("keeps explicit JSON mode without a schema", async () => {
69
+ const requests = mockTransport();
70
+ await streamModelTurn({ model: gateway(), messages, output: Output.json() });
71
+ expect(requests[0].body.response_format).toEqual({ type: "json_object" });
72
+ });
73
+ it("does not add a response format to ordinary text requests", async () => {
74
+ const requests = mockTransport("Hello");
75
+ const result = await streamModelTurn({ model: gateway(), messages });
76
+ expect(result.text).toBe("Hello");
77
+ expect(requests[0].body).not.toHaveProperty("response_format");
78
+ });
79
+ it.each(['{"goal":42,"constraints":[]}', '{"goal":"Site"}', "not JSON"])("still rejects a nonconforming gateway response: %s", async (text) => {
80
+ const requests = mockTransport(text);
81
+ await expect(streamModelTurn({
82
+ model: gateway(), messages, output: modelOutputForJsonSchema(schema),
83
+ })).rejects.toThrow();
84
+ expect(requests).toHaveLength(1);
85
+ expect(requests[0].body.response_format.type).toBe("json_schema");
86
+ });
87
+ it("preserves a provider schema error and never retries with JSON mode", async () => {
88
+ const message = "Invalid schema: every property must be required";
89
+ const requests = mockTransport("", message);
90
+ await expect(streamModelTurn({
91
+ model: gateway(), messages, output: modelOutputForJsonSchema(schema),
92
+ })).rejects.toMatchObject({ statusCode: 400, message });
93
+ expect(requests).toHaveLength(1);
94
+ expect(requests[0].body.response_format.json_schema.strict).toBe(true);
95
+ });
96
+ it("does not silently rewrite optional properties or mutate the consumer schema", async () => {
97
+ const optionalSchema = { ...schema, required: ["goal"] };
98
+ const original = structuredClone(optionalSchema);
99
+ const requests = mockTransport();
100
+ await streamModelTurn({
101
+ model: gateway(), messages, output: modelOutputForJsonSchema(optionalSchema),
102
+ });
103
+ expect(requests[0].body.response_format.json_schema.schema).toEqual(original);
104
+ expect(optionalSchema).toEqual(original);
105
+ });
106
+ it("preserves required nullable fields and nested schemas", async () => {
107
+ const nestedSchema = {
108
+ ...schema,
109
+ properties: {
110
+ ...schema.properties,
111
+ details: {
112
+ anyOf: [
113
+ { type: "null" },
114
+ { type: "object", additionalProperties: false, properties: { note: { type: "string" } }, required: ["note"] },
115
+ ],
116
+ },
117
+ },
118
+ required: [...schema.required, "details"],
119
+ };
120
+ const requests = mockTransport(JSON.stringify({ ...value, details: null }));
121
+ const result = await streamModelTurn({
122
+ model: gateway(), messages, output: modelOutputForJsonSchema(nestedSchema),
123
+ });
124
+ expect(result.output).toEqual({ ...value, details: null });
125
+ expect(requests[0].body.response_format.json_schema.schema).toEqual(nestedSchema);
126
+ });
127
+ });
128
+ //# sourceMappingURL=custom-gateway-output.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-gateway-output.test.js","sourceRoot":"","sources":["../src/custom-gateway-output.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../src/provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAIxC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB,aAAa,CAaf;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,CAiB3G;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CA6DrD;AAWD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,cAAc,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAUrC"}
1
+ {"version":3,"file":"provider-factory.d.ts","sourceRoot":"","sources":["../src/provider-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAIxC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB,aAAa,CAaf;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,CAmB3G;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CA6DrD;AAWD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,cAAc,EAC1B,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAUrC"}
@@ -46,6 +46,8 @@ export function createGatewayModel(provider, modelId, config) {
46
46
  name: "gateway",
47
47
  apiKey: config.apiKey,
48
48
  headers: config.headers,
49
+ // Without this, the adapter silently drops output schemas and sends json_object.
50
+ supportsStructuredOutputs: true,
49
51
  });
50
52
  const modelSpec = `${provider}/${modelId}`;
51
53
  return gatewayProvider.languageModel(modelSpec);
@@ -1 +1 @@
1
- {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../src/provider-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-factory.js","sourceRoot":"","sources":["../src/provider-factory.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.140",
3
+ "version": "0.15.141",
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",
@@ -27,7 +27,7 @@
27
27
  "@hyperjump/browser": "1.4.0",
28
28
  "@hyperjump/json-schema": "1.17.7",
29
29
  "zod": "^4.3.6",
30
- "@polpo-ai/core": "0.15.140"
30
+ "@polpo-ai/core": "0.15.141"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@ai-sdk/gateway": ">=3.0.0",