signalwire-sdk 3.2.0.dev99__tar.gz → 3.3.0.dev103__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 (252) hide show
  1. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/PKG-INFO +2 -1
  2. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/README.md +1 -0
  3. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/pyproject.toml +1 -1
  4. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/__init__.py +1 -1
  5. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agent_server.py +1 -1
  6. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/__init__.py +3 -0
  7. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/client.py +91 -0
  8. signalwire_sdk-3.3.0.dev103/signalwire/signalwire/ai_chat/gateway.py +593 -0
  9. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/function_result.py +201 -29
  10. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_verbs_generated.py +55 -6
  11. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/document_processor.py +38 -1
  12. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/search_engine.py +54 -7
  13. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/PKG-INFO +2 -1
  14. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +1 -0
  15. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/LICENSE +0 -0
  16. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/sw-agent-init.1 +0 -0
  17. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/sw-search.1 +0 -0
  18. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/swaig-test.1 +0 -0
  19. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/setup.cfg +0 -0
  20. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/setup.py +0 -0
  21. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agents/__init__.py +0 -0
  22. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agents/bedrock.py +0 -0
  23. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/__init__.py +0 -0
  24. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/build_search.py +0 -0
  25. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/config.py +0 -0
  26. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/__init__.py +0 -0
  27. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
  28. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
  29. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
  30. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/service_loader.py +0 -0
  31. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/dokku.py +0 -0
  32. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/__init__.py +0 -0
  33. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
  34. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
  35. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/init_project.py +0 -0
  36. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/__init__.py +0 -0
  37. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
  38. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
  39. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
  40. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
  41. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
  42. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
  43. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
  44. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/test_swaig.py +0 -0
  45. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/types.py +0 -0
  46. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/__init__.py +0 -0
  47. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/_agent_host.py +0 -0
  48. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/__init__.py +0 -0
  49. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
  50. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
  51. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
  52. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
  53. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
  54. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
  55. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
  56. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
  57. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
  58. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
  59. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
  60. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
  61. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent_base.py +0 -0
  62. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/auth_handler.py +0 -0
  63. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/config_loader.py +0 -0
  64. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/contexts.py +0 -0
  65. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/data_map.py +0 -0
  66. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/logging_config.py +0 -0
  67. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/__init__.py +0 -0
  68. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
  69. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
  70. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
  71. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
  72. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
  73. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
  74. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
  75. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
  76. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
  77. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
  78. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/pom_builder.py +0 -0
  79. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
  80. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/__init__.py +0 -0
  81. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/security_utils.py +0 -0
  82. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/session_manager.py +0 -0
  83. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
  84. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
  85. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security_config.py +0 -0
  86. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/skill_base.py +0 -0
  87. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/skill_manager.py +0 -0
  88. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
  89. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_function.py +0 -0
  90. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
  91. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_builder.py +0 -0
  92. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_handler.py +0 -0
  93. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_renderer.py +0 -0
  94. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_service.py +0 -0
  95. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/web.py +0 -0
  96. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/livewire/__init__.py +0 -0
  97. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/livewire/plugins.py +0 -0
  98. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
  99. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
  100. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
  101. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
  102. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/__init__.py +0 -0
  103. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/pom.py +0 -0
  104. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/pom_tool.py +0 -0
  105. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/__init__.py +0 -0
  106. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/concierge.py +0 -0
  107. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
  108. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
  109. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/receptionist.py +0 -0
  110. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/survey.py +0 -0
  111. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/py.typed +0 -0
  112. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/__init__.py +0 -0
  113. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/call.py +0 -0
  114. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/client.py +0 -0
  115. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/constants.py +0 -0
  116. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/event.py +0 -0
  117. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/message.py +0 -0
  118. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
  119. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/__init__.py +0 -0
  120. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_base.py +0 -0
  121. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_pagination.py +0 -0
  122. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_request_options.py +0 -0
  123. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/call_handler.py +0 -0
  124. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/client.py +0 -0
  125. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
  126. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
  127. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
  128. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
  129. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
  130. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
  131. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
  132. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
  133. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
  134. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
  135. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
  136. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
  137. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
  138. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
  139. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
  140. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
  141. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
  142. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
  143. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
  144. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
  145. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
  146. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
  147. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
  148. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
  149. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
  150. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
  151. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
  152. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
  153. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
  154. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project.py +0 -0
  155. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
  156. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
  157. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
  158. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
  159. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
  160. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
  161. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
  162. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
  163. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
  164. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
  165. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
  166. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
  167. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
  168. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
  169. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
  170. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
  171. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video.py +0 -0
  172. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
  173. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
  174. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
  175. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
  176. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/schema.json +0 -0
  177. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/__init__.py +0 -0
  178. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/index_builder.py +0 -0
  179. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/migration.py +0 -0
  180. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/models.py +0 -0
  181. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/pgvector_backend.py +0 -0
  182. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/query_processor.py +0 -0
  183. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/search_service.py +0 -0
  184. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/README.md +0 -0
  185. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/__init__.py +0 -0
  186. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
  187. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
  188. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
  189. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
  190. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
  191. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
  192. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/README.md +0 -0
  193. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
  194. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
  195. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
  196. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
  197. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
  198. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/README.md +0 -0
  199. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
  200. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/skill.py +0 -0
  201. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
  202. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
  203. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
  204. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
  205. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
  206. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/README.md +0 -0
  207. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/__init__.py +0 -0
  208. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/skill.py +0 -0
  209. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/README.md +0 -0
  210. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/__init__.py +0 -0
  211. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/skill.py +0 -0
  212. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
  213. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
  214. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
  215. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
  216. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
  217. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
  218. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
  219. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
  220. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
  221. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/registry.py +0 -0
  222. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/README.md +0 -0
  223. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/__init__.py +0 -0
  224. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/skill.py +0 -0
  225. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
  226. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
  227. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
  228. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/README.md +0 -0
  229. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
  230. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
  231. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/README.md +0 -0
  232. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
  233. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill.py +0 -0
  234. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
  235. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
  236. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
  237. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
  238. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
  239. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/__init__.py +0 -0
  240. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/pom_utils.py +0 -0
  241. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/schema_utils.py +0 -0
  242. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/token_generators.py +0 -0
  243. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/url_validator.py +0 -0
  244. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/validators.py +0 -0
  245. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/web/__init__.py +0 -0
  246. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/web/web_service.py +0 -0
  247. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
  248. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
  249. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
  250. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
  251. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/tests/test_examples.py +0 -0
  252. {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/tests/test_mcp_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire-sdk
3
- Version: 3.2.0.dev99
3
+ Version: 3.3.0.dev103
4
4
  Summary: SignalWire SDK
5
5
  Author-email: SignalWire Team <info@signalwire.com>
6
6
  License: MIT
@@ -298,6 +298,7 @@ Guides are also available in the [`docs/`](docs/) directory:
298
298
  - [DataMap Guide](docs/datamap_guide.md) -- serverless API tools without webhooks
299
299
  - [LLM Parameters](docs/llm_parameters.md) -- temperature, top_p, barge confidence tuning
300
300
  - [SWML Service Guide](docs/swml_service_guide.md) -- low-level construction of SWML documents
301
+ - [AI Chat Gateway](docs/ai_chat_gateway.md) -- browser chat widgets without a token in the page
301
302
 
302
303
  ### Skills and Extensions
303
304
 
@@ -200,6 +200,7 @@ Guides are also available in the [`docs/`](docs/) directory:
200
200
  - [DataMap Guide](docs/datamap_guide.md) -- serverless API tools without webhooks
201
201
  - [LLM Parameters](docs/llm_parameters.md) -- temperature, top_p, barge confidence tuning
202
202
  - [SWML Service Guide](docs/swml_service_guide.md) -- low-level construction of SWML documents
203
+ - [AI Chat Gateway](docs/ai_chat_gateway.md) -- browser chat widgets without a token in the page
203
204
 
204
205
  ### Skills and Extensions
205
206
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire-sdk"
7
- version = "3.2.0.dev99"
7
+ version = "3.3.0.dev103"
8
8
  description = "SignalWire SDK"
9
9
  authors = [
10
10
  {name = "SignalWire Team", email = "info@signalwire.com"}
@@ -52,7 +52,7 @@ if TYPE_CHECKING:
52
52
  from signalwire.utils.schema_utils import SchemaValidationError
53
53
  from signalwire.web import WebService
54
54
 
55
- __version__ = "3.2.0.dev99"
55
+ __version__ = "3.3.0.dev103"
56
56
 
57
57
  # §6.2-python (owner decision: NO packaging split — one package, all deps required;
58
58
  # IMPORT-TIME behavior only): the agent/web symbols are lazy-imported via module
@@ -68,7 +68,7 @@ class AgentServer:
68
68
  self.app = FastAPI(
69
69
  title="SignalWire AI Agents",
70
70
  description="Hosted SignalWire AI Agents",
71
- version="3.2.0.dev99",
71
+ version="3.3.0.dev103",
72
72
  redirect_slashes=False,
73
73
  docs_url=None,
74
74
  redoc_url=None,
@@ -10,6 +10,7 @@ Async client for the SignalWire AI Chat service — see
10
10
  :mod:`signalwire.ai_chat.client` for the full protocol notes.
11
11
  """
12
12
 
13
+ from .gateway import ChatGateway, GatewayRejection
13
14
  from .client import (
14
15
  AIChatClient,
15
16
  AIChatError,
@@ -27,11 +28,13 @@ __all__ = [
27
28
  "AIChatClient",
28
29
  "AIChatError",
29
30
  "AuthenticationError",
31
+ "ChatGateway",
30
32
  "ChatInProgressError",
31
33
  "ChatLog",
32
34
  "ChatResponse",
33
35
  "ConversationInfo",
34
36
  "ConversationNotFoundError",
37
+ "GatewayRejection",
35
38
  "RateLimitError",
36
39
  "SummaryError",
37
40
  ]
@@ -38,6 +38,8 @@ Credentials come from the constructor or the standard environment variables
38
38
  """
39
39
 
40
40
  import os
41
+ from collections.abc import AsyncIterator
42
+ from contextlib import asynccontextmanager
41
43
  from dataclasses import dataclass, field
42
44
  from typing import Any
43
45
 
@@ -64,6 +66,14 @@ class AIChatError(Exception):
64
66
  """Base error for AI Chat service failures."""
65
67
 
66
68
  def __init__(self, code: int | None, message: str) -> None:
69
+ """Carry the service's own failure code alongside its message.
70
+
71
+ Args:
72
+ code: JSON-RPC error code from the service (e.g. -32001 unknown
73
+ conversation, -32009 rejected identity), or None when the
74
+ failure happened below the JSON-RPC layer (transport, bad HTTP).
75
+ message: Human-readable description from the service.
76
+ """
67
77
  self.code = code
68
78
  self.message = message
69
79
  super().__init__(f"[{code}] {message}")
@@ -107,6 +117,16 @@ _ERROR_BY_CODE = {
107
117
 
108
118
  @dataclass
109
119
  class ConversationInfo:
120
+ """A conversation as the service reports it after create/end.
121
+
122
+ Attributes:
123
+ id: Service-assigned conversation id. This, not anything the caller
124
+ supplies, is what later turns must reference.
125
+ status: Lifecycle state reported by the service (e.g. "created",
126
+ "ended").
127
+ initial_message: Opening line when the agent speaks first, else None.
128
+ """
129
+
110
130
  id: str
111
131
  status: str
112
132
  initial_message: str | None = None
@@ -114,6 +134,17 @@ class ConversationInfo:
114
134
 
115
135
  @dataclass
116
136
  class ChatResponse:
137
+ """One assistant turn.
138
+
139
+ Attributes:
140
+ text: What the assistant said — the only field a simple client needs.
141
+ conversation_id: Conversation this turn belongs to, for the next turn.
142
+ user_event: Structured payload the agent emitted alongside the text
143
+ (a SWML user_event), or None. This is how an agent asks the client
144
+ to do something — render a form, show a keypad — rather than only
145
+ speak.
146
+ """
147
+
117
148
  text: str
118
149
  conversation_id: str
119
150
  user_event: dict[str, Any] | None = None
@@ -121,6 +152,16 @@ class ChatResponse:
121
152
 
122
153
  @dataclass
123
154
  class ChatLog:
155
+ """A conversation transcript as the service stores it.
156
+
157
+ Attributes:
158
+ messages: Every turn, INCLUDING the substituted system prompt and tool
159
+ traffic. Do not relay this to a browser verbatim — see
160
+ `ChatGateway.visible_messages`, which reduces it to the dialogue.
161
+ call_timeline: Timed events for the conversation, when the service
162
+ reports them.
163
+ """
164
+
124
165
  messages: list[dict[str, Any]] = field(default_factory=list)
125
166
  call_timeline: list[dict[str, Any]] = field(default_factory=list)
126
167
 
@@ -139,6 +180,23 @@ class AIChatClient:
139
180
  url: str | None = None,
140
181
  session: aiohttp.ClientSession | None = None,
141
182
  ) -> None:
183
+ """Build a client for the AI Chat service.
184
+
185
+ Each argument falls back to its environment variable, so a configured
186
+ environment needs no arguments at all.
187
+
188
+ Args:
189
+ project: Project id. Falls back to `SIGNALWIRE_PROJECT_ID`.
190
+ token: API token. Falls back to `SIGNALWIRE_API_TOKEN`.
191
+ space: Space name used to build the default URL. Falls back to
192
+ `SIGNALWIRE_SPACE`.
193
+ url: Full service URL, overriding the one derived from `space`.
194
+ session: An existing aiohttp session to reuse. Omit and the client
195
+ creates (and owns, and closes) its own.
196
+
197
+ Raises:
198
+ ValueError: If no project id is available from either source.
199
+ """
142
200
  self._project = project or os.environ.get("SIGNALWIRE_PROJECT_ID", "")
143
201
  self._token = token or os.environ.get("SIGNALWIRE_API_TOKEN", "")
144
202
  space = space or os.environ.get("SIGNALWIRE_SPACE", "")
@@ -199,6 +257,11 @@ class AIChatClient:
199
257
  return self._session
200
258
 
201
259
  async def close(self) -> None:
260
+ """Close the HTTP session, if this client owns it.
261
+
262
+ A session passed in via `session=` belongs to the caller and is left
263
+ open; only one the client created for itself is closed here.
264
+ """
202
265
  if self._owns_session and self._session is not None:
203
266
  await self._session.close()
204
267
  self._session = None
@@ -237,6 +300,34 @@ class AIChatClient:
237
300
  result = body.get("result")
238
301
  return result if isinstance(result, dict) else {}
239
302
 
303
+ @asynccontextmanager
304
+ async def raw_post(
305
+ self, method: str, params: dict[str, Any]
306
+ ) -> AsyncIterator[aiohttp.ClientResponse]:
307
+ """Yield the response for one JSON-RPC call with its body unread.
308
+
309
+ For proxies that must stream the body through rather than buffer it.
310
+ The service pads a slow response with keepalive whitespace so
311
+ intermediaries do not sever the connection mid-turn; a proxy that
312
+ awaits the whole body absorbs that padding and reintroduces the very
313
+ timeout it exists to prevent. Iterate ``resp.content`` and forward the
314
+ chunks as they arrive.
315
+
316
+ The caller owns interpreting the result — including that a JSON-RPC
317
+ error arrives under HTTP 200 (see ``_request``). Prefer the typed
318
+ methods unless you are genuinely relaying bytes.
319
+ """
320
+ session = await self._ensure_session()
321
+ self._request_counter += 1
322
+ payload = {
323
+ "jsonrpc": "2.0",
324
+ "method": method,
325
+ "params": params,
326
+ "id": f"req-{self._request_counter}",
327
+ }
328
+ async with session.post(self.url, json=payload) as resp:
329
+ yield resp
330
+
240
331
  # ── API methods ──────────────────────────────────────────────────
241
332
 
242
333
  async def create_conversation(