signalwire-agents 0.1.44__tar.gz → 0.1.46__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 (142) hide show
  1. {signalwire_agents-0.1.44/signalwire_agents.egg-info → signalwire_agents-0.1.46}/PKG-INFO +1 -1
  2. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/pyproject.toml +1 -1
  3. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/__init__.py +1 -1
  4. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/tools/registry.py +11 -1
  5. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent_base.py +24 -3
  6. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/prompt_mixin.py +18 -5
  7. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/web_mixin.py +4 -0
  8. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/swaig_function.py +8 -2
  9. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46/signalwire_agents.egg-info}/PKG-INFO +1 -1
  10. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/LICENSE +0 -0
  11. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/README.md +0 -0
  12. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/setup.cfg +0 -0
  13. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/setup.py +0 -0
  14. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/agent_server.py +0 -0
  15. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/agents/bedrock.py +0 -0
  16. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/__init__.py +0 -0
  17. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/build_search.py +0 -0
  18. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/config.py +0 -0
  19. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/core/__init__.py +0 -0
  20. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/core/agent_loader.py +0 -0
  21. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/core/argparse_helpers.py +0 -0
  22. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/core/dynamic_config.py +0 -0
  23. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/core/service_loader.py +0 -0
  24. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/execution/__init__.py +0 -0
  25. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/execution/datamap_exec.py +0 -0
  26. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/execution/webhook_exec.py +0 -0
  27. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/output/__init__.py +0 -0
  28. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/output/output_formatter.py +0 -0
  29. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/output/swml_dump.py +0 -0
  30. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/simulation/__init__.py +0 -0
  31. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/simulation/data_generation.py +0 -0
  32. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/simulation/data_overrides.py +0 -0
  33. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/simulation/mock_env.py +0 -0
  34. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/swaig_test_wrapper.py +0 -0
  35. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/test_swaig.py +0 -0
  36. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/cli/types.py +0 -0
  37. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/__init__.py +0 -0
  38. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/__init__.py +0 -0
  39. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/config/__init__.py +0 -0
  40. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/deployment/__init__.py +0 -0
  41. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
  42. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
  43. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/prompt/manager.py +0 -0
  44. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/routing/__init__.py +0 -0
  45. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/security/__init__.py +0 -0
  46. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/swml/__init__.py +0 -0
  47. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/tools/__init__.py +0 -0
  48. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/agent/tools/decorator.py +0 -0
  49. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/auth_handler.py +0 -0
  50. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/config_loader.py +0 -0
  51. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/contexts.py +0 -0
  52. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/data_map.py +0 -0
  53. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/function_result.py +0 -0
  54. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/logging_config.py +0 -0
  55. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/__init__.py +0 -0
  56. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
  57. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
  58. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/serverless_mixin.py +0 -0
  59. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
  60. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/state_mixin.py +0 -0
  61. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/mixins/tool_mixin.py +0 -0
  62. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/pom_builder.py +0 -0
  63. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/security/__init__.py +0 -0
  64. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/security/session_manager.py +0 -0
  65. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/security_config.py +0 -0
  66. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/skill_base.py +0 -0
  67. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/skill_manager.py +0 -0
  68. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/swml_builder.py +0 -0
  69. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/swml_handler.py +0 -0
  70. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/swml_renderer.py +0 -0
  71. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/core/swml_service.py +0 -0
  72. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/__init__.py +0 -0
  73. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/concierge.py +0 -0
  74. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/faq_bot.py +0 -0
  75. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/info_gatherer.py +0 -0
  76. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/receptionist.py +0 -0
  77. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/prefabs/survey.py +0 -0
  78. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/schema.json +0 -0
  79. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/__init__.py +0 -0
  80. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/document_processor.py +0 -0
  81. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/index_builder.py +0 -0
  82. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/pgvector_backend.py +0 -0
  83. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/query_processor.py +0 -0
  84. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/search_engine.py +0 -0
  85. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/search/search_service.py +0 -0
  86. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/README.md +0 -0
  87. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/__init__.py +0 -0
  88. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
  89. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -0
  90. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/api_ninjas_trivia/skill.py +0 -0
  91. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere/README.md +0 -0
  92. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere/__init__.py +0 -0
  93. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere/skill.py +0 -0
  94. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
  95. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -0
  96. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
  97. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datetime/README.md +0 -0
  98. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datetime/__init__.py +0 -0
  99. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/datetime/skill.py +0 -0
  100. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/joke/README.md +0 -0
  101. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/joke/__init__.py +0 -0
  102. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/joke/skill.py +0 -0
  103. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/math/README.md +0 -0
  104. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/math/__init__.py +0 -0
  105. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/math/skill.py +0 -0
  106. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/mcp_gateway/README.md +0 -0
  107. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/mcp_gateway/__init__.py +0 -0
  108. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/mcp_gateway/skill.py +0 -0
  109. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/native_vector_search/README.md +0 -0
  110. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/native_vector_search/__init__.py +0 -0
  111. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
  112. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/play_background_file/README.md +0 -0
  113. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/play_background_file/__init__.py +0 -0
  114. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/play_background_file/skill.py +0 -0
  115. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/registry.py +0 -0
  116. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/spider/README.md +0 -0
  117. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/spider/__init__.py +0 -0
  118. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/spider/skill.py +0 -0
  119. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/swml_transfer/README.md +0 -0
  120. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/swml_transfer/__init__.py +0 -0
  121. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
  122. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/weather_api/README.md +0 -0
  123. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/weather_api/__init__.py +0 -0
  124. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/weather_api/skill.py +0 -0
  125. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/web_search/README.md +0 -0
  126. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/web_search/__init__.py +0 -0
  127. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/web_search/skill.py +0 -0
  128. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
  129. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/wikipedia_search/__init__.py +0 -0
  130. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/skills/wikipedia_search/skill.py +0 -0
  131. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/utils/__init__.py +0 -0
  132. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/utils/pom_utils.py +0 -0
  133. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/utils/schema_utils.py +0 -0
  134. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/utils/token_generators.py +0 -0
  135. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/utils/validators.py +0 -0
  136. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/web/__init__.py +0 -0
  137. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents/web/web_service.py +0 -0
  138. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents.egg-info/SOURCES.txt +0 -0
  139. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents.egg-info/dependency_links.txt +0 -0
  140. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents.egg-info/entry_points.txt +0 -0
  141. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents.egg-info/requires.txt +0 -0
  142. {signalwire_agents-0.1.44 → signalwire_agents-0.1.46}/signalwire_agents.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 0.1.44
