@opencode/ai 2.0.15 → 2.0.17

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 (224) hide show
  1. package/README.md +441 -99
  2. package/dist/ai-client.d.ts +8 -0
  3. package/dist/ai-client.js +12 -0
  4. package/dist/experimental/evaluation-client.d.ts +3 -3
  5. package/dist/experimental/evaluation-client.js +1 -1
  6. package/dist/experimental/evaluation.js +1 -1
  7. package/dist/generation.d.ts +39 -29
  8. package/dist/generation.js +62 -36
  9. package/dist/image-client.d.ts +59 -17
  10. package/dist/image-client.js +16 -24
  11. package/dist/image.d.ts +394 -55
  12. package/dist/image.js +48 -57
  13. package/dist/index.d.ts +15 -2
  14. package/dist/index.js +10 -0
  15. package/dist/llm.d.ts +7 -5
  16. package/dist/llm.js +10 -4
  17. package/dist/media-client.d.ts +30 -0
  18. package/dist/media-client.js +51 -0
  19. package/dist/media-model.d.ts +43 -0
  20. package/dist/media-model.js +47 -0
  21. package/dist/media.d.ts +10 -9
  22. package/dist/media.js +11 -12
  23. package/dist/promise.d.ts +473 -15
  24. package/dist/promise.js +71 -13
  25. package/dist/protocols/alibaba-chat.d.ts +12 -0
  26. package/dist/protocols/alibaba-chat.js +4 -1
  27. package/dist/protocols/alibaba-messages.d.ts +1 -1
  28. package/dist/protocols/alibaba-messages.js +6 -4
  29. package/dist/protocols/alibaba-responses.d.ts +2 -2
  30. package/dist/protocols/anthropic-messages.d.ts +34 -34
  31. package/dist/protocols/anthropic-messages.js +14 -9
  32. package/dist/protocols/assemblyai-transcription.d.ts +41 -0
  33. package/dist/protocols/assemblyai-transcription.js +136 -0
  34. package/dist/protocols/bedrock-converse.d.ts +7 -0
  35. package/dist/protocols/bedrock-converse.js +39 -19
  36. package/dist/protocols/bfl-images.d.ts +38 -0
  37. package/dist/protocols/bfl-images.js +153 -0
  38. package/dist/protocols/cartesia-speech.d.ts +143 -0
  39. package/dist/protocols/cartesia-speech.js +120 -0
  40. package/dist/protocols/deepgram-speech.d.ts +135 -0
  41. package/dist/protocols/deepgram-speech.js +91 -0
  42. package/dist/protocols/deepgram-transcription.d.ts +26 -0
  43. package/dist/protocols/deepgram-transcription.js +125 -0
  44. package/dist/protocols/elevenlabs-speech.d.ts +138 -0
  45. package/dist/protocols/elevenlabs-speech.js +111 -0
  46. package/dist/protocols/fal-images.d.ts +25 -0
  47. package/dist/protocols/fal-images.js +104 -0
  48. package/dist/protocols/fal-video.d.ts +29 -0
  49. package/dist/protocols/fal-video.js +73 -0
  50. package/dist/protocols/gemini.d.ts +22 -22
  51. package/dist/protocols/gemini.js +19 -36
  52. package/dist/protocols/google-images.d.ts +3 -3
  53. package/dist/protocols/google-images.js +12 -34
  54. package/dist/protocols/google-speech.d.ts +146 -0
  55. package/dist/protocols/google-speech.js +88 -0
  56. package/dist/protocols/google-transcription.d.ts +174 -0
  57. package/dist/protocols/google-transcription.js +126 -0
  58. package/dist/protocols/google-video.d.ts +26 -0
  59. package/dist/protocols/google-video.js +142 -0
  60. package/dist/protocols/meta-images.d.ts +3 -4
  61. package/dist/protocols/meta-images.js +13 -29
  62. package/dist/protocols/meta-messages.d.ts +5 -5
  63. package/dist/protocols/meta-responses.d.ts +4 -4
  64. package/dist/protocols/meta-responses.js +6 -4
  65. package/dist/protocols/open-responses.d.ts +10 -9
  66. package/dist/protocols/open-responses.js +4 -9
  67. package/dist/protocols/openai-chat.d.ts +84 -0
  68. package/dist/protocols/openai-chat.js +28 -17
  69. package/dist/protocols/openai-compatible-chat.d.ts +12 -0
  70. package/dist/protocols/openai-compatible-responses.d.ts +2 -2
  71. package/dist/protocols/openai-images.d.ts +130 -7
  72. package/dist/protocols/openai-images.js +143 -91
  73. package/dist/protocols/openai-responses.d.ts +20 -20
  74. package/dist/protocols/openai-responses.js +31 -31
  75. package/dist/protocols/openai-speech.d.ts +136 -0
  76. package/dist/protocols/openai-speech.js +97 -0
  77. package/dist/protocols/openai-transcription.d.ts +211 -0
  78. package/dist/protocols/openai-transcription.js +202 -0
  79. package/dist/protocols/replicate-images.d.ts +28 -0
  80. package/dist/protocols/replicate-images.js +127 -0
  81. package/dist/protocols/runway-video.d.ts +38 -0
  82. package/dist/protocols/runway-video.js +140 -0
  83. package/dist/protocols/shared.d.ts +21 -17
  84. package/dist/protocols/shared.js +27 -36
  85. package/dist/protocols/stability-images.d.ts +39 -0
  86. package/dist/protocols/stability-images.js +136 -0
  87. package/dist/protocols/utils/fal-queue.d.ts +26 -0
  88. package/dist/protocols/utils/fal-queue.js +67 -0
  89. package/dist/protocols/utils/gemini-generate-content.d.ts +65 -0
  90. package/dist/protocols/utils/gemini-generate-content.js +65 -0
  91. package/dist/protocols/utils/gemini-json-schema.d.ts +3 -0
  92. package/dist/protocols/utils/gemini-json-schema.js +76 -0
  93. package/dist/protocols/utils/media-input.d.ts +23 -1
  94. package/dist/protocols/utils/media-input.js +40 -0
  95. package/dist/protocols/utils/responses-checkpoint.js +3 -7
  96. package/dist/protocols/utils/responses-compaction.d.ts +3 -1
  97. package/dist/protocols/utils/responses-compaction.js +16 -3
  98. package/dist/protocols/utils/speech-stream.d.ts +49 -0
  99. package/dist/protocols/utils/speech-stream.js +64 -0
  100. package/dist/protocols/utils/tool-schema.d.ts +2 -2
  101. package/dist/protocols/utils/tool-schema.js +62 -19
  102. package/dist/protocols/xai-images.d.ts +4 -4
  103. package/dist/protocols/xai-images.js +14 -40
  104. package/dist/protocols/xai-responses.d.ts +2 -2
  105. package/dist/protocols/xai-responses.js +1 -1
  106. package/dist/protocols/xai-video.d.ts +34 -0
  107. package/dist/protocols/xai-video.js +141 -0
  108. package/dist/protocols/zai-chat.d.ts +13 -1
  109. package/dist/protocols/zai-images.d.ts +2 -2
  110. package/dist/protocols/zai-images.js +11 -14
  111. package/dist/protocols/zai-messages.d.ts +1 -1
  112. package/dist/provider-error.js +10 -1
  113. package/dist/providers/alibaba.d.ts +15 -3
  114. package/dist/providers/amazon-bedrock-mantle.d.ts +14 -2
  115. package/dist/providers/amazon-bedrock.d.ts +2 -0
  116. package/dist/providers/amazon-bedrock.js +1 -0
  117. package/dist/providers/anthropic-compatible.d.ts +5 -5
  118. package/dist/providers/anthropic.d.ts +5 -5
  119. package/dist/providers/assemblyai.d.ts +25 -0
  120. package/dist/providers/assemblyai.js +24 -0
  121. package/dist/providers/azure.d.ts +20 -8
  122. package/dist/providers/azure.js +2 -2
  123. package/dist/providers/baseten.d.ts +24 -0
  124. package/dist/providers/black-forest-labs.d.ts +25 -0
  125. package/dist/providers/black-forest-labs.js +23 -0
  126. package/dist/providers/cartesia.d.ts +24 -0
  127. package/dist/providers/cartesia.js +17 -0
  128. package/dist/providers/cerebras.d.ts +24 -0
  129. package/dist/providers/cloudflare-ai-gateway.d.ts +42 -18
  130. package/dist/providers/cloudflare-workers-ai.d.ts +24 -0
  131. package/dist/providers/deepgram.d.ts +29 -0
  132. package/dist/providers/deepgram.js +25 -0
  133. package/dist/providers/deepinfra.d.ts +24 -0
  134. package/dist/providers/deepseek.d.ts +24 -0
  135. package/dist/providers/elevenlabs.d.ts +24 -0
  136. package/dist/providers/elevenlabs.js +23 -0
  137. package/dist/providers/fal.d.ts +29 -0
  138. package/dist/providers/fal.js +26 -0
  139. package/dist/providers/fireworks.d.ts +24 -0
  140. package/dist/providers/google-vertex-chat.d.ts +12 -0
  141. package/dist/providers/google-vertex-messages.d.ts +5 -5
  142. package/dist/providers/google-vertex-responses.d.ts +2 -2
  143. package/dist/providers/google-vertex.d.ts +6 -6
  144. package/dist/providers/google.d.ts +21 -6
  145. package/dist/providers/google.js +13 -9
  146. package/dist/providers/groq.d.ts +24 -0
  147. package/dist/providers/index.d.ts +9 -0
  148. package/dist/providers/index.js +9 -0
  149. package/dist/providers/meta.d.ts +22 -10
  150. package/dist/providers/meta.js +4 -8
  151. package/dist/providers/minimax.d.ts +19 -7
  152. package/dist/providers/moonshot.d.ts +19 -7
  153. package/dist/providers/moonshot.js +3 -3
  154. package/dist/providers/openai-compatible-responses.d.ts +2 -2
  155. package/dist/providers/openai-compatible.d.ts +12 -0
  156. package/dist/providers/openai-options.d.ts +3 -9
  157. package/dist/providers/openai-options.js +4 -7
  158. package/dist/providers/openai.d.ts +33 -12
  159. package/dist/providers/openai.js +17 -9
  160. package/dist/providers/opencode-zen.js +1 -1
  161. package/dist/providers/openrouter.d.ts +54 -7
  162. package/dist/providers/openrouter.js +10 -5
  163. package/dist/providers/replicate.d.ts +25 -0
  164. package/dist/providers/replicate.js +17 -0
  165. package/dist/providers/runway.d.ts +24 -0
  166. package/dist/providers/runway.js +17 -0
  167. package/dist/providers/stability.d.ts +28 -0
  168. package/dist/providers/stability.js +18 -0
  169. package/dist/providers/togetherai.d.ts +24 -0
  170. package/dist/providers/typesafe-ai.js +1 -1
  171. package/dist/providers/vercel-ai-gateway.js +1 -1
  172. package/dist/providers/xai.d.ts +17 -0
  173. package/dist/providers/xai.js +7 -9
  174. package/dist/providers/zai-coding-plan.d.ts +16 -4
  175. package/dist/providers/zai.d.ts +13 -1
  176. package/dist/providers/zai.js +4 -8
  177. package/dist/route/auth.d.ts +5 -2
  178. package/dist/route/auth.js +20 -13
  179. package/dist/route/client.d.ts +9 -7
  180. package/dist/route/client.js +6 -8
  181. package/dist/route/endpoint.d.ts +1 -0
  182. package/dist/route/endpoint.js +2 -2
  183. package/dist/route/executor-service.d.ts +4 -2
  184. package/dist/route/executor-service.js +2 -1
  185. package/dist/route/executor.d.ts +3 -1
  186. package/dist/route/executor.js +7 -0
  187. package/dist/route/framing.d.ts +15 -2
  188. package/dist/route/framing.js +53 -4
  189. package/dist/route/index.d.ts +1 -1
  190. package/dist/route/media-protocol.d.ts +145 -18
  191. package/dist/route/media-protocol.js +96 -28
  192. package/dist/route/media.d.ts +54 -9
  193. package/dist/route/media.js +194 -38
  194. package/dist/route/protocol.d.ts +3 -1
  195. package/dist/schema/events.d.ts +0 -6
  196. package/dist/schema/messages.d.ts +0 -3
  197. package/dist/schema/options.d.ts +10 -6
  198. package/dist/schema/options.js +10 -5
  199. package/dist/speech-client.d.ts +66 -0
  200. package/dist/speech-client.js +21 -0
  201. package/dist/speech.d.ts +1307 -0
  202. package/dist/speech.js +124 -0
  203. package/dist/testing.d.ts +2 -2
  204. package/dist/transcription-client.d.ts +82 -0
  205. package/dist/transcription-client.js +13 -0
  206. package/dist/transcription.d.ts +1492 -0
  207. package/dist/transcription.js +127 -0
  208. package/dist/utils/bytes.d.ts +1 -0
  209. package/dist/utils/bytes.js +10 -0
  210. package/dist/utils/json.d.ts +4 -0
  211. package/dist/utils/json.js +4 -0
  212. package/dist/utils/media-type.d.ts +3 -1
  213. package/dist/utils/media-type.js +25 -2
  214. package/dist/video-client.d.ts +59 -0
  215. package/dist/video-client.js +20 -0
  216. package/dist/video.d.ts +1351 -0
  217. package/dist/video.js +118 -0
  218. package/package.json +3 -3
  219. package/dist/protocols/utils/gemini-tool-schema.d.ts +0 -2
  220. package/dist/protocols/utils/gemini-tool-schema.js +0 -103
  221. package/dist/protocols/utils/meta-image.d.ts +0 -2
  222. package/dist/protocols/utils/meta-image.js +0 -13
  223. package/dist/protocols/utils/openai-image.d.ts +0 -5
  224. package/dist/protocols/utils/openai-image.js +0 -18
