signalwire-agents 1.0.9__tar.gz → 1.0.10__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 (149) hide show
  1. {signalwire_agents-1.0.9/signalwire_agents.egg-info → signalwire_agents-1.0.10}/PKG-INFO +1 -1
  2. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/pyproject.toml +1 -1
  3. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/__init__.py +1 -1
  4. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/serverless_mixin.py +67 -39
  5. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10/signalwire_agents.egg-info}/PKG-INFO +1 -1
  6. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/LICENSE +0 -0
  7. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/README.md +0 -0
  8. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/man/sw-agent-init.1 +0 -0
  9. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/man/sw-search.1 +0 -0
  10. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/man/swaig-test.1 +0 -0
  11. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/setup.cfg +0 -0
  12. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/setup.py +0 -0
  13. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/agent_server.py +0 -0
  14. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/agents/bedrock.py +0 -0
  15. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/__init__.py +0 -0
  16. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/build_search.py +0 -0
  17. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/config.py +0 -0
  18. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/core/__init__.py +0 -0
  19. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/core/agent_loader.py +0 -0
  20. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/core/argparse_helpers.py +0 -0
  21. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/core/dynamic_config.py +0 -0
  22. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/core/service_loader.py +0 -0
  23. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/execution/__init__.py +0 -0
  24. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/execution/datamap_exec.py +0 -0
  25. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/execution/webhook_exec.py +0 -0
  26. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/init_project.py +0 -0
  27. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/output/__init__.py +0 -0
  28. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/output/output_formatter.py +0 -0
  29. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/output/swml_dump.py +0 -0
  30. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/simulation/__init__.py +0 -0
  31. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/simulation/data_generation.py +0 -0
  32. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/simulation/data_overrides.py +0 -0
  33. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/simulation/mock_env.py +0 -0
  34. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/swaig_test_wrapper.py +0 -0
  35. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/test_swaig.py +0 -0
  36. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/cli/types.py +0 -0
  37. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/__init__.py +0 -0
  38. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/__init__.py +0 -0
  39. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/config/__init__.py +0 -0
  40. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/deployment/__init__.py +0 -0
  41. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
  42. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
  43. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/prompt/manager.py +0 -0
  44. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/routing/__init__.py +0 -0
  45. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/security/__init__.py +0 -0
  46. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/swml/__init__.py +0 -0
  47. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/tools/__init__.py +0 -0
  48. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/tools/decorator.py +0 -0
  49. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent/tools/registry.py +0 -0
  50. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/agent_base.py +0 -0
  51. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/auth_handler.py +0 -0
  52. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/config_loader.py +0 -0
  53. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/contexts.py +0 -0
  54. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/data_map.py +0 -0
  55. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/function_result.py +0 -0
  56. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/logging_config.py +0 -0
  57. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/__init__.py +0 -0
  58. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
  59. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
  60. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/prompt_mixin.py +0 -0
  61. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
  62. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/state_mixin.py +0 -0
  63. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/tool_mixin.py +0 -0
  64. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/mixins/web_mixin.py +0 -0
  65. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/pom_builder.py +0 -0
  66. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/security/__init__.py +0 -0
  67. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/security/session_manager.py +0 -0
  68. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/security_config.py +0 -0
  69. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/skill_base.py +0 -0
  70. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/skill_manager.py +0 -0
  71. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/swaig_function.py +0 -0
  72. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/swml_builder.py +0 -0
  73. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/swml_handler.py +0 -0
  74. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/swml_renderer.py +0 -0
  75. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/core/swml_service.py +0 -0
  76. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/__init__.py +0 -0
  77. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/concierge.py +0 -0
  78. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/faq_bot.py +0 -0
  79. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/info_gatherer.py +0 -0
  80. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/receptionist.py +0 -0
  81. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/prefabs/survey.py +0 -0
  82. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/schema.json +0 -0
  83. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/__init__.py +0 -0
  84. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/document_processor.py +0 -0
  85. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/index_builder.py +0 -0
  86. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/migration.py +0 -0
  87. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/models.py +0 -0
  88. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/pgvector_backend.py +0 -0
  89. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/query_processor.py +0 -0
  90. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/search_engine.py +0 -0
  91. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/search/search_service.py +0 -0
  92. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/README.md +0 -0
  93. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/__init__.py +0 -0
  94. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
  95. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -0
  96. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/api_ninjas_trivia/skill.py +0 -0
  97. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere/README.md +0 -0
  98. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere/__init__.py +0 -0
  99. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere/skill.py +0 -0
  100. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
  101. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -0
  102. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
  103. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datetime/README.md +0 -0
  104. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datetime/__init__.py +0 -0
  105. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/datetime/skill.py +0 -0
  106. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/joke/README.md +0 -0
  107. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/joke/__init__.py +0 -0
  108. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/joke/skill.py +0 -0
  109. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/math/README.md +0 -0
  110. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/math/__init__.py +0 -0
  111. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/math/skill.py +0 -0
  112. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/mcp_gateway/README.md +0 -0
  113. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/mcp_gateway/__init__.py +0 -0
  114. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/mcp_gateway/skill.py +0 -0
  115. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/native_vector_search/README.md +0 -0
  116. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/native_vector_search/__init__.py +0 -0
  117. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
  118. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/play_background_file/README.md +0 -0
  119. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/play_background_file/__init__.py +0 -0
  120. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/play_background_file/skill.py +0 -0
  121. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/registry.py +0 -0
  122. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/spider/README.md +0 -0
  123. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/spider/__init__.py +0 -0
  124. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/spider/skill.py +0 -0
  125. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/swml_transfer/README.md +0 -0
  126. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/swml_transfer/__init__.py +0 -0
  127. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
  128. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/weather_api/README.md +0 -0
  129. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/weather_api/__init__.py +0 -0
  130. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/weather_api/skill.py +0 -0
  131. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/web_search/README.md +0 -0
  132. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/web_search/__init__.py +0 -0
  133. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/web_search/skill.py +0 -0
  134. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
  135. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/wikipedia_search/__init__.py +0 -0
  136. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/skills/wikipedia_search/skill.py +0 -0
  137. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/utils/__init__.py +0 -0
  138. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/utils/pom_utils.py +0 -0
  139. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/utils/schema_utils.py +0 -0
  140. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/utils/token_generators.py +0 -0
  141. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/utils/validators.py +0 -0
  142. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/web/__init__.py +0 -0
  143. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents/web/web_service.py +0 -0
  144. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents.egg-info/SOURCES.txt +0 -0
  145. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents.egg-info/dependency_links.txt +0 -0
  146. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents.egg-info/entry_points.txt +0 -0
  147. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents.egg-info/requires.txt +0 -0
  148. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/signalwire_agents.egg-info/top_level.txt +0 -0
  149. {signalwire_agents-1.0.9 → signalwire_agents-1.0.10}/tests/test_examples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 1.0.9
