signalwire-sdk 3.7.1.dev128__tar.gz → 3.7.1.dev129__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.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/CHANGELOG.md +24 -0
- {signalwire_sdk-3.7.1.dev128/signalwire/signalwire_sdk.egg-info → signalwire_sdk-3.7.1.dev129}/PKG-INFO +1 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/agent_guide.md +120 -2
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/api_reference.md +50 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/pyproject.toml +1 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/__init__.py +1 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/agent_server.py +1 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_topics.py +15 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent_base.py +112 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/web_mixin.py +14 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129/signalwire/signalwire_sdk.egg-info}/PKG-INFO +1 -1
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/LICENSE +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/MANIFEST.in +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/ai_chat_gateway.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/architecture.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/bedrock_agent.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/cli_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/cloud_functions_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/configuration.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/contexts_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/datamap_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/developer_pain_points.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/llm_parameters.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/mcp_gateway_reference.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/mcp_integration.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/pgi_agent_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/programmatically_governed_inference.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/sdk_features.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/search_deployment.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/search_indexing.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/search_integration.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/search_overview.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/search_troubleshooting.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/security.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/skills_parameter_schema.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/skills_system.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/swaig_reference.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/swml_service_guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/third_party_skills.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/docs/web_service.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/Dockerfile.flexible +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/Dockerfile.k8s +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/advanced_datamap_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/auto_vivified_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/basic_swml_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/bedrock_agent_run.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/bedrock_agent_test.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/bedrock_server_test.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/bedrock_with_skills.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/call_flow_and_actions_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/comprehensive_dynamic_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/concierge_agent_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/contexts_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/custom_path_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/data_map_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_multi_instance_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_serverless_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_serverless_env_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_webhook_env_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/declarative_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/dynamic_info_gatherer_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/dynamic_swml_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/faq_bot_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/gather_info_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/gather_per_question_functions_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/info_gatherer_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/joke_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/joke_skill_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/k8s-deployment.yaml +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/kubernetes_ready_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/lambda_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/llm_params_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/mcp_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/mcp_gateway_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/multi_agent_server.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/multi_endpoint_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/pgvector_search_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/quickstart_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/quickstart_relay.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/quickstart_rest.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/receptionist_agent_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/record_call_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/relay_answer_and_welcome.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/room_and_sip_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/search_server_standalone.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/search_with_custom_formatter.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/session_and_state_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/sigmond_native_search.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/sigmond_remote_search.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/sigmond_simple.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/simple_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/simple_dynamic_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/simple_dynamic_enhanced.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/simple_static_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/skills_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/static_files/file.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/static_files/static_files/file.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/step_function_inheritance_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/survey_agent_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/swaig_features_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/swml_service_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/swml_service_routing_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/swmlservice_ai_sidecar.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/swmlservice_swaig_standalone.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/tap_example.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/web_search_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/web_search_multi_instance_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/wikipedia_demo.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/livewire/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/livewire/docs/migration-guide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/livewire/examples/livewire_basic_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/livewire/examples/livewire_handoff.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/livewire/examples/livewire_multi_tool.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/man/sw-agent-init.1 +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/man/sw-pydocs.1 +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/man/sw-search.1 +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/man/swaig-test.1 +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp/swml-schema-search/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp/swml-schema-search/swml_schema_mcp.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/.env.example +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/.gitignore +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/Dockerfile +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/certs/.gitignore +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/docker-compose.yml +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/examples/generate_cert.sh +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/mcp-docker.sh +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/sample_config.json +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/test/test_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/test/test_gateway.sh +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/mcp_gateway/test/todo_mcp.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/docs/call-methods.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/docs/client-reference.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/docs/events.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/docs/getting-started.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/docs/messaging.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/examples/relay_answer_and_welcome.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/examples/relay_dial_and_play.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/relay/examples/relay_ivr_connect.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/docs/calling.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/docs/client-reference.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/docs/fabric.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/docs/getting-started.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/docs/namespaces.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_10dlc_registration.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_bind_phone_to_swml_webhook.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_calling_ivr_and_ai.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_calling_play_and_record.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_datasphere_search.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_fabric_conferences_and_routing.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_fabric_subscribers_and_sip.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_fabric_swml_and_callflows.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_manage_resources.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_phone_number_management.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_queues_mfa_and_recordings.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/rest/examples/rest_video_rooms.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/setup.cfg +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/setup.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/AGENTS.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/__main__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/agents/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/agents/bedrock.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/ai_chat/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/ai_chat/client.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/ai_chat/gateway.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/ai_chat/handoff.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/build_search.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/config.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/core/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/core/service_loader.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/dokku.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/execution/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/init_project.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/output/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_agents_note.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_api.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_bundle.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_files.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/pydocs/_render.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/test_swaig.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/cli/types.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/_agent_host.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/_sync_handlers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/auth_handler.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/capabilities.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/config_loader.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/contexts.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/data_map.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/function_result.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/logging_config.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/pom_builder.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/post_prompt.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security/security_utils.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security/session_manager.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/security_config.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/semantic_gate.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/skill_base.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/skill_manager.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swaig_function.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swml_builder.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swml_handler.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swml_renderer.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swml_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/web.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/livewire/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/livewire/plugins.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/llms.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/pom/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/pom/pom.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/pom/pom_tool.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/concierge.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/receptionist.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/prefabs/survey.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/py.typed +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/call.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/client.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/constants.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/event.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/message.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/_base.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/_pagination.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/_request_options.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/call_handler.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/client.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/project.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/video.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/schema.json +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/document_processor.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/index_builder.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/migration.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/models.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/pgvector_backend.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/query_processor.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/search_engine.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/search/search_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datetime/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/datetime/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/joke/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/joke/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/joke/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/math/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/math/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/math/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/native_vector_search/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/registry.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/spider/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/spider/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/spider/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/weather_api/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/web_search/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/web_search/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/pom_utils.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/schema_utils.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/token_generators.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/url_validator.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/utils/validators.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/web/__init__.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/web/web_service.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tests/test_examples.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tests/test_mcp_integration.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/.env.example +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/Dockerfile +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/Dockerfile.multi +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/docker-compose.yml +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/fred.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/fred.sh +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/requirements.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/01-introduction.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/02-setup.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/03-basic-agent.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/04-wikipedia-skill.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/05-custom-functions.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/06-running-testing.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/appendix-complete-code.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/fred/tutorial/appendix-docker-deployment.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/.env.example +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/.gitignore +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/Dockerfile +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/check_docs.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/handlers.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/penny.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/penny.sh +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/requirements.txt +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/reservations.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/test_penny.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/01-why-guardrails.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/02-design-first.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/03-rules-first.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/04-the-shell.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/05-steps-and-scoping.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/06-tools-that-decide.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/07-gather-and-projection.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/08-the-verification-gate.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/09-people-and-endings.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/10-testing-and-running.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/appendix-complete-code.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/appendix-deployment.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/tutorial/appendix-technique-map.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/full-guardrails-agent/workflow.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/README.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/lesson1_first_agent.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/lesson2_knowledge_bases.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/lesson3_multi_agent_systems.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/lesson4_advanced_features.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/lesson5_extending_agents.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/pc_builder.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/sales_agent.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/sales_agent_with_search.py +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/sales_knowledge.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/sales_knowledge.swsearch +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/support_knowledge.md +0 -0
- {signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/tutorial/multi_agents/support_knowledge.swsearch +0 -0
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- `AgentBase.on_call_start()` registers handlers that run when the call
|
|
7
|
+
starts, before the AI's first turn: the counterpart of `on_call_end()`. It
|
|
8
|
+
wraps the platform's reserved `startup_hook` function. A handler receives
|
|
9
|
+
the SWAIG request and may return a `FunctionResult`: its actions run at
|
|
10
|
+
once, and its response text is added to the conversation as a system
|
|
11
|
+
message the model reads before it speaks. Handlers run in registration
|
|
12
|
+
order, and an exception is logged, not raised.
|
|
13
|
+
|
|
14
|
+
### Documentation
|
|
15
|
+
- How to reject a call from the per-call configuration callback
|
|
16
|
+
(`add_per_call_config()`): build the agent with `play` and `hangup`
|
|
17
|
+
post-answer verbs and no tools, and have the callback add the tools and
|
|
18
|
+
call `clear_post_answer_verbs()` only for a call it accepts. A callback
|
|
19
|
+
that fails leaves the call rejected. See "Rejecting a Call" in
|
|
20
|
+
`docs/agent_guide.md`.
|
|
21
|
+
- The SWAIG function webhook timeout: the platform waits up to 30 seconds to
|
|
22
|
+
connect and 120 seconds for a tool's reply, and sends the request again, up
|
|
23
|
+
to 3 times, after a failed or timed-out request or a 5xx. The caller hears
|
|
24
|
+
nothing meanwhile, so tools should answer quickly and send late results into the call with
|
|
25
|
+
`rest.calling.ai_message()`. See "Slow tools and the webhook timeout" in
|
|
26
|
+
`docs/agent_guide.md`.
|
|
3
27
|
## [3.7.1] - 2026-10-13
|
|
4
28
|
|
|
5
29
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: signalwire-sdk
|
|
3
|
-
Version: 3.7.1.
|
|
3
|
+
Version: 3.7.1.dev129
|
|
4
4
|
Summary: SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation.
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -346,6 +346,47 @@ An `on_swml_request` override still runs on the event loop, because it can chang
|
|
|
346
346
|
|
|
347
347
|
Set `SWML_SYNC_HANDLERS_INLINE=true` to run synchronous handlers and callbacks on the event loop instead, one at a time, as earlier releases did. The serverless entry points call handlers directly, as before.
|
|
348
348
|
|
|
349
|
+
#### Slow tools and the webhook timeout
|
|
350
|
+
|
|
351
|
+
SignalWire waits up to 30 seconds to connect to a SWAIG function's webhook and up to 120 seconds for its reply. When a request fails, times out or gets an error response (5xx), it sends the same request again, up to 3 more times, a second apart. So a slow or failing tool can run more than once, and the caller hears nothing from it in the meantime.
|
|
352
|
+
|
|
353
|
+
Answer within a few seconds. When the work takes longer, start it in the background, return at once with a reply that tells the model the result is on its way, and send the result into the call when it's ready with the REST API's `calling.ai_message` (`rest.calling.ai_message()` on a `RestClient`):
|
|
354
|
+
|
|
355
|
+
<!-- snippet: no-run illustrative fragment (`slow_order_lookup` is your own helper; sends a live REST request) -->
|
|
356
|
+
```python
|
|
357
|
+
import threading
|
|
358
|
+
|
|
359
|
+
from signalwire import AgentBase, FunctionResult, RestClient
|
|
360
|
+
|
|
361
|
+
rest = RestClient() # SIGNALWIRE_PROJECT_ID, SIGNALWIRE_API_TOKEN, SIGNALWIRE_SPACE
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
class OrderAgent(AgentBase):
|
|
365
|
+
@AgentBase.tool(
|
|
366
|
+
name="check_order",
|
|
367
|
+
description="Look up an order's shipping status",
|
|
368
|
+
parameters={"order_id": {"type": "string", "description": "The order number"}},
|
|
369
|
+
)
|
|
370
|
+
def check_order(self, args, raw_data):
|
|
371
|
+
call_id = raw_data.get("call_id")
|
|
372
|
+
order_id = args.get("order_id")
|
|
373
|
+
|
|
374
|
+
def finish():
|
|
375
|
+
status = slow_order_lookup(order_id) # may take 30 seconds
|
|
376
|
+
rest.calling.ai_message(
|
|
377
|
+
call_id,
|
|
378
|
+
role="system",
|
|
379
|
+
message_text=f"Order {order_id} status: {status}. Tell the caller.",
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
threading.Thread(target=finish, daemon=True).start()
|
|
383
|
+
return FunctionResult(
|
|
384
|
+
"The lookup has started. Tell the caller you're checking and will have it shortly."
|
|
385
|
+
)
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
The message goes into the AI session as the given role (`system`, `user` or `assistant`); `system` keeps the result from reading as something the caller said. Because a request can arrive twice, make tools safe to run twice: for example, key work that's already running by `call_id` and arguments, and join it instead of starting it again. A DataMap function's webhook has its own limits; see [Network Timeout and Retry Logic](datamap_guide.md#132-network-timeout-and-retry-logic) in the DataMap guide.
|
|
389
|
+
|
|
349
390
|
### 2. External Webhook Functions
|
|
350
391
|
|
|
351
392
|
External webhook functions allow you to delegate function execution to external services instead of handling them locally. This is useful when you want to:
|
|
@@ -1926,6 +1967,53 @@ class MyAgent(AgentBase):
|
|
|
1926
1967
|
agent.set_global_data(config)
|
|
1927
1968
|
```
|
|
1928
1969
|
|
|
1970
|
+
#### Rejecting a Call
|
|
1971
|
+
|
|
1972
|
+
The callback can't refuse the request, but it can decide what the call does. To turn away a call the agent shouldn't take, such as one whose caller can't be verified, build the agent so that by default the call hears a message and hangs up, and have the callback undo that only for a call it accepts:
|
|
1973
|
+
|
|
1974
|
+
1. In the constructor, add `play` and `hangup` with `add_post_answer_verb()`. They run after the call is answered and before the `ai` verb, so a call that keeps them hangs up before the AI starts. Define no tools on the agent itself.
|
|
1975
|
+
2. In the callback, for an accepted call, add the tools and other configuration to the request's copy, then call `clear_post_answer_verbs()` last.
|
|
1976
|
+
|
|
1977
|
+
This fails closed. The callback changes only the request's copy, so the next call starts from the goodbye again. If the callback raises, the SDK logs the error and renders the copy as it stands, and since clearing the verbs is the last step, a failure before it leaves the goodbye in place.
|
|
1978
|
+
|
|
1979
|
+
The callback runs for every request the call makes: the SWML fetch, and again for each tool call and the post-prompt summary. Only the SWML fetch carries the caller's data, such as the `userVariables` a browser or app client sends with `dial()`; a tool call carries the `call_id` and `global_data`, and `global_data` comes from the call, so it proves nothing. Verify on the SWML fetch, remember the `call_id` (`body["call"]["call_id"]` there, `body["call_id"]` on later requests), and check that on later requests, so a tool call from a call you didn't verify finds no tool to run.
|
|
1980
|
+
|
|
1981
|
+
<!-- snippet: no-run illustrative fragment (`signature_is_valid` is your own check) -->
|
|
1982
|
+
```python
|
|
1983
|
+
from signalwire import AgentBase, FunctionResult
|
|
1984
|
+
from signalwire.core.capabilities import user_variables
|
|
1985
|
+
|
|
1986
|
+
|
|
1987
|
+
class GatedAgent(AgentBase):
|
|
1988
|
+
def __init__(self):
|
|
1989
|
+
super().__init__(name="gated", route="/")
|
|
1990
|
+
# Callbacks run in worker threads; a set's add and `in` are safe there.
|
|
1991
|
+
# With more than one process, keep this in a shared store instead.
|
|
1992
|
+
self._verified: set[str] = set()
|
|
1993
|
+
self.prompt_add_section("Role", body="You are a helpful assistant.")
|
|
1994
|
+
# Fail closed: every call gets this unless configure() accepts it.
|
|
1995
|
+
self.add_post_answer_verb("play", {"url": "say:Sorry, this call can't be verified. Goodbye."})
|
|
1996
|
+
self.add_post_answer_verb("hangup", {})
|
|
1997
|
+
self.add_per_call_config(self.configure)
|
|
1998
|
+
|
|
1999
|
+
def configure(self, query_params, body_params, headers, agent):
|
|
2000
|
+
call = body_params.get("call")
|
|
2001
|
+
if isinstance(call, dict): # the SWML fetch that starts the call
|
|
2002
|
+
call_id = call.get("call_id")
|
|
2003
|
+
if call_id and signature_is_valid(user_variables(body_params)):
|
|
2004
|
+
self._verified.add(call_id)
|
|
2005
|
+
else: # a tool call or the summary
|
|
2006
|
+
call_id = body_params.get("call_id")
|
|
2007
|
+
if call_id not in self._verified:
|
|
2008
|
+
return # stays a goodbye with no tools
|
|
2009
|
+
agent.define_tool(
|
|
2010
|
+
"lookup", "Look up an account", {}, lambda args, raw: FunctionResult("...")
|
|
2011
|
+
)
|
|
2012
|
+
agent.clear_post_answer_verbs() # last: a failure above leaves the goodbye
|
|
2013
|
+
```
|
|
2014
|
+
|
|
2015
|
+
Since the call never reaches the `ai` verb, no tool, `on_call_start` or `on_call_end` handler runs for a rejected call. Forget a verified `call_id` when the call ends (in `on_call_end`, for example) or after a time limit.
|
|
2016
|
+
|
|
1929
2017
|
#### Error Handling
|
|
1930
2018
|
|
|
1931
2019
|
1. **Graceful Degradation**: fall back to a default configuration if the custom one fails.
|
|
@@ -2044,9 +2132,39 @@ These hooks are particularly useful for:
|
|
|
2044
2132
|
- Cleaning up temporary resources
|
|
2045
2133
|
- Saving session data for analytics
|
|
2046
2134
|
|
|
2135
|
+
#### `on_call_start` and `on_call_end`
|
|
2136
|
+
|
|
2137
|
+
`on_call_start()` and `on_call_end()` register handlers for the two hooks. Each can be used as a decorator or called directly, takes any number of handlers that run in registration order, and logs a handler's exception instead of raising it, so one failing handler doesn't stop the others.
|
|
2138
|
+
|
|
2139
|
+
<!-- snippet: no-run illustrative fragment (`lookup_caller` and `archive` are your own helpers) -->
|
|
2140
|
+
```python
|
|
2141
|
+
from signalwire import AgentBase, FunctionResult
|
|
2142
|
+
|
|
2143
|
+
agent = AgentBase(name="my-agent")
|
|
2144
|
+
|
|
2145
|
+
@agent.on_call_start
|
|
2146
|
+
def load_caller(raw_data):
|
|
2147
|
+
caller = lookup_caller(raw_data.get("caller_id_num"))
|
|
2148
|
+
result = FunctionResult(f"The caller is {caller.name}, a {caller.tier} customer.")
|
|
2149
|
+
return result.update_global_data({"customer_id": caller.id})
|
|
2150
|
+
|
|
2151
|
+
@agent.on_call_end
|
|
2152
|
+
def save_call(call_log, raw_data):
|
|
2153
|
+
archive(raw_data.get("call_id"), call_log)
|
|
2154
|
+
```
|
|
2155
|
+
|
|
2156
|
+
An `on_call_start` handler receives the SWAIG request (`call_id`, `global_data`, `caller_id_num` and the rest) and may return a `FunctionResult` or `None`. The platform runs the hook once, after the call is answered and before the AI's first turn, and uses its reply:
|
|
2157
|
+
|
|
2158
|
+
- The actions run at once, such as `update_global_data()` to give the call data before the conversation starts. Several handlers' actions run in registration order. `post_process` isn't used.
|
|
2159
|
+
- The response text is added to the conversation as a system message, so the model reads it before it speaks. Several handlers' texts are joined, one per line. Only a plain string response is used.
|
|
2160
|
+
|
|
2161
|
+
The platform waits for the hook before the AI starts, so a slow handler delays the greeting; keep it short (see [Slow tools and the webhook timeout](#slow-tools-and-the-webhook-timeout)).
|
|
2162
|
+
|
|
2163
|
+
An `on_call_end` handler receives the conversation (`call_log`) and the SWAIG request. Registering one turns on `swaig_post_conversation`, without which the hook carries no transcript. Its return value is ignored.
|
|
2164
|
+
|
|
2047
2165
|
#### Implementation
|
|
2048
2166
|
|
|
2049
|
-
To
|
|
2167
|
+
To write a hook yourself instead, define a SWAIG function with the reserved name. Use one or the other for each hook: `on_call_start()` and `on_call_end()` define `startup_hook` and `hangup_hook` themselves.
|
|
2050
2168
|
|
|
2051
2169
|
> **Note:** The SDK does not ship built-in session storage. The `update_state`,
|
|
2052
2170
|
> `get_state`, and `delete_state` methods in the following example are
|
|
@@ -2165,7 +2283,7 @@ def hangup_hook(self, args, raw_data):
|
|
|
2165
2283
|
2. **Error Handling**: Always implement proper error handling in hooks - failures shouldn't crash the voice session
|
|
2166
2284
|
3. **Timing**: `startup_hook` is called before the AI starts speaking to the caller
|
|
2167
2285
|
4. **Session Data**: Any data you need to persist across the session should be stored in external storage (Redis, database, etc.)
|
|
2168
|
-
5. **Return Values**: Both hooks must return a `FunctionResult` object
|
|
2286
|
+
5. **Return Values**: Both hooks must return a `FunctionResult` object. The `startup_hook`'s actions run and its response text is added to the conversation as a system message; the `hangup_hook`'s response is unused, since the call is over
|
|
2169
2287
|
|
|
2170
2288
|
### SIP Routing
|
|
2171
2289
|
|
|
@@ -720,7 +720,7 @@ agent.register_swaig_function(weather_tool.to_swaig_function())
|
|
|
720
720
|
|
|
721
721
|
### Session Lifecycle Hooks
|
|
722
722
|
|
|
723
|
-
SignalWire AI agents support special SWAIG functions that are automatically called at specific points in the conversation lifecycle:
|
|
723
|
+
SignalWire AI agents support special SWAIG functions that are automatically called at specific points in the conversation lifecycle. `on_call_start()` and `on_call_end()` (see [Event Handlers](#event-handlers)) define them for you; to write one yourself, use the reserved name:
|
|
724
724
|
|
|
725
725
|
##### `startup_hook`
|
|
726
726
|
Called when a new conversation/call begins.
|
|
@@ -1376,6 +1376,55 @@ class MyAgent(AgentBase):
|
|
|
1376
1376
|
print(f"Raw summary: {raw_text}")
|
|
1377
1377
|
```
|
|
1378
1378
|
|
|
1379
|
+
##### `on_call_start`
|
|
1380
|
+
|
|
1381
|
+
Register a handler that runs when the call starts, before the AI's first turn. Use as a decorator or call directly; handlers run in registration order. Wraps the platform's reserved `startup_hook` function.
|
|
1382
|
+
|
|
1383
|
+
<!-- snippet: no-compile signature-illustration -->
|
|
1384
|
+
```python
|
|
1385
|
+
def on_call_start(
|
|
1386
|
+
handler: Callable[[Dict[str, Any]], Optional[FunctionResult]]
|
|
1387
|
+
) -> Callable[[Dict[str, Any]], Optional[FunctionResult]]
|
|
1388
|
+
```
|
|
1389
|
+
|
|
1390
|
+
The handler receives `raw_data`, the SWAIG request (`call_id`, `global_data`, `caller_id_num` and the rest), and may return a `FunctionResult` or `None`:
|
|
1391
|
+
- Its actions run at once, in registration order across handlers. `post_process` isn't used.
|
|
1392
|
+
- Its response text is added to the conversation as a system message the model reads before it speaks. Several handlers' texts are joined, one per line. Only a plain string response is used.
|
|
1393
|
+
|
|
1394
|
+
An exception is logged, not raised, and that handler's result is dropped. The platform waits for the hook before the AI starts, so keep the handler short.
|
|
1395
|
+
|
|
1396
|
+
**Usage:**
|
|
1397
|
+
```python
|
|
1398
|
+
agent = AgentBase("my_agent")
|
|
1399
|
+
|
|
1400
|
+
@agent.on_call_start
|
|
1401
|
+
def greet_by_name(raw_data):
|
|
1402
|
+
name = raw_data.get("caller_id_name") or "the caller"
|
|
1403
|
+
return FunctionResult(f"The caller's name is {name}.")
|
|
1404
|
+
```
|
|
1405
|
+
|
|
1406
|
+
##### `on_call_end`
|
|
1407
|
+
|
|
1408
|
+
Register a handler that runs when the call ends, with the conversation. Use as a decorator or call directly; handlers run in registration order. Wraps the platform's reserved `hangup_hook` function, and turns on `swaig_post_conversation` so the hook carries the transcript.
|
|
1409
|
+
|
|
1410
|
+
<!-- snippet: no-compile signature-illustration -->
|
|
1411
|
+
```python
|
|
1412
|
+
def on_call_end(
|
|
1413
|
+
handler: Callable[[List[Dict[str, Any]], Dict[str, Any]], None]
|
|
1414
|
+
) -> Callable[[List[Dict[str, Any]], Dict[str, Any]], None]
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
The handler receives `call_log` (the conversation) and `raw_data` (the SWAIG request). Its return value is ignored, and an exception is logged, not raised.
|
|
1418
|
+
|
|
1419
|
+
**Usage:**
|
|
1420
|
+
```python
|
|
1421
|
+
agent = AgentBase("my_agent")
|
|
1422
|
+
|
|
1423
|
+
@agent.on_call_end
|
|
1424
|
+
def log_length(call_log, raw_data):
|
|
1425
|
+
print(f"Call {raw_data.get('call_id')} ended after {len(call_log)} entries")
|
|
1426
|
+
```
|
|
1427
|
+
|
|
1379
1428
|
##### `on_debug_event`
|
|
1380
1429
|
|
|
1381
1430
|
Register a handler for debug webhook events. Use as a decorator. Requires `enable_debug_events()` to be called first.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "signalwire-sdk"
|
|
7
|
-
version = "3.7.1.
|
|
7
|
+
version = "3.7.1.dev129"
|
|
8
8
|
description = "SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation."
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "SignalWire Team", email = "info@signalwire.com"}
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/__init__.py
RENAMED
|
@@ -59,7 +59,7 @@ if TYPE_CHECKING:
|
|
|
59
59
|
from signalwire.utils.schema_utils import SchemaValidationError
|
|
60
60
|
from signalwire.web import WebService
|
|
61
61
|
|
|
62
|
-
__version__ = "3.7.1.
|
|
62
|
+
__version__ = "3.7.1.dev129"
|
|
63
63
|
|
|
64
64
|
# §6.2-python (owner decision: NO packaging split — one package, all deps required;
|
|
65
65
|
# IMPORT-TIME behavior only): the agent/web symbols are lazy-imported via module
|
|
@@ -135,7 +135,13 @@ Per-call configuration: `set_dynamic_config_callback()` configures a copy of
|
|
|
135
135
|
the agent for each request, from its query parameters, body and headers, for
|
|
136
136
|
per-tenant prompts, voices and tools. The callback runs in a worker thread,
|
|
137
137
|
at the same time as other calls' callbacks. Don't keep per-caller state on the
|
|
138
|
-
shared agent instance.
|
|
138
|
+
shared agent instance. To turn a call away, build the agent with `play` and
|
|
139
|
+
`hangup` post-answer verbs and no tools, and have the callback add the tools
|
|
140
|
+
and call `clear_post_answer_verbs()` only for a call it accepts.
|
|
141
|
+
|
|
142
|
+
Call start and end: `on_call_start()` runs handlers before the AI's first
|
|
143
|
+
turn, and their `FunctionResult` text and actions reach the call;
|
|
144
|
+
`on_call_end()` runs handlers with the transcript when the call ends.
|
|
139
145
|
|
|
140
146
|
Configuration precedence: constructor arguments, then the config file, then
|
|
141
147
|
environment variables, then defaults.
|
|
@@ -175,6 +181,9 @@ environment variables, then defaults.
|
|
|
175
181
|
"signalwire.AgentBase.set_dynamic_config_callback",
|
|
176
182
|
"signalwire.AgentBase.get_app",
|
|
177
183
|
"signalwire.AgentBase.on_summary",
|
|
184
|
+
"signalwire.AgentBase.on_call_start",
|
|
185
|
+
"signalwire.AgentBase.on_call_end",
|
|
186
|
+
"signalwire.AgentBase.add_per_call_config",
|
|
178
187
|
),
|
|
179
188
|
related=("prompts", "tools", "contexts", "skills", "pgi", "deploy"),
|
|
180
189
|
)
|
|
@@ -273,6 +282,11 @@ Or give the schema yourself, with a handler that takes `(args, raw_data)`:
|
|
|
273
282
|
- `gates=[SemanticGate(...)]` adds semantic gates: yes/no questions a
|
|
274
283
|
decision model answers about the call before the platform runs the tool.
|
|
275
284
|
A platform release without semantic gates runs the tool ungated.
|
|
285
|
+
- Answer within a few seconds: the caller hears nothing while a tool runs.
|
|
286
|
+
SignalWire waits up to 120 seconds for a tool's webhook, and sends the
|
|
287
|
+
request again after a timeout, a failed connection or a 5xx, so a slow tool
|
|
288
|
+
can run more than once. Start long work in the background, return at once, and
|
|
289
|
+
send the result into the call with `rest.calling.ai_message()`.
|
|
276
290
|
""",
|
|
277
291
|
docs=(
|
|
278
292
|
("docs/swaig_reference.md", "Every FunctionResult method and action"),
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/signalwire/signalwire/core/agent_base.py
RENAMED
|
@@ -749,6 +749,118 @@ class AgentBase( # type: ignore[misc] # intentional diamond: WebMixin's serve/
|
|
|
749
749
|
handler=_hangup_handler,
|
|
750
750
|
)
|
|
751
751
|
|
|
752
|
+
def on_call_start(
|
|
753
|
+
self, handler: Callable[[dict[str, Any]], "FunctionResult | None"]
|
|
754
|
+
) -> Callable[[dict[str, Any]], "FunctionResult | None"]:
|
|
755
|
+
"""
|
|
756
|
+
Register a handler that runs when the call starts, before the AI speaks.
|
|
757
|
+
|
|
758
|
+
Usable as a decorator or called directly. Handlers run in registration
|
|
759
|
+
order and receive:
|
|
760
|
+
|
|
761
|
+
raw_data (dict): the complete SWAIG request, including `call_id`,
|
|
762
|
+
`global_data` and the caller's details.
|
|
763
|
+
|
|
764
|
+
This wraps the platform's reserved `startup_hook` function, the
|
|
765
|
+
counterpart of the `hangup_hook` behind `on_call_end`. That name is
|
|
766
|
+
internal: the platform calls it once, after the call is answered and
|
|
767
|
+
before the AI's first turn, and never offers it to the model as
|
|
768
|
+
something it could choose.
|
|
769
|
+
|
|
770
|
+
The platform waits for the hook before the AI starts, so a slow
|
|
771
|
+
handler delays the greeting; it waits up to 120 seconds for a
|
|
772
|
+
function's reply and sends the request again after a timeout or a
|
|
773
|
+
5xx. Keep handlers short; start long work in
|
|
774
|
+
the background and send its result into the call later (see
|
|
775
|
+
`rest.calling.ai_message`).
|
|
776
|
+
|
|
777
|
+
A handler may return a `FunctionResult`, or None. What the platform
|
|
778
|
+
does with the hook's reply:
|
|
779
|
+
- its actions run at once, in registration order across handlers
|
|
780
|
+
(for example `update_global_data()` to give the call data before
|
|
781
|
+
the conversation starts);
|
|
782
|
+
- its response text is added to the conversation as a system message
|
|
783
|
+
the model reads before its first turn. The texts of several handlers
|
|
784
|
+
are joined, one per line. Only a plain string response is used.
|
|
785
|
+
`post_process` is not used: the combined result runs its actions at
|
|
786
|
+
once. The platform adds every hook reply to the conversation, so a
|
|
787
|
+
hook whose handlers return no text still adds a short placeholder
|
|
788
|
+
line, as any function with an empty reply does.
|
|
789
|
+
|
|
790
|
+
Exceptions are caught and logged rather than raised, and that
|
|
791
|
+
handler's result is dropped, so a failing handler can't stop the call
|
|
792
|
+
from starting or the other handlers from running.
|
|
793
|
+
|
|
794
|
+
Args:
|
|
795
|
+
handler: Callable taking (raw_data), returning a FunctionResult or
|
|
796
|
+
None.
|
|
797
|
+
|
|
798
|
+
Returns:
|
|
799
|
+
The handler, so this can be used as a decorator.
|
|
800
|
+
|
|
801
|
+
Example:
|
|
802
|
+
@agent.on_call_start
|
|
803
|
+
def load_caller(raw_data):
|
|
804
|
+
caller = lookup(raw_data.get("caller_id_num"))
|
|
805
|
+
result = FunctionResult(f"The caller's name is {caller.name}.")
|
|
806
|
+
return result.update_global_data({"customer_id": caller.id})
|
|
807
|
+
"""
|
|
808
|
+
handlers = self.__dict__.get("_call_start_handlers")
|
|
809
|
+
if handlers is None:
|
|
810
|
+
# Rebind rather than mutate -- see the ephemeral-copy contract on
|
|
811
|
+
# _create_ephemeral_copy; this list is not in the copied set.
|
|
812
|
+
self._call_start_handlers = [handler]
|
|
813
|
+
self._ensure_call_start_hook()
|
|
814
|
+
else:
|
|
815
|
+
self._call_start_handlers = [*handlers, handler]
|
|
816
|
+
return handler
|
|
817
|
+
|
|
818
|
+
def _ensure_call_start_hook(self) -> None:
|
|
819
|
+
"""Register the reserved startup_hook once."""
|
|
820
|
+
|
|
821
|
+
def _startup_handler(args: Any, raw_data: Any) -> FunctionResult:
|
|
822
|
+
raw = raw_data or {}
|
|
823
|
+
combined = FunctionResult()
|
|
824
|
+
texts: list[str] = []
|
|
825
|
+
for callback in self.__dict__.get("_call_start_handlers") or []:
|
|
826
|
+
name = getattr(callback, "__name__", repr(callback))
|
|
827
|
+
# Isolated per handler, as in _ensure_call_end_hook: one failure
|
|
828
|
+
# must not stop the others.
|
|
829
|
+
try:
|
|
830
|
+
result = callback(raw)
|
|
831
|
+
except Exception as exc:
|
|
832
|
+
self.log.error(
|
|
833
|
+
"call_start_handler_failed", error=str(exc), handler=name
|
|
834
|
+
)
|
|
835
|
+
continue
|
|
836
|
+
if result is None:
|
|
837
|
+
continue
|
|
838
|
+
if not isinstance(result, FunctionResult):
|
|
839
|
+
self.log.warning(
|
|
840
|
+
"call_start_handler_result_ignored",
|
|
841
|
+
handler=name,
|
|
842
|
+
result_type=type(result).__name__,
|
|
843
|
+
)
|
|
844
|
+
continue
|
|
845
|
+
if isinstance(result.response, str):
|
|
846
|
+
if result.response:
|
|
847
|
+
texts.append(result.response)
|
|
848
|
+
elif result.response:
|
|
849
|
+
self.log.warning(
|
|
850
|
+
"call_start_handler_structured_response_ignored",
|
|
851
|
+
handler=name,
|
|
852
|
+
)
|
|
853
|
+
combined.add_actions(result.action)
|
|
854
|
+
combined.set_response("\n".join(texts))
|
|
855
|
+
return combined
|
|
856
|
+
|
|
857
|
+
self.define_tool(
|
|
858
|
+
name="startup_hook",
|
|
859
|
+
description="Internal: fires when the call starts.",
|
|
860
|
+
parameters={},
|
|
861
|
+
handler=_startup_handler,
|
|
862
|
+
)
|
|
863
|
+
|
|
752
864
|
def on_debug_event(self, handler: Callable[..., Any]) -> Callable[..., Any]:
|
|
753
865
|
"""
|
|
754
866
|
Register a handler for debug webhook events.
|
|
@@ -1696,6 +1696,20 @@ class WebMixin(_HostTyped): # type: ignore[misc] # _HostTyped is object at run
|
|
|
1696
1696
|
`set_dynamic_config_callback` requires them to find and manually chain
|
|
1697
1697
|
each other's callbacks, and silently drops one when they don't.
|
|
1698
1698
|
|
|
1699
|
+
Rejecting a call: a callback can't refuse the request, but it can
|
|
1700
|
+
decide what the call does. Build the agent to fail closed -- in the
|
|
1701
|
+
constructor, `add_post_answer_verb("play", {"url": "say:..."})` and
|
|
1702
|
+
`add_post_answer_verb("hangup", {})`, and no tools -- so the call
|
|
1703
|
+
hears the message and hangs up before the `ai` verb runs. For a call
|
|
1704
|
+
the callback accepts, add the tools to `agent` and call
|
|
1705
|
+
`agent.clear_post_answer_verbs()` last. A callback that raises is
|
|
1706
|
+
logged and the copy is rendered as it stands, so a failure before
|
|
1707
|
+
that last step leaves the goodbye in place. Callbacks run for every
|
|
1708
|
+
request of the call (the SWML fetch, each tool call, the summary),
|
|
1709
|
+
and only the SWML fetch carries the caller's data (such as
|
|
1710
|
+
`userVariables`): verify there, remember the `call_id`, and check it
|
|
1711
|
+
on later requests. See "Rejecting a Call" in docs/agent_guide.md.
|
|
1712
|
+
|
|
1699
1713
|
Args:
|
|
1700
1714
|
callback: Callable taking (query_params, body_params, headers, agent).
|
|
1701
1715
|
`agent` is the EPHEMERAL per-request copy; configure that,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: signalwire-sdk
|
|
3
|
-
Version: 3.7.1.
|
|
3
|
+
Version: 3.7.1.dev129
|
|
4
4
|
Summary: SignalWire SDK for AI voice agents, live call control (RELAY) and REST. Run sw-pydocs for its documentation.
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/advanced_datamap_demo.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/auto_vivified_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/call_flow_and_actions_demo.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/comprehensive_dynamic_agent.py
RENAMED
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/concierge_agent_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_serverless_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/datasphere_webhook_env_demo.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/dynamic_swml_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/info_gatherer_example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_sdk-3.7.1.dev128 → signalwire_sdk-3.7.1.dev129}/examples/kubernetes_ready_agent.py
RENAMED
|
File without changes
|