@coralai/sps-cli 0.65.25 → 0.65.26
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.
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module console/routes/tts
|
|
3
|
-
* @description /api/tts ——
|
|
4
|
-
*
|
|
3
|
+
* @description /api/tts —— 语音合成播报。前端契约:POST {text} → 音频字节。
|
|
4
|
+
* **provider 无关**:走媒体 provider store 的 voice 默认 provider + adapter 注册表
|
|
5
|
+
* (豆包/将来 qwen 等任何实现了 voice 的 adapter 都行;音色 = 该 provider 的默认 model)。
|
|
6
|
+
* 回落:旧 ~/.coral/env 的 SPS_DOUBAO_*(向后兼容,不再文档引导)。
|
|
7
|
+
* 未配置 → 503,前端回落浏览器 Web Speech。
|
|
5
8
|
* @layer console
|
|
6
|
-
*
|
|
7
|
-
* 边界:本文件只做请求分发。合成在 core/tts/DoubaoTts。
|
|
8
9
|
*/
|
|
9
10
|
import { Hono } from 'hono';
|
|
10
11
|
export declare function createTtsRoute(): Hono;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../../src/console/routes/tts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../../src/console/routes/tts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,wBAAgB,cAAc,IAAI,IAAI,CAoCrC"}
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module console/routes/tts
|
|
3
|
-
* @description /api/tts ——
|
|
4
|
-
*
|
|
3
|
+
* @description /api/tts —— 语音合成播报。前端契约:POST {text} → 音频字节。
|
|
4
|
+
* **provider 无关**:走媒体 provider store 的 voice 默认 provider + adapter 注册表
|
|
5
|
+
* (豆包/将来 qwen 等任何实现了 voice 的 adapter 都行;音色 = 该 provider 的默认 model)。
|
|
6
|
+
* 回落:旧 ~/.coral/env 的 SPS_DOUBAO_*(向后兼容,不再文档引导)。
|
|
7
|
+
* 未配置 → 503,前端回落浏览器 Web Speech。
|
|
5
8
|
* @layer console
|
|
6
|
-
*
|
|
7
|
-
* 边界:本文件只做请求分发。合成在 core/tts/DoubaoTts。
|
|
8
9
|
*/
|
|
9
10
|
import { Hono } from 'hono';
|
|
10
11
|
import { doubaoConfig, doubaoSynthesize } from '../../core/tts/DoubaoTts.js';
|
|
12
|
+
import { resolveMediaProvider } from '../../providers/media/mediaProviders.js';
|
|
13
|
+
import { ADAPTERS } from '../../providers/media/adapters.js';
|
|
14
|
+
const AUDIO_MIME = {
|
|
15
|
+
mp3: 'audio/mpeg',
|
|
16
|
+
wav: 'audio/wav',
|
|
17
|
+
ogg: 'audio/ogg',
|
|
18
|
+
};
|
|
11
19
|
export function createTtsRoute() {
|
|
12
20
|
const app = new Hono();
|
|
13
21
|
app.post('/', async (c) => {
|
|
14
|
-
const cfg = doubaoConfig();
|
|
15
|
-
if (!cfg)
|
|
16
|
-
return c.json({ error: '豆包未配置(需 ~/.coral/env 的 SPS_DOUBAO_API_KEY / SPS_DOUBAO_SPEAKER)' }, 503);
|
|
17
22
|
let text = '';
|
|
18
23
|
try {
|
|
19
24
|
text = JSON.parse(await c.req.text()).text ?? '';
|
|
@@ -24,8 +29,23 @@ export function createTtsRoute() {
|
|
|
24
29
|
if (!text.trim())
|
|
25
30
|
return c.json({ error: 'missing text' }, 400);
|
|
26
31
|
try {
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
// 1) store 路(provider 无关):voice 默认 provider → adapter 合成(prompt=文本,model=音色)。
|
|
33
|
+
const resolved = resolveMediaProvider('voice');
|
|
34
|
+
const adapter = resolved ? ADAPTERS[resolved.provider.adapter] : undefined;
|
|
35
|
+
if (resolved && adapter) {
|
|
36
|
+
const { bytes, ext } = await adapter(resolved.provider, { prompt: text, model: resolved.model });
|
|
37
|
+
return new Response(new Uint8Array(bytes), {
|
|
38
|
+
status: 200,
|
|
39
|
+
headers: { 'content-type': AUDIO_MIME[ext] ?? 'application/octet-stream' },
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// 2) 兼容回落:旧 env 的 SPS_DOUBAO_*(doubaoConfig 内部含 store 豆包解析,此处仅在无 store provider 时命中 env)。
|
|
43
|
+
const cfg = doubaoConfig();
|
|
44
|
+
if (cfg) {
|
|
45
|
+
const audio = await doubaoSynthesize(text, cfg);
|
|
46
|
+
return new Response(new Uint8Array(audio), { status: 200, headers: { 'content-type': 'audio/mpeg' } });
|
|
47
|
+
}
|
|
48
|
+
return c.json({ error: '未配置语音 provider —— 在控制台"资源模型"页给 voice 配一个并选默认音色(model)' }, 503);
|
|
29
49
|
}
|
|
30
50
|
catch (e) {
|
|
31
51
|
return c.json({ error: e instanceof Error ? e.message : String(e) }, 502);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tts.js","sourceRoot":"","sources":["../../../src/console/routes/tts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tts.js","sourceRoot":"","sources":["../../../src/console/routes/tts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,MAAM,UAAU,GAA2B;IACzC,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;QAEhE,IAAI,CAAC;YACH,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3E,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjG,OAAO,IAAI,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;oBACzC,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,0BAA0B,EAAE;iBAC3E,CAAC,CAAC;YACL,CAAC;YACD,0FAA0F;YAC1F,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;YAC3B,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAChD,OAAO,IAAI,QAAQ,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACzG,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uDAAuD,EAAE,EAAE,GAAG,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|