@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
|
@@ -20,58 +20,59 @@ const message = (body) => Effect.gen(function* () {
|
|
|
20
20
|
const driver = (options, body) => {
|
|
21
21
|
let responseID;
|
|
22
22
|
let terminal = false;
|
|
23
|
+
const observeEvent = Effect.fnUntraced(function* (_create, frame, event) {
|
|
24
|
+
if (terminal)
|
|
25
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} emitted ${event.type} after a terminal event`, frame);
|
|
26
|
+
if (event.type === "error") {
|
|
27
|
+
terminal = true;
|
|
28
|
+
return {
|
|
29
|
+
type: "provider-failure",
|
|
30
|
+
error: OpenResponses.providerFailure(event, `${options.name} stream error`, frame),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (event.type === "response.failed") {
|
|
34
|
+
terminal = true;
|
|
35
|
+
if (responseID && event.response?.id && event.response.id !== responseID)
|
|
36
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} response ID changed during execution`, frame);
|
|
37
|
+
return {
|
|
38
|
+
type: "provider-failure",
|
|
39
|
+
error: OpenResponses.providerFailure(event, `${options.name} response failed`, frame),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (event.type === "response.created") {
|
|
43
|
+
const created = event.response?.id;
|
|
44
|
+
if (responseID)
|
|
45
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} emitted duplicate response.created`, frame);
|
|
46
|
+
if (!created)
|
|
47
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} response.created is missing response.id`, frame);
|
|
48
|
+
responseID = created;
|
|
49
|
+
return { type: "frame", frame };
|
|
50
|
+
}
|
|
51
|
+
// Keepalives and provider notifications carry no response state and may precede response.created.
|
|
52
|
+
if (!event.type.startsWith("response."))
|
|
53
|
+
return { type: "frame", frame };
|
|
54
|
+
if (!responseID)
|
|
55
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} emitted ${event.type} before response.created`, frame);
|
|
56
|
+
if (event.response?.id && event.response.id !== responseID)
|
|
57
|
+
return yield* ProviderShared.eventError(options.id, `${options.name} response ID changed during execution`, frame);
|
|
58
|
+
if (event.type === "response.completed") {
|
|
59
|
+
terminal = true;
|
|
60
|
+
return { type: "completed", frame };
|
|
61
|
+
}
|
|
62
|
+
if (event.type === "response.incomplete") {
|
|
63
|
+
terminal = true;
|
|
64
|
+
return { type: "incomplete", frame };
|
|
65
|
+
}
|
|
66
|
+
return { type: "frame", frame };
|
|
67
|
+
});
|
|
23
68
|
return {
|
|
24
69
|
create: () => Effect.sync(() => {
|
|
25
70
|
responseID = undefined;
|
|
26
71
|
terminal = false;
|
|
27
72
|
return { message: body, mode: "full" };
|
|
28
73
|
}),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (terminal)
|
|
32
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} emitted ${event.type} after a terminal event`, frame);
|
|
33
|
-
if (event.type === "error") {
|
|
34
|
-
terminal = true;
|
|
35
|
-
return {
|
|
36
|
-
type: "provider-failure",
|
|
37
|
-
error: OpenResponses.providerFailure(event, `${options.name} stream error`, frame),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
if (event.type === "response.failed") {
|
|
41
|
-
terminal = true;
|
|
42
|
-
if (responseID && event.response?.id && event.response.id !== responseID)
|
|
43
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} response ID changed during execution`, frame);
|
|
44
|
-
return {
|
|
45
|
-
type: "provider-failure",
|
|
46
|
-
error: OpenResponses.providerFailure(event, `${options.name} response failed`, frame),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
if (event.type === "response.created") {
|
|
50
|
-
const created = event.response?.id;
|
|
51
|
-
if (responseID)
|
|
52
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} emitted duplicate response.created`, frame);
|
|
53
|
-
if (!created)
|
|
54
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} response.created is missing response.id`, frame);
|
|
55
|
-
responseID = created;
|
|
56
|
-
return { type: "frame", frame };
|
|
57
|
-
}
|
|
58
|
-
// Keepalives and provider notifications carry no response state and may precede response.created.
|
|
59
|
-
if (!event.type.startsWith("response."))
|
|
60
|
-
return { type: "frame", frame };
|
|
61
|
-
if (!responseID)
|
|
62
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} emitted ${event.type} before response.created`, frame);
|
|
63
|
-
if (event.response?.id && event.response.id !== responseID)
|
|
64
|
-
return yield* ProviderShared.eventError(options.id, `${options.name} response ID changed during execution`, frame);
|
|
65
|
-
if (event.type === "response.completed") {
|
|
66
|
-
terminal = true;
|
|
67
|
-
return { type: "completed", frame };
|
|
68
|
-
}
|
|
69
|
-
if (event.type === "response.incomplete") {
|
|
70
|
-
terminal = true;
|
|
71
|
-
return { type: "incomplete", frame };
|
|
72
|
-
}
|
|
73
|
-
return { type: "frame", frame };
|
|
74
|
-
}),
|
|
74
|
+
observeEvent,
|
|
75
|
+
observe: (create, frame) => OpenResponses.decodeChannelEvent(frame).pipe(Effect.mapError((cause) => ProviderShared.eventError(options.id, `Invalid ${options.name} WebSocket event`, frame, cause)), Effect.flatMap((event) => observeEvent(create, frame, event))),
|
|
75
76
|
};
|
|
76
77
|
};
|
|
77
78
|
export const transport = (options) => {
|
|
@@ -1,15 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AIError } from "../schema/index.js";
|
|
2
|
+
import type { ChannelCreate, ChannelObservation, WebSocketChannelDriver } from "../route/transport/index.js";
|
|
3
|
+
import { Effect } from "effect";
|
|
4
|
+
import { OpenResponses } from "./open-responses.js";
|
|
2
5
|
/**
|
|
3
6
|
* Fields to send next to `previous_response_id` on an incremental step, or undefined to send the step in full.
|
|
4
7
|
* Whether omitted fields carry over from the continued response is provider behavior the route must know.
|
|
5
8
|
*/
|
|
6
9
|
export type Shape = (request: Readonly<Record<string, unknown>>) => Readonly<Record<string, unknown>> | undefined;
|
|
10
|
+
export interface BaseDriver extends WebSocketChannelDriver {
|
|
11
|
+
readonly observeEvent?: (create: ChannelCreate, frame: string, event: OpenResponses.Event) => Effect.Effect<ChannelObservation, AIError>;
|
|
12
|
+
}
|
|
7
13
|
export interface DriverInput {
|
|
8
14
|
readonly id: string;
|
|
9
15
|
readonly name: string;
|
|
10
16
|
readonly request: Readonly<Record<string, unknown>>;
|
|
11
17
|
readonly message: string;
|
|
12
|
-
readonly base:
|
|
18
|
+
readonly base: BaseDriver;
|
|
13
19
|
readonly continuation?: Shape;
|
|
14
20
|
}
|
|
15
21
|
export declare const driver: (input: DriverInput) => WebSocketChannelDriver;
|
|
@@ -121,7 +121,9 @@ export const driver = (input) => {
|
|
|
121
121
|
}),
|
|
122
122
|
observe: (create, frame) => Effect.gen(function* () {
|
|
123
123
|
const event = yield* OpenResponses.decodeChannelEvent(frame).pipe(Effect.mapError((cause) => ProviderShared.eventError(input.id, `Invalid ${input.name} WebSocket event`, frame, cause)));
|
|
124
|
-
const observation = yield* input.base.
|
|
124
|
+
const observation = yield* input.base.observeEvent
|
|
125
|
+
? input.base.observeEvent(create, frame, event)
|
|
126
|
+
: input.base.observe(create, frame);
|
|
125
127
|
if (event.type === "response.output_item.done" && event.item)
|
|
126
128
|
output.push(event.item);
|
|
127
129
|
if (observation.type === "provider-failure") {
|