3
+ Version: 0.1.46
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 = "0.1.44"
7
+ version = "0.1.46"
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__ = "0.1.44"
21
+ __version__ = "0.1.46"
22
22
 
23
23
  # Import core classes for easier access
24
24
  from .core.agent_base import AgentBase
@@ -40,6 +40,8 @@ class ToolRegistry:
40
40
  handler: Callable,
41
41
  secure: bool = True,
42
42
  fillers: Optional[Dict[str, List[str]]] = None,
43
+ wait_file: Optional[str] = None,
44
+ wait_file_loops: Optional[int] = None,
43
45
  webhook_url: Optional[str] = None,
44
46
  required: Optional[List[str]] = None,
45
47
  **swaig_fields
@@ -53,7 +55,9 @@ class ToolRegistry:
53
55
  parameters: JSON Schema of parameters
54
56
  handler: Function to call when invoked
55
57
  secure: Whether to require token validation
56
- fillers: Optional dict mapping language codes to arrays of filler phrases
58
+ fillers: Optional dict mapping language codes to arrays of filler phrases (deprecated)
59
+ wait_file: Optional URL to audio file to play while function executes
60
+ wait_file_loops: Optional number of times to loop the wait_file
57
61
  webhook_url: Optional external webhook URL to use instead of local handling
58
62
  required: Optional list of required parameter names
59
63
  **swaig_fields: Additional SWAIG fields to include in function definition
@@ -71,6 +75,8 @@ class ToolRegistry:
71
75
  handler=handler,
72
76
  secure=secure,
73
77
  fillers=fillers,
78
+ wait_file=wait_file,
79
+ wait_file_loops=wait_file_loops,
74
80
  webhook_url=webhook_url,
75
81
  required=required,
76
82
  **swaig_fields