3
+ Version: 1.0.10
4
4
  Summary: SignalWire AI Agents SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire_agents"
7
- version = "1.0.9"
7
+ version = "1.0.10"
8
8
  description = "SignalWire AI Agents SDK"
9
9
  authors = [
10
10
  {name = "SignalWire Team", email = "info@signalwire.com"}
@@ -18,7 +18,7 @@ A package for building AI agents using SignalWire's AI and SWML capabilities.
18
18
  from .core.logging_config import configure_logging
19
19
  configure_logging()
20
20
 
21
- __version__ = "1.0.9"
21
+ __version__ = "1.0.10"
22
22
 
23
23
  # Import core classes for easier access
24
24
  from .core.agent_base import AgentBase
@@ -258,63 +258,91 @@ class ServerlessMixin:
258
258
  def _handle_google_cloud_function_request(self, request):
259
259
  """
260
260
  Handle Google Cloud Functions specific requests
261
-
261
+
262
262
  Args:
263
263
  request: Flask request object from Google Cloud Functions
264
-
264
+
265
265
  Returns:
266
266
  Flask response object
267
267
  """
268
268
  try:
269
+ from urllib.parse import urlparse
270
+
269
271
  # Get the path from the request
270
272
  path = request.path.strip('/')
271
-
272
- if not path:
273
- # Root request - return SWML
274
- swml_response = self._render_swml()
275
- from flask import Response
273
+
274
+ # Try to detect and set the base URL from the request for webhook URLs
275
+ base_url = None
276
+ if hasattr(request, 'url') and request.url:
277
+ parsed = urlparse(request.url)
278
+ # Get the base URL without the path
279
+ base_url = f"{parsed.scheme}://{parsed.netloc}"
280
+
281
+ # Set the proxy URL base so SWML renders correct webhook URLs
282
+ if base_url and not getattr(self, '_proxy_url_base_from_env', False):
283
+ self._proxy_url_base = base_url
284
+
285
+ # Parse request body if present
286
+ args = {}
287
+ call_id = None
288
+ raw_data = None
289
+ function_name = None
290
+
291
+ if request.method == 'POST':
292
+ try:
293
+ if request.is_json:
294
+ raw_data = request.get_json()
295
+ else:
296
+ raw_data = json.loads(request.get_data(as_text=True))
297
+
298
+ call_id = raw_data.get("call_id")
299
+ function_name = raw_data.get("function")
300
+
301
+ # Extract arguments like the FastAPI handler does
302
+ if "argument" in raw_data and isinstance(raw_data["argument"], dict):
303
+ if "parsed" in raw_data["argument"] and isinstance(raw_data["argument"]["parsed"], list) and raw_data["argument"]["parsed"]:
304
+ args = raw_data["argument"]["parsed"][0]
305
+ elif "raw" in raw_data["argument"]:
306
+ try:
307
+ args = json.loads(raw_data["argument"]["raw"])
308
+ except Exception:
309
+ pass
310
+ except Exception:
311
+ # If parsing fails, continue with empty args
312
+ pass
313
+
314
+ # Determine if this is a SWAIG function call
315
+ # Case 1: /swaig endpoint with function name in body
316
+ # Case 2: /{function_name} path-based routing
317
+ # Case 3: Root path - return SWML
318
+
319
+ from flask import Response
320
+
321
+ if path in ('swaig', 'swaig/') and function_name:
322
+ # /swaig endpoint with function name in body
323
+ result = self._execute_swaig_function(function_name, args, call_id, raw_data)
276
324
  return Response(
277
- response=swml_response,
325
+ response=json.dumps(result) if isinstance(result, dict) else str(result),
278
326
  status=200,
279
327
  headers={"Content-Type": "application/json"}
280
328
  )
281
- else:
282
- # SWAIG function call
283
- args = {}
284
- call_id = None
285
- raw_data = None
286
-
287
- # Parse request data
288
- if request.method == 'POST':
289
- try:
290
- if request.is_json:
291
- raw_data = request.get_json()
292
- else:
293
- raw_data = json.loads(request.get_data(as_text=True))
294
-
295
- call_id = raw_data.get("call_id")
296
-
297
- # Extract arguments like the FastAPI handler does
298
- if "argument" in raw_data and isinstance(raw_data["argument"], dict):
299
- if "parsed" in raw_data["argument"] and isinstance(raw_data["argument"]["parsed"], list) and raw_data["argument"]["parsed"]:
300
- args = raw_data["argument"]["parsed"][0]
301
- elif "raw" in raw_data["argument"]:
302
- try:
303
- args = json.loads(raw_data["argument"]["raw"])
304
- except Exception:
305
- pass
306
- except Exception:
307
- # If parsing fails, continue with empty args
308
- pass
309
-
329
+ elif path and path not in ('', 'swaig', 'swaig/'):
330
+ # Path-based function routing (e.g., /say_hello)
310
331
  result = self._execute_swaig_function(path, args, call_id, raw_data)
311
- from flask import Response
312
332
  return Response(
313
333
  response=json.dumps(result) if isinstance(result, dict) else str(result),
314
334
  status=200,
315
335
  headers={"Content-Type": "application/json"}
316
336
  )
317
-
337
+ else:
338
+ # Root path or /swaig without function - return SWML
339
+ swml_response = self._render_swml()
340
+ return Response(
341
+ response=swml_response,
342
+ status=200,
343
+ headers={"Content-Type": "application/json"}
344
+ )
345
+
318
346
  except Exception as e:
319
347
  import logging
320
348
  logging.error(f"Error in Google Cloud Function request handler: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 1.0.9
3
+ Version: 1.0.10
4
4
  Summary: SignalWire AI Agents SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT