egaki 0.5.0 → 0.7.0
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/CHANGELOG.md +188 -0
- package/dist/cli/cache-utils.d.ts +33 -0
- package/dist/cli/cache-utils.d.ts.map +1 -0
- package/dist/cli/cache-utils.js +157 -0
- package/dist/cli/cached-generate.d.ts +105 -0
- package/dist/cli/cached-generate.d.ts.map +1 -0
- package/dist/cli/cached-generate.js +208 -0
- package/dist/cli/cached-generate.test.d.ts +11 -0
- package/dist/cli/cached-generate.test.d.ts.map +1 -0
- package/dist/cli/cached-generate.test.js +431 -0
- package/dist/cli/cartesia-provider.d.ts +16 -0
- package/dist/cli/cartesia-provider.d.ts.map +1 -0
- package/dist/cli/cartesia-provider.js +184 -0
- package/dist/cli/chatgpt-auth.d.ts.map +1 -0
- package/dist/cli/cli.d.ts +4 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +1329 -0
- package/dist/cli/clone-generate.d.ts +26 -0
- package/dist/cli/clone-generate.d.ts.map +1 -0
- package/dist/cli/clone-generate.js +148 -0
- package/dist/{credentials.d.ts → cli/credentials.d.ts} +11 -2
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/{credentials.js → cli/credentials.js} +88 -5
- package/dist/cli/elevenlabs-speech-provider.d.ts +26 -0
- package/dist/cli/elevenlabs-speech-provider.d.ts.map +1 -0
- package/dist/cli/elevenlabs-speech-provider.js +199 -0
- package/dist/cli/generate.d.ts +140 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +604 -0
- package/dist/cli/generate.test.d.ts +2 -0
- package/dist/cli/generate.test.d.ts.map +1 -0
- package/dist/cli/generate.test.js +131 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/{login.js → cli/login.js} +45 -4
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +7 -0
- package/dist/cli/model-catalog.d.ts +141 -0
- package/dist/cli/model-catalog.d.ts.map +1 -0
- package/dist/cli/model-catalog.js +2135 -0
- package/dist/{models.d.ts → cli/models.d.ts} +16 -9
- package/dist/cli/models.d.ts.map +1 -0
- package/dist/cli/models.js +313 -0
- package/dist/cli/open-browser.d.ts.map +1 -0
- package/dist/cli/openai-speech-provider.d.ts +3 -0
- package/dist/cli/openai-speech-provider.d.ts.map +1 -0
- package/dist/cli/openai-speech-provider.js +28 -0
- package/dist/cli/separation-generate.d.ts +34 -0
- package/dist/cli/separation-generate.d.ts.map +1 -0
- package/dist/cli/separation-generate.js +117 -0
- package/dist/cli/speech-catalog.d.ts +35 -0
- package/dist/cli/speech-catalog.d.ts.map +1 -0
- package/dist/cli/speech-catalog.js +195 -0
- package/dist/cli/speech-generate.d.ts +86 -0
- package/dist/cli/speech-generate.d.ts.map +1 -0
- package/dist/cli/speech-generate.js +156 -0
- package/dist/cli/speech-models.d.ts +8 -0
- package/dist/cli/speech-models.d.ts.map +1 -0
- package/dist/cli/speech-models.js +109 -0
- package/dist/cli/speech-provider.test.d.ts +2 -0
- package/dist/cli/speech-provider.test.d.ts.map +1 -0
- package/dist/cli/speech-provider.test.js +197 -0
- package/dist/cli/subscription.d.ts.map +1 -0
- package/dist/cli/transcription-catalog.d.ts +35 -0
- package/dist/cli/transcription-catalog.d.ts.map +1 -0
- package/dist/cli/transcription-catalog.js +192 -0
- package/dist/cli/transcription-generate.d.ts +62 -0
- package/dist/cli/transcription-generate.d.ts.map +1 -0
- package/dist/cli/transcription-generate.js +144 -0
- package/dist/cli/transcription-models.d.ts +9 -0
- package/dist/cli/transcription-models.d.ts.map +1 -0
- package/dist/cli/transcription-models.js +100 -0
- package/dist/cli/transcription-providers.d.ts +22 -0
- package/dist/cli/transcription-providers.d.ts.map +1 -0
- package/dist/cli/transcription-providers.js +290 -0
- package/dist/cli/video-model-catalog.d.ts +2 -0
- package/dist/cli/video-model-catalog.d.ts.map +1 -0
- package/dist/cli/video-model-catalog.js +5 -0
- package/dist/cli/xai-auth.d.ts +29 -0
- package/dist/cli/xai-auth.d.ts.map +1 -0
- package/dist/cli/xai-auth.js +325 -0
- package/dist/vite/angled-screen.d.ts +57 -0
- package/dist/vite/angled-screen.d.ts.map +1 -0
- package/dist/vite/angled-screen.js +115 -0
- package/dist/vite/app.d.ts +51 -0
- package/dist/vite/app.d.ts.map +1 -0
- package/dist/vite/app.js +150 -0
- package/dist/vite/bands-shader.d.ts +47 -0
- package/dist/vite/bands-shader.d.ts.map +1 -0
- package/dist/vite/bands-shader.js +267 -0
- package/dist/vite/code-block.d.ts +107 -0
- package/dist/vite/code-block.d.ts.map +1 -0
- package/dist/vite/code-block.js +641 -0
- package/dist/vite/components.d.ts +36 -0
- package/dist/vite/components.d.ts.map +1 -0
- package/dist/vite/components.js +113 -0
- package/dist/vite/dispersion-rings-shader.d.ts +44 -0
- package/dist/vite/dispersion-rings-shader.d.ts.map +1 -0
- package/dist/vite/dispersion-rings-shader.js +282 -0
- package/dist/vite/easing-curves.d.ts +129 -0
- package/dist/vite/easing-curves.d.ts.map +1 -0
- package/dist/vite/easing-curves.js +584 -0
- package/dist/vite/easing-curves.test.d.ts +2 -0
- package/dist/vite/easing-curves.test.d.ts.map +1 -0
- package/dist/vite/easing-curves.test.js +200 -0
- package/dist/vite/generated-media-client.d.ts +35 -0
- package/dist/vite/generated-media-client.d.ts.map +1 -0
- package/dist/vite/generated-media-client.js +76 -0
- package/dist/vite/keyframes.d.ts +129 -0
- package/dist/vite/keyframes.d.ts.map +1 -0
- package/dist/vite/keyframes.js +194 -0
- package/dist/vite/layout-editor.d.ts +45 -0
- package/dist/vite/layout-editor.d.ts.map +1 -0
- package/dist/vite/layout-editor.js +587 -0
- package/dist/vite/layout-transition.d.ts +136 -0
- package/dist/vite/layout-transition.d.ts.map +1 -0
- package/dist/vite/layout-transition.js +581 -0
- package/dist/vite/liquid-gradient-shader.d.ts +62 -0
- package/dist/vite/liquid-gradient-shader.d.ts.map +1 -0
- package/dist/vite/liquid-gradient-shader.js +413 -0
- package/dist/vite/mdx-client.d.ts +15 -0
- package/dist/vite/mdx-client.d.ts.map +1 -0
- package/dist/vite/mdx-client.js +265 -0
- package/dist/vite/mdx-parse.d.ts +102 -0
- package/dist/vite/mdx-parse.d.ts.map +1 -0
- package/dist/vite/mdx-parse.js +251 -0
- package/dist/vite/mdx-provided-components.d.ts +18 -0
- package/dist/vite/mdx-provided-components.d.ts.map +1 -0
- package/dist/vite/mdx-provided-components.js +14 -0
- package/dist/vite/mdx-video.d.ts +327 -0
- package/dist/vite/mdx-video.d.ts.map +1 -0
- package/dist/vite/mdx-video.js +596 -0
- package/dist/vite/mdx-video.test.d.ts +9 -0
- package/dist/vite/mdx-video.test.d.ts.map +1 -0
- package/dist/vite/mdx-video.test.js +1945 -0
- package/dist/vite/media-components.d.ts +45 -0
- package/dist/vite/media-components.d.ts.map +1 -0
- package/dist/vite/media-components.js +355 -0
- package/dist/vite/media-duration-store.d.ts +66 -0
- package/dist/vite/media-duration-store.d.ts.map +1 -0
- package/dist/vite/media-duration-store.js +204 -0
- package/dist/vite/player-page.d.ts +35 -0
- package/dist/vite/player-page.d.ts.map +1 -0
- package/dist/vite/player-page.js +720 -0
- package/dist/vite/render-client.d.ts +18 -0
- package/dist/vite/render-client.d.ts.map +1 -0
- package/dist/vite/render-client.js +67 -0
- package/dist/vite/sdk.d.ts +221 -0
- package/dist/vite/sdk.d.ts.map +1 -0
- package/dist/vite/sdk.js +355 -0
- package/dist/vite/server-components.d.ts +55 -0
- package/dist/vite/server-components.d.ts.map +1 -0
- package/dist/vite/server-components.js +156 -0
- package/dist/vite/server-mdx.d.ts +74 -0
- package/dist/vite/server-mdx.d.ts.map +1 -0
- package/dist/vite/server-mdx.js +259 -0
- package/dist/vite/shader-renderer.d.ts +48 -0
- package/dist/vite/shader-renderer.d.ts.map +1 -0
- package/dist/vite/shader-renderer.js +411 -0
- package/dist/vite/store-hooks.d.ts +12 -0
- package/dist/vite/store-hooks.d.ts.map +1 -0
- package/dist/vite/store-hooks.js +93 -0
- package/dist/vite/store.d.ts +75 -0
- package/dist/vite/store.d.ts.map +1 -0
- package/dist/vite/store.js +52 -0
- package/dist/vite/store.test.d.ts +6 -0
- package/dist/vite/store.test.d.ts.map +1 -0
- package/dist/vite/store.test.js +172 -0
- package/dist/vite/tweakpane-hook.d.ts +94 -0
- package/dist/vite/tweakpane-hook.d.ts.map +1 -0
- package/dist/vite/tweakpane-hook.js +450 -0
- package/dist/vite/vite-plugin.d.ts +28 -0
- package/dist/vite/vite-plugin.d.ts.map +1 -0
- package/dist/vite/vite-plugin.js +538 -0
- package/dist/vite/wave-gradient-shader.d.ts +41 -0
- package/dist/vite/wave-gradient-shader.d.ts.map +1 -0
- package/dist/vite/wave-gradient-shader.js +207 -0
- package/package.json +103 -25
- package/skills/egaki/SKILL.md +162 -1
- package/src/cli/cache-utils.ts +169 -0
- package/src/cli/cached-generate.test.ts +531 -0
- package/src/cli/cached-generate.ts +348 -0
- package/src/cli/cartesia-provider.ts +249 -0
- package/src/cli/cli.ts +1818 -0
- package/src/cli/clone-generate.ts +202 -0
- package/src/{credentials.ts → cli/credentials.ts} +90 -7
- package/src/cli/elevenlabs-speech-provider.ts +243 -0
- package/src/cli/generate.test.ts +166 -0
- package/src/cli/generate.ts +912 -0
- package/src/{login.ts → cli/login.ts} +48 -3
- package/src/cli/main.ts +8 -0
- package/src/cli/model-catalog.ts +2336 -0
- package/src/cli/models.ts +408 -0
- package/src/cli/openai-speech-provider.ts +34 -0
- package/src/cli/separation-generate.ts +187 -0
- package/src/cli/speech-catalog.ts +253 -0
- package/src/cli/speech-generate.ts +275 -0
- package/src/cli/speech-models.ts +146 -0
- package/src/cli/speech-provider.test.ts +226 -0
- package/src/cli/transcription-catalog.ts +250 -0
- package/src/cli/transcription-generate.ts +214 -0
- package/src/cli/transcription-models.ts +136 -0
- package/src/cli/transcription-providers.ts +427 -0
- package/src/cli/video-model-catalog.ts +14 -0
- package/src/cli/xai-auth.ts +396 -0
- package/src/vite/angled-screen.tsx +214 -0
- package/src/vite/app.tsx +197 -0
- package/src/vite/bands-shader.tsx +319 -0
- package/src/vite/code-block.tsx +939 -0
- package/src/vite/components.tsx +278 -0
- package/src/vite/dispersion-rings-shader.tsx +331 -0
- package/src/vite/easing-curves.test.ts +232 -0
- package/src/vite/easing-curves.ts +743 -0
- package/src/vite/generated-media-client.tsx +121 -0
- package/src/vite/keyframes.tsx +347 -0
- package/src/vite/layout-editor.tsx +709 -0
- package/src/vite/layout-transition.tsx +706 -0
- package/src/vite/liquid-gradient-shader.tsx +474 -0
- package/src/vite/mdx-client.tsx +420 -0
- package/src/vite/mdx-parse.ts +343 -0
- package/src/vite/mdx-provided-components.ts +19 -0
- package/src/vite/mdx-video.test.tsx +2219 -0
- package/src/vite/mdx-video.tsx +976 -0
- package/src/vite/media-components.tsx +473 -0
- package/src/vite/media-duration-store.ts +225 -0
- package/src/vite/motion-timing.ts +194 -0
- package/src/vite/player-page.tsx +1107 -0
- package/src/vite/render-client.ts +84 -0
- package/src/vite/sdk.ts +598 -0
- package/src/vite/server-components.tsx +241 -0
- package/src/vite/server-mdx.ts +285 -0
- package/src/vite/shader-renderer.tsx +535 -0
- package/src/vite/store-hooks.ts +117 -0
- package/src/vite/store.test.ts +202 -0
- package/src/vite/store.ts +115 -0
- package/src/vite/styles.css +21 -0
- package/src/vite/tweakpane-hook.tsx +593 -0
- package/src/vite/virtual-modules.d.ts +30 -0
- package/src/vite/vite-plugin.ts +584 -0
- package/src/vite/wave-gradient-shader.tsx +253 -0
- package/README.md +0 -266
- package/dist/antigravity-auth.d.ts +0 -15
- package/dist/antigravity-auth.d.ts.map +0 -1
- package/dist/antigravity-auth.js +0 -544
- package/dist/antigravity-image.d.ts +0 -11
- package/dist/antigravity-image.d.ts.map +0 -1
- package/dist/antigravity-image.js +0 -285
- package/dist/chatgpt-auth.d.ts.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -968
- package/dist/credentials.d.ts.map +0 -1
- package/dist/gateway-model-candidates.generated.d.ts +0 -11
- package/dist/gateway-model-candidates.generated.d.ts.map +0 -1
- package/dist/gateway-model-candidates.generated.js +0 -64
- package/dist/login.d.ts.map +0 -1
- package/dist/model-catalog.d.ts +0 -42
- package/dist/model-catalog.d.ts.map +0 -1
- package/dist/model-catalog.js +0 -1001
- package/dist/models.d.ts.map +0 -1
- package/dist/models.js +0 -246
- package/dist/open-browser.d.ts.map +0 -1
- package/dist/subscription.d.ts.map +0 -1
- package/dist/video-model-catalog.d.ts +0 -52
- package/dist/video-model-catalog.d.ts.map +0 -1
- package/dist/video-model-catalog.js +0 -306
- package/src/cli.ts +0 -1378
- package/src/model-catalog.ts +0 -1077
- package/src/models.ts +0 -309
- package/src/video-model-catalog.ts +0 -363
- /package/dist/{chatgpt-auth.d.ts → cli/chatgpt-auth.d.ts} +0 -0
- /package/dist/{chatgpt-auth.js → cli/chatgpt-auth.js} +0 -0
- /package/dist/{login.d.ts → cli/login.d.ts} +0 -0
- /package/dist/{open-browser.d.ts → cli/open-browser.d.ts} +0 -0
- /package/dist/{open-browser.js → cli/open-browser.js} +0 -0
- /package/dist/{subscription.d.ts → cli/subscription.d.ts} +0 -0
- /package/dist/{subscription.js → cli/subscription.js} +0 -0
- /package/src/{chatgpt-auth.ts → cli/chatgpt-auth.ts} +0 -0
- /package/src/{open-browser.ts → cli/open-browser.ts} +0 -0
- /package/src/{subscription.ts → cli/subscription.ts} +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// Custom Cartesia TTS and STT providers.
|
|
2
|
+
//
|
|
3
|
+
// TTS: POST https://api.cartesia.ai/tts/sse with add_timestamps=true
|
|
4
|
+
// Returns word-level timestamps natively via SSE events.
|
|
5
|
+
// API docs: https://docs.cartesia.ai/api-reference/tts/sse
|
|
6
|
+
//
|
|
7
|
+
// STT: POST https://api.cartesia.ai/stt (Ink models)
|
|
8
|
+
// API docs: https://docs.cartesia.ai/api-reference/stt/transcribe
|
|
9
|
+
//
|
|
10
|
+
// Source of truth for request/response types:
|
|
11
|
+
// JS SDK (auto-generated from OpenAPI spec by Stainless):
|
|
12
|
+
// https://github.com/cartesia-ai/cartesia-js/blob/main/src/resources/stt/stt.ts
|
|
13
|
+
// https://github.com/cartesia-ai/cartesia-js/blob/main/src/resources/tts.ts
|
|
14
|
+
//
|
|
15
|
+
// TTS models: https://docs.cartesia.ai/build-with-cartesia/tts-models/latest
|
|
16
|
+
// STT models: https://docs.cartesia.ai/build-with-cartesia/stt/latest
|
|
17
|
+
// Pricing: https://docs.cartesia.ai/pricing
|
|
18
|
+
const CARTESIA_API_BASE = 'https://api.cartesia.ai';
|
|
19
|
+
const CARTESIA_API_VERSION = '2026-03-01';
|
|
20
|
+
// Default voice: Katie (en-US Female), recommended for voice agents
|
|
21
|
+
const DEFAULT_VOICE_ID = 'f786b574-daa5-4673-aa0c-cbe3e8534c02';
|
|
22
|
+
// ─── shared helpers ──────────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Map user-facing format strings to Cartesia output_format objects.
|
|
25
|
+
* The SSE endpoint only supports raw container (not mp3/wav), so we
|
|
26
|
+
* always use raw PCM for SSE streaming.
|
|
27
|
+
*/
|
|
28
|
+
function buildSseOutputFormat(format) {
|
|
29
|
+
// SSE endpoint only supports raw container. We always use PCM s16le
|
|
30
|
+
// and let the caller convert if needed.
|
|
31
|
+
const sampleRate = format === 'pcm_16000' ? 16000
|
|
32
|
+
: format === 'pcm_22050' ? 22050
|
|
33
|
+
: format === 'pcm_24000' ? 24000
|
|
34
|
+
: 44100;
|
|
35
|
+
return { container: 'raw', encoding: 'pcm_s16le', sample_rate: sampleRate };
|
|
36
|
+
}
|
|
37
|
+
// ─── SSE parser ──────────────────────────────────────────────────────────────
|
|
38
|
+
import { EventSourceParserStream } from 'eventsource-parser/stream';
|
|
39
|
+
/**
|
|
40
|
+
* Parse a Cartesia SSE stream into audio chunks and word timestamps.
|
|
41
|
+
* Uses eventsource-parser for robust SSE frame parsing.
|
|
42
|
+
*/
|
|
43
|
+
export async function parseCartesiaSseStream(body) {
|
|
44
|
+
const audioChunks = [];
|
|
45
|
+
const timestamps = [];
|
|
46
|
+
const eventStream = body
|
|
47
|
+
.pipeThrough(new TextDecoderStream())
|
|
48
|
+
.pipeThrough(new EventSourceParserStream());
|
|
49
|
+
const reader = eventStream.getReader();
|
|
50
|
+
while (true) {
|
|
51
|
+
const { done, value } = await reader.read();
|
|
52
|
+
if (done)
|
|
53
|
+
break;
|
|
54
|
+
let event;
|
|
55
|
+
try {
|
|
56
|
+
event = JSON.parse(value.data);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (event.type === 'chunk') {
|
|
62
|
+
audioChunks.push(new Uint8Array(Buffer.from(event.data, 'base64')));
|
|
63
|
+
}
|
|
64
|
+
else if (event.type === 'timestamps') {
|
|
65
|
+
const ts = event.word_timestamps;
|
|
66
|
+
for (let i = 0; i < ts.words.length; i++) {
|
|
67
|
+
timestamps.push({
|
|
68
|
+
word: ts.words[i],
|
|
69
|
+
startSecond: ts.start[i],
|
|
70
|
+
endSecond: ts.end[i],
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (event.type === 'error') {
|
|
75
|
+
throw new Error(`Cartesia TTS SSE error ${event.status_code}: ${event.message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { audioChunks, timestamps };
|
|
79
|
+
}
|
|
80
|
+
/** Concatenate multiple Uint8Array chunks into one. */
|
|
81
|
+
function concatUint8Arrays(chunks) {
|
|
82
|
+
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
83
|
+
const result = new Uint8Array(totalLength);
|
|
84
|
+
let offset = 0;
|
|
85
|
+
for (const chunk of chunks) {
|
|
86
|
+
result.set(chunk, offset);
|
|
87
|
+
offset += chunk.length;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Wrap raw PCM s16le mono audio into a WAV container.
|
|
93
|
+
* The SSE endpoint only supports raw PCM output, but browsers need a
|
|
94
|
+
* proper container format. WAV is the simplest lossless wrapper.
|
|
95
|
+
*/
|
|
96
|
+
function wavFromPcmS16Le(pcm, sampleRate) {
|
|
97
|
+
const header = new ArrayBuffer(44);
|
|
98
|
+
const view = new DataView(header);
|
|
99
|
+
const channels = 1;
|
|
100
|
+
const bitsPerSample = 16;
|
|
101
|
+
const byteRate = sampleRate * channels * (bitsPerSample / 8);
|
|
102
|
+
const blockAlign = channels * (bitsPerSample / 8);
|
|
103
|
+
const writeStr = (offset, str) => {
|
|
104
|
+
for (let i = 0; i < str.length; i++)
|
|
105
|
+
view.setUint8(offset + i, str.charCodeAt(i));
|
|
106
|
+
};
|
|
107
|
+
writeStr(0, 'RIFF');
|
|
108
|
+
view.setUint32(4, 36 + pcm.byteLength, true);
|
|
109
|
+
writeStr(8, 'WAVE');
|
|
110
|
+
writeStr(12, 'fmt ');
|
|
111
|
+
view.setUint32(16, 16, true); // subchunk1 size (PCM)
|
|
112
|
+
view.setUint16(20, 1, true); // audio format (PCM = 1)
|
|
113
|
+
view.setUint16(22, channels, true);
|
|
114
|
+
view.setUint32(24, sampleRate, true);
|
|
115
|
+
view.setUint32(28, byteRate, true);
|
|
116
|
+
view.setUint16(32, blockAlign, true);
|
|
117
|
+
view.setUint16(34, bitsPerSample, true);
|
|
118
|
+
writeStr(36, 'data');
|
|
119
|
+
view.setUint32(40, pcm.byteLength, true);
|
|
120
|
+
const wav = new Uint8Array(44 + pcm.byteLength);
|
|
121
|
+
wav.set(new Uint8Array(header), 0);
|
|
122
|
+
wav.set(pcm, 44);
|
|
123
|
+
return wav;
|
|
124
|
+
}
|
|
125
|
+
// ─── Cartesia TTS SpeechProvider ─────────────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* Create a Cartesia speech provider using the SSE endpoint with word timestamps.
|
|
128
|
+
* Returns raw PCM audio (pcm_s16le) since the SSE endpoint only supports raw container.
|
|
129
|
+
*/
|
|
130
|
+
export function createCartesiaSpeechProvider() {
|
|
131
|
+
return {
|
|
132
|
+
async generate(options) {
|
|
133
|
+
const apiKey = process.env['CARTESIA_API_KEY'];
|
|
134
|
+
if (!apiKey) {
|
|
135
|
+
throw new Error('Missing CARTESIA_API_KEY. Run: egaki login --provider cartesia --key <key>');
|
|
136
|
+
}
|
|
137
|
+
const voiceId = options.voice || DEFAULT_VOICE_ID;
|
|
138
|
+
const outputFormat = buildSseOutputFormat(options.outputFormat);
|
|
139
|
+
const body = {
|
|
140
|
+
model_id: options.modelId,
|
|
141
|
+
transcript: options.text,
|
|
142
|
+
voice: { mode: 'id', id: voiceId },
|
|
143
|
+
output_format: outputFormat,
|
|
144
|
+
add_timestamps: true,
|
|
145
|
+
};
|
|
146
|
+
if (options.language) {
|
|
147
|
+
body.language = options.language;
|
|
148
|
+
}
|
|
149
|
+
if (options.speed != null) {
|
|
150
|
+
body.generation_config = { speed: options.speed };
|
|
151
|
+
}
|
|
152
|
+
const response = await fetch(`${CARTESIA_API_BASE}/tts/sse`, {
|
|
153
|
+
method: 'POST',
|
|
154
|
+
headers: {
|
|
155
|
+
'Content-Type': 'application/json',
|
|
156
|
+
'Cartesia-Version': CARTESIA_API_VERSION,
|
|
157
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
158
|
+
},
|
|
159
|
+
body: JSON.stringify(body),
|
|
160
|
+
signal: options.abortSignal,
|
|
161
|
+
});
|
|
162
|
+
if (!response.ok) {
|
|
163
|
+
const errorText = await response.text().catch(() => '');
|
|
164
|
+
throw new Error(`Cartesia TTS SSE API error ${response.status}: ${errorText || response.statusText}`);
|
|
165
|
+
}
|
|
166
|
+
if (!response.body) {
|
|
167
|
+
throw new Error('Cartesia TTS SSE response has no body');
|
|
168
|
+
}
|
|
169
|
+
const { audioChunks, timestamps } = await parseCartesiaSseStream(response.body);
|
|
170
|
+
const pcm = concatUint8Arrays(audioChunks);
|
|
171
|
+
// Wrap raw PCM in WAV container so browsers can play the audio.
|
|
172
|
+
const audio = wavFromPcmS16Le(pcm, outputFormat.sample_rate);
|
|
173
|
+
return {
|
|
174
|
+
audio,
|
|
175
|
+
mediaType: 'audio/wav',
|
|
176
|
+
timestamps: timestamps.length > 0 ? timestamps : undefined,
|
|
177
|
+
};
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// Cartesia STT is now implemented as a TranscriptionProvider in
|
|
182
|
+
// transcription-providers.ts (createCartesiaTranscriptionProvider).
|
|
183
|
+
// The old TranscriptionModel-based implementation was removed to drop
|
|
184
|
+
// the AI SDK dependency from the transcription path.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatgpt-auth.d.ts","sourceRoot":"","sources":["../../src/cli/chatgpt-auth.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAgGD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAOrE;AA8JD;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,CA8C9D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,CAyBzF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,WAAW,EACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GACzC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,CAS9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";AA0FA,QAAA,MAAM,GAAG,yBAAgB,CAAA;AA4pCzB,OAAO,EAAE,GAAG,EAAE,CAAA"}
|