Compare commits

...

3 Commits

3 changed files with 20 additions and 9 deletions

View File

@ -122,8 +122,12 @@ SESSION_DB_PATH = os.path.expanduser(
# ─── RAG (YAML) ───────────────────────────────────────────────────────────────── # ─── RAG (YAML) ─────────────────────────────────────────────────────────────────
RAG_PERSIST_DIR = os.getenv("RAG_PERSIST_DIR", default=_yaml_get("rag", "persist_dir", default="lancedb_data")) RAG_PERSIST_DIR = os.path.expanduser(
RAG_MODEL_PATH = os.getenv("RAG_MODEL_PATH", default=_yaml_get("rag", "model_path", default="")) os.getenv("RAG_PERSIST_DIR", default=_yaml_get("rag", "persist_dir", default="lancedb_data"))
)
RAG_MODEL_PATH = os.path.expanduser(
os.getenv("RAG_MODEL_PATH", default=_yaml_get("rag", "model_path", default=""))
)
# ─── Humanize Delay (YAML) ───────────────────────────────────────────────────── # ─── Humanize Delay (YAML) ─────────────────────────────────────────────────────

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,8 +30,9 @@ 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
if disable_reasoning:
payload["reasoning"] = {"enabled": False} payload["reasoning"] = {"enabled": False}
data = json.dumps(payload).encode('utf-8') data = json.dumps(payload).encode('utf-8')
@ -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