From c4475a5e3beb3823b474caf463b9264d298cf624 Mon Sep 17 00:00:00 2001 From: npmrun <1549469775@qq.com> Date: Sat, 8 Aug 2026 00:06:17 +0800 Subject: [PATCH] feat: add supportsTools field to LLM models and update related APIs - Added supportsTools field to LLM models in various API endpoints. - Updated model creation and update functions to handle supportsTools. - Modified chat and agent APIs to utilize supportsTools for tool management. - Enhanced error handling and validation for new field in relevant endpoints. - Updated migration journal to include new model version for supportsTools. --- app/components/agent/AgentChatArea.vue | 9 + app/components/agent/AgentInput.vue | 79 +- app/composables/useAgentChat.ts | 9 +- app/composables/useLlmChat.ts | 9 +- app/pages/index.vue | 16 +- app/pages/settings/llm-config/index.vue | 24 +- app/pages/settings/llm-test/index.vue | 20 +- docs/qwen3-vl-tools-fix.md | 119 ++ packages/drizzle-pkg/db.sqlite | Bin 1634304 -> 1634304 bytes packages/drizzle-pkg/lib/schema/llm.ts | 3 +- .../migrations/0018_colossal_barracuda.sql | 1 + .../drizzle-pkg/migrations/meta/0018_snapshot.json | 2225 ++++++++++++++++++++ packages/drizzle-pkg/migrations/meta/_journal.json | 7 + server/api/admin/llm/models/index.post.ts | 4 +- server/api/admin/llm/providers/index.post.ts | 6 +- server/api/agent/chat/index.post.ts | 36 +- server/api/agent/models/index.get.ts | 2 + server/api/llm/chat/index.post.ts | 13 +- server/api/llm/chat/models.get.ts | 1 + server/api/llm/models/[providerId].post.ts | 3 +- server/api/llm/models/detail/[id].put.ts | 3 +- server/service/agent/title.ts | 8 + server/service/llm/index.ts | 11 + 23 files changed, 2568 insertions(+), 40 deletions(-) create mode 100644 docs/qwen3-vl-tools-fix.md create mode 100644 packages/drizzle-pkg/migrations/0018_colossal_barracuda.sql create mode 100644 packages/drizzle-pkg/migrations/meta/0018_snapshot.json diff --git a/app/components/agent/AgentChatArea.vue b/app/components/agent/AgentChatArea.vue index 476fb65..9f43a92 100644 --- a/app/components/agent/AgentChatArea.vue +++ b/app/components/agent/AgentChatArea.vue @@ -16,6 +16,7 @@ const props = defineProps<{ modelId: number | null; models: ModelOption[]; enableTools: boolean; + toolsDisabled?: boolean; rateLimitInfo?: { sessionRemaining: number | null; ipRemaining: number | null; @@ -51,6 +52,11 @@ function handleEdit(messageId: string, content: string) { inputRef.value?.setText(content); } +function handleCancelEdit() { + editingMessageId.value = null; + inputRef.value?.setText(""); +} + function handleSend(content: string) { if (editingMessageId.value) { emit("edit", editingMessageId.value, content); @@ -108,9 +114,12 @@ watch( :disabled="rateLimitInfo?.sessionRemaining === 0 || hasPendingApproval" :disabled-reason="rateLimitInfo?.sessionRemaining === 0 ? 'rate-limit' : hasPendingApproval ? 'approval' : null" :enable-tools="enableTools" + :tools-disabled="toolsDisabled" :logged-in="loggedIn" + :editing="!!editingMessageId" @send="handleSend" @stop="emit('stop')" + @cancel-edit="handleCancelEdit" @update:enable-tools="emit('update:enableTools', $event)" /> diff --git a/app/components/agent/AgentInput.vue b/app/components/agent/AgentInput.vue index fd4faf8..34e5fe6 100644 --- a/app/components/agent/AgentInput.vue +++ b/app/components/agent/AgentInput.vue @@ -12,13 +12,16 @@ const props = defineProps<{ disabledReason?: "approval" | "rate-limit" | null; placeholder?: string; enableTools: boolean; + toolsDisabled?: boolean; loggedIn: boolean; + editing?: boolean; }>(); const emit = defineEmits<{ send: [content: string]; stop: []; "update:enableTools": [val: boolean]; + cancelEdit: []; }>(); const inputText = ref(""); @@ -77,6 +80,11 @@ function handleSend() { } function handleKeydown(e: KeyboardEvent) { + if (e.key === "Escape" && props.editing) { + e.preventDefault(); + emit("cancelEdit"); + return; + } if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSend(); @@ -99,13 +107,26 @@ defineExpose({