@@ -0,0 +1,25 @@
1
+ import { Auth } from "../route/auth.js";
2
+ import { MediaRoute } from "../route/media.js";
3
+ import { ProviderID } from "../schema/index.js";
4
+ import { DeepgramSpeech } from "../protocols/deepgram-speech.js";
5
+ import { DeepgramTranscription } from "../protocols/deepgram-transcription.js";
6
+ export const id = ProviderID.make("deepgram");
7
+ const auth = (options) => {
8
+ if ("auth" in options && options.auth)
9
+ return options.auth;
10
+ return Auth.optional("apiKey" in options ? options.apiKey : undefined, "apiKey")
11
+ .orElse(Auth.config("DEEPGRAM_API_KEY"))
12
+ .pipe(Auth.scheme("Token"));
13
+ };
14
+ export const configure = (input = {}) => {
15
+ const media = MediaRoute.deployment(input, auth(input));
16
+ return {
17
+ id,
18
+ speech: (modelID) => DeepgramSpeech.model({ ...media, id: modelID }),
19
+ transcription: (modelID) => DeepgramTranscription.model({ ...media, id: modelID }),
20
+ configure,
21
+ };
22
+ };
23
+ export const provider = configure();
24
+ export const speech = provider.speech;
25
+ export const transcription = provider.transcription;
@@ -28,6 +28,12 @@ export declare const route: Route<{
28
28
  readonly image_url: {
29
29
  readonly url: string;
30
30
  };
31
+ } | {
32
+ readonly type: "file";
33
+ readonly file: {
34
+ readonly filename: string;
35
+ readonly file_data: string;
36
+ };
31
37
  })[];
