forked from agentclientprotocol/python-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrouter.py
More file actions
90 lines (80 loc) · 2.96 KB
/
router.py
File metadata and controls
90 lines (80 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from __future__ import annotations
from typing import Any
from ..exceptions import RequestError
from ..interfaces import Agent
from ..meta import AGENT_METHODS
from ..router import MessageRouter
from ..schema import (
AuthenticateRequest,
CancelNotification,
ForkSessionRequest,
InitializeRequest,
ListSessionsRequest,
LoadSessionRequest,
NewSessionRequest,
PromptRequest,
ResumeSessionRequest,
SetSessionConfigOptionRequest,
SetSessionModelRequest,
SetSessionModeRequest,
)
from ..utils import normalize_result
__all__ = ["build_agent_router"]
def build_agent_router(agent: Agent, use_unstable_protocol: bool = False) -> MessageRouter:
router = MessageRouter(use_unstable_protocol=use_unstable_protocol)
router.route_request(AGENT_METHODS["initialize"], InitializeRequest, agent, "initialize")
router.route_request(AGENT_METHODS["session_new"], NewSessionRequest, agent, "new_session")
router.route_request(
AGENT_METHODS["session_load"],
LoadSessionRequest,
agent,
"load_session",
adapt_result=normalize_result,
)
router.route_request(AGENT_METHODS["session_list"], ListSessionsRequest, agent, "list_sessions", unstable=True)
router.route_request(
AGENT_METHODS["session_set_mode"],
SetSessionModeRequest,
agent,
"set_session_mode",
adapt_result=normalize_result,
)
router.route_request(AGENT_METHODS["session_prompt"], PromptRequest, agent, "prompt")
router.route_request(
AGENT_METHODS["session_set_model"],
SetSessionModelRequest,
agent,
"set_session_model",
adapt_result=normalize_result,
unstable=True,
)
router.route_request(
AGENT_METHODS["session_set_config_option"],
SetSessionConfigOptionRequest,
agent,
"set_config_option",
adapt_result=normalize_result,
)
router.route_request(
AGENT_METHODS["authenticate"],
AuthenticateRequest,
agent,
"authenticate",
adapt_result=normalize_result,
)
router.route_request(AGENT_METHODS["session_fork"], ForkSessionRequest, agent, "fork_session", unstable=True)
router.route_request(AGENT_METHODS["session_resume"], ResumeSessionRequest, agent, "resume_session", unstable=True)
router.route_notification(AGENT_METHODS["session_cancel"], CancelNotification, agent, "cancel")
@router.handle_extension_request
async def _handle_extension_request(name: str, payload: dict[str, Any]) -> Any:
ext = getattr(agent, "ext_method", None)
if ext is None:
raise RequestError.method_not_found(f"_{name}")
return await ext(name, payload)
@router.handle_extension_notification
async def _handle_extension_notification(name: str, payload: dict[str, Any]) -> None:
ext = getattr(agent, "ext_notification", None)
if ext is None:
return
await ext(name, payload)
return router