@opencode-ai/ai 0.0.0-beta-17941 → 0.0.0-beta-18027

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 (34) hide show
  1. package/dist/protocols/anthropic-messages.js +3 -2
  2. package/dist/protocols/gemini.d.ts +40 -40
  3. package/dist/protocols/gemini.js +68 -50
  4. package/dist/protocols/open-responses.d.ts +6 -7
  5. package/dist/protocols/open-responses.js +40 -50
  6. package/dist/protocols/openai-chat.d.ts +42 -2
  7. package/dist/protocols/openai-chat.js +34 -5
  8. package/dist/protocols/openai-compatible-responses.d.ts +1 -1
  9. package/dist/protocols/openai-responses.d.ts +6 -6
  10. package/dist/protocols/openai-responses.js +1 -2
  11. package/dist/protocols/utils/open-responses-options.d.ts +4 -3
  12. package/dist/protocols/utils/open-responses-options.js +2 -1
  13. package/dist/protocols/utils/openai-options.d.ts +3 -3
  14. package/dist/protocols/utils/openai-options.js +1 -1
  15. package/dist/protocols/xai-responses.d.ts +1 -1
  16. package/dist/provider-error.d.ts +1 -0
  17. package/dist/provider-error.js +4 -2
  18. package/dist/providers/amazon-bedrock-mantle.d.ts +11 -11
  19. package/dist/providers/azure.d.ts +8 -8
  20. package/dist/providers/cloudflare.d.ts +2 -2
  21. package/dist/providers/google-vertex-chat.d.ts +2 -2
  22. package/dist/providers/google-vertex-responses.d.ts +1 -1
  23. package/dist/providers/google-vertex.d.ts +7 -7
  24. package/dist/providers/google-vertex.js +13 -1
  25. package/dist/providers/google.d.ts +7 -7
  26. package/dist/providers/openai-compatible-responses.d.ts +1 -1
  27. package/dist/providers/openai-compatible.d.ts +9 -9
  28. package/dist/providers/openai-options.d.ts +6 -2
  29. package/dist/providers/openai.d.ts +12 -12
  30. package/dist/providers/openrouter.d.ts +22 -0
  31. package/dist/providers/xai.d.ts +11 -11
  32. package/dist/schema/errors.d.ts +1 -0
  33. package/dist/schema/errors.js +3 -0
  34. package/package.json +5 -5
@@ -242,29 +242,29 @@ export declare const routes: (RouteDef<{
242
242
  readonly presence_penalty?: number | undefined;
243
243
  readonly safety_identifier?: string | undefined;
244
244
  readonly top_logprobs?: number | undefined;
245
- readonly service_tier?: "default" | "auto" | "flex" | "priority" | undefined;
245
+ readonly service_tier?: import("../protocols/utils/open-responses-options.js").ServiceTier | undefined;
246
246
  readonly max_output_tokens?: number | undefined;
247
247
  readonly max_tool_calls?: number | undefined;
248
248
  readonly parallel_tool_calls?: boolean | undefined;
249
249
  }, import("../protocols/open-responses-channel.js").Prepared>)[];
250
250
  export declare const configure: (input: Config) => {
251
251
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
252
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
253
- responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
254
- chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
252
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
253
+ responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
254
+ chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
255
255
  configure: (input: Config) => /*elided*/ any;
256
256
  };
257
257
  export declare const provider: {
258
258
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
259
259
  configure: (input: Config) => {
260
260
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
261
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
262
- responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
263
- chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
261
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
262
+ responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
263
+ chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
264
264
  configure: /*elided*/ any;
265
265
  };
266
266
  };
267
267
  export declare const responsesModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>["model"];
268
268
  export declare const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>["model"];
269
- export declare const model: (modelID: string, settings: Settings) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
269
+ export declare const model: (modelID: string, settings: Settings) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
270
270
  export {};
@@ -323,7 +323,7 @@ export declare const CloudflareAIGateway: {
323
323
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
324
324
  configure: (options: AIGatewayOptions) => {
325
325
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
326
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
326
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
327
327
  configure: /*elided*/ any;
328
328
  };
329
329
  };
@@ -331,7 +331,7 @@ export declare const CloudflareWorkersAI: {
331
331
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
332
332
  configure: (options: WorkersAIOptions) => {
333
333
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
334
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
334
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
335
335
  configure: /*elided*/ any;
336
336
  };
337
337
  };
