@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.
- package/dist/cache-policy.js +6 -5
- package/dist/experimental/evaluation.d.ts +7 -6
- package/dist/experimental/evaluation.js +3 -11
- package/dist/experimental/realtime.d.ts +59 -0
- package/dist/experimental/realtime.js +21 -13
- package/dist/experimental.d.ts +1 -1
- package/dist/generation.js +1 -1
- package/dist/image-client.d.ts +11 -9
- package/dist/image.d.ts +158 -150
- package/dist/image.js +2 -2
- package/dist/llm.d.ts +2 -4
- package/dist/llm.js +2 -2
- package/dist/media-model.d.ts +2 -2
- package/dist/media-model.js +1 -1
- package/dist/promise.d.ts +121 -121
- package/dist/promise.js +3 -5
- package/dist/protocols/alibaba-chat.d.ts +18 -18
- package/dist/protocols/alibaba-chat.js +3 -3
- package/dist/protocols/alibaba-messages.d.ts +12 -12
- package/dist/protocols/alibaba-messages.js +1 -1
- package/dist/protocols/alibaba-responses.d.ts +38 -38
- package/dist/protocols/anthropic-messages.d.ts +40 -44
- package/dist/protocols/anthropic-messages.js +13 -15
- package/dist/protocols/bedrock-converse.d.ts +36 -85
- package/dist/protocols/bedrock-converse.js +6 -6
- package/dist/protocols/bedrock-event-stream.d.ts +6 -1
- package/dist/protocols/bedrock-event-stream.js +9 -8
- package/dist/protocols/cartesia-speech.d.ts +32 -32
- package/dist/protocols/cohere-chat.d.ts +13 -10
- package/dist/protocols/cohere-chat.js +2 -2
- package/dist/protocols/deepgram-speech.d.ts +32 -32
- package/dist/protocols/elevenlabs-speech.d.ts +32 -32
- package/dist/protocols/gemini.d.ts +46 -36
- package/dist/protocols/gemini.js +12 -15
- package/dist/protocols/google-interactions.d.ts +14 -13
- package/dist/protocols/google-interactions.js +16 -11
- package/dist/protocols/google-speech.d.ts +32 -32
- package/dist/protocols/google-transcription.d.ts +32 -32
- package/dist/protocols/meta-messages.d.ts +23 -23
- package/dist/protocols/meta-responses.d.ts +84 -84
- package/dist/protocols/mistral-chat.d.ts +81 -78
- package/dist/protocols/mistral-chat.js +3 -5
- package/dist/protocols/open-responses-channel.js +47 -46
- package/dist/protocols/open-responses-continuation.d.ts +8 -2
- package/dist/protocols/open-responses-continuation.js +3 -1
- package/dist/protocols/open-responses.d.ts +419 -419
- package/dist/protocols/open-responses.js +11 -10
- package/dist/protocols/openai-chat.d.ts +68 -67
- package/dist/protocols/openai-chat.js +7 -8
- package/dist/protocols/openai-compatible-chat.d.ts +13 -14
- package/dist/protocols/openai-compatible-responses.d.ts +39 -40
- package/dist/protocols/openai-images.d.ts +32 -32
- package/dist/protocols/openai-responses.d.ts +253 -253
- package/dist/protocols/openai-responses.js +1 -1
- package/dist/protocols/openai-speech.d.ts +32 -32
- package/dist/protocols/openai-transcription.d.ts +32 -32
- package/dist/protocols/openai-transcription.js +12 -7
- package/dist/protocols/utils/open-responses-options.d.ts +8 -8
- package/dist/protocols/utils/open-responses-options.js +4 -6
- package/dist/protocols/utils/partial-json-options.d.ts +0 -1
- package/dist/protocols/utils/partial-json-options.js +0 -1
- package/dist/protocols/utils/partial-json.js +5 -4
- package/dist/protocols/utils/tool-schema.d.ts +0 -3
- package/dist/protocols/utils/tool-schema.js +0 -4
- package/dist/protocols/utils/tool-stream.d.ts +1 -1
- package/dist/protocols/venice-chat.d.ts +52 -53
- package/dist/protocols/venice-chat.js +6 -5
- package/dist/protocols/xai-images.js +3 -4
- package/dist/protocols/xai-responses.d.ts +81 -81
- package/dist/protocols/zai-chat.d.ts +33 -30
- package/dist/protocols/zai-chat.js +8 -3
- package/dist/protocols/zai-messages.d.ts +21 -19
- package/dist/protocols/zai-messages.js +3 -2
- package/dist/provider-error.js +8 -7
- package/dist/providers/alibaba.d.ts +74 -74
- package/dist/providers/amazon-bedrock-mantle.d.ts +202 -202
- package/dist/providers/amazon-bedrock.d.ts +16 -13
- package/dist/providers/anthropic-compatible.d.ts +13 -13
- package/dist/providers/anthropic.d.ts +13 -13
- package/dist/providers/azure.d.ts +112 -112
- package/dist/providers/baseten.d.ts +24 -24
- package/dist/providers/cerebras.d.ts +24 -24
- package/dist/providers/cloudflare-ai-gateway.d.ts +237 -234
- package/dist/providers/cloudflare-ai-gateway.js +3 -6
- package/dist/providers/cloudflare-workers-ai.d.ts +24 -24
- package/dist/providers/cohere.d.ts +78 -74
- package/dist/providers/deepinfra.d.ts +24 -24
- package/dist/providers/deepseek.d.ts +24 -24
- package/dist/providers/digitalocean.d.ts +36 -36
- package/dist/providers/fireworks.d.ts +24 -24
- package/dist/providers/google-vertex-chat.d.ts +12 -12
- package/dist/providers/google-vertex-interactions.d.ts +3 -3
- package/dist/providers/google-vertex-messages.d.ts +20 -20
- package/dist/providers/google-vertex-mistral.d.ts +14 -14
- package/dist/providers/google-vertex-responses.d.ts +38 -38
- package/dist/providers/google-vertex.d.ts +17 -17
- package/dist/providers/google-vertex.js +2 -2
- package/dist/providers/google.d.ts +79 -79
- package/dist/providers/groq.d.ts +24 -24
- package/dist/providers/meta.d.ts +189 -189
- package/dist/providers/minimax.d.ts +202 -202
- package/dist/providers/mistral.d.ts +28 -28
- package/dist/providers/moonshot.d.ts +202 -202
- package/dist/providers/open-responses-options.d.ts +0 -1
- package/dist/providers/open-responses-options.js +1 -1
- package/dist/providers/openai-compatible-responses.d.ts +38 -38
- package/dist/providers/openai-compatible.d.ts +12 -12
- package/dist/providers/openai-compatible.js +1 -1
- package/dist/providers/openai-options.d.ts +3 -4
- package/dist/providers/openai-options.js +0 -1
- package/dist/providers/openai.d.ts +103 -103
- package/dist/providers/openrouter.d.ts +171 -112
- package/dist/providers/openrouter.js +40 -33
- package/dist/providers/togetherai.d.ts +24 -24
- package/dist/providers/venice.d.ts +195 -20
- package/dist/providers/xai.d.ts +12 -12
- package/dist/providers/zai-coding-plan.d.ts +152 -72
- package/dist/providers/zai.d.ts +84 -19
- package/dist/route/auth-options.d.ts +0 -3
- package/dist/route/auth.d.ts +0 -2
- package/dist/route/auth.js +0 -2
- package/dist/route/client.d.ts +0 -218
- package/dist/route/client.js +3 -7
- package/dist/route/executor-service.js +1 -1
- package/dist/route/transport/http.js +5 -8
- package/dist/schema/errors.d.ts +1 -1
- package/dist/schema/errors.js +1 -1
- package/dist/schema/messages.js +4 -7
- package/dist/speech-client.d.ts +11 -9
- package/dist/speech.d.ts +158 -150
- package/dist/speech.js +2 -2
- package/dist/transcription-client.d.ts +11 -9
- package/dist/transcription.d.ts +158 -150
- package/dist/transcription.js +2 -2
- package/dist/video-client.d.ts +11 -9
- package/dist/video.d.ts +124 -116
- package/dist/video.js +2 -2
- package/package.json +7 -6
- package/dist/protocols/utils/openai-options.d.ts +0 -16
- package/dist/protocols/utils/openai-options.js +0 -15
package/dist/cache-policy.js
CHANGED
|
@@ -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
|
|
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.
|
|
108
|
+
const markAt = lastTextIndex >= 0 ? lastTextIndex : target.content.findLastIndex(isCacheablePart);
|
|
108
109
|
const existing = target.content[markAt];
|
|
109
|
-
if (
|
|
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 ? { ...
|
|
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 + (
|
|
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
|
-
|
|
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:
|
|
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
|
|
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
|
-
}
|
|
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
|
|
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
|
|
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 {
|
|
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.
|
|
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
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
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
|
};
|
package/dist/experimental.d.ts
CHANGED
|
@@ -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";
|
package/dist/generation.js
CHANGED
|
@@ -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
|
});
|
package/dist/image-client.d.ts
CHANGED
|
@@ -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<
|
|
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 {};
|