@@ -132,6 +138,8 @@ class ToolRegistry:
132
138
  parameters = tool_params_copy.pop("parameters", {})
133
139
  secure = tool_params_copy.pop("secure", True)
134
140
  fillers = tool_params_copy.pop("fillers", None)
141
+ wait_file = tool_params_copy.pop("wait_file", None)
142
+ wait_file_loops = tool_params_copy.pop("wait_file_loops", None)
135
143
  webhook_url = tool_params_copy.pop("webhook_url", None)
136
144
  required = tool_params_copy.pop("required", None)
137
145
 
@@ -143,6 +151,8 @@ class ToolRegistry:
143
151
  handler=attr.__get__(self.agent, cls), # Bind the method to this instance
144
152
  secure=secure,
145
153
  fillers=fillers,
154
+ wait_file=wait_file,
155
+ wait_file_loops=wait_file_loops,
146
156
  webhook_url=webhook_url,
147
157
  required=required,
148
158
  **tool_params_copy # Pass through any additional swaig_fields
@@ -562,6 +562,7 @@ class AgentBase(
562
562
  SWML document as a string
563
563
  """
564
564
  self.log.debug("_render_swml_called",
565
+ call_id=call_id,
565
566
  has_modifications=bool(modifications),
566
567
  use_ephemeral=bool(modifications and modifications.get("__use_ephemeral_agent")),
567
568
  has_dynamic_callback=bool(self._dynamic_config_callback))
@@ -618,6 +619,9 @@ class AgentBase(
618
619
  # Generate a call ID if needed
619
620
  if call_id is None:
620
621
  call_id = agent_to_use._session_manager.create_session()
622
+ self.log.debug("generated_call_id", call_id=call_id)
623
+ else:
624
+ self.log.debug("using_provided_call_id", call_id=call_id)
621
625
 
622
626
  # Start with any SWAIG query params that were set
623
627
  query_params = agent_to_use._swaig_query_params.copy() if agent_to_use._swaig_query_params else {}
@@ -679,6 +683,7 @@ class AgentBase(
679
683
  token = None
680
684
  if func.secure and call_id:
681
685
  token = agent_to_use._create_tool_token(tool_name=name, call_id=call_id)
686
+ self.log.debug("created_token_for_function", function=name, call_id=call_id, token_prefix=token[:20] if token else None)
682
687
 
683
688
  # Prepare function entry
684
689
  function_entry = {
@@ -687,9 +692,25 @@ class AgentBase(
687
692
  "parameters": func._ensure_parameter_structure()
688
693
  }
689
694
 
690
- # Add fillers if present
691
- if func.fillers:
692
- function_entry["fillers"] = func.fillers
695
+ # Add wait_file if present (SignalWire SWML expects wait_file, not fillers)
696
+ if hasattr(func, 'wait_file') and func.wait_file:
697
+ wait_file_url = func.wait_file
698
+ # If wait_file is a relative URL, convert it to absolute using agent's base URL
699
+ if wait_file_url and not wait_file_url.startswith(('http://', 'https://', '//')):
700
+ # Build full URL using the agent's base URL
701
+ base_url = agent_to_use._get_base_url(include_auth=False)
702
+ # Handle relative paths appropriately
703
+ if not wait_file_url.startswith('/'):
704
+ wait_file_url = '/' + wait_file_url
705
+ wait_file_url = f"{base_url}{wait_file_url}"
706
+ function_entry["wait_file"] = wait_file_url
707
+ elif func.fillers:
708
+ # Backward compatibility: use fillers as wait_file if wait_file not specified
709
+ function_entry["wait_file"] = func.fillers
710
+
711
+ # Add wait_file_loops if present
712
+ if hasattr(func, 'wait_file_loops') and func.wait_file_loops is not None:
713
+ function_entry["wait_file_loops"] = func.wait_file_loops
693
714
 
694
715
  # Handle webhook URL
695
716
  if hasattr(func, 'webhook_url') and func.webhook_url:
@@ -7,7 +7,13 @@ Licensed under the MIT License.
7
7
  See LICENSE file in the project root for full license information.
8
8
  """
9
9
 
10
- from typing import Optional, Union, List, Dict, Any
10
+ from typing import Optional, Union, List, Dict, Any, TYPE_CHECKING
11
+
12
+ if TYPE_CHECKING:
13
+ from signalwire_agents.core.agent_base import AgentBase
14
+ from signalwire_agents.core.contexts import ContextBuilder
15
+ else:
16
+ from signalwire_agents.core.contexts import ContextBuilder
11
17
 
12
18
 
13
19
  class PromptMixin:
@@ -112,7 +118,7 @@ class PromptMixin:
112
118
  bullets=sub_bullets if sub_bullets else None
113
119
  )
