@opencode/ai 2.1.2 → 2.1.4

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 (140) hide show
  1. package/dist/cache-policy.js +6 -5
  2. package/dist/experimental/evaluation.d.ts +7 -6
  3. package/dist/experimental/evaluation.js +3 -11
  4. package/dist/experimental/realtime.d.ts +59 -0
  5. package/dist/experimental/realtime.js +21 -13
  6. package/dist/experimental.d.ts +1 -1
  7. package/dist/generation.js +1 -1
  8. package/dist/image-client.d.ts +11 -9
  9. package/dist/image.d.ts +158 -150
  10. package/dist/image.js +2 -2
  11. package/dist/llm.d.ts +2 -4
  12. package/dist/llm.js +2 -2
  13. package/dist/media-model.d.ts +2 -2
  14. package/dist/media-model.js +1 -1
  15. package/dist/promise.d.ts +121 -121
  16. package/dist/promise.js +3 -5
  17. package/dist/protocols/alibaba-chat.d.ts +18 -18
  18. package/dist/protocols/alibaba-chat.js +3 -3
  19. package/dist/protocols/alibaba-messages.d.ts +12 -12
  20. package/dist/protocols/alibaba-messages.js +1 -1
  21. package/dist/protocols/alibaba-responses.d.ts +38 -38
  22. package/dist/protocols/anthropic-messages.d.ts +40 -44
  23. package/dist/protocols/anthropic-messages.js +13 -15
  24. package/dist/protocols/bedrock-converse.d.ts +36 -85
  25. package/dist/protocols/bedrock-converse.js +6 -6
  26. package/dist/protocols/bedrock-event-stream.d.ts +6 -1
  27. package/dist/protocols/bedrock-event-stream.js +9 -8
  28. package/dist/protocols/cartesia-speech.d.ts +32 -32
  29. package/dist/protocols/cohere-chat.d.ts +13 -10
  30. package/dist/protocols/cohere-chat.js +2 -2
  31. package/dist/protocols/deepgram-speech.d.ts +32 -32
  32. package/dist/protocols/elevenlabs-speech.d.ts +32 -32
  33. package/dist/protocols/gemini.d.ts +46 -36
  34. package/dist/protocols/gemini.js +12 -15
  35. package/dist/protocols/google-interactions.d.ts +14 -13
  36. package/dist/protocols/google-interactions.js +16 -11
  37. package/dist/protocols/google-speech.d.ts +32 -32
  38. package/dist/protocols/google-transcription.d.ts +32 -32
  39. package/dist/protocols/meta-messages.d.ts +23 -23
  40. package/dist/protocols/meta-responses.d.ts +84 -84
  41. package/dist/protocols/mistral-chat.d.ts +81 -78
  42. package/dist/protocols/mistral-chat.js +3 -5
  43. package/dist/protocols/open-responses-channel.js +47 -46
  44. package/dist/protocols/open-responses-continuation.d.ts +8 -2
  45. package/dist/protocols/open-responses-continuation.js +3 -1
  46. package/dist/protocols/open-responses.d.ts +419 -419
  47. package/dist/protocols/open-responses.js +11 -10
  48. package/dist/protocols/openai-chat.d.ts +68 -67
  49. package/dist/protocols/openai-chat.js +7 -8
  50. package/dist/protocols/openai-compatible-chat.d.ts +13 -14
  51. package/dist/protocols/openai-compatible-responses.d.ts +39 -40
  52. package/dist/protocols/openai-images.d.ts +32 -32
  53. package/dist/protocols/openai-responses.d.ts +253 -253
  54. package/dist/protocols/openai-responses.js +1 -1
  55. package/dist/protocols/openai-speech.d.ts +32 -32
  56. package/dist/protocols/openai-transcription.d.ts +32 -32
  57. package/dist/protocols/openai-transcription.js +12 -7
  58. package/dist/protocols/utils/open-responses-options.d.ts +8 -8
  59. package/dist/protocols/utils/open-responses-options.js +4 -6
  60. package/dist/protocols/utils/partial-json-options.d.ts +0 -1
  61. package/dist/protocols/utils/partial-json-options.js +0 -1
  62. package/dist/protocols/utils/partial-json.js +5 -4
  63. package/dist/protocols/utils/tool-schema.d.ts +0 -3
  64. package/dist/protocols/utils/tool-schema.js +0 -4
  65. package/dist/protocols/utils/tool-stream.d.ts +1 -1
  66. package/dist/protocols/venice-chat.d.ts +52 -53
  67. package/dist/protocols/venice-chat.js +6 -5
  68. package/dist/protocols/xai-images.js +3 -4
  69. package/dist/protocols/xai-responses.d.ts +81 -81
  70. package/dist/protocols/zai-chat.d.ts +33 -30
  71. package/dist/protocols/zai-chat.js +8 -3
  72. package/dist/protocols/zai-messages.d.ts +21 -19
  73. package/dist/protocols/zai-messages.js +3 -2
  74. package/dist/provider-error.js +8 -7
  75. package/dist/providers/alibaba.d.ts +74 -74
  76. package/dist/providers/amazon-bedrock-mantle.d.ts +202 -202
  77. package/dist/providers/amazon-bedrock.d.ts +16 -13
  78. package/dist/providers/anthropic-compatible.d.ts +13 -13
  79. package/dist/providers/anthropic.d.ts +13 -13
  80. package/dist/providers/azure.d.ts +112 -112
  81. package/dist/providers/baseten.d.ts +24 -24
  82. package/dist/providers/cerebras.d.ts +24 -24
  83. package/dist/providers/cloudflare-ai-gateway.d.ts +237 -234
  84. package/dist/providers/cloudflare-ai-gateway.js +3 -6
  85. package/dist/providers/cloudflare-workers-ai.d.ts +24 -24
  86. package/dist/providers/cohere.d.ts +78 -74
  87. package/dist/providers/deepinfra.d.ts +24 -24
  88. package/dist/providers/deepseek.d.ts +24 -24
  89. package/dist/providers/digitalocean.d.ts +36 -36
  90. package/dist/providers/fireworks.d.ts +24 -24
  91. package/dist/providers/google-vertex-chat.d.ts +12 -12
  92. package/dist/providers/google-vertex-interactions.d.ts +3 -3
  93. package/dist/providers/google-vertex-messages.d.ts +20 -20
  94. package/dist/providers/google-vertex-mistral.d.ts +14 -14
  95. package/dist/providers/google-vertex-responses.d.ts +38 -38
  96. package/dist/providers/google-vertex.d.ts +17 -17
  97. package/dist/providers/google-vertex.js +2 -2
  98. package/dist/providers/google.d.ts +79 -79
  99. package/dist/providers/groq.d.ts +24 -24
  100. package/dist/providers/meta.d.ts +189 -189
  101. package/dist/providers/minimax.d.ts +202 -202
  102. package/dist/providers/mistral.d.ts +28 -28
  103. package/dist/providers/moonshot.d.ts +202 -202
  104. package/dist/providers/open-responses-options.d.ts +0 -1
  105. package/dist/providers/open-responses-options.js +1 -1
  106. package/dist/providers/openai-compatible-responses.d.ts +38 -38
  107. package/dist/providers/openai-compatible.d.ts +12 -12
  108. package/dist/providers/openai-compatible.js +1 -1
  109. package/dist/providers/openai-options.d.ts +3 -4
  110. package/dist/providers/openai-options.js +0 -1
  111. package/dist/providers/openai.d.ts +103 -103
  112. package/dist/providers/openrouter.d.ts +171 -112
  113. package/dist/providers/openrouter.js +40 -33
  114. package/dist/providers/togetherai.d.ts +24 -24
  115. package/dist/providers/venice.d.ts +195 -20
  116. package/dist/providers/xai.d.ts +12 -12
  117. package/dist/providers/zai-coding-plan.d.ts +152 -72
  118. package/dist/providers/zai.d.ts +84 -19
  119. package/dist/route/auth-options.d.ts +0 -3
  120. package/dist/route/auth.d.ts +0 -2
  121. package/dist/route/auth.js +0 -2
  122. package/dist/route/client.d.ts +0 -218
  123. package/dist/route/client.js +3 -7
  124. package/dist/route/executor-service.js +1 -1
  125. package/dist/route/transport/http.js +5 -8
  126. package/dist/schema/errors.d.ts +1 -1
  127. package/dist/schema/errors.js +1 -1
  128. package/dist/schema/messages.js +4 -7
  129. package/dist/speech-client.d.ts +11 -9
  130. package/dist/speech.d.ts +158 -150
  131. package/dist/speech.js +2 -2
  132. package/dist/transcription-client.d.ts +11 -9
  133. package/dist/transcription.d.ts +158 -150
  134. package/dist/transcription.js +2 -2
  135. package/dist/video-client.d.ts +11 -9
  136. package/dist/video.d.ts +124 -116
  137. package/dist/video.js +2 -2
  138. package/package.json +7 -6
  139. package/dist/protocols/utils/openai-options.d.ts +0 -16
  140. package/dist/protocols/utils/openai-options.js +0 -15
