Update tool panel
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { ASRModel, Assistant, CallLog, InteractionDetail, KnowledgeBase, KnowledgeDocument, LLMModel, Voice, Workflow, WorkflowEdge, WorkflowNode } from '../types';
|
||||
import { ASRModel, Assistant, CallLog, InteractionDetail, KnowledgeBase, KnowledgeDocument, LLMModel, Tool, Voice, Workflow, WorkflowEdge, WorkflowNode } from '../types';
|
||||
import { apiRequest } from './apiClient';
|
||||
|
||||
type AnyRecord = Record<string, any>;
|
||||
@@ -91,6 +91,17 @@ const mapLLMModel = (raw: AnyRecord): LLMModel => ({
|
||||
enabled: Boolean(readField(raw, ['enabled'], true)),
|
||||
});
|
||||
|
||||
const mapTool = (raw: AnyRecord): Tool => ({
|
||||
id: String(readField(raw, ['id'], '')),
|
||||
name: readField(raw, ['name'], ''),
|
||||
description: readField(raw, ['description'], ''),
|
||||
category: readField(raw, ['category'], 'system') as 'system' | 'query',
|
||||
icon: readField(raw, ['icon'], 'Wrench'),
|
||||
isSystem: Boolean(readField(raw, ['isSystem', 'is_system'], false)),
|
||||
enabled: Boolean(readField(raw, ['enabled'], true)),
|
||||
isCustom: !Boolean(readField(raw, ['isSystem', 'is_system'], false)),
|
||||
});
|
||||
|
||||
const mapWorkflowNode = (raw: AnyRecord): WorkflowNode => ({
|
||||
name: readField(raw, ['name'], ''),
|
||||
type: readField(raw, ['type'], 'conversation') as 'conversation' | 'tool' | 'human' | 'end',
|
||||
@@ -425,6 +436,41 @@ export const previewLLMModel = async (
|
||||
});
|
||||
};
|
||||
|
||||
export const fetchTools = async (): Promise<Tool[]> => {
|
||||
const response = await apiRequest<{ list?: AnyRecord[] } | AnyRecord[]>('/tools/resources');
|
||||
const list = Array.isArray(response) ? response : (response.list || []);
|
||||
return list.map((item) => mapTool(item));
|
||||
};
|
||||
|
||||
export const createTool = async (data: Partial<Tool>): Promise<Tool> => {
|
||||
const payload = {
|
||||
id: data.id || undefined,
|
||||
name: data.name || 'New Tool',
|
||||
description: data.description || '',
|
||||
category: data.category || 'system',
|
||||
icon: data.icon || (data.category === 'query' ? 'Globe' : 'Terminal'),
|
||||
enabled: data.enabled ?? true,
|
||||
};
|
||||
const response = await apiRequest<AnyRecord>('/tools/resources', { method: 'POST', body: payload });
|
||||
return mapTool(response);
|
||||
};
|
||||
|
||||
export const updateTool = async (id: string, data: Partial<Tool>): Promise<Tool> => {
|
||||
const payload = {
|
||||
name: data.name,
|
||||
description: data.description,
|
||||
category: data.category,
|
||||
icon: data.icon,
|
||||
enabled: data.enabled,
|
||||
};
|
||||
const response = await apiRequest<AnyRecord>(`/tools/resources/${id}`, { method: 'PUT', body: payload });
|
||||
return mapTool(response);
|
||||
};
|
||||
|
||||
export const deleteTool = async (id: string): Promise<void> => {
|
||||
await apiRequest(`/tools/resources/${id}`, { method: 'DELETE' });
|
||||
};
|
||||
|
||||
export const fetchWorkflows = async (): Promise<Workflow[]> => {
|
||||
const response = await apiRequest<{ list?: AnyRecord[] } | AnyRecord[]>('/workflows');
|
||||
const list = Array.isArray(response) ? response : (response.list || []);
|
||||
|
||||
Reference in New Issue
Block a user