kagent-adk 0.6.20__tar.gz → 0.6.21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kagent-adk might be problematic. Click here for more details.
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/PKG-INFO +1 -1
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/pyproject.toml +1 -1
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/_a2a.py +37 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/_agent_executor.py +6 -15
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/_session_service.py +2 -3
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/cli.py +11 -1
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/.gitignore +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/.python-version +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/README.md +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/_token.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/converters/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/converters/error_mappings.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/converters/event_converter.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/converters/part_converter.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/converters/request_converter.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/models/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/models/_openai.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/src/kagent/adk/types.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/unittests/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/unittests/converters/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/unittests/converters/test_event_converter.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/unittests/models/__init__.py +0 -0
- {kagent_adk-0.6.20 → kagent_adk-0.6.21}/tests/unittests/models/test_openai.py +0 -0
|
@@ -7,6 +7,7 @@ from typing import Callable
|
|
|
7
7
|
import httpx
|
|
8
8
|
from a2a.server.apps import A2AFastAPIApplication
|
|
9
9
|
from a2a.server.request_handlers import DefaultRequestHandler
|
|
10
|
+
from a2a.server.tasks import InMemoryTaskStore
|
|
10
11
|
from a2a.types import AgentCard
|
|
11
12
|
from agentsts.adk import ADKRunner, ADKSessionService, ADKSTSIntegration, ADKTokenPropagationPlugin
|
|
12
13
|
from fastapi import FastAPI, Request
|
|
@@ -118,6 +119,42 @@ class KAgentApp:
|
|
|
118
119
|
|
|
119
120
|
return app
|
|
120
121
|
|
|
122
|
+
def build_local(self) -> FastAPI:
|
|
123
|
+
session_service = InMemorySessionService()
|
|
124
|
+
|
|
125
|
+
def create_runner() -> Runner:
|
|
126
|
+
return Runner(
|
|
127
|
+
agent=self.root_agent,
|
|
128
|
+
app_name=self.app_name,
|
|
129
|
+
session_service=session_service,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
agent_executor = A2aAgentExecutor(
|
|
133
|
+
runner=create_runner,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
task_store = InMemoryTaskStore()
|
|
137
|
+
request_context_builder = KAgentRequestContextBuilder(task_store=task_store)
|
|
138
|
+
request_handler = DefaultRequestHandler(
|
|
139
|
+
agent_executor=agent_executor,
|
|
140
|
+
task_store=task_store,
|
|
141
|
+
request_context_builder=request_context_builder,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
a2a_app = A2AFastAPIApplication(
|
|
145
|
+
agent_card=self.agent_card,
|
|
146
|
+
http_handler=request_handler,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
faulthandler.enable()
|
|
150
|
+
app = FastAPI()
|
|
151
|
+
|
|
152
|
+
app.add_route("/health", methods=["GET"], route=health_check)
|
|
153
|
+
app.add_route("/thread_dump", methods=["GET"], route=thread_dump)
|
|
154
|
+
a2a_app.add_routes_to_app(app)
|
|
155
|
+
|
|
156
|
+
return app
|
|
157
|
+
|
|
121
158
|
async def test(self, task: str):
|
|
122
159
|
session_service = InMemorySessionService()
|
|
123
160
|
SESSION_ID = "12345"
|
|
@@ -273,21 +273,12 @@ class A2aAgentExecutor(AgentExecutor):
|
|
|
273
273
|
session_name = text[:20] + ("..." if len(text) > 20 else "")
|
|
274
274
|
break
|
|
275
275
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
"
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
if session_name is not None:
|
|
285
|
-
create_session_kwargs["session_name"] = session_name
|
|
286
|
-
|
|
287
|
-
# We pass the kwargs using ** to avoid issues with optional
|
|
288
|
-
# parameters like `session_name` that exist within
|
|
289
|
-
# `KAgentSessionService` but not in ADK `BaseSessionService`
|
|
290
|
-
session = await runner.session_service.create_session(**create_session_kwargs)
|
|
276
|
+
session = await runner.session_service.create_session(
|
|
277
|
+
app_name=runner.app_name,
|
|
278
|
+
user_id=user_id,
|
|
279
|
+
state={"session_name": session_name},
|
|
280
|
+
session_id=session_id,
|
|
281
|
+
)
|
|
291
282
|
|
|
292
283
|
# Update run_args with the new session_id
|
|
293
284
|
run_args["session_id"] = session.id
|
|
@@ -32,7 +32,6 @@ class KAgentSessionService(BaseSessionService):
|
|
|
32
32
|
user_id: str,
|
|
33
33
|
state: Optional[dict[str, Any]] = None,
|
|
34
34
|
session_id: Optional[str] = None,
|
|
35
|
-
session_name: Optional[str] = None,
|
|
36
35
|
) -> Session:
|
|
37
36
|
# Prepare request data
|
|
38
37
|
request_data = {
|
|
@@ -41,8 +40,8 @@ class KAgentSessionService(BaseSessionService):
|
|
|
41
40
|
}
|
|
42
41
|
if session_id:
|
|
43
42
|
request_data["id"] = session_id
|
|
44
|
-
if session_name:
|
|
45
|
-
request_data["name"] = session_name
|
|
43
|
+
if state and state.get("session_name"):
|
|
44
|
+
request_data["name"] = state.get("session_name", "")
|
|
46
45
|
|
|
47
46
|
# Make API call to create session
|
|
48
47
|
response = await self.client.post(
|
|
@@ -57,6 +57,9 @@ def run(
|
|
|
57
57
|
host: str = "127.0.0.1",
|
|
58
58
|
port: int = 8080,
|
|
59
59
|
workers: int = 1,
|
|
60
|
+
local: Annotated[
|
|
61
|
+
bool, typer.Option("--local", help="Run with in-memory session service (for local development)")
|
|
62
|
+
] = False,
|
|
60
63
|
):
|
|
61
64
|
app_cfg = KAgentConfig()
|
|
62
65
|
|
|
@@ -66,8 +69,15 @@ def run(
|
|
|
66
69
|
with open(os.path.join(working_dir, name, "agent-card.json"), "r") as f:
|
|
67
70
|
agent_card = json.load(f)
|
|
68
71
|
agent_card = AgentCard.model_validate(agent_card)
|
|
72
|
+
|
|
69
73
|
kagent_app = KAgentApp(root_agent, agent_card, app_cfg.url, app_cfg.app_name)
|
|
70
|
-
|
|
74
|
+
|
|
75
|
+
if local:
|
|
76
|
+
logger.info("Running in local mode with InMemorySessionService")
|
|
77
|
+
server = kagent_app.build_local()
|
|
78
|
+
else:
|
|
79
|
+
server = kagent_app.build()
|
|
80
|
+
|
|
71
81
|
configure_tracing(server)
|
|
72
82
|
|
|
73
83
|
uvicorn.run(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|