32
38
  } | {
33
39
  readonly role: "user";
@@ -43,6 +49,12 @@ export declare const route: Route<{
43
49
  readonly image_url: {
44
50
  readonly url: string;
45
51
  };
52
+ } | {
53
+ readonly type: "file";
54
+ readonly file: {
55
+ readonly filename: string;
56
+ readonly file_data: string;
57
+ };
46
58
  })[];
47
59
  } | {
48
60
  readonly [x: string]: unknown;
@@ -127,6 +139,12 @@ export declare const routes: Route<{
127
139
  readonly image_url: {
128
140
  readonly url: string;
129
141
  };
142
+ } | {
143
+ readonly type: "file";
144
+ readonly file: {
145
+ readonly filename: string;
146
+ readonly file_data: string;
147
+ };
130
148
  })[];
131
149
  } | {
132
150
  readonly role: "user";
@@ -142,6 +160,12 @@ export declare const routes: Route<{
142
160
  readonly image_url: {
143
161
  readonly url: string;
144
162
  };
163
+ } | {
164
+ readonly type: "file";
165
+ readonly file: {
166
+ readonly filename: string;
167
+ readonly file_data: string;
168
+ };
145
169
  })[];
146
170
  } | {
147
171
  readonly [x: string]: unknown;
@@ -28,6 +28,12 @@ export declare const route: Route<{
28
28
  readonly image_url: {
29
29
  readonly url: string;
30
30
  };
31
+ } | {
32
+ readonly type: "file";
33
+ readonly file: {
34
+ readonly filename: string;
35
+ readonly file_data: string;
36
+ };
31
37
  })[];