@@ -94,8 +94,9 @@ const markSystemBoundaries = (system, hint, budget) => {
94
94
  return changed ? next : system;
95
95
  };
96
96
  const lastIndexOfRole = (messages, role) => messages.findLastIndex((m) => m.role === role);
97
+ const isCacheablePart = (part) => part.type !== "compaction" && part.type !== "effort";
97
98
  // Mark the last text part of `messages[index]`. If no text part exists, mark
98
- // the last content part regardless of type — that's the breakpoint position
99
+ // the last cacheable content part — that's the breakpoint position
99
100
  // in tool-result-only messages too.
100
101
  const markMessageAt = (messages, index, hint, budget) => {
101
102
  if (index < 0 || index >= messages.length)
@@ -104,12 +105,12 @@ const markMessageAt = (messages, index, hint, budget) => {
104
105
  if (target.content.length === 0)
105
106
  return messages;
106
107
  const lastTextIndex = target.content.findLastIndex((part) => part.type === "text");
107
- const markAt = lastTextIndex >= 0 ? lastTextIndex : target.content.length - 1;
108
+ const markAt = lastTextIndex >= 0 ? lastTextIndex : target.content.findLastIndex(isCacheablePart);
108
109
  const existing = target.content[markAt];
109
- if (("cache" in existing && existing.cache) || budget.remaining === 0)
110
+ if (!existing || !isCacheablePart(existing) || existing.cache || budget.remaining === 0)
110
111
  return messages;
111
112
  budget.remaining -= 1;
112
- const nextContent = target.content.map((part, i) => (i === markAt ? { ...part, cache: hint } : part));
113
+ const nextContent = target.content.map((part, i) => (i === markAt ? { ...existing, cache: hint } : part));
113
114
  const next = new Message({ ...target, content: nextContent });
114
115
  // Single pass over `messages`, substituting the one updated entry. Long
115
116
  // conversations call this on every request, so avoid `.map()` here — its
@@ -141,7 +142,7 @@ const markMessages = (messages, strategy, hint, budget) => {
141
142
  const countHints = (request) => countToolHints(request.tools) +
142
143
  request.system.reduce((count, part) => count + (part.cache === undefined ? 0 : 1), 0) +
143
144
  request.messages.reduce((count, message) => count +
144
- message.content.reduce((contentCount, part) => contentCount + ("cache" in part && part.cache !== undefined ? 1 : 0), 0), 0);
145
+ message.content.reduce((contentCount, part) => contentCount + (isCacheablePart(part) && part.cache !== undefined ? 1 : 0), 0), 0);
145
146
  export const applyCachePolicy = (request) => {
146
147
  const policy = selectPolicy(request);
147
148
  if (!policy.tools && !policy.system && !policy.messages)
@@ -101,10 +101,10 @@ export type AnswersFor<Questions extends EvaluationQuestions> = {
101
101
  export type EvaluationOptions = Record<string, unknown>;
102
102
  export interface EvaluationRoute<Options extends EvaluationOptions = EvaluationOptions> {
103
103
  readonly id: string;
104
- readonly evaluate: (request: EvaluationRequestFor<Options>, execute: Execute) => Effect.Effect<EvaluationResponse, AIError>;
104
+ evaluate(request: EvaluationRequestFor<Options>, execute: Execute): Effect.Effect<EvaluationResponse, AIError>;
105
105
  }
106
106
  export declare class EvaluationModel<Options extends EvaluationOptions = EvaluationOptions> {
107
- protected readonly _Options: (options: Options) => Options;
107
+ protected readonly _Options: Options;
108
108
  readonly id: ModelID;
109
109
  readonly provider: ProviderID;
110
110
  readonly route: EvaluationRoute<Options>;
@@ -193,12 +193,12 @@ export type EvaluationRequestFor<Options extends EvaluationOptions = EvaluationO
193
193
  readonly questions: Questions;
194
194
  readonly options?: Options;
195
195
  };
196
- export type EvaluationRequestInput<Model extends object = EvaluationModel, Questions extends EvaluationQuestions = EvaluationQuestions> = Omit<ConstructorParameters<typeof EvaluationRequest>[0], "model" | "questions" | "options" | "http"> & {
196
+ export type EvaluationRequestInput<Model extends EvaluationModel = EvaluationModel, Questions extends EvaluationQuestions = EvaluationQuestions> = Omit<ConstructorParameters<typeof EvaluationRequest>[0], "model" | "questions" | "options" | "http"> & {
197
197
  readonly model: Model;
198
198
  readonly questions: Questions;
199
199
  readonly options?: NoInfer<EvaluationModelOptions<Model>>;
200
200
  readonly http?: HttpOptions.Input;
201
- } & (Model extends EvaluationModel<EvaluationModelOptions<Model>> ? unknown : never);
201
+ };
202
202
  declare const EvaluationRounding_base: Schema.Class<EvaluationRounding, Schema.Struct<{
203
203
  readonly probabilityDecimals: Schema.optional<Schema.Int>;
204
204
  readonly scoreDecimals: Schema.optional<Schema.Int>;
@@ -230,9 +230,10 @@ export declare class EvaluationResponse extends EvaluationResponse_base {
230
230
  export type EvaluationResponseFor<Questions extends EvaluationQuestions> = Omit<EvaluationResponse, "answers"> & {
231
231
  readonly answers: AnswersFor<Questions>;
232
232
  };
233
- export declare function request<const Model extends object, const Questions extends EvaluationQuestions>(input: EvaluationRequestInput<Model, Questions>): EvaluationRequestFor<EvaluationModelOptions<Model>, Questions>;
233
+ export declare function request<const Model extends EvaluationModel, const Questions extends EvaluationQuestions>(input: EvaluationRequestInput<Model, Questions>): EvaluationRequestFor<EvaluationModelOptions<Model>, Questions>;
234
234
  export declare function request(input: EvaluationRequest): EvaluationRequest;
235
- export declare function run<const Model extends object, const Questions extends EvaluationQuestions>(input: EvaluationRequestInput<Model, Questions>): Effect.Effect<EvaluationResponseFor<Questions>, AIError, Service>;
235
+ export declare function request(input: EvaluationRequest | EvaluationRequestInput): EvaluationRequest;
236
+ export declare function run<const Model extends EvaluationModel, const Questions extends EvaluationQuestions>(input: EvaluationRequestInput<Model, Questions>): Effect.Effect<EvaluationResponseFor<Questions>, AIError, Service>;
236
237
  export declare function run(input: EvaluationRequest): Effect.Effect<EvaluationResponse, AIError, Service>;
237
238
  export declare const Evaluation: {
238
239
  readonly request: typeof request;
@@ -1,5 +1,6 @@
1
1
  import { Effect, Schema } from "effect";
2
- import { AIError, HttpOptions, InvalidRequestError, ModelID, ProviderID, ProviderMetadata, Usage, } from "../schema/index.js";
2
+ import { tryRequest } from "../media-model.js";
3
+ import { AIError, HttpOptions, ModelID, ProviderID, ProviderMetadata, Usage, } from "../schema/index.js";
3
4
  import { EvaluationClient, Service } from "./evaluation-client.js";
4
5
  export const EvaluationInput = Schema.Union([Schema.String, Schema.JsonObject, Schema.Array(Schema.Json)]);
5
6
  const EvaluationCriterion = Schema.NullOr(EvaluationInput);
@@ -95,20 +96,11 @@ export function request(input) {
95
96
  return input;
96
97
  return new EvaluationRequest({
97
98
  ...input,
98
- model: input.model,
99
99
  http: HttpOptions.make(input.http),
100
100
  });
101
101
  }
102
102
  export function run(input) {
103
- return Effect.try({
104
- try: () => (input instanceof EvaluationRequest ? input : request(input)),
105
- catch: (cause) => new AIError({
106
- reason: new InvalidRequestError({
107
- message: cause instanceof Error ? cause.message : String(cause),
108
- cause,
109
- }),
110
- }),
111
- }).pipe(Effect.flatMap((request) => EvaluationClient.evaluate(request)));
103
+ return tryRequest(() => request(input)).pipe(Effect.flatMap(EvaluationClient.evaluate));
112
104
  }
113
105
  export const Evaluation = {
114
106
  request,
@@ -7,6 +7,7 @@ export type RealtimeTransportInput = {
7
7
  } | {
8
8
  readonly type: "websocket";
9
9
  };
10
+ export type RealtimeTransportType = RealtimeTransportInput["type"];
10
11
  export type RealtimeTransport = {
11
12
  readonly type: "webrtc";
12
13
  readonly sdp: string;
@@ -23,25 +24,83 @@ export interface RealtimeConnectInput {
23
24
  readonly session?: RealtimeSession;
24
25
  readonly transport: RealtimeTransportInput;
25
26
  }
27
+ export declare const engines: readonly [{
28
+ readonly family: "gpt-live";
29
+ readonly model: "gpt-live-1";
30
+ readonly id: "openai-live";
31
+ readonly provider: "openai";
32
+ readonly transports: readonly ["webrtc"];
33
+ }, {
34
+ readonly family: "gpt-realtime";
35
+ readonly model: "gpt-realtime-2.1";
36
+ readonly id: "openai-realtime";
37
+ readonly provider: "openai";
38
+ readonly transports: readonly ["webrtc", "websocket"];
39
+ }, {
40
+ readonly family: "grok-voice";
41
+ readonly model: "grok-voice-3.0";
42
+ readonly id: "xai-realtime";
43
+ readonly provider: "xai";
44
+ readonly transports: readonly ["websocket"];
45
+ }, {
46
+ readonly family: "gemini-3.8-live";
47
+ readonly model: "gemini-3.8-live";
48
+ readonly id: "gemini-live";
49
+ readonly provider: "google";
50
+ readonly transports: readonly ["websocket"];
51
+ }];
26
52
  export declare const engine: (model: string) => {
27
53
  readonly family: "gpt-live";
54
+ readonly model: "gpt-live-1";
28
55
  readonly id: "openai-live";
29
56
  readonly provider: "openai";
57
+ readonly transports: readonly ["webrtc"];
30
58
  } | {
31
59
  readonly family: "gpt-realtime";
60
+ readonly model: "gpt-realtime-2.1";
32
61
  readonly id: "openai-realtime";
33
62
  readonly provider: "openai";
63
+ readonly transports: readonly ["webrtc", "websocket"];
34
64
  } | {
35
65
  readonly family: "grok-voice";
66
+ readonly model: "grok-voice-3.0";
36
67
  readonly id: "xai-realtime";
37
68
  readonly provider: "xai";
69
+ readonly transports: readonly ["websocket"];
38
70
  } | {
39
71
  readonly family: "gemini-3.8-live";
72
+ readonly model: "gemini-3.8-live";
40
73
  readonly id: "gemini-live";
41
74
  readonly provider: "google";
75
+ readonly transports: readonly ["websocket"];
42
76
  } | undefined;
43
77
  export declare const connect: (input: RealtimeConnectInput) => Effect.Effect<RealtimeTransport, AIError, import("../route/executor-service.js").RequestExecutorService>;
44
78
  export declare const Realtime: {
79
+ readonly engines: readonly [{
80
+ readonly family: "gpt-live";
81
+ readonly model: "gpt-live-1";
82
+ readonly id: "openai-live";
83
+ readonly provider: "openai";
84
+ readonly transports: readonly ["webrtc"];
85
+ }, {
86
+ readonly family: "gpt-realtime";
87
+ readonly model: "gpt-realtime-2.1";
88
+ readonly id: "openai-realtime";
89
+ readonly provider: "openai";
90
+ readonly transports: readonly ["webrtc", "websocket"];
91
+ }, {
92
+ readonly family: "grok-voice";
93
+ readonly model: "grok-voice-3.0";
94
+ readonly id: "xai-realtime";
95
+ readonly provider: "xai";
96
+ readonly transports: readonly ["websocket"];
97
+ }, {
98
+ readonly family: "gemini-3.8-live";
99
+ readonly model: "gemini-3.8-live";
100
+ readonly id: "gemini-live";
101
+ readonly provider: "google";
102
+ readonly transports: readonly ["websocket"];
103
+ }];
45
104
  readonly engine: typeof engine;
46
105
  readonly connect: (input: RealtimeConnectInput) => Effect.Effect<RealtimeTransport, AIError, import("../route/executor-service.js").RequestExecutorService>;
47
106
  };
@@ -6,11 +6,23 @@ import { encodeJson } from "../utils/json.js";
6
6
  const OPENAI_BASE_URL = "https://api.openai.com/v1";
7
7
  const XAI_BASE_URL = "https://api.x.ai/v1";
8
8
  const GOOGLE_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
9
- const engines = [
10
- { family: "gpt-live", id: "openai-live", provider: "openai" },
11
- { family: "gpt-realtime", id: "openai-realtime", provider: "openai" },
12
- { family: "grok-voice", id: "xai-realtime", provider: "xai" },
13
- { family: "gemini-3.8-live", id: "gemini-live", provider: "google" },
9
+ export const engines = [
10
+ { family: "gpt-live", model: "gpt-live-1", id: "openai-live", provider: "openai", transports: ["webrtc"] },
11
+ {
12
+ family: "gpt-realtime",
13
+ model: "gpt-realtime-2.1",
14
+ id: "openai-realtime",
15
+ provider: "openai",
16
+ transports: ["webrtc", "websocket"],
17
+ },
18
+ { family: "grok-voice", model: "grok-voice-3.0", id: "xai-realtime", provider: "xai", transports: ["websocket"] },
19
+ {
20
+ family: "gemini-3.8-live",
21
+ model: "gemini-3.8-live",
22
+ id: "gemini-live",
23
+ provider: "google",
24
+ transports: ["websocket"],
25
+ },
14
26
  ];
15
27
  // Matches the bare family name (`gpt-realtime`) and its versions (`gpt-realtime-2.1`, `gpt-realtime-mini`).
16
28
  export const engine = (model) => engines.find((item) => model === item.family || model.startsWith(`${item.family}-`));
@@ -18,11 +30,11 @@ export const connect = Effect.fn("Realtime.connect")(function* (input) {
18
30
  const resolved = engine(input.model);
19
31
  if (!resolved)
20
32
  return yield* invalidRequest(`Unsupported voice model: ${input.model}`);
33
+ if (!resolved.transports.some((type) => type === input.transport.type))
34
+ return yield* invalidRequest(`${input.model} only supports ${resolved.transports.join(", ")} transport`);
21
35
  const session = { ...input.session, model: input.model };
22
36
  switch (resolved.id) {
23
37
  case "openai-live": {
24
- if (input.transport.type !== "webrtc")
25
- return yield* invalidRequest("OpenAI GPT-Live only supports WebRTC transport");
26
38
  const data = yield* post(resolved.id, `${OPENAI_BASE_URL}/live/sessions`, input.apiKey, { session, transport: input.transport }, LiveSessionResponse);
27
39
  return { type: "webrtc", sdp: data.transport.sdp };
28
40
  }
@@ -39,16 +51,11 @@ export const connect = Effect.fn("Realtime.connect")(function* (input) {
39
51
  const sdp = yield* post(resolved.id, `${OPENAI_BASE_URL}/realtime/calls${query}`, input.apiKey, form, Schema.String);
40
52
  return { type: "webrtc", sdp };
41
53
  }
42
- case "xai-realtime": {
43
- if (input.transport.type !== "websocket")
44
- return yield* invalidRequest("xAI Grok Voice only supports WebSocket transport");
54
+ case "xai-realtime":
45
55
  return yield* clientSecret(resolved.id, XAI_BASE_URL, input.model, input.apiKey, {
46
56
  expires_after: { seconds: 60 },
47
57
  });
48
- }
49
58
  case "gemini-live": {
50
- if (input.transport.type !== "websocket")
51
- return yield* invalidRequest("Google Gemini Live only supports WebSocket transport");
52
59
  const now = yield* Clock.currentTimeMillis;
53
60
  const expiresAt = now + 60_000;
54
61
  const data = yield* post(resolved.id, `${GOOGLE_BASE_URL}/auth_tokens`, input.apiKey, {
@@ -67,6 +74,7 @@ export const connect = Effect.fn("Realtime.connect")(function* (input) {
67
74
  }
68
75
  });
69
76
  export const Realtime = {
77
+ engines,
70
78
  engine,
71
79
  connect,
72
80
  };
@@ -2,4 +2,4 @@ export { EvaluationClient } from "./experimental/evaluation-client.js";
2
2
  export { BooleanAnswer, BooleanQuestion, ChoiceAnswer, ChoiceQuestion, Evaluation, EvaluationAnswer, EvaluationInput, EvaluationModel, EvaluationModelSchema, EvaluationQuestion, EvaluationRequest, EvaluationResponse, EvaluationRounding, ScoreAnswer, ScoreQuestion, } from "./experimental/evaluation.js";
3
3
  export type { AnswerFor, AnswersFor, EvaluationModelOptions, EvaluationOptions, EvaluationQuestions, EvaluationRequestFor, EvaluationRequestInput, EvaluationResponseFor, EvaluationRoute, } from "./experimental/evaluation.js";
4
4
  export { Realtime } from "./experimental/realtime.js";
5
- export type { RealtimeConnectInput, RealtimeSession, RealtimeTransport, RealtimeTransportInput, } from "./experimental/realtime.js";
5
+ export type { RealtimeConnectInput, RealtimeSession, RealtimeTransport, RealtimeTransportInput, RealtimeTransportType, } from "./experimental/realtime.js";
@@ -110,6 +110,6 @@ const within = (effect, id, timeout, deadline) => Clock.currentTimeMillis.pipe(E
110
110
  const timeoutError = (id, timeout) => new AIError({
111
111
  reason: new TimeoutError({
112
112
  message: `Generation ${id} did not finish within ${Duration.format(timeout)}`,
113
- timeoutMs: Duration.toMillis(timeout),
113
+ timeoutMs: Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.ceil(Duration.toMillis(timeout)))),
114
114
  }),
115
115
  });
@@ -21,14 +21,6 @@ export declare const ImageClient: {
21
21
  } | {
22
22
  readonly type: "finish";
23
23
  readonly usage?: {
24
- readonly type: "tokens";
25
- readonly input?: number | undefined;
26
- readonly output?: number | undefined;
27
- readonly total?: number | undefined;
28
- readonly details?: {
29
- readonly [x: string]: unknown;
30
- } | undefined;
31
- } | {
32
24
  readonly type: "seconds";
33
25
  readonly seconds: number;
34
26
  } | {
@@ -40,6 +32,14 @@ export declare const ImageClient: {
40
32
  } | {
41
33
  readonly type: "compute";
42
34
  readonly seconds: number;
35
+ } | {
36
+ readonly type: "tokens";
37
+ readonly input?: number | undefined;
38
+ readonly output?: number | undefined;
39
+ readonly total?: number | undefined;
40
+ readonly details?: {
41
+ readonly [x: string]: unknown;
42
+ } | undefined;
43
43
  } | undefined;
44
44
  readonly notices?: readonly {
45
45
  readonly type: "filtered" | "moderated" | "other";
@@ -57,7 +57,9 @@ export declare const ImageClient: {
57
57
  } | undefined;
58
58
  } | import("./generation.js").Observation, import("./index.js").AIError, ImageClientService>;
59
59
  readonly start: (request: ImageRequestFor) => import("effect/Effect").Effect<import("./generation.js").Generation<ImageResponse>, import("./index.js").AIError, ImageClientService>;
60
- readonly resume: (model: import("./image.js").ImageModel<import("./media-model.js").MediaModel.Options>, token: unknown) => import("effect/Effect").Effect<import("./generation.js").Generation<ImageResponse>, import("./index.js").AIError, ImageClientService>;
60
+ readonly resume: (model: import("./image.js").ImageModel<{
61
+ readonly [x: string]: unknown;
62
+ }>, token: unknown) => import("effect/Effect").Effect<import("./generation.js").Generation<ImageResponse>, import("./index.js").AIError, ImageClientService>;
61
63
  readonly Service: typeof ImageClientService;
62
64
  };
63
65
  export {};