fix: use direct agent api per request
This commit is contained in:
parent
7d270d3d31
commit
7d58dd1caf
14 changed files with 285 additions and 400 deletions
|
|
@ -2,8 +2,10 @@ from __future__ import annotations
|
|||
|
||||
import asyncio
|
||||
import os
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlsplit, urlunsplit
|
||||
|
||||
import structlog
|
||||
from dotenv import load_dotenv
|
||||
|
|
@ -63,7 +65,6 @@ from core.protocol import (
|
|||
)
|
||||
from core.settings import SettingsManager
|
||||
from core.store import InMemoryStore, SQLiteStore, StateStore
|
||||
from sdk.agent_api_wrapper import AgentApiWrapper
|
||||
from sdk.interface import PlatformClient, PlatformError
|
||||
from sdk.mock import MockPlatformClient
|
||||
from sdk.prototype_state import PrototypeStateStore
|
||||
|
|
@ -89,8 +90,7 @@ def build_event_dispatcher(platform: PlatformClient, store: StateStore) -> Event
|
|||
auth_mgr = AuthManager(platform, store)
|
||||
settings_mgr = SettingsManager(platform, store)
|
||||
prototype_state = getattr(platform, "_prototype_state", None)
|
||||
agent_api = getattr(platform, "_agent_api", None)
|
||||
agent_base_url = os.environ.get("AGENT_BASE_URL", "http://127.0.0.1:8000")
|
||||
agent_base_url = _agent_base_url_from_env()
|
||||
dispatcher = EventDispatcher(
|
||||
platform=platform, chat_mgr=chat_mgr, auth_mgr=auth_mgr, settings_mgr=settings_mgr
|
||||
)
|
||||
|
|
@ -98,19 +98,32 @@ def build_event_dispatcher(platform: PlatformClient, store: StateStore) -> Event
|
|||
register_matrix_handlers(
|
||||
dispatcher,
|
||||
store=store,
|
||||
agent_api=agent_api,
|
||||
prototype_state=prototype_state,
|
||||
agent_base_url=agent_base_url,
|
||||
)
|
||||
return dispatcher
|
||||
|
||||
|
||||
def _normalize_agent_base_url(url: str) -> str:
|
||||
parsed = urlsplit(url)
|
||||
path = re.sub(r"(?:/v1)?/agent_ws(?:/[^/]+)?/?$", "", parsed.path.rstrip("/"))
|
||||
return urlunsplit((parsed.scheme, parsed.netloc, path, "", ""))
|
||||
|
||||
|
||||
def _agent_base_url_from_env() -> str:
|
||||
if base_url := os.environ.get("AGENT_BASE_URL"):
|
||||
return base_url
|
||||
if ws_url := os.environ.get("AGENT_WS_URL"):
|
||||
return _normalize_agent_base_url(ws_url)
|
||||
return "http://127.0.0.1:8000"
|
||||
|
||||
|
||||
def _build_platform_from_env() -> PlatformClient:
|
||||
backend = os.environ.get("MATRIX_PLATFORM_BACKEND", "mock").strip().lower()
|
||||
if backend == "real":
|
||||
ws_url = os.environ["AGENT_WS_URL"]
|
||||
return RealPlatformClient(
|
||||
agent_api=AgentApiWrapper(agent_id="matrix-bot", base_url=ws_url),
|
||||
agent_id="matrix-bot",
|
||||
agent_base_url=_agent_base_url_from_env(),
|
||||
prototype_state=PrototypeStateStore(),
|
||||
platform="matrix",
|
||||
)
|
||||
|
|
@ -128,8 +141,7 @@ def build_runtime(
|
|||
auth_mgr = AuthManager(platform, store)
|
||||
settings_mgr = SettingsManager(platform, store)
|
||||
prototype_state = getattr(platform, "_prototype_state", None)
|
||||
agent_api = getattr(platform, "_agent_api", None)
|
||||
agent_base_url = os.environ.get("AGENT_BASE_URL", "http://127.0.0.1:8000")
|
||||
agent_base_url = _agent_base_url_from_env()
|
||||
dispatcher = EventDispatcher(
|
||||
platform=platform, chat_mgr=chat_mgr, auth_mgr=auth_mgr, settings_mgr=settings_mgr
|
||||
)
|
||||
|
|
@ -138,7 +150,6 @@ def build_runtime(
|
|||
dispatcher,
|
||||
client=client,
|
||||
store=store,
|
||||
agent_api=agent_api,
|
||||
prototype_state=prototype_state,
|
||||
agent_base_url=agent_base_url,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ def register_matrix_handlers(
|
|||
dispatcher: EventDispatcher,
|
||||
client=None,
|
||||
store=None,
|
||||
agent_api=None,
|
||||
prototype_state=None,
|
||||
agent_base_url: str = "http://127.0.0.1:8000",
|
||||
) -> None:
|
||||
|
|
@ -64,11 +63,11 @@ def register_matrix_handlers(
|
|||
dispatcher.register(IncomingCallback, "toggle_skill", handle_toggle_skill)
|
||||
dispatcher.register(IncomingCommand, "*", handle_unknown_command)
|
||||
|
||||
if agent_api is not None and prototype_state is not None:
|
||||
if prototype_state is not None:
|
||||
dispatcher.register(
|
||||
IncomingCommand,
|
||||
"save",
|
||||
make_handle_save(agent_api, store, prototype_state),
|
||||
make_handle_save(None, store, prototype_state),
|
||||
)
|
||||
dispatcher.register(IncomingCommand, "load", make_handle_load(store, prototype_state))
|
||||
dispatcher.register(IncomingCommand, "context", make_handle_context(store, prototype_state))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue