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