diff --git a/lib/agent_loop.py b/lib/agent_loop.py index cdbef1a..c924fae 100644 --- a/lib/agent_loop.py +++ b/lib/agent_loop.py @@ -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): for step in range(max_iterations): 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: amsg = { diff --git a/services/llm_client.py b/services/llm_client.py index ec0df4a..c19046c 100644 --- a/services/llm_client.py +++ b/services/llm_client.py @@ -19,7 +19,7 @@ class LLMClient: self.timeout = timeout 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" payload = { "model": self.model, @@ -30,9 +30,10 @@ class LLMClient: payload["tools"] = tools payload["tool_choice"] = "auto" - # Disable reasoning/thinking di level API bila didukung - # OpenRouter & beberapa provider support ini - payload["reasoning"] = {"enabled": False} + # Hanya kirim parameter reasoning jika diminta eksplisit + # Beberapa model/provider justru error jika parameter ini ada tapi tidak didukung + if disable_reasoning: + payload["reasoning"] = {"enabled": False} data = json.dumps(payload).encode('utf-8') req = urllib.request.Request(url, data=data, method='POST') @@ -102,11 +103,11 @@ class LLMClient: # Stream content (text response) if 'content' in delta: - chunk_text = delta['content'] + chunk_text = delta['content'] or "" full_content += chunk_text # Callback untuk streaming ke UI - if on_stream_chunk: + if on_stream_chunk and chunk_text: on_stream_chunk(chunk_text) # Build final response