32
38
  } | {
33
39
  readonly role: "user";
@@ -43,6 +49,12 @@ export declare const route: Route<{
43
49
  readonly image_url: {
44
50
  readonly url: string;
45
51
  };
52
+ } | {
53
+ readonly type: "file";
54
+ readonly file: {
55
+ readonly filename: string;
56
+ readonly file_data: string;
57
+ };
46
58
  })[];
47
59
  } | {
48
60
  readonly [x: string]: unknown;
@@ -127,6 +139,12 @@ export declare const routes: Route<{
127
139
  readonly image_url: {
128
140
  readonly url: string;
129
141
  };
142
+ } | {
143
+ readonly type: "file";
144
+ readonly file: {
145
+ readonly filename: string;
146
+ readonly file_data: string;
147
+ };
130
148
  })[];
131
149
  } | {
132
150
  readonly role: "user";
@@ -142,6 +160,12 @@ export declare const routes: Route<{
142
160
  readonly image_url: {
143
161
  readonly url: string;
144
162
  };
163
+ } | {
164
+ readonly type: "file";
165
+ readonly file: {
166
+ readonly filename: string;
167
+ readonly file_data: string;
168
+ };
145
169
  })[];
146
170
  } | {
147
171
  readonly [x: string]: unknown;
@@ -0,0 +1,24 @@
1
+ import type { ProviderAuthOption } from "../route/auth-options.js";
2
+ import { type HttpOptions, type ModelID } from "../schema/index.js";
3
+ export type { ElevenLabsOutputFormat, ElevenLabsSpeechOptions } from "../protocols/elevenlabs-speech.js";
4
+ export declare const id: string & import("effect/Brand").Brand<"AI.ProviderID">;
5
+ export type Config = ProviderAuthOption<"optional"> & {
6
+ readonly baseURL?: string;
7
+ readonly headers?: Record<string, string>;
8
+ readonly http?: HttpOptions.Input;
9
+ };
10
+ export declare const configure: (input?: Config) => {
11
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
12
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/elevenlabs-speech.js").ElevenLabsSpeechOptions>;
13
+ configure: (input?: Config) => /*elided*/ any;
14
+ };
15
+ export declare const provider: {
16
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
17
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/elevenlabs-speech.js").ElevenLabsSpeechOptions>;
18
+ configure: (input?: Config) => {
19
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
20
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/elevenlabs-speech.js").ElevenLabsSpeechOptions>;
21
+ configure: /*elided*/ any;
22
+ };
23
+ };
24
+ export declare const speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/elevenlabs-speech.js").ElevenLabsSpeechOptions>;
@@ -0,0 +1,23 @@
1
+ import { Auth } from "../route/auth.js";
2
+ import { MediaRoute } from "../route/media.js";
3
+ import { ProviderID } from "../schema/index.js";
4
+ import { ElevenLabsSpeech } from "../protocols/elevenlabs-speech.js";
5
+ export const id = ProviderID.make("elevenlabs");
6
+ const auth = (options) => {
7
+ if ("auth" in options && options.auth)
8
+ return options.auth;
9
+ return Auth.optional("apiKey" in options ? options.apiKey : undefined, "apiKey")
10
+ .orElse(Auth.config("ELEVENLABS_API_KEY"))
11
+ .pipe(Auth.header("xi-api-key"));
12
+ };
13
+ export const configure = (input = {}) => {
14
+ const media = MediaRoute.deployment(input, auth(input));
15
+ const speech = (modelID) => ElevenLabsSpeech.model({ ...media, id: modelID });
16
+ return {
17
+ id,
18
+ speech,
19
+ configure,
20
+ };
21
+ };
22
+ export const provider = configure();
23
+ export const speech = provider.speech;
@@ -0,0 +1,29 @@
1
+ import type { ProviderAuthOption } from "../route/auth-options.js";
2
+ import { type HttpOptions, type ModelID } from "../schema/index.js";
3
+ export type { FalImageOptions } from "../protocols/fal-images.js";
4
+ export type { FalVideoOptions } from "../protocols/fal-video.js";
5
+ export declare const id: string & import("effect/Brand").Brand<"AI.ProviderID">;
6
+ export type Config = ProviderAuthOption<"optional"> & {
7
+ readonly baseURL?: string;
8
+ readonly headers?: Record<string, string>;
9
+ readonly http?: HttpOptions.Input;
10
+ };
11
+ export declare const configure: (input?: Config) => {
12
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
13
+ image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/fal-images.js").FalImageOptions>;
14
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/fal-video.js").FalVideoOptions>;
15
+ configure: (input?: Config) => /*elided*/ any;
16
+ };
17
+ export declare const provider: {
18
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
19
+ image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/fal-images.js").FalImageOptions>;
20
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/fal-video.js").FalVideoOptions>;
21
+ configure: (input?: Config) => {
22
+ id: string & import("effect/Brand").Brand<"AI.ProviderID">;
23
+ image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/fal-images.js").FalImageOptions>;
24
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/fal-video.js").FalVideoOptions>;
25
+ configure: /*elided*/ any;
26
+ };
27
+ };
28
+ export declare const image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/fal-images.js").FalImageOptions>;
29
+ export declare const video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/fal-video.js").FalVideoOptions>;
@@ -0,0 +1,26 @@
1
+ import { Auth } from "../route/auth.js";
2
+ import { MediaRoute } from "../route/media.js";
3
+ import { ProviderID } from "../schema/index.js";
4
+ import { FalImages } from "../protocols/fal-images.js";
5
+ import { FalVideo } from "../protocols/fal-video.js";
6
+ export const id = ProviderID.make("fal");
7
+ // fal authenticates with `Authorization: Key <FAL_KEY>` rather than a bearer token.
8
+ const auth = (options) => {
9
+ if ("auth" in options && options.auth)
10
+ return options.auth;
11
+ return Auth.optional("apiKey" in options ? options.apiKey : undefined, "apiKey")
12
+ .orElse(Auth.config("FAL_KEY"))
13
+ .pipe(Auth.scheme("Key"));
14
+ };
15
+ export const configure = (input = {}) => {
16
+ const media = MediaRoute.deployment(input, auth(input));
17
+ return {
18
+ id,
19
+ image: (modelID) => FalImages.model({ ...media, id: modelID }),
20
+ video: (modelID) => FalVideo.model({ ...media, id: modelID }),
21
+ configure,
22
+ };
23
+ };
24
+ export const provider = configure();
25
+ export const image = provider.image;
26
+ export const video = provider.video;
@@ -28,6 +28,12 @@ export declare const route: Route<{
28
28
  readonly image_url: {
29
29
  readonly url: string;
30
30
  };
31
+ } | {
32
+ readonly type: "file";
33
+ readonly file: {
34
+ readonly filename: string;
35
+ readonly file_data: string;
36
+ };
31
37
  })[];
