kagent-adk 0.6.18__py3-none-any.whl → 0.6.20__py3-none-any.whl

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/_a2a.py CHANGED
@@ -8,9 +8,11 @@ import httpx
8
8
  from a2a.server.apps import A2AFastAPIApplication
9
9
  from a2a.server.request_handlers import DefaultRequestHandler
10
10
  from a2a.types import AgentCard
11
+ from agentsts.adk import ADKRunner, ADKSessionService, ADKSTSIntegration, ADKTokenPropagationPlugin
11
12
  from fastapi import FastAPI, Request
12
13
  from fastapi.responses import PlainTextResponse
13
14
  from google.adk.agents import BaseAgent
15
+ from google.adk.apps import App
14
16
  from google.adk.runners import Runner
15
17
  from google.adk.sessions import InMemorySessionService
16
18
  from google.genai import types
@@ -21,7 +23,19 @@ from ._agent_executor import A2aAgentExecutor
21
23
  from ._session_service import KAgentSessionService
22
24
  from ._token import KAgentTokenService
23
25
 
26
+
24
27
  # --- Configure Logging ---
28
+ def configure_logging() -> None:
29
+ """Configure logging based on LOG_LEVEL environment variable."""
30
+ log_level = os.getenv("LOG_LEVEL", "INFO").upper()
31
+ numeric_level = getattr(logging, log_level, logging.INFO)
32
+ logging.basicConfig(
33
+ level=numeric_level,
34
+ )
35
+ logging.info(f"Logging configured with level: {log_level}")
36
+
37
+
38
+ configure_logging()
25
39
  logger = logging.getLogger(__name__)
26
40
 
27
41
 
@@ -39,6 +53,7 @@ def thread_dump(request: Request) -> PlainTextResponse:
39
53
 
40
54
 
41
55
  kagent_url_override = os.getenv("KAGENT_URL")
56
+ sts_well_known_uri = os.getenv("STS_WELL_KNOWN_URI")
42
57
 
43
58
 
44
59
  class KAgentApp:
@@ -61,10 +76,17 @@ class KAgentApp:
61
76
  )
62
77
  session_service = KAgentSessionService(http_client)
63
78
 
79
+ plugins = []
80
+ if sts_well_known_uri:
81
+ sts_integration = ADKSTSIntegration(sts_well_known_uri)
82
+ session_service = ADKSessionService(sts_integration, session_service)
83
+ plugins.append(ADKTokenPropagationPlugin(sts_integration))
84
+
85
+ adk_app = App(name=self.app_name, root_agent=self.root_agent, plugins=plugins)
86
+
64
87
  def create_runner() -> Runner:
65
- return Runner(
66
- agent=self.root_agent,
67
- app_name=self.app_name,
88
+ return ADKRunner(
89
+ app=adk_app,
68
90
  session_service=session_service,
69
91
  )
70
92
 
@@ -156,6 +156,10 @@ class A2aAgentExecutor(AgentExecutor):
156
156
  # Convert the a2a request to ADK run args
157
157
  run_args = convert_a2a_request_to_adk_run_args(context)
158
158
 
159
+ # set request headers to session state
160
+ headers = context.call_context.state.get("headers", {})
161
+ run_args["headers"] = headers
162
+
159
163
  # ensure the session exists
160
164
  session = await self._prepare_session(context, run_args, runner)
161
165
 
@@ -256,12 +260,35 @@ class A2aAgentExecutor(AgentExecutor):
256
260
  session_id=session_id,
257
261
  )
258
262
  if session is None:
259
- session = await runner.session_service.create_session(
260
- app_name=runner.app_name,
261
- user_id=user_id,
262
- state={},
263
- session_id=session_id,
264
- )
263
+ # Extract session name from the first TextPart (like the UI does)
264
+ session_name = None
265
+ if context.message and context.message.parts:
266
+ for part in context.message.parts:
267
+ # A2A parts have a .root property that contains the actual part (TextPart, FilePart, etc.)
268
+ if isinstance(part, Part):
269
+ root_part = part.root
270
+ if isinstance(root_part, TextPart) and root_part.text:
271
+ # Take first 20 chars + "..." if longer (matching UI behavior)
272
+ text = root_part.text.strip()
273
+ session_name = text[:20] + ("..." if len(text) > 20 else "")
274
+ break
275
+
276
+ # Prepare kwargs for create_session
277
+ create_session_kwargs = {
278
+ "app_name": runner.app_name,
279
+ "user_id": user_id,
280
+ "state": {},
281
+ "session_id": session_id,
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)
291
+
265
292
  # Update run_args with the new session_id
266
293
  run_args["session_id"] = session.id
267
294
 
@@ -32,6 +32,7 @@ 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,
35
36
  ) -> Session:
36
37
  # Prepare request data
37
38
  request_data = {
@@ -40,6 +41,8 @@ class KAgentSessionService(BaseSessionService):
40
41
  }
41
42
  if session_id:
42
43
  request_data["id"] = session_id
44
+ if session_name:
45
+ request_data["name"] = session_name
43
46
 
44
47
  # Make API call to create session