114
120
 
115
- def define_contexts(self, contexts=None) -> Optional['ContextBuilder']:
121
+ def define_contexts(self, contexts=None) -> Union['AgentBase', 'ContextBuilder']:
116
122
  """
117
123
  Define contexts and steps for this agent (alternative to POM/prompt)
118
124
 
@@ -132,15 +138,22 @@ class PromptMixin:
132
138
  return self
133
139
  else:
134
140
  # Legacy behavior - return ContextBuilder
135
- # Import here to avoid circular imports
136
- from signalwire_agents.core.contexts import ContextBuilder
137
-
138
141
  if self._contexts_builder is None:
139
142
  self._contexts_builder = ContextBuilder(self)
140
143
  self._contexts_defined = True
141
144
 
142
145
  return self._contexts_builder
143
146
 
147
+ @property
148
+ def contexts(self) -> 'ContextBuilder':
149
+ """
150
+ Get the ContextBuilder for this agent
151
+
152
+ Returns:
153
+ ContextBuilder instance for defining contexts
154
+ """
155
+ return self.define_contexts()
156
+
144
157
  def _validate_prompt_mode_exclusivity(self):
145
158
  """
146
159
  Validate that POM sections and raw text are not mixed in the main prompt
@@ -494,6 +494,10 @@ class WebMixin:
494
494
 
495
495
  # Get call_id from body if present
496
496
  call_id = body.get("call_id")
497
+ if not call_id and "call" in body:
498
+ # Sometimes it might be nested under 'call'
499
+ call_id = body.get("call", {}).get("call_id")
500
+ req_log.debug("extracted_call_id_from_body", call_id=call_id, body_keys=list(body.keys()))
497
501
  else:
498
502
  # Get call_id from query params for GET
499
503
  call_id = request.query_params.get("call_id")
@@ -30,6 +30,8 @@ class SWAIGFunction:
30
30
  parameters: Dict[str, Dict] = None,
31
31
  secure: bool = False,
32
32
  fillers: Optional[Dict[str, List[str]]] = None,
33
+ wait_file: Optional[str] = None,
34
+ wait_file_loops: Optional[int] = None,
33
35
  webhook_url: Optional[str] = None,
34
36
  required: Optional[List[str]] = None,
35
37
  **extra_swaig_fields
@@ -43,7 +45,9 @@ class SWAIGFunction:
43
45
  description: Human-readable description of the function
44
46
  parameters: Dictionary of parameters, keys are parameter names, values are param definitions
45
47
  secure: Whether this function requires token validation
46
- fillers: Optional dictionary of filler phrases by language code
48
+ fillers: Optional dictionary of filler phrases by language code (deprecated, use wait_file)
49
+ wait_file: Optional URL to audio file to play while function executes
50
+ wait_file_loops: Optional number of times to loop the wait_file
47
51
  webhook_url: Optional external webhook URL to use instead of local handling
48
52
  required: Optional list of required parameter names
49
53
  **extra_swaig_fields: Additional SWAIG fields to include in function definition
@@ -53,7 +57,9 @@ class SWAIGFunction:
53
57
  self.description = description
54
58
  self.parameters = parameters or {}
55
59
  self.secure = secure
56
- self.fillers = fillers
60
+ self.fillers = fillers # Keep for backward compatibility
61
+ self.wait_file = wait_file or fillers # Use wait_file if provided, else fall back to fillers
62
+ self.wait_file_loops = wait_file_loops
57
63
  self.webhook_url = webhook_url
58
64
  self.required = required or []
59
65
  self.extra_swaig_fields = extra_swaig_fields
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire_agents
3
- Version: 0.1.44
3
+ Version: 0.1.46
4
4
  Summary: SignalWire AI Agents SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT