Fixing tool calling failure issue

This commit is contained in:
Dita Aji Pratama 2026-06-26 10:00:24 +07:00
parent 03221ca119
commit 1dba9e32f2
2 changed files with 14 additions and 7 deletions

View File

@ -27,7 +27,13 @@ def execute_tool(tool_call, TOOL_HANDLERS):
def run_agent_loop(session, llm_client, TOOLS, TOOL_HANDLERS, max_iterations, on_tool_calls=None): def run_agent_loop(session, llm_client, TOOLS, TOOL_HANDLERS, max_iterations, on_tool_calls=None):
for step in range(max_iterations): for step in range(max_iterations):
print(f'[{_ts()}] Step {step + 1} — calling LLM...', flush=True) print(f'[{_ts()}] Step {step + 1} — calling LLM...', flush=True)
response = llm_client.chat(session.messages, tools=TOOLS)
# Ambil konfigurasi disable_reasoning dari personality karakter
# Default ke False jika tidak didefinisikan
personality = getattr(session, 'personality', {})
disable_reasoning = personality.get('disable_reasoning', False)
response = llm_client.chat(session.messages, tools=TOOLS, disable_reasoning=disable_reasoning)
if response.tool_calls: if response.tool_calls:
amsg = { amsg = {

View File

@ -19,7 +19,7 @@ class LLMClient:
self.timeout = timeout self.timeout = timeout
self.cancel_requested = False self.cancel_requested = False
def chat(self, messages, tools=None, on_stream_chunk=None): def chat(self, messages, tools=None, on_stream_chunk=None, disable_reasoning=False):
url = f"{self.base_url}/chat/completions" url = f"{self.base_url}/chat/completions"
payload = { payload = {
"model": self.model, "model": self.model,
@ -30,9 +30,10 @@ class LLMClient:
payload["tools"] = tools payload["tools"] = tools
payload["tool_choice"] = "auto" payload["tool_choice"] = "auto"
# Disable reasoning/thinking di level API bila didukung # Hanya kirim parameter reasoning jika diminta eksplisit
# OpenRouter & beberapa provider support ini # Beberapa model/provider justru error jika parameter ini ada tapi tidak didukung
payload["reasoning"] = {"enabled": False} if disable_reasoning:
payload["reasoning"] = {"enabled": False}
data = json.dumps(payload).encode('utf-8') data = json.dumps(payload).encode('utf-8')
req = urllib.request.Request(url, data=data, method='POST') req = urllib.request.Request(url, data=data, method='POST')
@ -102,11 +103,11 @@ class LLMClient:
# Stream content (text response) # Stream content (text response)
if 'content' in delta: if 'content' in delta:
chunk_text = delta['content'] chunk_text = delta['content'] or ""
full_content += chunk_text full_content += chunk_text
# Callback untuk streaming ke UI # Callback untuk streaming ke UI
if on_stream_chunk: if on_stream_chunk and chunk_text:
on_stream_chunk(chunk_text) on_stream_chunk(chunk_text)
# Build final response # Build final response