Browse Source

feat: 优化工具处理逻辑,确保在无代理工具时隐藏工具栏

feat/agent-independence
npmrun 2 months ago
parent
commit
24099b6b70
  1. 12
      app/components/agent/AgentInput.vue
  2. 2
      app/pages/chat/[agentSlug]/index.vue
  3. BIN
      packages/drizzle-pkg/db.sqlite

12
app/components/agent/AgentInput.vue

@ -29,9 +29,11 @@ const inputText = ref("");
const textareaRef = ref<HTMLTextAreaElement | null>(null); const textareaRef = ref<HTMLTextAreaElement | null>(null);
const fetchedTools = ref<ToolInfo[]>([]); const fetchedTools = ref<ToolInfo[]>([]);
const hasAgentTools = computed(() => !!(props.agentTools && props.agentTools.length > 0));
const availableTools = computed<ToolInfo[]>(() => { const availableTools = computed<ToolInfo[]>(() => {
if (props.agentTools && props.agentTools.length > 0) { if (hasAgentTools.value) {
return props.agentTools; return props.agentTools!;
} }
return fetchedTools.value; return fetchedTools.value;
}); });
@ -45,7 +47,7 @@ const effectivePlaceholder = computed(() => {
}); });
async function loadTools() { async function loadTools() {
if (props.agentTools && props.agentTools.length > 0) return; if (hasAgentTools.value) return;
try { try {
const res = await $fetch<{ code: number; data: ToolInfo[] }>("/api/llm/chat/tools"); const res = await $fetch<{ code: number; data: ToolInfo[] }>("/api/llm/chat/tools");
fetchedTools.value = res.data ?? []; fetchedTools.value = res.data ?? [];
@ -128,8 +130,8 @@ defineExpose({
</button> </button>
</div> </div>
<!-- Tools bar above input (hidden when model doesn't support tools) --> <!-- Tools bar above input (hidden when model doesn't support tools or agent has no tools) -->
<div v-if="!toolsDisabled" class="tools-bar"> <div v-if="!toolsDisabled && hasAgentTools" class="tools-bar">
<button <button
class="toggle-btn" class="toggle-btn"
:class="{ active: enableTools, disabled: toolsDisabled }" :class="{ active: enableTools, disabled: toolsDisabled }"

2
app/pages/chat/[agentSlug]/index.vue

@ -86,10 +86,12 @@ const currentModelSupportsTools = computed(() => {
const enableTools = computed({ const enableTools = computed({
get: () => { get: () => {
if (!currentModelSupportsTools.value) return false; if (!currentModelSupportsTools.value) return false;
if (agentTools.value.length === 0) return false;
return !!(sessions.currentSession.value?.enableTools); return !!(sessions.currentSession.value?.enableTools);
}, },
set: (val: boolean) => { set: (val: boolean) => {
if (!currentModelSupportsTools.value) return; if (!currentModelSupportsTools.value) return;
if (agentTools.value.length === 0) return;
if (sessions.currentSessionId.value) { if (sessions.currentSessionId.value) {
sessions.updateSessionConfig(sessions.currentSessionId.value, { enableTools: val }); sessions.updateSessionConfig(sessions.currentSessionId.value, { enableTools: val });
} }

BIN
packages/drizzle-pkg/db.sqlite

Binary file not shown.
Loading…
Cancel
Save