45
48
  response = await self.client.post(
kagent/adk/types.py CHANGED
@@ -101,7 +101,7 @@ class AgentConfig(BaseModel):
101
101
  for http_tool in self.http_tools: # add http tools
102
102
  tools.append(MCPToolset(connection_params=http_tool.params, tool_filter=http_tool.tools))
103
103
  if self.sse_tools:
104
- for sse_tool in self.sse_tools: # add stdio tools
104
+ for sse_tool in self.sse_tools: # add sse tools
105
105
  tools.append(MCPToolset(connection_params=sse_tool.params, tool_filter=sse_tool.tools))
106
106
  if self.remote_agents:
107
107
  for remote_agent in self.remote_agents: # Add remote agents as tools
@@ -119,7 +119,7 @@ class AgentConfig(BaseModel):
119
119
  httpx_client=client,
120
120
  )
121
121
 
122
- tools.append(AgentTool(agent=remote_a2a_agent, skip_summarization=True))
122
+ tools.append(AgentTool(agent=remote_a2a_agent))
123
123
 
124
124
  extra_headers = self.model.headers or {}
125
125
 
@@ -1,9 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kagent-adk
3
- Version: 0.6.18
3
+ Version: 0.6.20
4
4
  Summary: kagent-adk is an sdk for integrating adk agents with kagent
5
- Requires-Python: >=3.12.11
5
+ Requires-Python: >=3.11.0
6
6
  Requires-Dist: a2a-sdk>=0.3.1
7
+ Requires-Dist: agentsts-adk>=0.0.5
8
+ Requires-Dist: agentsts-core>=0.0.5
7
9
  Requires-Dist: aiofiles>=24.1.0
8
10
  Requires-Dist: anthropic[vertex]>=0.49.0
9
11
  Requires-Dist: anyio>=4.9.0
@@ -1,10 +1,10 @@
1
1
  kagent/adk/__init__.py,sha256=Cam9hwhl6Z1tZ3WJIB1KATX24MwRMpiyBLYF64DTqQI,182
2
- kagent/adk/_a2a.py,sha256=HvduKJlfuUIKzYuPs_U_9A-xuhcMdQutZTzdLNaGORc,4406
3
- kagent/adk/_agent_executor.py,sha256=f6jYkEvp-JEIW34T09Md4B31Di-GblnisqPs7pGFXDY,10136
4
- kagent/adk/_session_service.py,sha256=Hm2P0NgH8LnfVHmiT-z2AHPHAxPrT9W_6vNkFfIzRK8,5644
2
+ kagent/adk/_a2a.py,sha256=4bb8imLvJR1j8iyocjUlIc3o9ww58XNlWx_oNCb8DJY,5272
3
+ kagent/adk/_agent_executor.py,sha256=XU1ps53I6E3toI6cGM-K4cxQOqaz4cELh-biFlZM9lE,11504
4
+ kagent/adk/_session_service.py,sha256=M8RS0jk2YiPx-nDFSeRka7a25CFEe-Pzb0b18SrojXE,5761
5
5
  kagent/adk/_token.py,sha256=OL46m7U5vUTby1WWjVB7Jqzig4TWddzoAmLVLlfSdAg,2515
6
6
  kagent/adk/cli.py,sha256=Sdw9FXnUmeHfgJhdRDq1zpoNMf6GM7x35ZDz_OkQgJg,2963
7
- kagent/adk/types.py,sha256=z7V85oTsizUn5qV5_Ke1vlIuc1ZskzBhMCLFMj3rmVw,5712
7
+ kagent/adk/types.py,sha256=kcNpRwo6XcfMtgsOchgDuslYjMY-7pSlVnglihoUKss,5685
8
8
  kagent/adk/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  kagent/adk/converters/error_mappings.py,sha256=1KUJPS8VrcaTv6yUKb5Whg-S2XX8YGJmtTIeZqnqvuw,2769
10
10
  kagent/adk/converters/event_converter.py,sha256=WKQRqREB11TbgGp6U_--mmukvJJgew6-VEkrGBqGVA4,10519
@@ -12,7 +12,7 @@ kagent/adk/converters/part_converter.py,sha256=8Ej9xGRYW8YoPnExGDnEUw1beurCfkNhA
12
12
  kagent/adk/converters/request_converter.py,sha256=iTmTmhlnyRfuYyFi4WmpTSXPz22xjjotbe750j-CvYA,1072
13
13
  kagent/adk/models/__init__.py,sha256=mqD0JhS9kT1rMpFNLq5-qnjstpp6lzT9xADaOfjrUKY,78
14
14
  kagent/adk/models/_openai.py,sha256=EpZTqxAEaKhgi-98sqyQhArckWwoGh-C34fC8MyClHk,17187
15
- kagent_adk-0.6.18.dist-info/METADATA,sha256=EgJ1JbALuhUEojHlPvV_e-f-5kv2D0lxLIcbZYCnVl8,944
16
- kagent_adk-0.6.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
- kagent_adk-0.6.18.dist-info/entry_points.txt,sha256=a1Q2Inc9L0dvXWEkwnCdf9cfXdpX5Dl2Q6DhNWNjhxw,50
18
- kagent_adk-0.6.18.dist-info/RECORD,,
15
+ kagent_adk-0.6.20.dist-info/METADATA,sha256=B0AtUJ_qD2Pr6NT_vuJDBpJChk7skUbjIq7TAZ-e0Ng,1014
16
+ kagent_adk-0.6.20.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
17
+ kagent_adk-0.6.20.dist-info/entry_points.txt,sha256=a1Q2Inc9L0dvXWEkwnCdf9cfXdpX5Dl2Q6DhNWNjhxw,50
18
+ kagent_adk-0.6.20.dist-info/RECORD,,