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.
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/PKG-INFO +2 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/README.md +1 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/pyproject.toml +1 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/__init__.py +1 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agent_server.py +1 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/__init__.py +3 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/client.py +91 -0
- signalwire_sdk-3.3.0.dev103/signalwire/signalwire/ai_chat/gateway.py +593 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/function_result.py +201 -29
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_verbs_generated.py +55 -6
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/document_processor.py +38 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/search_engine.py +54 -7
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/PKG-INFO +2 -1
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +1 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/LICENSE +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/setup.cfg +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/setup.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agents/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/agents/bedrock.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/build_search.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/core/service_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/dokku.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/init_project.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/test_swaig.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/agent_base.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/contexts.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/logging_config.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/skill_base.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_renderer.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/swml_service.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/core/web.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/livewire/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/livewire/plugins.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/pom.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/pom/pom_tool.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/concierge.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/receptionist.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/prefabs/survey.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/py.typed +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/call.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/client.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/constants.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/message.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_base.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_pagination.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/_request_options.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/client.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/index_builder.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/pgvector_backend.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/query_processor.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/search/search_service.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/datetime/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/math/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/registry.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/spider/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/schema_utils.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/web/web_service.py +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/tests/test_examples.py +0 -0
- {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.
|
|
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
|
|
{signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/__init__.py
RENAMED
|
@@ -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.
|
|
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
|
{signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/__init__.py
RENAMED
|
@@ -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
|
]
|
{signalwire_sdk-3.2.0.dev99 → signalwire_sdk-3.3.0.dev103}/signalwire/signalwire/ai_chat/client.py
RENAMED
|
@@ -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(
|