@cloudflare/tanstack-ai 0.1.0 → 0.1.2

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 (86) hide show
  1. package/README.md +5 -5
  2. package/dist/_tsup-dts-rollup.d.cts +22 -14
  3. package/dist/_tsup-dts-rollup.d.ts +22 -14
  4. package/dist/adapters/anthropic.cjs +3 -3
  5. package/dist/adapters/anthropic.js +2 -2
  6. package/dist/adapters/gemini.cjs +2 -2
  7. package/dist/adapters/gemini.js +1 -1
  8. package/dist/adapters/grok.cjs +3 -3
  9. package/dist/adapters/grok.js +2 -2
  10. package/dist/adapters/openai.cjs +3 -3
  11. package/dist/adapters/openai.js +2 -2
  12. package/dist/adapters/openrouter.cjs +3 -3
  13. package/dist/adapters/openrouter.js +2 -2
  14. package/dist/adapters/workers-ai-image.cjs +3 -3
  15. package/dist/adapters/workers-ai-image.js +2 -2
  16. package/dist/adapters/workers-ai-summarize.cjs +3 -3
  17. package/dist/adapters/workers-ai-summarize.js +2 -2
  18. package/dist/adapters/workers-ai-transcription.cjs +3 -3
  19. package/dist/adapters/workers-ai-transcription.js +2 -2
  20. package/dist/adapters/workers-ai-tts.cjs +3 -3
  21. package/dist/adapters/workers-ai-tts.js +2 -2
  22. package/dist/adapters/workers-ai.cjs +3 -3
  23. package/dist/adapters/workers-ai.js +2 -2
  24. package/dist/{chunk-XI2BOYEI.js → chunk-2QN5XFI2.js} +5 -3
  25. package/dist/chunk-2QN5XFI2.js.map +1 -0
  26. package/dist/{chunk-BD4CRW3Q.js → chunk-3KUHT3K6.js} +128 -12
  27. package/dist/chunk-3KUHT3K6.js.map +1 -0
  28. package/dist/{chunk-VTDJEUFS.js → chunk-5A2F2QCL.js} +2 -2
  29. package/dist/{chunk-IWZJCLOE.cjs → chunk-7KZQWFUE.cjs} +3 -3
  30. package/dist/{chunk-IWZJCLOE.cjs.map → chunk-7KZQWFUE.cjs.map} +1 -1
  31. package/dist/{chunk-O2C4CR57.cjs → chunk-7SKFZ4SU.cjs} +8 -5
  32. package/dist/chunk-7SKFZ4SU.cjs.map +1 -0
  33. package/dist/{chunk-LBYDBPHY.cjs → chunk-ARLHMZ5B.cjs} +7 -5
  34. package/dist/chunk-ARLHMZ5B.cjs.map +1 -0
  35. package/dist/{chunk-XKSFDPDY.cjs → chunk-AYTKQRE4.cjs} +7 -5
  36. package/dist/chunk-AYTKQRE4.cjs.map +1 -0
  37. package/dist/{chunk-YIA5B3QT.js → chunk-DSBHOQQ4.js} +2 -2
  38. package/dist/{chunk-RQT7M6MU.js → chunk-DZZVI4W5.js} +5 -3
  39. package/dist/chunk-DZZVI4W5.js.map +1 -0
  40. package/dist/{chunk-U5YJQYLZ.cjs → chunk-ICHJ2G63.cjs} +3 -3
  41. package/dist/{chunk-U5YJQYLZ.cjs.map → chunk-ICHJ2G63.cjs.map} +1 -1
  42. package/dist/{chunk-7T4CVHKD.cjs → chunk-IDPLTBQX.cjs} +7 -5
  43. package/dist/chunk-IDPLTBQX.cjs.map +1 -0
  44. package/dist/{chunk-GOU66I5T.cjs → chunk-IMURYJRF.cjs} +15 -3
  45. package/dist/chunk-IMURYJRF.cjs.map +1 -0
  46. package/dist/{chunk-7AEFXYJG.js → chunk-J5DSSZTO.js} +9 -3
  47. package/dist/chunk-J5DSSZTO.js.map +1 -0
  48. package/dist/{chunk-QRHKPL75.js → chunk-JK5ZFOZZ.js} +5 -2
  49. package/dist/chunk-JK5ZFOZZ.js.map +1 -0
  50. package/dist/{chunk-BPWGWJJV.cjs → chunk-LG2I3ANT.cjs} +140 -24
  51. package/dist/chunk-LG2I3ANT.cjs.map +1 -0
  52. package/dist/{chunk-F5YJMXZR.js → chunk-O7MBRPCW.js} +14 -2
  53. package/dist/chunk-O7MBRPCW.js.map +1 -0
  54. package/dist/{chunk-2AJ6LV2D.js → chunk-OKU3GB5P.js} +5 -3
  55. package/dist/chunk-OKU3GB5P.js.map +1 -0
  56. package/dist/{chunk-PLTFCUMO.js → chunk-T5KPTTLK.js} +5 -3
  57. package/dist/chunk-T5KPTTLK.js.map +1 -0
  58. package/dist/{chunk-M6NETFDR.cjs → chunk-UWBO33IG.cjs} +5 -5
  59. package/dist/{chunk-M6NETFDR.cjs.map → chunk-UWBO33IG.cjs.map} +1 -1
  60. package/dist/{chunk-RGDUK5KX.cjs → chunk-V4LKHWJA.cjs} +9 -3
  61. package/dist/chunk-V4LKHWJA.cjs.map +1 -0
  62. package/dist/{chunk-XCNU7EEC.js → chunk-Y7W7NDVS.js} +2 -2
  63. package/dist/{chunk-LIUHRGEK.cjs → chunk-ZHTFBZXJ.cjs} +7 -5
  64. package/dist/chunk-ZHTFBZXJ.cjs.map +1 -0
  65. package/dist/index.cjs +12 -12
  66. package/dist/index.js +11 -11
  67. package/package.json +14 -14
  68. package/dist/chunk-2AJ6LV2D.js.map +0 -1
  69. package/dist/chunk-7AEFXYJG.js.map +0 -1
  70. package/dist/chunk-7T4CVHKD.cjs.map +0 -1
  71. package/dist/chunk-BD4CRW3Q.js.map +0 -1
  72. package/dist/chunk-BPWGWJJV.cjs.map +0 -1
  73. package/dist/chunk-F5YJMXZR.js.map +0 -1
  74. package/dist/chunk-GOU66I5T.cjs.map +0 -1
  75. package/dist/chunk-LBYDBPHY.cjs.map +0 -1
  76. package/dist/chunk-LIUHRGEK.cjs.map +0 -1
  77. package/dist/chunk-O2C4CR57.cjs.map +0 -1
  78. package/dist/chunk-PLTFCUMO.js.map +0 -1
  79. package/dist/chunk-QRHKPL75.js.map +0 -1
  80. package/dist/chunk-RGDUK5KX.cjs.map +0 -1
  81. package/dist/chunk-RQT7M6MU.js.map +0 -1
  82. package/dist/chunk-XI2BOYEI.js.map +0 -1
  83. package/dist/chunk-XKSFDPDY.cjs.map +0 -1
  84. /package/dist/{chunk-VTDJEUFS.js.map → chunk-5A2F2QCL.js.map} +0 -0
  85. /package/dist/{chunk-YIA5B3QT.js.map → chunk-DSBHOQQ4.js.map} +0 -0
  86. /package/dist/{chunk-XCNU7EEC.js.map → chunk-Y7W7NDVS.js.map} +0 -0
