google-adk-extras 0.2.3__tar.gz → 0.2.5__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.
Files changed (66) hide show
  1. {google_adk_extras-0.2.3/src/google_adk_extras.egg-info → google_adk_extras-0.2.5}/PKG-INFO +1 -1
  2. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/pyproject.toml +1 -1
  3. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/__init__.py +1 -1
  4. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/custom_agent_loader.py +15 -1
  5. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/enhanced_fastapi.py +41 -4
  6. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5/src/google_adk_extras.egg-info}/PKG-INFO +1 -1
  7. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/LICENSE +0 -0
  8. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/MANIFEST.in +0 -0
  9. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/README.md +0 -0
  10. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/agent-loading.md +0 -0
  11. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/credentials.md +0 -0
  12. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/examples.md +0 -0
  13. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/fastapi.md +0 -0
  14. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/getting-started.md +0 -0
  15. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/index.md +0 -0
  16. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/quickstarts.md +0 -0
  17. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/services.md +0 -0
  18. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/troubleshooting.md +0 -0
  19. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/docs/uris.md +0 -0
  20. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/README.md +0 -0
  21. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/consume_remote_a2a.py +0 -0
  22. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/credentials/google_oauth2.py +0 -0
  23. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/custom_loader.py +0 -0
  24. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/fastapi_app.py +0 -0
  25. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/programmatic_a2a_expose.py +0 -0
  26. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/runner_basic.py +0 -0
  27. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/services/artifacts_local.py +0 -0
  28. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/services/memory_yaml.py +0 -0
  29. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/examples/services/sessions_sql.py +0 -0
  30. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/mkdocs.yml +0 -0
  31. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/setup.cfg +0 -0
  32. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/setup.py +0 -0
  33. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/adk_builder.py +0 -0
  34. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/__init__.py +0 -0
  35. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/base_custom_artifact_service.py +0 -0
  36. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/local_folder_artifact_service.py +0 -0
  37. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/mongo_artifact_service.py +0 -0
  38. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/s3_artifact_service.py +0 -0
  39. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/artifacts/sql_artifact_service.py +0 -0
  40. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/__init__.py +0 -0
  41. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/base_custom_credential_service.py +0 -0
  42. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/github_oauth2_credential_service.py +0 -0
  43. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/google_oauth2_credential_service.py +0 -0
  44. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/http_basic_auth_credential_service.py +0 -0
  45. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/jwt_credential_service.py +0 -0
  46. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/microsoft_oauth2_credential_service.py +0 -0
  47. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/credentials/x_oauth2_credential_service.py +0 -0
  48. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/enhanced_adk_web_server.py +0 -0
  49. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/enhanced_runner.py +0 -0
  50. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/__init__.py +0 -0
  51. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/base_custom_memory_service.py +0 -0
  52. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/mongo_memory_service.py +0 -0
  53. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/redis_memory_service.py +0 -0
  54. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/sql_memory_service.py +0 -0
  55. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/memory/yaml_file_memory_service.py +0 -0
  56. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/__init__.py +0 -0
  57. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/base_custom_session_service.py +0 -0
  58. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/mongo_session_service.py +0 -0
  59. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/redis_session_service.py +0 -0
  60. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/sql_session_service.py +0 -0
  61. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras/sessions/yaml_file_session_service.py +0 -0
  62. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras.egg-info/SOURCES.txt +0 -0
  63. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras.egg-info/dependency_links.txt +0 -0
  64. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras.egg-info/requires.txt +0 -0
  65. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/src/google_adk_extras.egg-info/top_level.txt +0 -0
  66. {google_adk_extras-0.2.3 → google_adk_extras-0.2.5}/tests/test_a2a_helpers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-adk-extras
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: Production-ready services, credentials, and FastAPI wiring for Google ADK
5
5
  Home-page: https://github.com/DeadMeme5441/google-adk-extras
6
6
  Author: DeadMeme5441
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "google-adk-extras"
3
- version = "0.2.3"
3
+ version = "0.2.5"
4
4
  description = "Production-ready services, credentials, and FastAPI wiring for Google ADK"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -28,4 +28,4 @@ __all__ = [
28
28
  "CustomAgentLoader",
29
29
  ]
30
30
 
31
- __version__ = "0.2.3"
31
+ __version__ = "0.2.5"
@@ -146,6 +146,20 @@ class CustomAgentLoader(BaseAgentLoader):
146
146
  sorted_agents = sorted(agent_names)
147
147
  logger.debug("Total registered agents: %d", len(sorted_agents))
148
148
  return sorted_agents
149
+
150
+ # Compatibility with ADK's AgentLoader API used by AgentChangeEventHandler
151
+ def remove_agent_from_cache(self, name: str) -> None:
152
+ """No-op cache invalidation for compatibility with ADK hot reload.
153
+
154
+ ADK's file-watcher calls `agent_loader.remove_agent_from_cache(current_app)`
155
+ when files change. Our loader does not cache filesystem-loaded agents,
156
+ but we provide this method to satisfy the expected interface.
157
+
158
+ Args:
159
+ name: Agent name to invalidate (ignored here).
160
+ """
161
+ # Nothing to do; present for interface compatibility.
162
+ logger.debug("CustomAgentLoader.remove_agent_from_cache(%s) - no-op", name)
149
163
 
150
164
 
151
165
  def __repr__(self) -> str:
@@ -153,4 +167,4 @@ class CustomAgentLoader(BaseAgentLoader):
153
167
  with self._lock:
154
168
  registered_count = len(self._registered_agents)
