feat(local-llm): B1b-Plumbing — tools/tool_calls durch Adapter/Bridge/Brain-Client
Traegt OpenAI-Tool-Definitionen (tools) durch den ganzen lokalen Pfad und gibt tool_calls zurueck: - adapter.py: tools -> llama.cpp /v1/chat/completions (tool_choice=auto), message.tool_calls zurueck in llm_response. - aria_bridge.py: _local_llm + /internal/local-llm reichen tools durch, geben tool_calls zurueck. - local_llm.py: local_llm_chat akzeptiert tools, result enthaelt tool_calls. Inert bis der Brain-Tool-Loop (naechster Schritt) tools uebergibt — Verhalten unveraendert. Tool-Set + lokale Tool-Loop + Router-Anpassung folgen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+10
-4
@@ -3367,9 +3367,10 @@ class ARIABridge:
|
||||
_LLM_TIMEOUT_S = 30.0
|
||||
|
||||
async def _local_llm(self, messages: list, max_tokens: int = 512,
|
||||
temperature: float = 0.7, stop=None) -> dict:
|
||||
temperature: float = 0.7, stop=None, tools=None) -> dict:
|
||||
"""Schickt einen llm_request an den llm-adapter (Gamebox), wartet auf
|
||||
llm_response. Rueckgabe: {ok, content, model, elapsedMs} oder {ok:False, error}."""
|
||||
llm_response. tools (B1b) werden durchgereicht; tool_calls kommen zurueck.
|
||||
Rueckgabe: {ok, content, tool_calls, model, elapsedMs} oder {ok:False, error}."""
|
||||
if self.ws_rvs is None:
|
||||
return {"ok": False, "error": "RVS-Verbindung nicht aktiv"}
|
||||
if not isinstance(messages, list) or not messages:
|
||||
@@ -3388,8 +3389,10 @@ class ARIABridge:
|
||||
}
|
||||
if stop:
|
||||
req_payload["stop"] = stop
|
||||
logger.info("[rvs] llm_request → llm-adapter (id=%s, msgs=%d, max_tokens=%d)",
|
||||
request_id[:8], len(messages), max_tokens)
|
||||
if tools:
|
||||
req_payload["tools"] = tools
|
||||
logger.info("[rvs] llm_request → llm-adapter (id=%s, msgs=%d, max_tokens=%d, tools=%d)",
|
||||
request_id[:8], len(messages), max_tokens, len(tools) if tools else 0)
|
||||
ok = await self._send_to_rvs({
|
||||
"type": "llm_request",
|
||||
"payload": req_payload,
|
||||
@@ -3407,6 +3410,7 @@ class ARIABridge:
|
||||
return {
|
||||
"ok": True,
|
||||
"content": result.get("content", ""),
|
||||
"tool_calls": result.get("tool_calls"),
|
||||
"model": result.get("model"),
|
||||
"elapsedMs": result.get("elapsedMs"),
|
||||
}
|
||||
@@ -3885,9 +3889,11 @@ class ARIABridge:
|
||||
temperature = float(data.get("temperature"))
|
||||
except (TypeError, ValueError):
|
||||
temperature = 0.7
|
||||
_tools = data.get("tools") if isinstance(data.get("tools"), list) else None
|
||||
result = await self._local_llm(
|
||||
messages=messages, max_tokens=max_tokens,
|
||||
temperature=temperature, stop=data.get("stop"),
|
||||
tools=_tools,
|
||||
)
|
||||
status = 200 if result.get("ok") else 502
|
||||
await _send_response(writer, status, result)
|
||||
|
||||
Reference in New Issue
Block a user