62 lines
1.3 KiB
TypeScript
62 lines
1.3 KiB
TypeScript
import { ToolItem } from "@/hook/type";
|
|
import { ref } from "vue";
|
|
|
|
export interface ChatMessage {
|
|
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
content: string;
|
|
tool_call_id?: string
|
|
name?: string // 工具名称,当 role 为 tool
|
|
tool_calls?: ToolCall[]
|
|
}
|
|
|
|
// 新增状态和工具数据
|
|
interface EnableToolItem {
|
|
name: string;
|
|
description: string;
|
|
enabled: boolean;
|
|
}
|
|
|
|
export interface ChatSetting {
|
|
modelIndex: number
|
|
systemPrompt: string
|
|
enableTools: EnableToolItem[]
|
|
temperature: number
|
|
enableWebSearch: boolean
|
|
contextLength: number
|
|
}
|
|
|
|
export interface ChatStorage {
|
|
messages: ChatMessage[]
|
|
settings: ChatSetting
|
|
}
|
|
|
|
export interface ToolCall {
|
|
id?: string;
|
|
index?: number;
|
|
type: string;
|
|
function: {
|
|
name: string;
|
|
arguments: string;
|
|
}
|
|
}
|
|
|
|
export const allTools = ref<ToolItem[]>([]);
|
|
|
|
export function getToolSchema(enableTools: EnableToolItem[]) {
|
|
const toolsSchema = [];
|
|
for (let i = 0; i < enableTools.length; i++) {
|
|
if (enableTools[i].enabled) {
|
|
const tool = allTools.value[i];
|
|
|
|
toolsSchema.push({
|
|
type: 'function',
|
|
function: {
|
|
name: tool.name,
|
|
description: tool.description || "",
|
|
parameters: tool.inputSchema
|
|
}
|
|
});
|
|
}
|
|
}
|
|
return toolsSchema;
|
|
} |