package/README.md CHANGED
@@ -46,7 +46,7 @@ The simplest way to use AI in a Cloudflare Worker. No API keys needed for Worker
46
46
  import { createWorkersAiChat } from "@cloudflare/tanstack-ai";
47
47
  import { chat, toHttpResponse } from "@tanstack/ai";
48
48
 
49
- const adapter = createWorkersAiChat("@cf/meta/llama-3.3-70b-instruct-fp8-fast", {
49
+ const adapter = createWorkersAiChat("@cf/meta/llama-4-scout-17b-16e-instruct", {
50
50
  binding: env.AI,
51
51
  });
52
52
 
@@ -62,7 +62,7 @@ return toHttpResponse(response);
62
62
  **Using REST credentials:**
63
63
 
64
64
  ```typescript
65
- const adapter = createWorkersAiChat("@cf/meta/llama-3.3-70b-instruct-fp8-fast", {
65
+ const adapter = createWorkersAiChat("@cf/meta/llama-4-scout-17b-16e-instruct", {
66
66
  accountId: "your-account-id",
67
67
  apiKey: "your-api-key",
68
68
  });
@@ -105,7 +105,7 @@ Supported models: `@cf/openai/whisper`, `@cf/openai/whisper-tiny-en`, `@cf/opena
105
105
  import { createWorkersAiTts } from "@cloudflare/tanstack-ai";
106
106
  import { generateSpeech } from "@tanstack/ai";
107
107
 
108
- const adapter = createWorkersAiTts("@cf/deepgram/aura-1", {
108
+ const adapter = createWorkersAiTts("@cf/deepgram/aura-2-en", {
109
109
  binding: env.AI,
110
110
  });
111
111
 
@@ -169,7 +169,7 @@ const adapter = createOpenAiChat("gpt-4o", {
169
169
  ### Workers AI through Gateway
170
170
 
171
171
  ```typescript
172
- const adapter = createWorkersAiChat("@cf/meta/llama-3.3-70b-instruct-fp8-fast", {
172
+ const adapter = createWorkersAiChat("@cf/meta/llama-4-scout-17b-16e-instruct", {
173
173
  binding: env.AI.gateway("my-gateway-id"),
174
174
  apiKey: env.WORKERS_AI_TOKEN,
175
175
  });
@@ -224,7 +224,7 @@ const openrouter = createOpenRouterChat("openai/gpt-4o", config);
224
224
  - `createWorkersAiChat(model, config)` -- chat and structured output
225
225
  - `createWorkersAiImage(model, config)` -- image generation
226
226
  - `createWorkersAiTranscription(model, config)` -- speech-to-text (Whisper, Deepgram nova-3)
227
- - `createWorkersAiTts(model, config)` -- text-to-speech (Deepgram aura-1)
227
+ - `createWorkersAiTts(model, config)` -- text-to-speech (Deepgram Aura-2, Aura-1)
228
228
  - `createWorkersAiSummarize(model, config)` -- summarization (BART-large-CNN)
229
229
 
230
230
  **OpenAI:**
@@ -84,7 +84,7 @@ export declare interface AiGatewayConfig {
84
84
  metadata?: Record<string, unknown>;
85
85
  }
86
86
 
87
- export declare interface AiGatewayCredentialsConfig {
87
+ export declare type AiGatewayCredentialsConfig = {
88
88
  /**
89
89
  * The Cloudflare account ID
90
90
  */
@@ -93,15 +93,16 @@ export declare interface AiGatewayCredentialsConfig {
93
93
  * The AI Gateway ID
94
94
  */
95
95
  gatewayId: string;
96
- /**
97
- * The Provider API Key if you want to manually pass it, ignore if using Unified Billing or BYOK.
98
- */
96
+ } & ({
97
+ /** Cloudflare API Key for AI Gateway */
98
+ cfApiKey: string;
99
99
  apiKey?: string;
100
- /**
101
- * The Cloudflare AI Gateway API Key, required if your Gateway is authenticated.
102
- */
100
+ } | {
101
+ /** Provider API Key */
102
+ apiKey: string;
103
+ /** Cloudflare API Key for AI Gateway */
103
104
  cfApiKey?: string;
104
- }
105
+ });
105
106
 
106
107
  export { ANTHROPIC_MODELS }
107
108
  export { ANTHROPIC_MODELS as ANTHROPIC_MODELS_alias_1 }
@@ -579,6 +580,13 @@ export { OpenRouterSummarizeModel as OpenRouterSummarizeModel_alias_1 }
579
580
  */
580
581
  export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
581
582
 
583
+ /**
584
+ * Validates that a WorkersAiAdapterConfig contains a valid configuration.
585
+ * Throws an error if neither a binding, credentials (accountId + apiKey),
586
+ * nor a gateway configuration is provided.
587
+ */
588
+ export declare function validateWorkersAiConfig(config: WorkersAiAdapterConfig): void;
589
+
582
590
  /**
583
591
  * Config for Workers AI adapters. Supports four modes:
584
592
  * - Plain binding: `{ binding: env.AI }`
@@ -643,7 +651,7 @@ export declare class WorkersAiEmbeddingAdapter {
643
651
 
644
652
  export declare type WorkersAiEmbeddingModel = {
645
653
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextEmbeddings_2 ? K : never;
646
- }[keyof AiModels_2];
654
+ }[keyof AiModels_2] | (string & {});
647
655
 
648
656
  export declare interface WorkersAiEmbeddingResult {
649
657
  embeddings: number[][];
@@ -663,7 +671,7 @@ export declare class WorkersAiImageAdapter extends BaseImageAdapter<WorkersAiIma
663
671
 
664
672
  declare type WorkersAiImageModel = {
665
673
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextToImage_2 ? K : never;
666
- }[keyof AiModels_2];
674
+ }[keyof AiModels_2] | (string & {});
667
675
  export { WorkersAiImageModel }
668
676
  export { WorkersAiImageModel as WorkersAiImageModel_alias_1 }
669
677
 
@@ -721,7 +729,7 @@ export declare class WorkersAiSummarizeAdapter extends BaseSummarizeAdapter<Work
721
729
  /**
722
730
  * Workers AI models that support summarization.
723
731
  */
724
- declare type WorkersAiSummarizeModel = "@cf/facebook/bart-large-cnn";
732
+ declare type WorkersAiSummarizeModel = "@cf/facebook/bart-large-cnn" | (string & {});
725
733
  export { WorkersAiSummarizeModel }
726
734
  export { WorkersAiSummarizeModel as WorkersAiSummarizeModel_alias_1 }
727
735
 
@@ -735,7 +743,7 @@ export declare class WorkersAiTextAdapter<TModel extends WorkersAiTextModel> ext
735
743
 
736
744
  declare type WorkersAiTextModel = {
737
745
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextGeneration_2 ? K : never;
738
- }[keyof AiModels_2];
746
+ }[keyof AiModels_2] | (string & {});
739
747
  export { WorkersAiTextModel }
740
748
  export { WorkersAiTextModel as WorkersAiTextModel_alias_1 }
741
749
 
@@ -784,7 +792,7 @@ export declare class WorkersAiTranscriptionAdapter extends BaseTranscriptionAdap
784
792
  * Whisper models. Via binding it accepts `{ audio: { body: base64, contentType } }`.
785
793
  * Via REST it requires multipart form data (not JSON). The adapter handles both.
786
794
  */
787
- declare type WorkersAiTranscriptionModel = "@cf/openai/whisper" | "@cf/openai/whisper-tiny-en" | "@cf/openai/whisper-large-v3-turbo" | "@cf/deepgram/nova-3";
795
+ declare type WorkersAiTranscriptionModel = "@cf/openai/whisper" | "@cf/openai/whisper-tiny-en" | "@cf/openai/whisper-large-v3-turbo" | "@cf/deepgram/nova-3" | (string & {});
788
796
  export { WorkersAiTranscriptionModel }
789
797
  export { WorkersAiTranscriptionModel as WorkersAiTranscriptionModel_alias_1 }
790
798
 
@@ -813,7 +821,7 @@ export declare class WorkersAiTTSAdapter extends BaseTTSAdapter<WorkersAiTTSMode
813
821
  * behind what's deployed. We use a string union here that matches the known
814
822
  * models including Deepgram partner models.
815
823
  */
816
- declare type WorkersAiTTSModel = "@cf/deepgram/aura-1";
824
+ declare type WorkersAiTTSModel = "@cf/deepgram/aura-1" | "@cf/deepgram/aura-2-en" | "@cf/deepgram/aura-2-es" | (string & {});
817
825
  export { WorkersAiTTSModel }
818
826
  export { WorkersAiTTSModel as WorkersAiTTSModel_alias_1 }
819
827
 
@@ -84,7 +84,7 @@ export declare interface AiGatewayConfig {
84
84
  metadata?: Record<string, unknown>;
85
85
  }
86
86
 
87
- export declare interface AiGatewayCredentialsConfig {
87
+ export declare type AiGatewayCredentialsConfig = {
88
88
  /**
89
89
  * The Cloudflare account ID
90
90
  */
@@ -93,15 +93,16 @@ export declare interface AiGatewayCredentialsConfig {
93
93
  * The AI Gateway ID
94
94
  */
95
95
  gatewayId: string;
96
- /**
97
- * The Provider API Key if you want to manually pass it, ignore if using Unified Billing or BYOK.
98
- */
96
+ } & ({
97
+ /** Cloudflare API Key for AI Gateway */
98
+ cfApiKey: string;
99
99
  apiKey?: string;
100
- /**
101
- * The Cloudflare AI Gateway API Key, required if your Gateway is authenticated.
102
- */
100
+ } | {
101
+ /** Provider API Key */
102
+ apiKey: string;
103
+ /** Cloudflare API Key for AI Gateway */
103
104
  cfApiKey?: string;
104
- }
105
+ });
105
106
 
106
107
  export { ANTHROPIC_MODELS }
107
108
  export { ANTHROPIC_MODELS as ANTHROPIC_MODELS_alias_1 }
@@ -579,6 +580,13 @@ export { OpenRouterSummarizeModel as OpenRouterSummarizeModel_alias_1 }
579
580
  */
580
581
  export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
581
582
 
583
+ /**
584
+ * Validates that a WorkersAiAdapterConfig contains a valid configuration.
585
+ * Throws an error if neither a binding, credentials (accountId + apiKey),
586
+ * nor a gateway configuration is provided.
587
+ */
588
+ export declare function validateWorkersAiConfig(config: WorkersAiAdapterConfig): void;
589
+
582
590
  /**
583
591
  * Config for Workers AI adapters. Supports four modes:
584
592
  * - Plain binding: `{ binding: env.AI }`
@@ -643,7 +651,7 @@ export declare class WorkersAiEmbeddingAdapter {
643
651
 
644
652
  export declare type WorkersAiEmbeddingModel = {
645
653
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextEmbeddings_2 ? K : never;
646
- }[keyof AiModels_2];
654
+ }[keyof AiModels_2] | (string & {});
647
655
 
648
656
  export declare interface WorkersAiEmbeddingResult {
649
657
  embeddings: number[][];
@@ -663,7 +671,7 @@ export declare class WorkersAiImageAdapter extends BaseImageAdapter<WorkersAiIma
663
671
 
664
672
  declare type WorkersAiImageModel = {
665
673
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextToImage_2 ? K : never;
666
- }[keyof AiModels_2];
674
+ }[keyof AiModels_2] | (string & {});
667
675
  export { WorkersAiImageModel }
668
676
  export { WorkersAiImageModel as WorkersAiImageModel_alias_1 }
669
677
 
@@ -721,7 +729,7 @@ export declare class WorkersAiSummarizeAdapter extends BaseSummarizeAdapter<Work
721
729
  /**
722
730
  * Workers AI models that support summarization.
723
731
  */
724
- declare type WorkersAiSummarizeModel = "@cf/facebook/bart-large-cnn";
732
+ declare type WorkersAiSummarizeModel = "@cf/facebook/bart-large-cnn" | (string & {});
725
733
  export { WorkersAiSummarizeModel }
726
734
  export { WorkersAiSummarizeModel as WorkersAiSummarizeModel_alias_1 }
727
735
 
@@ -735,7 +743,7 @@ export declare class WorkersAiTextAdapter<TModel extends WorkersAiTextModel> ext
735
743
 
736
744
  declare type WorkersAiTextModel = {
737
745
  [K in keyof AiModels_2]: AiModels_2[K] extends BaseAiTextGeneration_2 ? K : never;
738
- }[keyof AiModels_2];
746
+ }[keyof AiModels_2] | (string & {});
739
747
  export { WorkersAiTextModel }
740
748
  export { WorkersAiTextModel as WorkersAiTextModel_alias_1 }
741
749
 
@@ -784,7 +792,7 @@ export declare class WorkersAiTranscriptionAdapter extends BaseTranscriptionAdap
784
792
  * Whisper models. Via binding it accepts `{ audio: { body: base64, contentType } }`.
785
793
  * Via REST it requires multipart form data (not JSON). The adapter handles both.
786
794
  */
787
- declare type WorkersAiTranscriptionModel = "@cf/openai/whisper" | "@cf/openai/whisper-tiny-en" | "@cf/openai/whisper-large-v3-turbo" | "@cf/deepgram/nova-3";
795
+ declare type WorkersAiTranscriptionModel = "@cf/openai/whisper" | "@cf/openai/whisper-tiny-en" | "@cf/openai/whisper-large-v3-turbo" | "@cf/deepgram/nova-3" | (string & {});
788
796
  export { WorkersAiTranscriptionModel }
789
797
  export { WorkersAiTranscriptionModel as WorkersAiTranscriptionModel_alias_1 }
790
798
 
@@ -813,7 +821,7 @@ export declare class WorkersAiTTSAdapter extends BaseTTSAdapter<WorkersAiTTSMode
813
821
  * behind what's deployed. We use a string union here that matches the known
814
822
  * models including Deepgram partner models.
815
823
  */
816
- declare type WorkersAiTTSModel = "@cf/deepgram/aura-1";
824
+ declare type WorkersAiTTSModel = "@cf/deepgram/aura-1" | "@cf/deepgram/aura-2-en" | "@cf/deepgram/aura-2-es" | (string & {});
817
825
  export { WorkersAiTTSModel }
818
826
  export { WorkersAiTTSModel as WorkersAiTTSModel_alias_1 }
819
827
 
@@ -2,12 +2,12 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkIWZJCLOEcjs = require('../chunk-IWZJCLOE.cjs');
6
- require('../chunk-GOU66I5T.cjs');
5
+ var _chunk7KZQWFUEcjs = require('../chunk-7KZQWFUE.cjs');
6
+ require('../chunk-IMURYJRF.cjs');
7
7
  require('../chunk-4DE2IREA.cjs');
8
8
 
9
9
 
10
10
 
11
11
 
12
- exports.ANTHROPIC_MODELS = _chunkIWZJCLOEcjs.ANTHROPIC_MODELS; exports.createAnthropicChat = _chunkIWZJCLOEcjs.createAnthropicChat; exports.createAnthropicSummarize = _chunkIWZJCLOEcjs.createAnthropicSummarize;
12
+ exports.ANTHROPIC_MODELS = _chunk7KZQWFUEcjs.ANTHROPIC_MODELS; exports.createAnthropicChat = _chunk7KZQWFUEcjs.createAnthropicChat; exports.createAnthropicSummarize = _chunk7KZQWFUEcjs.createAnthropicSummarize;
13
13
  //# sourceMappingURL=anthropic.cjs.map
@@ -2,8 +2,8 @@ import {
2
2
  ANTHROPIC_MODELS,
3
3
  createAnthropicChat,
4
4
  createAnthropicSummarize
5
- } from "../chunk-YIA5B3QT.js";
6
- import "../chunk-F5YJMXZR.js";
5
+ } from "../chunk-DSBHOQQ4.js";
6
+ import "../chunk-O7MBRPCW.js";
7
7
  import "../chunk-V6TY7KAL.js";
8
8
  export {
9
9
  ANTHROPIC_MODELS,
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
 
10
- var _chunkRGDUK5KXcjs = require('../chunk-RGDUK5KX.cjs');
10
+ var _chunkV4LKHWJAcjs = require('../chunk-V4LKHWJA.cjs');
11
11
  require('../chunk-4DE2IREA.cjs');
12
12
 
13
13
 
@@ -18,5 +18,5 @@ require('../chunk-4DE2IREA.cjs');
18
18
 
19
19
 
20
20
 
21
- exports.GeminiImageModels = _chunkRGDUK5KXcjs.GeminiImageModels; exports.GeminiSummarizeModels = _chunkRGDUK5KXcjs.GeminiSummarizeModels; exports.GeminiTTSModels = _chunkRGDUK5KXcjs.GeminiTTSModels; exports.GeminiTextModels = _chunkRGDUK5KXcjs.GeminiTextModels; exports.createGeminiChat = _chunkRGDUK5KXcjs.createGeminiChat; exports.createGeminiImage = _chunkRGDUK5KXcjs.createGeminiImage; exports.createGeminiSummarize = _chunkRGDUK5KXcjs.createGeminiSummarize; exports.createGeminiTts = _chunkRGDUK5KXcjs.createGeminiTts;
21
+ exports.GeminiImageModels = _chunkV4LKHWJAcjs.GeminiImageModels; exports.GeminiSummarizeModels = _chunkV4LKHWJAcjs.GeminiSummarizeModels; exports.GeminiTTSModels = _chunkV4LKHWJAcjs.GeminiTTSModels; exports.GeminiTextModels = _chunkV4LKHWJAcjs.GeminiTextModels; exports.createGeminiChat = _chunkV4LKHWJAcjs.createGeminiChat; exports.createGeminiImage = _chunkV4LKHWJAcjs.createGeminiImage; exports.createGeminiSummarize = _chunkV4LKHWJAcjs.createGeminiSummarize; exports.createGeminiTts = _chunkV4LKHWJAcjs.createGeminiTts;
22
22
  //# sourceMappingURL=gemini.cjs.map
@@ -7,7 +7,7 @@ import {
7
7
  createGeminiImage,
8
8
  createGeminiSummarize,
9
9
  createGeminiTts
10
- } from "../chunk-7AEFXYJG.js";
10
+ } from "../chunk-J5DSSZTO.js";
11
11
  import "../chunk-V6TY7KAL.js";
12
12
  export {
13
13
  GeminiImageModels,
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkM6NETFDRcjs = require('../chunk-M6NETFDR.cjs');
8
- require('../chunk-GOU66I5T.cjs');
7
+ var _chunkUWBO33IGcjs = require('../chunk-UWBO33IG.cjs');
8
+ require('../chunk-IMURYJRF.cjs');
9
9
  require('../chunk-4DE2IREA.cjs');
10
10
 
11
11
 
@@ -13,5 +13,5 @@ require('../chunk-4DE2IREA.cjs');
13
13
 
14
14
 
15
15
 
16
- exports.GROK_CHAT_MODELS = _chunkM6NETFDRcjs.GROK_CHAT_MODELS; exports.GROK_IMAGE_MODELS = _chunkM6NETFDRcjs.GROK_IMAGE_MODELS; exports.createGrokChat = _chunkM6NETFDRcjs.createGrokChat; exports.createGrokImage = _chunkM6NETFDRcjs.createGrokImage; exports.createGrokSummarize = _chunkM6NETFDRcjs.createGrokSummarize;
16
+ exports.GROK_CHAT_MODELS = _chunkUWBO33IGcjs.GROK_CHAT_MODELS; exports.GROK_IMAGE_MODELS = _chunkUWBO33IGcjs.GROK_IMAGE_MODELS; exports.createGrokChat = _chunkUWBO33IGcjs.createGrokChat; exports.createGrokImage = _chunkUWBO33IGcjs.createGrokImage; exports.createGrokSummarize = _chunkUWBO33IGcjs.createGrokSummarize;
17
17
  //# sourceMappingURL=grok.cjs.map
@@ -4,8 +4,8 @@ import {
4
4
  createGrokChat,
5
5
  createGrokImage,
6
6
  createGrokSummarize
7
- } from "../chunk-XCNU7EEC.js";
8
- import "../chunk-F5YJMXZR.js";
7
+ } from "../chunk-Y7W7NDVS.js";
8
+ import "../chunk-O7MBRPCW.js";
9
9
  import "../chunk-V6TY7KAL.js";
10
10
  export {
11
11
  GROK_CHAT_MODELS,
@@ -10,8 +10,8 @@
10
10
 
11
11
 
12
12
 
13
- var _chunkU5YJQYLZcjs = require('../chunk-U5YJQYLZ.cjs');
14
- require('../chunk-GOU66I5T.cjs');
13
+ var _chunkICHJ2G63cjs = require('../chunk-ICHJ2G63.cjs');
14
+ require('../chunk-IMURYJRF.cjs');
15
15
  require('../chunk-4DE2IREA.cjs');
16
16
 
17
17
 
@@ -25,5 +25,5 @@ require('../chunk-4DE2IREA.cjs');
25
25
 
26
26
 
27
27
 
28
- exports.OPENAI_CHAT_MODELS = _chunkU5YJQYLZcjs.OPENAI_CHAT_MODELS; exports.OPENAI_IMAGE_MODELS = _chunkU5YJQYLZcjs.OPENAI_IMAGE_MODELS; exports.OPENAI_TRANSCRIPTION_MODELS = _chunkU5YJQYLZcjs.OPENAI_TRANSCRIPTION_MODELS; exports.OPENAI_TTS_MODELS = _chunkU5YJQYLZcjs.OPENAI_TTS_MODELS; exports.OPENAI_VIDEO_MODELS = _chunkU5YJQYLZcjs.OPENAI_VIDEO_MODELS; exports.createOpenAiChat = _chunkU5YJQYLZcjs.createOpenAiChat; exports.createOpenAiImage = _chunkU5YJQYLZcjs.createOpenAiImage; exports.createOpenAiSummarize = _chunkU5YJQYLZcjs.createOpenAiSummarize; exports.createOpenAiTranscription = _chunkU5YJQYLZcjs.createOpenAiTranscription; exports.createOpenAiTts = _chunkU5YJQYLZcjs.createOpenAiTts; exports.createOpenAiVideo = _chunkU5YJQYLZcjs.createOpenAiVideo;
28
+ exports.OPENAI_CHAT_MODELS = _chunkICHJ2G63cjs.OPENAI_CHAT_MODELS; exports.OPENAI_IMAGE_MODELS = _chunkICHJ2G63cjs.OPENAI_IMAGE_MODELS; exports.OPENAI_TRANSCRIPTION_MODELS = _chunkICHJ2G63cjs.OPENAI_TRANSCRIPTION_MODELS; exports.OPENAI_TTS_MODELS = _chunkICHJ2G63cjs.OPENAI_TTS_MODELS; exports.OPENAI_VIDEO_MODELS = _chunkICHJ2G63cjs.OPENAI_VIDEO_MODELS; exports.createOpenAiChat = _chunkICHJ2G63cjs.createOpenAiChat; exports.createOpenAiImage = _chunkICHJ2G63cjs.createOpenAiImage; exports.createOpenAiSummarize = _chunkICHJ2G63cjs.createOpenAiSummarize; exports.createOpenAiTranscription = _chunkICHJ2G63cjs.createOpenAiTranscription; exports.createOpenAiTts = _chunkICHJ2G63cjs.createOpenAiTts; exports.createOpenAiVideo = _chunkICHJ2G63cjs.createOpenAiVideo;
29
29
  //# sourceMappingURL=openai.cjs.map
@@ -10,8 +10,8 @@ import {
10
10
  createOpenAiTranscription,
11
11
  createOpenAiTts,
12
12
  createOpenAiVideo
13
- } from "../chunk-VTDJEUFS.js";
14
- import "../chunk-F5YJMXZR.js";
13
+ } from "../chunk-5A2F2QCL.js";
14
+ import "../chunk-O7MBRPCW.js";
15
15
  import "../chunk-V6TY7KAL.js";
16
16
  export {
17
17
  OPENAI_CHAT_MODELS,
@@ -2,12 +2,12 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkO2C4CR57cjs = require('../chunk-O2C4CR57.cjs');
6
- require('../chunk-GOU66I5T.cjs');
5
+ var _chunk7SKFZ4SUcjs = require('../chunk-7SKFZ4SU.cjs');
6
+ require('../chunk-IMURYJRF.cjs');
7
7
  require('../chunk-4DE2IREA.cjs');
8
8
 
9
9
 
10
10
 
11
11
 
12
- exports.createOpenRouterChat = _chunkO2C4CR57cjs.createOpenRouterChat; exports.createOpenRouterImage = _chunkO2C4CR57cjs.createOpenRouterImage; exports.createOpenRouterSummarize = _chunkO2C4CR57cjs.createOpenRouterSummarize;
12
+ exports.createOpenRouterChat = _chunk7SKFZ4SUcjs.createOpenRouterChat; exports.createOpenRouterImage = _chunk7SKFZ4SUcjs.createOpenRouterImage; exports.createOpenRouterSummarize = _chunk7SKFZ4SUcjs.createOpenRouterSummarize;
13
13
  //# sourceMappingURL=openrouter.cjs.map
@@ -2,8 +2,8 @@ import {
2
2
  createOpenRouterChat,
3
3
  createOpenRouterImage,
4
4
  createOpenRouterSummarize
5
- } from "../chunk-QRHKPL75.js";
6
- import "../chunk-F5YJMXZR.js";
5
+ } from "../chunk-JK5ZFOZZ.js";
6
+ import "../chunk-O7MBRPCW.js";
7
7
  import "../chunk-V6TY7KAL.js";
8
8
  export {
9
9
  createOpenRouterChat,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkLIUHRGEKcjs = require('../chunk-LIUHRGEK.cjs');
4
+ var _chunkZHTFBZXJcjs = require('../chunk-ZHTFBZXJ.cjs');
5
5
  require('../chunk-3VQDXJLW.cjs');
6
6
  require('../chunk-7HSUHP63.cjs');
7
- require('../chunk-GOU66I5T.cjs');
7
+ require('../chunk-IMURYJRF.cjs');
8
8
  require('../chunk-4DE2IREA.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.WorkersAiImageAdapter = _chunkLIUHRGEKcjs.WorkersAiImageAdapter; exports.createWorkersAiImage = _chunkLIUHRGEKcjs.createWorkersAiImage;
12
+ exports.WorkersAiImageAdapter = _chunkZHTFBZXJcjs.WorkersAiImageAdapter; exports.createWorkersAiImage = _chunkZHTFBZXJcjs.createWorkersAiImage;
13
13
  //# sourceMappingURL=workers-ai-image.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  WorkersAiImageAdapter,
3
3
  createWorkersAiImage
4
- } from "../chunk-RQT7M6MU.js";
4
+ } from "../chunk-DZZVI4W5.js";
5
5
  import "../chunk-XU7YEPML.js";
6
6
  import "../chunk-2VII5BK2.js";
7
- import "../chunk-F5YJMXZR.js";
7
+ import "../chunk-O7MBRPCW.js";
8
8
  import "../chunk-V6TY7KAL.js";
9
9
  export {
10
10
  WorkersAiImageAdapter,
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunk7T4CVHKDcjs = require('../chunk-7T4CVHKD.cjs');
4
+ var _chunkIDPLTBQXcjs = require('../chunk-IDPLTBQX.cjs');
5
5
  require('../chunk-7HSUHP63.cjs');
6
- require('../chunk-GOU66I5T.cjs');
6
+ require('../chunk-IMURYJRF.cjs');
7
7
  require('../chunk-4DE2IREA.cjs');
8
8
 
9
9
 
10
10
 
11
- exports.WorkersAiSummarizeAdapter = _chunk7T4CVHKDcjs.WorkersAiSummarizeAdapter; exports.createWorkersAiSummarize = _chunk7T4CVHKDcjs.createWorkersAiSummarize;
11
+ exports.WorkersAiSummarizeAdapter = _chunkIDPLTBQXcjs.WorkersAiSummarizeAdapter; exports.createWorkersAiSummarize = _chunkIDPLTBQXcjs.createWorkersAiSummarize;
12
12
  //# sourceMappingURL=workers-ai-summarize.cjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  WorkersAiSummarizeAdapter,
3
3
  createWorkersAiSummarize
4
- } from "../chunk-2AJ6LV2D.js";
4
+ } from "../chunk-OKU3GB5P.js";
5
5
  import "../chunk-2VII5BK2.js";
6
- import "../chunk-F5YJMXZR.js";
6
+ import "../chunk-O7MBRPCW.js";
7
7
  import "../chunk-V6TY7KAL.js";
8
8
  export {
9
9
  WorkersAiSummarizeAdapter,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkXKSFDPDYcjs = require('../chunk-XKSFDPDY.cjs');
4
+ var _chunkAYTKQRE4cjs = require('../chunk-AYTKQRE4.cjs');
5
5
  require('../chunk-3VQDXJLW.cjs');
6
6
  require('../chunk-7HSUHP63.cjs');
7
- require('../chunk-GOU66I5T.cjs');
7
+ require('../chunk-IMURYJRF.cjs');
8
8
  require('../chunk-4DE2IREA.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.WorkersAiTranscriptionAdapter = _chunkXKSFDPDYcjs.WorkersAiTranscriptionAdapter; exports.createWorkersAiTranscription = _chunkXKSFDPDYcjs.createWorkersAiTranscription;
12
+ exports.WorkersAiTranscriptionAdapter = _chunkAYTKQRE4cjs.WorkersAiTranscriptionAdapter; exports.createWorkersAiTranscription = _chunkAYTKQRE4cjs.createWorkersAiTranscription;
13
13
  //# sourceMappingURL=workers-ai-transcription.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  WorkersAiTranscriptionAdapter,
3
3
  createWorkersAiTranscription
4
- } from "../chunk-PLTFCUMO.js";
4
+ } from "../chunk-T5KPTTLK.js";
5
5
  import "../chunk-XU7YEPML.js";
6
6
  import "../chunk-2VII5BK2.js";
7
- import "../chunk-F5YJMXZR.js";
7
+ import "../chunk-O7MBRPCW.js";
8
8
  import "../chunk-V6TY7KAL.js";
9
9
  export {
10
10
  WorkersAiTranscriptionAdapter,
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkLBYDBPHYcjs = require('../chunk-LBYDBPHY.cjs');
4
+ var _chunkARLHMZ5Bcjs = require('../chunk-ARLHMZ5B.cjs');
5
5
  require('../chunk-3VQDXJLW.cjs');
6
6
  require('../chunk-7HSUHP63.cjs');
7
- require('../chunk-GOU66I5T.cjs');
7
+ require('../chunk-IMURYJRF.cjs');
8
8
  require('../chunk-4DE2IREA.cjs');
9
9
 
10
10
 
11
11
 
12
- exports.WorkersAiTTSAdapter = _chunkLBYDBPHYcjs.WorkersAiTTSAdapter; exports.createWorkersAiTts = _chunkLBYDBPHYcjs.createWorkersAiTts;
12
+ exports.WorkersAiTTSAdapter = _chunkARLHMZ5Bcjs.WorkersAiTTSAdapter; exports.createWorkersAiTts = _chunkARLHMZ5Bcjs.createWorkersAiTts;
13
13
  //# sourceMappingURL=workers-ai-tts.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  WorkersAiTTSAdapter,
3
3
  createWorkersAiTts
4
- } from "../chunk-XI2BOYEI.js";
4
+ } from "../chunk-2QN5XFI2.js";
5
5
  import "../chunk-XU7YEPML.js";
6
6
  import "../chunk-2VII5BK2.js";
7
- import "../chunk-F5YJMXZR.js";
7
+ import "../chunk-O7MBRPCW.js";
8
8
  import "../chunk-V6TY7KAL.js";
9
9
  export {
10
10
  WorkersAiTTSAdapter,
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkBPWGWJJVcjs = require('../chunk-BPWGWJJV.cjs');
5
- require('../chunk-GOU66I5T.cjs');
4
+ var _chunkLG2I3ANTcjs = require('../chunk-LG2I3ANT.cjs');
5
+ require('../chunk-IMURYJRF.cjs');
6
6
  require('../chunk-4DE2IREA.cjs');
7
7
 
8
8
 
9
9
 
10
- exports.WorkersAiTextAdapter = _chunkBPWGWJJVcjs.WorkersAiTextAdapter; exports.createWorkersAiChat = _chunkBPWGWJJVcjs.createWorkersAiChat;
10
+ exports.WorkersAiTextAdapter = _chunkLG2I3ANTcjs.WorkersAiTextAdapter; exports.createWorkersAiChat = _chunkLG2I3ANTcjs.createWorkersAiChat;
11
11
  //# sourceMappingURL=workers-ai.cjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  WorkersAiTextAdapter,
3
3
  createWorkersAiChat
4
- } from "../chunk-BD4CRW3Q.js";
5
- import "../chunk-F5YJMXZR.js";
4
+ } from "../chunk-3KUHT3K6.js";
5
+ import "../chunk-O7MBRPCW.js";
6
6
  import "../chunk-V6TY7KAL.js";
7
7
  export {
8
8
  WorkersAiTextAdapter,
@@ -8,8 +8,9 @@ import {
8
8
  import {
9
9
  createGatewayFetch,
10
10
  isDirectBindingConfig,
11
- isDirectCredentialsConfig
12
- } from "./chunk-F5YJMXZR.js";
11
+ isDirectCredentialsConfig,
12
+ validateWorkersAiConfig
13
+ } from "./chunk-O7MBRPCW.js";
13
14
  import {
14
15
  __publicField
15
16
  } from "./chunk-V6TY7KAL.js";
@@ -21,6 +22,7 @@ var WorkersAiTTSAdapter = class extends BaseTTSAdapter {
21
22
  super({}, model);
22
23
  __publicField(this, "name", "workers-ai-tts");
23
24
  __publicField(this, "adapterConfig");
25
+ validateWorkersAiConfig(config);
24
26
  this.adapterConfig = config;
25
27
  }
26
28
  async generateSpeech(options) {
@@ -106,4 +108,4 @@ export {
106
108
  WorkersAiTTSAdapter,
107
109
  createWorkersAiTts
108
110
  };
109
- //# sourceMappingURL=chunk-XI2BOYEI.js.map
111
+ //# sourceMappingURL=chunk-2QN5XFI2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/workers-ai-tts.ts"],"sourcesContent":["import { BaseTTSAdapter } from \"@tanstack/ai/adapters\";\nimport type { TTSOptions, TTSResult } from \"@tanstack/ai\";\nimport {\n\ttype WorkersAiAdapterConfig,\n\ttype WorkersAiDirectBindingConfig,\n\ttype WorkersAiDirectCredentialsConfig,\n\ttype AiGatewayAdapterConfig,\n\tcreateGatewayFetch,\n\tisDirectBindingConfig,\n\tisDirectCredentialsConfig,\n\tvalidateWorkersAiConfig,\n} from \"../utils/create-fetcher\";\nimport { workersAiRestFetch } from \"../utils/workers-ai-rest\";\nimport { binaryToBase64, uint8ArrayToBase64 } from \"../utils/binary\";\n\n// ---------------------------------------------------------------------------\n// Model types\n// ---------------------------------------------------------------------------\n\n/**\n * Workers AI models that support text-to-speech generation.\n *\n * Note: the typed `AiModels` interface in `@cloudflare/workers-types` may lag\n * behind what's deployed. We use a string union here that matches the known\n * models including Deepgram partner models.\n */\nexport type WorkersAiTTSModel =\n\t| \"@cf/deepgram/aura-1\"\n\t| \"@cf/deepgram/aura-2-en\"\n\t| \"@cf/deepgram/aura-2-es\"\n\t| (string & {});\n\n// ---------------------------------------------------------------------------\n// WorkersAiTTSAdapter\n// ---------------------------------------------------------------------------\n\nexport class WorkersAiTTSAdapter extends BaseTTSAdapter<WorkersAiTTSModel> {\n\treadonly name = \"workers-ai-tts\" as const;\n\tprivate adapterConfig: WorkersAiAdapterConfig;\n\n\tconstructor(config: WorkersAiAdapterConfig, model: WorkersAiTTSModel) {\n\t\tsuper({}, model);\n\t\tvalidateWorkersAiConfig(config);\n\t\tthis.adapterConfig = config;\n\t}\n\n\tasync generateSpeech(options: TTSOptions): Promise<TTSResult> {\n\t\tconst { text, voice, format, speed, modelOptions } = options;\n\n\t\t// Workers AI TTS models (Deepgram aura-1) accept { text, lang? }\n\t\tconst extra: Record<string, unknown> = { ...modelOptions };\n\t\tif (voice) extra.voice = voice;\n\t\tif (speed != null) extra.speed = speed;\n\n\t\tif (isDirectBindingConfig(this.adapterConfig)) {\n\t\t\treturn this.generateViaBinding(text, format, extra);\n\t\t}\n\n\t\tif (isDirectCredentialsConfig(this.adapterConfig)) {\n\t\t\treturn this.generateViaRest(text, format, extra);\n\t\t}\n\n\t\treturn this.generateViaGateway(text, format, extra);\n\t}\n\n\tprivate async generateViaBinding(\n\t\ttext: string,\n\t\tformat: string | undefined,\n\t\toptions: Record<string, unknown>,\n\t): Promise<TTSResult> {\n\t\tconst ai = (this.adapterConfig as WorkersAiDirectBindingConfig).binding;\n\t\tconst result = await ai.run(this.model, { text, ...options });\n\n\t\treturn this.normalizeResult(result, format);\n\t}\n\n\tprivate async generateViaRest(\n\t\ttext: string,\n\t\tformat: string | undefined,\n\t\toptions: Record<string, unknown>,\n\t): Promise<TTSResult> {\n\t\tconst config = this.adapterConfig as WorkersAiDirectCredentialsConfig;\n\t\tconst response = await workersAiRestFetch(\n\t\t\tconfig,\n\t\t\tthis.model,\n\t\t\t{ text, ...options },\n\t\t\t{ label: \"Workers AI TTS\", signal: (options as { signal?: AbortSignal }).signal },\n\t\t);\n\n\t\t// Workers AI TTS returns audio bytes directly\n\t\tconst buffer = await response.arrayBuffer();\n\t\treturn this.wrapAudioResult(new Uint8Array(buffer), format);\n\t}\n\n\tprivate async generateViaGateway(\n\t\ttext: string,\n\t\tformat: string | undefined,\n\t\toptions: Record<string, unknown>,\n\t): Promise<TTSResult> {\n\t\tconst gatewayConfig = this.adapterConfig as AiGatewayAdapterConfig;\n\t\tconst gatewayFetch = createGatewayFetch(\"workers-ai\", gatewayConfig);\n\n\t\t// The URL here is a placeholder — createGatewayFetch for \"workers-ai\" extracts\n\t\t// the model from the body, sets it as the endpoint, and routes through the gateway.\n\t\t// The actual URL path is not used.\n\t\tconst response = await gatewayFetch(\"https://api.cloudflare.com/v1/audio/speech\", {\n\t\t\tmethod: \"POST\",\n\t\t\tbody: JSON.stringify({\n\t\t\t\tmodel: this.model,\n\t\t\t\ttext,\n\t\t\t\t...options,\n\t\t\t}),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconst errorText = await response.text();\n\t\t\tthrow new Error(\n\t\t\t\t`Workers AI TTS gateway request failed (${response.status}): ${errorText}`,\n\t\t\t);\n\t\t}\n\n\t\tconst buffer = await response.arrayBuffer();\n\t\treturn this.wrapAudioResult(new Uint8Array(buffer), format);\n\t}\n\n\t/**\n\t * Normalize binding results. Workers AI TTS can return:\n\t * - Uint8Array / ArrayBuffer (raw audio bytes)\n\t * - ReadableStream<Uint8Array> (streamed audio bytes)\n\t * - { audio: \"base64...\" } (JSON wrapper)\n\t */\n\tprivate async normalizeResult(result: unknown, format: string | undefined): Promise<TTSResult> {\n\t\t// Use the shared binaryToBase64 helper for Uint8Array/ArrayBuffer/ReadableStream\n\t\t// and { audio: \"base64...\" } JSON wrapper\n\t\tconst b64 = await binaryToBase64(result, \"audio\");\n\t\treturn {\n\t\t\tid: this.generateId(),\n\t\t\tmodel: this.model,\n\t\t\taudio: b64,\n\t\t\tformat: format ?? \"mp3\",\n\t\t\tcontentType: `audio/${format ?? \"mp3\"}`,\n\t\t};\n\t}\n\n\tprivate wrapAudioResult(bytes: Uint8Array, format: string | undefined): TTSResult {\n\t\treturn {\n\t\t\tid: this.generateId(),\n\t\t\tmodel: this.model,\n\t\t\taudio: uint8ArrayToBase64(bytes),\n\t\t\tformat: format ?? \"mp3\",\n\t\t\tcontentType: `audio/${format ?? \"mp3\"}`,\n\t\t};\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Factory function\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a Workers AI text-to-speech adapter.\n *\n * Works with TanStack AI's `generateSpeech()` activity function:\n * ```ts\n * import { generateSpeech } from \"@tanstack/ai\";\n * import { createWorkersAiTts } from \"@cloudflare/tanstack-ai\";\n *\n * const adapter = createWorkersAiTts(\n * \"@cf/deepgram/aura-1\",\n * { binding: env.AI },\n * );\n *\n * const result = await generateSpeech({ adapter, text: \"Hello world\" });\n * // result.audio — base64-encoded audio\n * ```\n *\n * Note: Factory takes `(model, config)` for ergonomics — the class constructor\n * uses `(config, model)` to match TanStack AI's upstream convention.\n */\nexport function createWorkersAiTts(model: WorkersAiTTSModel, config: WorkersAiAdapterConfig) {\n\treturn new WorkersAiTTSAdapter(config, model);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,sBAAsB;AAoCxB,IAAM,sBAAN,cAAkC,eAAkC;AAAA,EAI1E,YAAY,QAAgC,OAA0B;AACrE,UAAM,CAAC,GAAG,KAAK;AAJhB,wBAAS,QAAO;AAChB,wBAAQ;AAIP,4BAAwB,MAAM;AAC9B,SAAK,gBAAgB;AAAA,EACtB;AAAA,EAEA,MAAM,eAAe,SAAyC;AAC7D,UAAM,EAAE,MAAM,OAAO,QAAQ,OAAO,aAAa,IAAI;AAGrD,UAAM,QAAiC,EAAE,GAAG,aAAa;AACzD,QAAI,MAAO,OAAM,QAAQ;AACzB,QAAI,SAAS,KAAM,OAAM,QAAQ;AAEjC,QAAI,sBAAsB,KAAK,aAAa,GAAG;AAC9C,aAAO,KAAK,mBAAmB,MAAM,QAAQ,KAAK;AAAA,IACnD;AAEA,QAAI,0BAA0B,KAAK,aAAa,GAAG;AAClD,aAAO,KAAK,gBAAgB,MAAM,QAAQ,KAAK;AAAA,IAChD;AAEA,WAAO,KAAK,mBAAmB,MAAM,QAAQ,KAAK;AAAA,EACnD;AAAA,EAEA,MAAc,mBACb,MACA,QACA,SACqB;AACrB,UAAM,KAAM,KAAK,cAA+C;AAChE,UAAM,SAAS,MAAM,GAAG,IAAI,KAAK,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC;AAE5D,WAAO,KAAK,gBAAgB,QAAQ,MAAM;AAAA,EAC3C;AAAA,EAEA,MAAc,gBACb,MACA,QACA,SACqB;AACrB,UAAM,SAAS,KAAK;AACpB,UAAM,WAAW,MAAM;AAAA,MACtB;AAAA,MACA,KAAK;AAAA,MACL,EAAE,MAAM,GAAG,QAAQ;AAAA,MACnB,EAAE,OAAO,kBAAkB,QAAS,QAAqC,OAAO;AAAA,IACjF;AAGA,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,KAAK,gBAAgB,IAAI,WAAW,MAAM,GAAG,MAAM;AAAA,EAC3D;AAAA,EAEA,MAAc,mBACb,MACA,QACA,SACqB;AACrB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,eAAe,mBAAmB,cAAc,aAAa;AAKnE,UAAM,WAAW,MAAM,aAAa,8CAA8C;AAAA,MACjF,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACpB,OAAO,KAAK;AAAA,QACZ;AAAA,QACA,GAAG;AAAA,MACJ,CAAC;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,YAAM,IAAI;AAAA,QACT,0CAA0C,SAAS,MAAM,MAAM,SAAS;AAAA,MACzE;AAAA,IACD;AAEA,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,WAAO,KAAK,gBAAgB,IAAI,WAAW,MAAM,GAAG,MAAM;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,gBAAgB,QAAiB,QAAgD;AAG9F,UAAM,MAAM,MAAM,eAAe,QAAQ,OAAO;AAChD,WAAO;AAAA,MACN,IAAI,KAAK,WAAW;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ,UAAU;AAAA,MAClB,aAAa,SAAS,UAAU,KAAK;AAAA,IACtC;AAAA,EACD;AAAA,EAEQ,gBAAgB,OAAmB,QAAuC;AACjF,WAAO;AAAA,MACN,IAAI,KAAK,WAAW;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,OAAO,mBAAmB,KAAK;AAAA,MAC/B,QAAQ,UAAU;AAAA,MAClB,aAAa,SAAS,UAAU,KAAK;AAAA,IACtC;AAAA,EACD;AACD;AA0BO,SAAS,mBAAmB,OAA0B,QAAgC;AAC5F,SAAO,IAAI,oBAAoB,QAAQ,KAAK;AAC7C;","names":[]}