Update voice libary key form

This commit is contained in:
Xin Wang
2026-02-08 23:16:21 +08:00
parent 8ec91a7fa8
commit 97e3236e76
7 changed files with 503 additions and 702 deletions

View File

@@ -1,4 +1,4 @@
import { Assistant, CallLog, InteractionDetail, KnowledgeBase, KnowledgeDocument, VendorCredential, Voice, Workflow, WorkflowEdge, WorkflowNode } from '../types';
import { Assistant, CallLog, InteractionDetail, KnowledgeBase, KnowledgeDocument, Voice, Workflow, WorkflowEdge, WorkflowNode } from '../types';
import { apiRequest } from './apiClient';
type AnyRecord = Record<string, any>;
@@ -55,6 +55,8 @@ const mapVoice = (raw: AnyRecord): Voice => ({
description: readField(raw, ['description'], ''),
model: readField(raw, ['model'], ''),
voiceKey: readField(raw, ['voiceKey', 'voice_key'], ''),
apiKey: readField(raw, ['apiKey', 'api_key'], ''),
baseUrl: readField(raw, ['baseUrl', 'base_url'], ''),
speed: Number(readField(raw, ['speed'], 1)),
gain: Number(readField(raw, ['gain'], 0)),
pitch: Number(readField(raw, ['pitch'], 0)),
@@ -62,13 +64,6 @@ const mapVoice = (raw: AnyRecord): Voice => ({
isSystem: Boolean(readField(raw, ['isSystem', 'is_system'], false)),
});
const mapVendorCredential = (raw: AnyRecord): VendorCredential => ({
vendorKey: String(readField(raw, ['vendorKey', 'vendor_key'], '')),
vendorName: readField(raw, ['vendorName', 'vendor_name'], ''),
apiKey: readField(raw, ['apiKey', 'api_key'], ''),
baseUrl: readField(raw, ['baseUrl', 'base_url'], ''),
});
const mapWorkflowNode = (raw: AnyRecord): WorkflowNode => ({
name: readField(raw, ['name'], ''),
type: readField(raw, ['type'], 'conversation') as 'conversation' | 'tool' | 'human' | 'end',
@@ -205,6 +200,8 @@ export const createVoice = async (data: Partial<Voice>): Promise<Voice> => {
description: data.description || '',
model: data.model || undefined,
voice_key: data.voiceKey || undefined,
api_key: data.apiKey || undefined,
base_url: data.baseUrl || undefined,
speed: data.speed ?? 1,
gain: data.gain ?? 0,
pitch: data.pitch ?? 0,
@@ -223,6 +220,8 @@ export const updateVoice = async (id: string, data: Partial<Voice>): Promise<Voi
description: data.description,
model: data.model,
voice_key: data.voiceKey,
api_key: data.apiKey,
base_url: data.baseUrl,
speed: data.speed,
gain: data.gain,
pitch: data.pitch,
@@ -247,24 +246,6 @@ export const previewVoice = async (id: string, text: string, speed?: number, api
return response.audio_url;
};
export const fetchVendorCredentials = async (): Promise<VendorCredential[]> => {
const response = await apiRequest<{ list?: AnyRecord[] }>('/voices/vendors/credentials');
const list = response.list || [];
return list.map((item) => mapVendorCredential(item));
};
export const saveVendorCredential = async (vendorKey: string, data: { vendorName: string; apiKey: string; baseUrl?: string }): Promise<VendorCredential> => {
const response = await apiRequest<AnyRecord>(`/voices/vendors/credentials/${vendorKey}`, {
method: 'PUT',
body: {
vendor_name: data.vendorName,
api_key: data.apiKey,
base_url: data.baseUrl || undefined,
},
});
return mapVendorCredential(response);
};
export const fetchWorkflows = async (): Promise<Workflow[]> => {
const response = await apiRequest<{ list?: AnyRecord[] } | AnyRecord[]>('/workflows');
const list = Array.isArray(response) ? response : (response.list || []);