32
38
  } | {
33
39
  readonly role: "user";
@@ -43,6 +49,12 @@ export declare const route: Route<{
43
49
  readonly image_url: {
44
50
  readonly url: string;
45
51
  };
52
+ } | {
53
+ readonly type: "file";
54
+ readonly file: {
55
+ readonly filename: string;
56
+ readonly file_data: string;
57
+ };
46
58
  })[];
47
59
  } | {
48
60
  readonly [x: string]: unknown;
@@ -127,6 +139,12 @@ export declare const routes: Route<{
127
139
  readonly image_url: {
128
140
  readonly url: string;
129
141
  };
142
+ } | {
143
+ readonly type: "file";
144
+ readonly file: {
145
+ readonly filename: string;
146
+ readonly file_data: string;
147
+ };
130
148
  })[];
131
149
  } | {
132
150
  readonly role: "user";
@@ -142,6 +160,12 @@ export declare const routes: Route<{
142
160
  readonly image_url: {
143
161
  readonly url: string;
144
162
  };
163
+ } | {
164
+ readonly type: "file";
165
+ readonly file: {
166
+ readonly filename: string;
167
+ readonly file_data: string;
168
+ };
145
169
  })[];
146
170
  } | {
147
171
  readonly [x: string]: unknown;
@@ -33,6 +33,12 @@ export declare const routes: Route<{
33
33
  readonly image_url: {
34
34
  readonly url: string;
35
35
  };
36
+ } | {
37
+ readonly type: "file";
38
+ readonly file: {
39
+ readonly filename: string;
40
+ readonly file_data: string;
41
+ };
36
42
  })[];
37
43
  } | {
38
44
  readonly role: "user";
@@ -48,6 +54,12 @@ export declare const routes: Route<{
48
54
  readonly image_url: {
49
55
  readonly url: string;
50
56
  };
57
+ } | {
58
+ readonly type: "file";
59
+ readonly file: {
60
+ readonly filename: string;
61
+ readonly file_data: string;
62
+ };
51
63
  })[];