@@ -117,14 +117,14 @@ export declare const routes: import("../route/client.js").Route<{
117
117
  }, import("../route/transport/http.js").HttpPrepared<string>>[];
118
118
  export declare const configure: (input?: Config) => {
119
119
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
120
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
120
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
121
121
  configure: (input?: Config) => /*elided*/ any;
122
122
  };
123
123
  export declare const provider: {
124
124
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
125
125
  configure: (input?: Config) => {
126
126
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
127
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
127
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
128
128
  configure: /*elided*/ any;
129
129
  };
130
130
  };
@@ -130,7 +130,7 @@ export declare const routes: import("../route/client.js").Route<{
130
130
  readonly presence_penalty?: number | undefined;
131
131
  readonly safety_identifier?: string | undefined;
132
132
  readonly top_logprobs?: number | undefined;
133
- readonly service_tier?: "default" | "auto" | "flex" | "priority" | undefined;
133
+ readonly service_tier?: import("../protocols/utils/open-responses-options.js").ServiceTier | undefined;
134
134
  readonly max_output_tokens?: number | undefined;
135
135
  readonly max_tool_calls?: number | undefined;
136
136
  readonly parallel_tool_calls?: boolean | undefined;
@@ -28,23 +28,22 @@ export type Settings = ProviderPackage.Settings & ({
28
28
  };
29
29
  export declare const routes: Route<{
30
30
  readonly contents: readonly {
31
- readonly role: "model" | "user";
32
- readonly parts: readonly ({
31
+ readonly parts?: readonly ({
33
32
  readonly inlineData: {
34
33
  readonly mimeType: string;
35
34
  readonly data: string;
36
35
  };
37
36
  } | {
38
37
  readonly text: string;
39
- readonly thought?: boolean | undefined;
40
- readonly thoughtSignature?: string | undefined;
38
+ readonly thought?: boolean | null | undefined;
39
+ readonly thoughtSignature?: string | null | undefined;
41
40
  } | {
42
41
  readonly functionCall: {
43
42
  readonly name: string;
44
- readonly id?: string | undefined;
43
+ readonly id?: string | null | undefined;
45
44
  readonly args?: unknown;
46
45
  };
47
- readonly thoughtSignature?: string | undefined;
46
+ readonly thoughtSignature?: string | null | undefined;
48
47
  } | {
49
48
  readonly functionResponse: {
50
49
  readonly name: string;
@@ -57,7 +56,8 @@ export declare const routes: Route<{
57
56
  };
58
57
  }[] | undefined;
59
58
  };
60
- })[];
59
+ })[] | null | undefined;
60
+ readonly role?: "model" | "user" | null | undefined;
61
61
  }[];
62
62
  readonly tools?: readonly {
63
63
  readonly functionDeclarations: readonly {
@@ -10,11 +10,23 @@ import { GoogleVertexShared } from "./google-vertex-shared.js";
10
10
  export const id = ProviderID.make("google-vertex");
11
11
  const fromRequest = Effect.fn("GoogleVertex.fromRequest")(function* (request) {
12
12
  const body = yield* Gemini.protocol.body.from(request);
13
+ // Vertex's native REST schema rejects `id` on FunctionCall/FunctionResponse parts with HTTP 400,
14
+ // unlike AI Studio, so history minted there cannot be lowered verbatim.
15
+ const contents = body.contents.map((content) => ({
16
+ ...content,
17
+ parts: (content.parts ?? []).map((part) => {
18
+ if ("functionCall" in part)
19
+ return { ...part, functionCall: { ...part.functionCall, id: undefined } };
20
+ if ("functionResponse" in part)
21
+ return { ...part, functionResponse: { ...part.functionResponse, id: undefined } };
22
+ return part;
23
+ }),
24
+ }));
13
25
  const value = request.providerOptions?.labels;
14
26
  const labels = ProviderShared.isRecord(value)
15
27
  ? Object.fromEntries(Object.entries(value).filter((entry) => typeof entry[1] === "string"))
16
28
  : undefined;
17
- return { ...body, labels };
29
+ return { ...body, contents, labels };
18
30
  });
19
31
  const protocol = {
20
32
  ...Gemini.protocol,
@@ -9,23 +9,22 @@ export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput;
9
9
  export declare const id: string & import("effect/Brand").Brand<"AI.ProviderID">;
10
10
  export declare const routes: import("../route/client.js").Route<{
11
11
  readonly contents: readonly {
12
- readonly role: "model" | "user";
13
- readonly parts: readonly ({
12
+ readonly parts?: readonly ({
14
13
  readonly inlineData: {
15
14
  readonly mimeType: string;
16
15
  readonly data: string;
17
16
  };
18
17
  } | {
19
18
  readonly text: string;
20
- readonly thought?: boolean | undefined;
21
- readonly thoughtSignature?: string | undefined;
19
+ readonly thought?: boolean | null | undefined;
20
+ readonly thoughtSignature?: string | null | undefined;
22
21
  } | {
23
22
  readonly functionCall: {
24
23
  readonly name: string;
25
- readonly id?: string | undefined;
24
+ readonly id?: string | null | undefined;
26
25
  readonly args?: unknown;
27
26
  };
28
- readonly thoughtSignature?: string | undefined;
27
+ readonly thoughtSignature?: string | null | undefined;
29
28
  } | {
30
29
  readonly functionResponse: {
31
30
  readonly name: string;
@@ -38,7 +37,8 @@ export declare const routes: import("../route/client.js").Route<{
38
37
  };
39
38
  }[] | undefined;
40
39
  };
41
- })[];
40
+ })[] | null | undefined;
41
+ readonly role?: "model" | "user" | null | undefined;
42
42
  }[];
43
43
  readonly tools?: readonly {
44
44
  readonly functionDeclarations: readonly {
@@ -128,7 +128,7 @@ export declare const routes: import("../route/client.js").Route<{
128
128
  readonly presence_penalty?: number | undefined;
129
129
  readonly safety_identifier?: string | undefined;
130
130
  readonly top_logprobs?: number | undefined;
131
- readonly service_tier?: "default" | "auto" | "flex" | "priority" | undefined;
131
+ readonly service_tier?: import("../protocols/utils/open-responses-options.js").ServiceTier | undefined;
132
132
  readonly max_output_tokens?: number | undefined;
133
133
  readonly max_tool_calls?: number | undefined;
134
134
  readonly parallel_tool_calls?: boolean | undefined;
@@ -118,51 +118,51 @@ export declare const routes: import("../route/client.js").Route<{
118
118
  }, import("../route/transport/http.js").HttpPrepared<string>>[];
119
119
  export declare const configure: (input: GenericModelOptions) => {
120
120
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
121
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
121
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
122
122
  configure: (input: GenericModelOptions) => /*elided*/ any;
123
123
  };
124
124
  export declare const provider: {
125
125
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
126
126
  configure: (input: GenericModelOptions) => {
127
127
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
128
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
128
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
129
129
  configure: /*elided*/ any;
130
130
  };
131
131
  };
132
132
  export declare const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>["model"];
133
133
  export declare const baseten: {
134
134
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
135
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
135
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
136
136
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
137
137
  };
138
138
  export declare const cerebras: {
139
139
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
140
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
140
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
141
141
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
142
142
  };
143
143
  export declare const deepinfra: {
144
144
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
145
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
145
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
146
146
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
147
147
  };
148
148
  export declare const deepseek: {
149
149
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
150
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
150
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
151
151
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
152
152
  };
153
153
  export declare const fireworks: {
154
154
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
155
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
155
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
156
156
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
157
157
  };
158
158
  export declare const groq: {
159
159
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
160
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
160
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
161
161
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
162
162
  };
163
163
  export declare const togetherai: {
164
164
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
165
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
165
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
166
166
  configure: (input?: FamilyModelOptions) => /*elided*/ any;
167
167
  };
168
168
  export {};
@@ -1,7 +1,11 @@
1
1
  import { type ProviderOptions } from "../schema/index.js";
2
- import type { OpenResponsesOptionsInput } from "./open-responses-options.js";
2
+ import type { OpenAIServiceTier } from "../protocols/utils/openai-options.js";
3
+ import type { Options } from "../protocols/utils/open-responses-options.js";
3
4
  export type { OpenAIResponseIncludable, OpenAIServiceTier } from "../protocols/utils/openai-options.js";
4
- export type OpenAIOptionsInput = OpenResponsesOptionsInput;
5
+ export type OpenAIOptionsInput = Omit<Options, "serviceTier"> & {
6
+ readonly serviceTier?: OpenAIServiceTier;
7
+ readonly [key: string]: unknown;
8
+ };
5
9
  export type OpenAIProviderOptionsInput = OpenAIOptionsInput;
6
10
  export declare const gpt5DefaultOptions: (modelID: string, options?: {
7
11
  readonly textVerbosity?: boolean;
@@ -227,7 +227,7 @@ export declare const routes: (Route<{
227
227
  readonly presence_penalty?: number | undefined;
228
228
  readonly safety_identifier?: string | undefined;
229
229
  readonly top_logprobs?: number | undefined;
230
- readonly service_tier?: "default" | "auto" | "flex" | "priority" | undefined;
230
+ readonly service_tier?: import("../protocols/utils/open-responses-options.js").ServiceTier | undefined;
231
231
  readonly max_output_tokens?: number | undefined;
232
232
  readonly max_tool_calls?: number | undefined;
233
233
  readonly parallel_tool_calls?: boolean | undefined;
@@ -258,29 +258,29 @@ export interface Settings extends ProviderPackage.Settings {
258
258
  }
259
259
  export declare const configure: (input?: Config) => {
260
260
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
261
- model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
262
- responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
263
- chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
261
+ model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
262
+ responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
263
+ chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
264
264
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/openai-images.js").OpenAIImageOptions>;
265
265
  configure: (input?: Config) => /*elided*/ any;
266
266
  };
267
267
  export declare const provider: {
268
268
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
269
- model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
270
- responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
271
- chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
269
+ model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
270
+ responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
271
+ chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
272
272
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/openai-images.js").OpenAIImageOptions>;
273
273
  configure: (input?: Config) => {
274
274
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
275
- model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
276
- responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
277
- chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
275
+ model: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
276
+ responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
277
+ chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
278
278
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/openai-images.js").OpenAIImageOptions>;
279
279
  configure: /*elided*/ any;
280
280
  };
281
281
  };
282
282
  export declare const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>["model"];
283
283
  export declare const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>["model"];
284
- export declare const responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
285
- export declare const chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
284
+ export declare const responses: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
285
+ export declare const chat: (id: string | ModelID) => import("../schema/options.js").LanguageModel<import("./openai-options.js").OpenAIOptionsInput>;
286
286
  export declare const image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/openai-images.js").OpenAIImageOptions>;
@@ -288,6 +288,8 @@ export declare const protocol: Protocol<{
288
288
  readonly prompt_tokens?: number | null | undefined;
289
289
  readonly completion_tokens?: number | null | undefined;
290
290
  readonly total_tokens?: number | null | undefined;
291
+ readonly cached_tokens?: number | null | undefined;
292
+ readonly prompt_cache_hit_tokens?: number | null | undefined;
291
293
  readonly prompt_tokens_details?: {
292
294
  readonly [x: string]: unknown;
293
295
  readonly cached_tokens?: number | null | undefined;
@@ -301,6 +303,7 @@ export declare const protocol: Protocol<{
301
303
  } | null | undefined;
302
304
  } | null | undefined;
303
305
  readonly choices?: readonly {
306
+ readonly [x: string]: unknown;
304
307
  readonly delta?: {
305
308
  readonly [x: string]: unknown;
306
309
  readonly reasoning?: string | null | undefined;
@@ -318,6 +321,25 @@ export declare const protocol: Protocol<{
318
321
  }[] | null | undefined;
319
322
  readonly reasoning_details?: unknown;
320
323
  } | null | undefined;
324
+ readonly usage?: {
325
+ readonly [x: string]: unknown;
326
+ readonly prompt_tokens?: number | null | undefined;
327
+ readonly completion_tokens?: number | null | undefined;
328
+ readonly total_tokens?: number | null | undefined;
329
+ readonly cached_tokens?: number | null | undefined;
330
+ readonly prompt_cache_hit_tokens?: number | null | undefined;
331
+ readonly prompt_tokens_details?: {
332
+ readonly [x: string]: unknown;
333
+ readonly cached_tokens?: number | null | undefined;
334
+ readonly cache_write_tokens?: number | null | undefined;
335
+ } | null | undefined;
336
+ readonly completion_tokens_details?: {
337
+ readonly [x: string]: unknown;
338
+ readonly reasoning_tokens?: number | null | undefined;
339
+ readonly accepted_prediction_tokens?: number | null | undefined;
340
+ readonly rejected_prediction_tokens?: number | null | undefined;
341
+ } | null | undefined;
342
+ } | null | undefined;
321
343
  readonly finish_reason?: string | null | undefined;
322
344
  readonly native_finish_reason?: string | null | undefined;
323
345
  }[] | null | undefined;
@@ -114,28 +114,28 @@ export declare const routes: (Route<{
114
114
  }, import("../route/transport/http.js").HttpPrepared<string>> | Route<unknown, import("../protocols/open-responses-channel.js").Prepared>)[];
115
115
  export declare const configure: (input?: LanguageModelOptions) => {
116
116
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
117
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
118
- responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
119
- chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
117
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
118
+ responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
119
+ chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
120
120
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/xai-images.js").XAIImageOptions>;
121
121
  configure: (input?: LanguageModelOptions) => /*elided*/ any;
122
122
  };
123
123
  export declare const provider: {
124
124
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
125
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
126
- responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
127
- chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
125
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
126
+ responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
127
+ chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
128
128
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/xai-images.js").XAIImageOptions>;
129
129
  configure: (input?: LanguageModelOptions) => {
130
130
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
131
- model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
132
- responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
133
- chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
131
+ model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
132
+ responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
133
+ chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
134
134
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/xai-images.js").XAIImageOptions>;
135
135
  configure: /*elided*/ any;
136
136
  };
137
137
  };
138
138
  export declare const model: ProviderPackage.Definition<Settings, XAIProviderOptionsInput>["model"];
139
- export declare const responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
140
- export declare const chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<import("./open-responses-options.js").OpenResponsesOptionsInput>;
139
+ export declare const responses: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
140
+ export declare const chat: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<OpenAIOptionsInput>;
141
141
  export declare const image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/xai-images.js").XAIImageOptions>;
@@ -140,6 +140,7 @@ declare const AIError_base: Schema.Class<AIError, Schema.TaggedStruct<"AI.Error"
140
140
  readonly module: Schema.String;
141
141
  readonly method: Schema.String;
142
142
  readonly reason: Schema.toTaggedUnion<"_tag", readonly [typeof InvalidRequestReason, typeof NoRouteReason, typeof AuthenticationReason, typeof RateLimitReason, typeof QuotaExceededReason, typeof ContentPolicyReason, typeof ProviderInternalReason, typeof TransportReason, typeof InvalidProviderOutputReason, typeof UnknownProviderReason]>;
143
+ readonly body: Schema.optional<Schema.String>;
143
144
  }>, import("effect/Cause").YieldableError>;
144
145
  export declare class AIError extends AIError_base {
145
146
  readonly cause: InvalidRequestReason | NoRouteReason | AuthenticationReason | RateLimitReason | QuotaExceededReason | ContentPolicyReason | ProviderInternalReason | TransportReason | InvalidProviderOutputReason | UnknownProviderReason;
@@ -137,6 +137,9 @@ export class AIError extends Schema.TaggedError()("AI.Error", {
137
137
  module: Schema.String,
138
138
  method: Schema.String,
139
139
  reason: AIErrorReason,
140
+ // Raw provider payload as a string, so classified failures never lose the
141
+ // original error detail even when the pretty message is a summary.
142
+ body: Schema.optional(Schema.String),
140
143
  }) {
141
144
  cause = this.reason;
142
145
  get message() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
- "version": "0.0.0-beta-17941",
3
+ "version": "0.0.0-beta-18027",
4
4
  "name": "@opencode-ai/ai",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,8 +29,8 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@clack/prompts": "1.0.0-alpha.1",
32
- "@effect/platform-node": "4.0.0-rc.110",
33
- "@opencode-ai/http-recorder": "0.0.0-beta-17941",
32
+ "@effect/platform-node": "4.0.0-rc.111",
33
+ "@opencode-ai/http-recorder": "0.0.0-beta-18027",
34
34
  "@tsconfig/bun": "1.0.9",
35
35
  "@types/bun": "1.3.13",
36
36
  "@typescript/native-preview": "7.0.0-dev.20251207.1",
@@ -39,9 +39,9 @@
39
39
  "dependencies": {
40
40
  "@smithy/eventstream-codec": "4.2.14",
41
41
  "@smithy/util-utf8": "4.2.2",
42
- "@opencode-ai/schema": "0.0.0-beta-17941",
42
+ "@opencode-ai/schema": "0.0.0-beta-18027",
43
43
  "aws4fetch": "1.0.20",
44
- "effect": "4.0.0-rc.110",
44
+ "effect": "4.0.0-rc.111",
45
45
  "google-auth-library": "10.5.0"
46
46
  }
47
47
  }