155
169
 
156
- return f"CustomAgentLoader(registered={registered_count})"
170
+ return f"CustomAgentLoader(registered={registered_count})"
@@ -151,7 +151,7 @@ def get_enhanced_fast_api_app(
151
151
  agent_engine_id = agent_engine_id_or_resource_name
152
152
  return project, location, agent_engine_id
153
153
 
154
- # Build the Memory service (same as ADK)
154
+ # Build the Memory service (enhanced to recognize extras URIs)
155
155
  if memory_service_uri:
156
156
  if memory_service_uri.startswith("rag://"):
157
157
  from google.adk.memory.vertex_ai_rag_memory_service import VertexAiRagMemoryService
@@ -172,6 +172,19 @@ def get_enhanced_fast_api_app(
172
172
  location=location,
173
173
  agent_engine_id=agent_engine_id,
174
174
  )
175
+ elif memory_service_uri.startswith("yaml://"):
176
+ from .memory.yaml_file_memory_service import YamlFileMemoryService
177
+ base_directory = memory_service_uri.split("://")[1]
178
+ memory_service = YamlFileMemoryService(base_directory=base_directory)
179
+ elif memory_service_uri.startswith("redis://"):
180
+ from .memory.redis_memory_service import RedisMemoryService
181
+ memory_service = RedisMemoryService(connection_string=memory_service_uri) # type: ignore[arg-type]
182
+ elif memory_service_uri.startswith(("sqlite://", "postgresql://", "mysql://")):
183
+ from .memory.sql_memory_service import SQLMemoryService
184
+ memory_service = SQLMemoryService(database_url=memory_service_uri)
185
+ elif memory_service_uri.startswith("mongodb://"):
186
+ from .memory.mongo_memory_service import MongoMemoryService
187
+ memory_service = MongoMemoryService(connection_string=memory_service_uri)
175
188
  else:
176
189
  raise click.ClickException(
177
190
  "Unsupported memory service URI: %s" % memory_service_uri
@@ -179,7 +192,7 @@ def get_enhanced_fast_api_app(
179
192
  else:
180
193
  memory_service = InMemoryMemoryService()
181
194
 
182
- # Build the Session service (same as ADK)
195
+ # Build the Session service (enhanced to recognize extras URIs)
183
196
  if session_service_uri:
184
197
  if session_service_uri.startswith("agentengine://"):
185
198
  agent_engine_id_or_resource_name = session_service_uri.split("://")[1]
@@ -191,8 +204,18 @@ def get_enhanced_fast_api_app(
191
204
  location=location,
192
205
  agent_engine_id=agent_engine_id,
193
206
  )
207
+ elif session_service_uri.startswith("yaml://"):
208
+ from .sessions.yaml_file_session_service import YamlFileSessionService
209
+ base_directory = session_service_uri.split("://")[1]
210
+ session_service = YamlFileSessionService(base_directory=base_directory)
211
+ elif session_service_uri.startswith("redis://"):
212
+ from .sessions.redis_session_service import RedisSessionService
213
+ session_service = RedisSessionService(connection_string=session_service_uri) # type: ignore[arg-type]
214
+ elif session_service_uri.startswith("mongodb://"):
215
+ from .sessions.mongo_session_service import MongoSessionService
216
+ session_service = MongoSessionService(connection_string=session_service_uri)
194
217
  else:
195
- # Database session additional settings
218
+ # Treat remaining schemes as database URLs (sqlite/postgres/mysql)
196
219
  if session_db_kwargs is None:
197
220
  session_db_kwargs = {}
198
221
  session_service = DatabaseSessionService(
@@ -201,11 +224,25 @@ def get_enhanced_fast_api_app(
201
224
  else:
202
225
  session_service = InMemorySessionService()
203
226
 
204
- # Build the Artifact service (same as ADK)
227
+ # Build the Artifact service (enhanced to recognize extras URIs)
205
228
  if artifact_service_uri:
206
229
  if artifact_service_uri.startswith("gs://"):
207
230
  gcs_bucket = artifact_service_uri.split("://")[1]
208
231
  artifact_service = GcsArtifactService(bucket_name=gcs_bucket)
232
+ elif artifact_service_uri.startswith("local://"):
233
+ from .artifacts.local_folder_artifact_service import LocalFolderArtifactService
234
+ base_directory = artifact_service_uri.split("://")[1]
235
+ artifact_service = LocalFolderArtifactService(base_directory=base_directory)
236
+ elif artifact_service_uri.startswith("s3://"):
237
+ from .artifacts.s3_artifact_service import S3ArtifactService
238
+ bucket_name = artifact_service_uri.split("://")[1]
239
+ artifact_service = S3ArtifactService(bucket_name=bucket_name)
240
+ elif artifact_service_uri.startswith(("sqlite://", "postgresql://", "mysql://")):
241
+ from .artifacts.sql_artifact_service import SQLArtifactService
242
+ artifact_service = SQLArtifactService(database_url=artifact_service_uri)
243
+ elif artifact_service_uri.startswith("mongodb://"):
244
+ from .artifacts.mongo_artifact_service import MongoArtifactService
245
+ artifact_service = MongoArtifactService(connection_string=artifact_service_uri)
209
246
  else:
210
247
  raise click.ClickException(
211
248
  "Unsupported artifact service URI: %s" % artifact_service_uri
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-adk-extras
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: Production-ready services, credentials, and FastAPI wiring for Google ADK
5
5
  Home-page: https://github.com/DeadMeme5441/google-adk-extras
6
6
  Author: DeadMeme5441