mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-25 00:42:24 +00:00
TTS: adopt backend catalog order
This commit is contained in:
@@ -117,6 +117,11 @@ describe("runtime-backend-catalog", () => {
|
||||
"elevenlabs",
|
||||
"edge",
|
||||
]);
|
||||
expect(catalog.resolveExtensionHostTtsRuntimeBackendOrder("edge")).toEqual([
|
||||
"edge",
|
||||
"openai",
|
||||
"elevenlabs",
|
||||
]);
|
||||
});
|
||||
|
||||
it("aggregates runtime-backend catalog entries across subsystem families", async () => {
|
||||
|
||||
@@ -235,12 +235,31 @@ export function listExtensionHostRuntimeBackendIdsForSubsystem(
|
||||
.map((entry) => entry.backendId);
|
||||
}
|
||||
|
||||
export function resolveExtensionHostRuntimeBackendOrderForSubsystem(
|
||||
subsystemId: ExtensionHostRuntimeBackendSubsystemId,
|
||||
preferredBackendId: string,
|
||||
): readonly string[] {
|
||||
const ordered = listExtensionHostRuntimeBackendIdsForSubsystem(subsystemId);
|
||||
if (!ordered.includes(preferredBackendId)) {
|
||||
return [preferredBackendId, ...ordered];
|
||||
}
|
||||
return [preferredBackendId, ...ordered.filter((backendId) => backendId !== preferredBackendId)];
|
||||
}
|
||||
|
||||
export function listExtensionHostMediaRuntimeBackendIds(
|
||||
subsystemId: ExtensionHostMediaRuntimeSubsystemId,
|
||||
): readonly string[] {
|
||||
return listExtensionHostRuntimeBackendIdsForSubsystem(subsystemId);
|
||||
}
|
||||
|
||||
export function resolveExtensionHostTtsRuntimeBackendOrder(
|
||||
preferredBackendId: TtsProvider,
|
||||
): readonly TtsProvider[] {
|
||||
return resolveExtensionHostRuntimeBackendOrderForSubsystem("tts", preferredBackendId).map(
|
||||
(backendId) => backendId as TtsProvider,
|
||||
);
|
||||
}
|
||||
|
||||
export function listExtensionHostRuntimeBackendCatalogEntries(): readonly ExtensionHostRuntimeBackendCatalogEntry[] {
|
||||
return [
|
||||
...listExtensionHostEmbeddingRuntimeBackendCatalogEntries(),
|
||||
|
||||
@@ -10,7 +10,11 @@ import {
|
||||
} from "./tts-runtime-setup.js";
|
||||
|
||||
vi.mock("./runtime-backend-catalog.js", () => ({
|
||||
listExtensionHostTtsRuntimeBackendIds: vi.fn(() => ["openai", "elevenlabs", "edge"]),
|
||||
resolveExtensionHostTtsRuntimeBackendOrder: vi.fn((provider: string) =>
|
||||
[provider, "openai", "elevenlabs", "edge"].filter(
|
||||
(candidate, index, items) => items.indexOf(candidate) === index,
|
||||
),
|
||||
),
|
||||
}));
|
||||
|
||||
const tempDirs: string[] = [];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { existsSync, readFileSync } from "node:fs";
|
||||
import type { TtsProvider } from "../config/types.tts.js";
|
||||
import { listExtensionHostTtsRuntimeBackendIds } from "./runtime-backend-catalog.js";
|
||||
import { resolveExtensionHostTtsRuntimeBackendOrder } from "./runtime-backend-catalog.js";
|
||||
import type { ResolvedTtsConfig } from "./tts-config.js";
|
||||
import { resolveExtensionHostTtsApiKey } from "./tts-runtime-registry.js";
|
||||
|
||||
@@ -65,9 +65,8 @@ export function resolveExtensionHostTtsRequestSetup(params: {
|
||||
|
||||
const provider =
|
||||
params.providerOverride ?? resolveExtensionHostTtsProvider(params.config, params.prefsPath);
|
||||
const providerOrder = listExtensionHostTtsRuntimeBackendIds();
|
||||
return {
|
||||
config: params.config,
|
||||
providers: [provider, ...providerOrder.filter((candidate) => candidate !== provider)],
|
||||
providers: [...resolveExtensionHostTtsRuntimeBackendOrder(provider)],
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,7 +6,11 @@ import {
|
||||
} from "./tts-status.js";
|
||||
|
||||
vi.mock("./runtime-backend-catalog.js", () => ({
|
||||
listExtensionHostTtsRuntimeBackendIds: vi.fn(() => ["openai", "elevenlabs", "edge"]),
|
||||
resolveExtensionHostTtsRuntimeBackendOrder: vi.fn((provider: string) =>
|
||||
[provider, "openai", "elevenlabs", "edge"].filter(
|
||||
(candidate, index, items) => items.indexOf(candidate) === index,
|
||||
),
|
||||
),
|
||||
}));
|
||||
|
||||
describe("tts-status", () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type { TtsProvider } from "../config/types.tts.js";
|
||||
import { listExtensionHostTtsRuntimeBackendIds } from "./runtime-backend-catalog.js";
|
||||
import { resolveExtensionHostTtsRuntimeBackendOrder } from "./runtime-backend-catalog.js";
|
||||
import type { ResolvedTtsConfig } from "./tts-config.js";
|
||||
import {
|
||||
getExtensionHostTtsMaxLength,
|
||||
@@ -57,8 +57,8 @@ export function resolveExtensionHostTtsStatusSnapshot(params: {
|
||||
}): ExtensionHostTtsStatusSnapshot {
|
||||
const { config, prefsPath } = params;
|
||||
const provider = resolveExtensionHostTtsProvider(config, prefsPath);
|
||||
const fallbackProviders = listExtensionHostTtsRuntimeBackendIds()
|
||||
.filter((candidate) => candidate !== provider)
|
||||
const fallbackProviders = resolveExtensionHostTtsRuntimeBackendOrder(provider)
|
||||
.slice(1)
|
||||
.filter((candidate) => isExtensionHostTtsProviderConfigured(config, candidate));
|
||||
return {
|
||||
enabled: isExtensionHostTtsEnabled(config, prefsPath),
|
||||
|
||||
@@ -124,6 +124,11 @@ describe("tts", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("keeps compatibility provider exports aligned with the runtime-backend catalog", () => {
|
||||
expect(tts.TTS_PROVIDERS).toEqual(["openai", "elevenlabs", "edge"]);
|
||||
expect(tts.resolveTtsProviderOrder("edge")).toEqual(["edge", "openai", "elevenlabs"]);
|
||||
});
|
||||
|
||||
describe("isValidVoiceId", () => {
|
||||
it("validates ElevenLabs voice ID length and character rules", () => {
|
||||
const cases = [
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import type { TtsProvider } from "../config/types.tts.js";
|
||||
import {
|
||||
listExtensionHostTtsRuntimeBackendIds,
|
||||
resolveExtensionHostTtsRuntimeBackendOrder,
|
||||
} from "../extension-host/runtime-backend-catalog.js";
|
||||
import {
|
||||
applyExtensionHostTtsToPayload,
|
||||
buildExtensionHostTtsSystemPromptHint,
|
||||
@@ -26,10 +30,8 @@ import {
|
||||
setExtensionHostTtsSummarizationEnabled,
|
||||
} from "../extension-host/tts-preferences.js";
|
||||
import {
|
||||
EXTENSION_HOST_TTS_PROVIDER_IDS,
|
||||
isExtensionHostTtsProviderConfigured,
|
||||
resolveExtensionHostTtsApiKey,
|
||||
resolveExtensionHostTtsProviderOrder,
|
||||
} from "../extension-host/tts-runtime-registry.js";
|
||||
import { resolveExtensionHostTtsProvider } from "../extension-host/tts-runtime-setup.js";
|
||||
import {
|
||||
@@ -129,11 +131,11 @@ export function setLastTtsAttempt(entry: TtsStatusEntry | undefined): void {
|
||||
setExtensionHostLastTtsAttempt(entry);
|
||||
}
|
||||
|
||||
export const TTS_PROVIDERS = EXTENSION_HOST_TTS_PROVIDER_IDS;
|
||||
export const TTS_PROVIDERS = listExtensionHostTtsRuntimeBackendIds();
|
||||
|
||||
export const resolveTtsApiKey = resolveExtensionHostTtsApiKey;
|
||||
|
||||
export const resolveTtsProviderOrder = resolveExtensionHostTtsProviderOrder;
|
||||
export const resolveTtsProviderOrder = resolveExtensionHostTtsRuntimeBackendOrder;
|
||||
|
||||
export const isTtsProviderConfigured = isExtensionHostTtsProviderConfigured;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user