52
64
  } | {
53
65
  readonly [x: string]: unknown;
@@ -236,20 +236,20 @@ export declare const routes: Route<{
236
236
  thinking?: {
237
237
  readonly type: "enabled";
238
238
  readonly budget_tokens: number;
239
- readonly display?: (string & {}) | "summarized" | "omitted" | undefined;
239
+ readonly display?: import("../schema/options.js").OpenString<"summarized" | "omitted"> | undefined;
240
240
  readonly block_binding?: {
241
- readonly prefix_mismatch_behavior?: (string & {}) | "error" | "drop_block" | undefined;
241
+ readonly prefix_mismatch_behavior?: import("../schema/options.js").OpenString<"error" | "drop_block"> | undefined;
242
242
  } | undefined;
243
243
  } | {
244
244
  readonly type: "adaptive";
245
- readonly display?: (string & {}) | "summarized" | "omitted" | undefined;
245
+ readonly display?: import("../schema/options.js").OpenString<"summarized" | "omitted"> | undefined;
246
246
  readonly block_binding?: {
247
- readonly prefix_mismatch_behavior?: (string & {}) | "error" | "drop_block" | undefined;
247
+ readonly prefix_mismatch_behavior?: import("../schema/options.js").OpenString<"error" | "drop_block"> | undefined;
248
248
  } | undefined;
249
249
  } | {
250
250
  readonly type: "disabled";
251
251
  } | undefined;
252
- service_tier?: "auto" | (string & {}) | "standard_only" | undefined;
252
+ service_tier?: import("../schema/options.js").OpenString<"auto" | "standard_only"> | undefined;
253
253
  container?: string | {
254
254
  readonly id?: string | null | undefined;
255
255
  readonly skills?: readonly {
@@ -84,8 +84,8 @@ export declare const routes: Route<{
84
84
  } | {
85
85
  readonly type: "input_file";
86
86
  readonly filename: string;
87
- readonly detail?: string | undefined;
88
87
  readonly file_data?: string | undefined;
88
+ readonly detail?: string | undefined;
89
89
  readonly file_url?: string | undefined;
90
90
  } | {
91
91
  readonly type: "input_text";
@@ -121,8 +121,8 @@ export declare const routes: Route<{
121
121
  } | {
122
122
  readonly type: "input_file";
123
123
  readonly filename: string;
124
- readonly detail?: string | undefined;
125
124
  readonly file_data?: string | undefined;
125
+ readonly detail?: string | undefined;
126
126
  readonly file_url?: string | undefined;
127
127
  } | {
128
128
  readonly type: "input_text";
@@ -67,11 +67,11 @@ export declare const routes: Route<{
67
67
  }[];
68
68
  readonly tools?: readonly {
69
69
  readonly functionDeclarations: readonly {
70
- readonly description: string;
71
70
  readonly name: string;
72
- readonly parameters?: {
71
+ readonly description: string;
72
+ readonly parametersJsonSchema: {
73
73
  readonly [x: string]: unknown;
74
- } | undefined;
74
+ };
75
75
  }[];
76
76
  }[] | undefined;
77
77
  readonly serviceTier?: string | undefined;
@@ -83,8 +83,8 @@ export declare const routes: Route<{
83
83
  } | undefined;
84
84
  readonly cachedContent?: string | undefined;
85
85
  readonly safetySettings?: readonly {
86
- readonly category: (string & {}) | "HARM_CATEGORY_UNSPECIFIED" | "HARM_CATEGORY_HATE_SPEECH" | "HARM_CATEGORY_DANGEROUS_CONTENT" | "HARM_CATEGORY_HARASSMENT" | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | "HARM_CATEGORY_CIVIC_INTEGRITY";
87
- readonly threshold: (string & {}) | "HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF";
86
+ readonly category: import("../schema/options.js").OpenString<"HARM_CATEGORY_UNSPECIFIED" | "HARM_CATEGORY_HATE_SPEECH" | "HARM_CATEGORY_DANGEROUS_CONTENT" | "HARM_CATEGORY_HARASSMENT" | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | "HARM_CATEGORY_CIVIC_INTEGRITY">;
87
+ readonly threshold: import("../schema/options.js").OpenString<"HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF">;
88
88
  }[] | undefined;
89
89
  readonly labels?: {
90
90
  readonly [x: string]: string;
@@ -105,7 +105,7 @@ export declare const routes: Route<{
105
105
  readonly thinkingConfig?: {
106
106
  readonly thinkingBudget?: number | undefined;
107
107
  readonly includeThoughts?: boolean | undefined;
108
- readonly thinkingLevel?: (string & {}) | "minimal" | "low" | "medium" | "high" | undefined;
108
+ readonly thinkingLevel?: import("../schema/options.js").OpenString<"minimal" | "low" | "medium" | "high"> | undefined;
109
109
  } | undefined;
110
110
  readonly maxOutputTokens?: number | undefined;
111
111
  } | undefined;
@@ -4,6 +4,9 @@ import type { ProviderPackage } from "../provider-package.js";
4
4
  import { type ModelID } from "../schema/index.js";
5
5
  import { Gemini } from "../protocols/gemini.js";
6
6
  export type { GoogleImageOptions } from "../protocols/google-images.js";
7
+ export type { GoogleSpeechOptions } from "../protocols/google-speech.js";
8
+ export type { GoogleTranscriptionOptions } from "../protocols/google-transcription.js";
9
+ export type { GoogleVideoOptions } from "../protocols/google-video.js";
7
10
  export type GeminiOptionsInput = Gemini.OptionsInput;
8
11
  export type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput;
9
12
  export declare const id: string & import("effect/Brand").Brand<"AI.ProviderID">;
@@ -49,11 +52,11 @@ export declare const routes: import("../route/client.js").Route<{
49
52
  }[];
50
53
  readonly tools?: readonly {
51
54
  readonly functionDeclarations: readonly {
52
- readonly description: string;
53
55
  readonly name: string;
54
- readonly parameters?: {
56
+ readonly description: string;
57
+ readonly parametersJsonSchema: {
55
58
  readonly [x: string]: unknown;
56
- } | undefined;
59
+ };
57
60
  }[];
58
61
  }[] | undefined;
59
62
  readonly serviceTier?: string | undefined;
@@ -65,8 +68,8 @@ export declare const routes: import("../route/client.js").Route<{
65
68
  } | undefined;
66
69
  readonly cachedContent?: string | undefined;
67
70
  readonly safetySettings?: readonly {
68
- readonly category: (string & {}) | "HARM_CATEGORY_UNSPECIFIED" | "HARM_CATEGORY_HATE_SPEECH" | "HARM_CATEGORY_DANGEROUS_CONTENT" | "HARM_CATEGORY_HARASSMENT" | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | "HARM_CATEGORY_CIVIC_INTEGRITY";
69
- readonly threshold: (string & {}) | "HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF";
71
+ readonly category: import("../schema/options.js").OpenString<"HARM_CATEGORY_UNSPECIFIED" | "HARM_CATEGORY_HATE_SPEECH" | "HARM_CATEGORY_DANGEROUS_CONTENT" | "HARM_CATEGORY_HARASSMENT" | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | "HARM_CATEGORY_CIVIC_INTEGRITY">;
72
+ readonly threshold: import("../schema/options.js").OpenString<"HARM_BLOCK_THRESHOLD_UNSPECIFIED" | "BLOCK_LOW_AND_ABOVE" | "BLOCK_MEDIUM_AND_ABOVE" | "BLOCK_ONLY_HIGH" | "BLOCK_NONE" | "OFF">;
70
73
  }[] | undefined;
71
74
  readonly labels?: {
72
75
  readonly [x: string]: string;
@@ -87,7 +90,7 @@ export declare const routes: import("../route/client.js").Route<{
87
90
  readonly thinkingConfig?: {
88
91
  readonly thinkingBudget?: number | undefined;
89
92
  readonly includeThoughts?: boolean | undefined;
90
- readonly thinkingLevel?: (string & {}) | "minimal" | "low" | "medium" | "high" | undefined;
93
+ readonly thinkingLevel?: import("../schema/options.js").OpenString<"minimal" | "low" | "medium" | "high"> | undefined;
91
94
  } | undefined;
92
95
  readonly maxOutputTokens?: number | undefined;
93
96
  } | undefined;
@@ -104,18 +107,30 @@ export declare const configure: (input?: Config) => {
104
107
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
105
108
  model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<Gemini.OptionsInput, import("../route/client.js").CompactionOperations | undefined>;
106
109
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/google-images.js").GoogleImageOptions>;
110
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/google-video.js").GoogleVideoOptions>;
111
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/google-speech.js").GoogleSpeechOptions>;
112
+ transcription: (modelID: string | ModelID) => import("../transcription.js").TranscriptionModel<import("../protocols/google-transcription.js").GoogleTranscriptionOptions>;
107
113
  configure: (input?: Config) => /*elided*/ any;
108
114
  };
109
115
  export declare const provider: {
110
116
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
111
117
  model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<Gemini.OptionsInput, import("../route/client.js").CompactionOperations | undefined>;
112
118
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/google-images.js").GoogleImageOptions>;
119
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/google-video.js").GoogleVideoOptions>;
120
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/google-speech.js").GoogleSpeechOptions>;
121
+ transcription: (modelID: string | ModelID) => import("../transcription.js").TranscriptionModel<import("../protocols/google-transcription.js").GoogleTranscriptionOptions>;
113
122
  configure: (input?: Config) => {
114
123
  id: string & import("effect/Brand").Brand<"AI.ProviderID">;
115
124
  model: (modelID: string | ModelID) => import("../schema/options.js").LanguageModel<Gemini.OptionsInput, import("../route/client.js").CompactionOperations | undefined>;
116
125
  image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/google-images.js").GoogleImageOptions>;
126
+ video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/google-video.js").GoogleVideoOptions>;
127
+ speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/google-speech.js").GoogleSpeechOptions>;
128
+ transcription: (modelID: string | ModelID) => import("../transcription.js").TranscriptionModel<import("../protocols/google-transcription.js").GoogleTranscriptionOptions>;
117
129
  configure: /*elided*/ any;
118
130
  };
119
131
  };
120
132
  export declare const model: ProviderPackage.Definition<Settings, Gemini.ProviderOptionsInput>["model"];
121
133
  export declare const image: (modelID: string | ModelID) => import("../image.js").ImageModel<import("../protocols/google-images.js").GoogleImageOptions>;
134
+ export declare const video: (modelID: string | ModelID) => import("../video.js").VideoModel<import("../protocols/google-video.js").GoogleVideoOptions>;
135
+ export declare const speech: (modelID: string | ModelID) => import("../speech.js").SpeechModel<import("../protocols/google-speech.js").GoogleSpeechOptions>;
136
+ export declare const transcription: (modelID: string | ModelID) => import("../transcription.js").TranscriptionModel<import("../protocols/google-transcription.js").GoogleTranscriptionOptions>;
@@ -1,7 +1,11 @@
1
1
  import { Auth } from "../route/auth.js";
2
- import { HttpOptions, ProviderID, mergeHttpOptions } from "../schema/index.js";
2
+ import { MediaRoute } from "../route/media.js";
3
+ import { ProviderID } from "../schema/index.js";
3
4
  import { Gemini } from "../protocols/gemini.js";
4
5
  import { GoogleImages } from "../protocols/google-images.js";
6
+ import { GoogleSpeech } from "../protocols/google-speech.js";
7
+ import { GoogleTranscription } from "../protocols/google-transcription.js";
8
+ import { GoogleVideo } from "../protocols/google-video.js";
5
9
  export const id = ProviderID.make("google");
6
10
  export const routes = [Gemini.route];
7
11
  const auth = (options) => {
@@ -17,17 +21,14 @@ const configuredRoute = (input) => {
17
21
  };
18
22
  export const configure = (input = {}) => {
19
23
  const route = configuredRoute(input);
20
- const image = (modelID) => GoogleImages.model({
21
- id: modelID,
22
- auth: auth(input),
23
- baseURL: input.baseURL,
24
- headers: input.headers,
25
- http: mergeHttpOptions(input.http === undefined ? undefined : HttpOptions.make(input.http)),
26
- });
24
+ const media = MediaRoute.deployment(input, auth(input));
27
25
  return {
28
26
  id,
29
27
  model: (modelID) => route.model({ id: modelID }),
30
- image,
28
+ image: (modelID) => GoogleImages.model({ ...media, id: modelID }),
29
+ video: (modelID) => GoogleVideo.model({ ...media, id: modelID }),
30
+ speech: (modelID) => GoogleSpeech.model({ ...media, id: modelID }),
31
+ transcription: (modelID) => GoogleTranscription.model({ ...media, id: modelID }),
31
32
  configure,
32
33
  };
33
34
  };
@@ -40,3 +41,6 @@ export const model = (modelID, { apiKey, baseURL, body, headers, ...providerOpti
40
41
  providerOptions,
41
42
  }).model(modelID);
42
43
  export const image = provider.image;
44
+ export const video = provider.video;
45
+ export const speech = provider.speech;
46
+ export const transcription = provider.transcription;
@@ -37,6 +37,12 @@ export declare const protocol: Protocol<{
37
37
  readonly image_url: {
38
38
  readonly url: string;
39
39
  };
40
+ } | {
41
+ readonly type: "file";
42
+ readonly file: {
43
+ readonly filename: string;
44
+ readonly file_data: string;
45
+ };
40
46
  })[];
41
47
  } | {
42
48
  readonly role: "user";
@@ -52,6 +58,12 @@ export declare const protocol: Protocol<{
52
58
  readonly image_url: {
53
59
  readonly url: string;
54
60
  };
61
+ } | {
62
+ readonly type: "file";
63
+ readonly file: {
64
+ readonly filename: string;
65
+ readonly file_data: string;
66
+ };
55
67
  })[];
56
68
  } | {
57
69
  readonly [x: string]: unknown;
@@ -208,6 +220,12 @@ export declare const route: Route<{
208
220
  readonly image_url: {
209
221
  readonly url: string;
210
222
  };
223
+ } | {
224
+ readonly type: "file";
225
+ readonly file: {
226
+ readonly filename: string;
227
+ readonly file_data: string;
228
+ };
211
229
  })[];
212
230
  } | {
213
231
  readonly role: "user";
@@ -223,6 +241,12 @@ export declare const route: Route<{
223
241
  readonly image_url: {
224
242
  readonly url: string;
225
243
  };
244
+ } | {
245
+ readonly type: "file";
246
+ readonly file: {
247
+ readonly filename: string;
248
+ readonly file_data: string;
249
+ };
226
250
  })[];
227
251
  } | {
228
252
  readonly [x: string]: unknown;
@@ -3,13 +3,19 @@ export * as Anthropic from "./anthropic.js";
3
3
  export * as AnthropicCompatible from "./anthropic-compatible.js";
4
4
  export * as AmazonBedrock from "./amazon-bedrock.js";
5
5
  export * as AmazonBedrockMantle from "./amazon-bedrock-mantle.js";
6
+ export * as AssemblyAI from "./assemblyai.js";
6
7
  export * as Azure from "./azure.js";
7
8
  export * as Baseten from "./baseten.js";
9
+ export * as BlackForestLabs from "./black-forest-labs.js";
10
+ export * as Cartesia from "./cartesia.js";
8
11
  export * as Cerebras from "./cerebras.js";
9
12
  export * as CloudflareAIGateway from "./cloudflare-ai-gateway.js";
10
13
  export * as CloudflareWorkersAI from "./cloudflare-workers-ai.js";
11
14
  export * as DeepInfra from "./deepinfra.js";
15
+ export * as Deepgram from "./deepgram.js";
12
16
  export * as DeepSeek from "./deepseek.js";
17
+ export * as ElevenLabs from "./elevenlabs.js";
18
+ export * as Fal from "./fal.js";
13
19
  export * as Fireworks from "./fireworks.js";
14
20
  export * as Google from "./google.js";
15
21
  export * as GoogleVertex from "./google-vertex.js";
@@ -26,6 +32,9 @@ export * as OpenAICompatible from "./openai-compatible.js";
26
32
  export * as OpenAICompatibleResponses from "./openai-compatible-responses.js";
27
33
  export * as OpenCodeZen from "./opencode-zen.js";
28
34
  export * as OpenRouter from "./openrouter.js";
35
+ export * as Replicate from "./replicate.js";
36
+ export * as Runway from "./runway.js";
37
+ export * as Stability from "./stability.js";
29
38
  export * as TogetherAI from "./togetherai.js";
30
39
  export * as TypeSafeAI from "./typesafe-ai.js";
31
40
  export * as VercelAIGateway from "./vercel-ai-gateway.js";
@@ -3,13 +3,19 @@ export * as Anthropic from "./anthropic.js";
3
3
  export * as AnthropicCompatible from "./anthropic-compatible.js";
4
4
  export * as AmazonBedrock from "./amazon-bedrock.js";
5
5
  export * as AmazonBedrockMantle from "./amazon-bedrock-mantle.js";
6
+ export * as AssemblyAI from "./assemblyai.js";
6
7
  export * as Azure from "./azure.js";
7
8
  export * as Baseten from "./baseten.js";
9
+ export * as BlackForestLabs from "./black-forest-labs.js";
10
+ export * as Cartesia from "./cartesia.js";
8
11
  export * as Cerebras from "./cerebras.js";
9
12
  export * as CloudflareAIGateway from "./cloudflare-ai-gateway.js";
10
13
  export * as CloudflareWorkersAI from "./cloudflare-workers-ai.js";
11
14
  export * as DeepInfra from "./deepinfra.js";
15
+ export * as Deepgram from "./deepgram.js";
12
16
  export * as DeepSeek from "./deepseek.js";
17
+ export * as ElevenLabs from "./elevenlabs.js";
18
+ export * as Fal from "./fal.js";
13
19
  export * as Fireworks from "./fireworks.js";
14
20
  export * as Google from "./google.js";
15
21
  export * as GoogleVertex from "./google-vertex.js";
@@ -26,6 +32,9 @@ export * as OpenAICompatible from "./openai-compatible.js";
26
32
  export * as OpenAICompatibleResponses from "./openai-compatible-responses.js";
27
33
  export * as OpenCodeZen from "./opencode-zen.js";
28
34
  export * as OpenRouter from "./openrouter.js";
35
+ export * as Replicate from "./replicate.js";
36
+ export * as Runway from "./runway.js";
37
+ export * as Stability from "./stability.js";
29
38
  export * as TogetherAI from "./togetherai.js";
30
39
  export * as TypeSafeAI from "./typesafe-ai.js";
31
40
  export * as VercelAIGateway from "./vercel-ai-gateway.js";