signalwire-sdk 3.7.2.dev132__tar.gz → 3.7.2.dev134__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/CHANGELOG.md +31 -0
  2. {signalwire_sdk-3.7.2.dev132/signalwire/signalwire_sdk.egg-info → signalwire_sdk-3.7.2.dev134}/PKG-INFO +1 -1
  3. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/cli_guide.md +1 -0
  4. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/search_indexing.md +3 -1
  5. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/search_overview.md +12 -10
  6. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/pyproject.toml +1 -1
  7. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/__init__.py +1 -1
  8. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/agent_server.py +1 -1
  9. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/build_search.py +20 -0
  10. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/document_processor.py +2 -5
  11. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/index_builder.py +10 -0
  12. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/models.py +26 -0
  13. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/query_processor.py +91 -0
  14. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/search_engine.py +71 -8
  15. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/search_service.py +10 -3
  16. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/native_vector_search/skill.py +8 -2
  17. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134/signalwire/signalwire_sdk.egg-info}/PKG-INFO +1 -1
  18. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/LICENSE +0 -0
  19. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/MANIFEST.in +0 -0
  20. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/README.md +0 -0
  21. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/agent_guide.md +0 -0
  22. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/ai_chat_gateway.md +0 -0
  23. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/api_reference.md +0 -0
  24. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/architecture.md +0 -0
  25. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/bedrock_agent.md +0 -0
  26. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/cloud_functions_guide.md +0 -0
  27. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/configuration.md +0 -0
  28. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/contexts_guide.md +0 -0
  29. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/datamap_guide.md +0 -0
  30. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/developer_pain_points.md +0 -0
  31. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/llm_parameters.md +0 -0
  32. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/mcp_gateway_reference.md +0 -0
  33. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/mcp_integration.md +0 -0
  34. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/pgi_agent_guide.md +0 -0
  35. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/programmatically_governed_inference.md +0 -0
  36. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/sdk_features.md +0 -0
  37. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/search_deployment.md +0 -0
  38. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/search_integration.md +0 -0
  39. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/search_troubleshooting.md +0 -0
  40. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/security.md +0 -0
  41. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/skills_parameter_schema.md +0 -0
  42. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/skills_system.md +0 -0
  43. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/swaig_reference.md +0 -0
  44. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/swml_service_guide.md +0 -0
  45. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/third_party_skills.md +0 -0
  46. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/docs/web_service.md +0 -0
  47. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/Dockerfile.flexible +0 -0
  48. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/Dockerfile.k8s +0 -0
  49. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/README.md +0 -0
  50. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/advanced_datamap_demo.py +0 -0
  51. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/auto_vivified_example.py +0 -0
  52. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/basic_swml_service.py +0 -0
  53. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/bedrock_agent_run.py +0 -0
  54. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/bedrock_agent_test.py +0 -0
  55. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/bedrock_server_test.py +0 -0
  56. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/bedrock_with_skills.py +0 -0
  57. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/call_flow_and_actions_demo.py +0 -0
  58. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/comprehensive_dynamic_agent.py +0 -0
  59. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/concierge_agent_example.py +0 -0
  60. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/contexts_demo.py +0 -0
  61. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/custom_path_agent.py +0 -0
  62. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/data_map_demo.py +0 -0
  63. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/datasphere_multi_instance_demo.py +0 -0
  64. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/datasphere_serverless_demo.py +0 -0
  65. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/datasphere_serverless_env_demo.py +0 -0
  66. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/datasphere_webhook_env_demo.py +0 -0
  67. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/declarative_agent.py +0 -0
  68. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/dynamic_info_gatherer_example.py +0 -0
  69. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/dynamic_swml_service.py +0 -0
  70. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/faq_bot_agent.py +0 -0
  71. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/gather_info_demo.py +0 -0
  72. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/gather_per_question_functions_demo.py +0 -0
  73. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/info_gatherer_example.py +0 -0
  74. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/joke_agent.py +0 -0
  75. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/joke_skill_demo.py +0 -0
  76. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/k8s-deployment.yaml +0 -0
  77. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/kubernetes_ready_agent.py +0 -0
  78. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/lambda_agent.py +0 -0
  79. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/llm_params_demo.py +0 -0
  80. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/mcp_agent.py +0 -0
  81. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/mcp_gateway_demo.py +0 -0
  82. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/multi_agent_server.py +0 -0
  83. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/multi_endpoint_agent.py +0 -0
  84. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/pgvector_search_agent.py +0 -0
  85. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/quickstart_agent.py +0 -0
  86. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/quickstart_relay.py +0 -0
  87. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/quickstart_rest.py +0 -0
  88. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/receptionist_agent_example.py +0 -0
  89. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/record_call_example.py +0 -0
  90. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/relay_answer_and_welcome.py +0 -0
  91. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/room_and_sip_example.py +0 -0
  92. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/search_server_standalone.py +0 -0
  93. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/search_with_custom_formatter.py +0 -0
  94. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/session_and_state_demo.py +0 -0
  95. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/sigmond_native_search.py +0 -0
  96. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/sigmond_remote_search.py +0 -0
  97. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/sigmond_simple.py +0 -0
  98. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/simple_agent.py +0 -0
  99. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/simple_dynamic_agent.py +0 -0
  100. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/simple_dynamic_enhanced.py +0 -0
  101. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/simple_static_agent.py +0 -0
  102. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/skills_demo.py +0 -0
  103. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/static_files/file.txt +0 -0
  104. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/static_files/static_files/file.txt +0 -0
  105. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/step_function_inheritance_demo.py +0 -0
  106. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/survey_agent_example.py +0 -0
  107. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/swaig_features_agent.py +0 -0
  108. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/swml_service_example.py +0 -0
  109. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/swml_service_routing_example.py +0 -0
  110. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/swmlservice_ai_sidecar.py +0 -0
  111. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/swmlservice_swaig_standalone.py +0 -0
  112. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/tap_example.py +0 -0
  113. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/web_search_agent.py +0 -0
  114. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/web_search_multi_instance_demo.py +0 -0
  115. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/examples/wikipedia_demo.py +0 -0
  116. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/livewire/README.md +0 -0
  117. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/livewire/docs/migration-guide.md +0 -0
  118. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/livewire/examples/livewire_basic_agent.py +0 -0
  119. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/livewire/examples/livewire_handoff.py +0 -0
  120. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/livewire/examples/livewire_multi_tool.py +0 -0
  121. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/man/sw-agent-init.1 +0 -0
  122. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/man/sw-pydocs.1 +0 -0
  123. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/man/sw-search.1 +0 -0
  124. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/man/swaig-test.1 +0 -0
  125. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp/swml-schema-search/README.md +0 -0
  126. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp/swml-schema-search/swml_schema_mcp.py +0 -0
  127. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/.env.example +0 -0
  128. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/.gitignore +0 -0
  129. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/Dockerfile +0 -0
  130. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/README.md +0 -0
  131. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/certs/.gitignore +0 -0
  132. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/docker-compose.yml +0 -0
  133. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/examples/generate_cert.sh +0 -0
  134. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/mcp-docker.sh +0 -0
  135. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/sample_config.json +0 -0
  136. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/test/test_agent.py +0 -0
  137. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/test/test_gateway.sh +0 -0
  138. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/mcp_gateway/test/todo_mcp.py +0 -0
  139. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/README.md +0 -0
  140. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/docs/call-methods.md +0 -0
  141. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/docs/client-reference.md +0 -0
  142. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/docs/events.md +0 -0
  143. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/docs/getting-started.md +0 -0
  144. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/docs/messaging.md +0 -0
  145. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/examples/relay_answer_and_welcome.py +0 -0
  146. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/examples/relay_dial_and_play.py +0 -0
  147. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/relay/examples/relay_ivr_connect.py +0 -0
  148. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/README.md +0 -0
  149. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/docs/calling.md +0 -0
  150. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/docs/client-reference.md +0 -0
  151. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/docs/fabric.md +0 -0
  152. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/docs/getting-started.md +0 -0
  153. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/docs/namespaces.md +0 -0
  154. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_10dlc_registration.py +0 -0
  155. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_bind_phone_to_swml_webhook.py +0 -0
  156. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_calling_ivr_and_ai.py +0 -0
  157. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_calling_play_and_record.py +0 -0
  158. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_datasphere_search.py +0 -0
  159. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_fabric_conferences_and_routing.py +0 -0
  160. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_fabric_subscribers_and_sip.py +0 -0
  161. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_fabric_swml_and_callflows.py +0 -0
  162. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_manage_resources.py +0 -0
  163. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_phone_number_management.py +0 -0
  164. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_queues_mfa_and_recordings.py +0 -0
  165. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/rest/examples/rest_video_rooms.py +0 -0
  166. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/setup.cfg +0 -0
  167. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/setup.py +0 -0
  168. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/AGENTS.md +0 -0
  169. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/__main__.py +0 -0
  170. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/agents/__init__.py +0 -0
  171. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/agents/bedrock.py +0 -0
  172. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/ai_chat/__init__.py +0 -0
  173. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/ai_chat/client.py +0 -0
  174. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/ai_chat/gateway.py +0 -0
  175. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/ai_chat/handoff.py +0 -0
  176. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/__init__.py +0 -0
  177. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/config.py +0 -0
  178. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/core/__init__.py +0 -0
  179. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/core/agent_loader.py +0 -0
  180. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/core/argparse_helpers.py +0 -0
  181. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/core/dynamic_config.py +0 -0
  182. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/core/service_loader.py +0 -0
  183. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/dokku.py +0 -0
  184. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/execution/__init__.py +0 -0
  185. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/execution/datamap_exec.py +0 -0
  186. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/execution/webhook_exec.py +0 -0
  187. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/init_project.py +0 -0
  188. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/output/__init__.py +0 -0
  189. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/output/output_formatter.py +0 -0
  190. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/output/swml_dump.py +0 -0
  191. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/__init__.py +0 -0
  192. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_agents_note.py +0 -0
  193. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_api.py +0 -0
  194. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_bundle.py +0 -0
  195. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_files.py +0 -0
  196. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_render.py +0 -0
  197. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/pydocs/_topics.py +0 -0
  198. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/simulation/__init__.py +0 -0
  199. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/simulation/data_generation.py +0 -0
  200. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/simulation/data_overrides.py +0 -0
  201. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/simulation/mock_env.py +0 -0
  202. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/swaig_test_wrapper.py +0 -0
  203. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/test_swaig.py +0 -0
  204. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/cli/types.py +0 -0
  205. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/__init__.py +0 -0
  206. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/_agent_host.py +0 -0
  207. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/_sync_handlers.py +0 -0
  208. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/__init__.py +0 -0
  209. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/config/__init__.py +0 -0
  210. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/deployment/__init__.py +0 -0
  211. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/deployment/handlers/__init__.py +0 -0
  212. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/prompt/__init__.py +0 -0
  213. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/prompt/manager.py +0 -0
  214. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/routing/__init__.py +0 -0
  215. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/security/__init__.py +0 -0
  216. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/swml/__init__.py +0 -0
  217. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/tools/__init__.py +0 -0
  218. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/tools/decorator.py +0 -0
  219. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/tools/registry.py +0 -0
  220. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent/tools/type_inference.py +0 -0
  221. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/agent_base.py +0 -0
  222. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/auth_handler.py +0 -0
  223. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/capabilities.py +0 -0
  224. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/config_loader.py +0 -0
  225. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/contexts.py +0 -0
  226. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/data_map.py +0 -0
  227. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/function_result.py +0 -0
  228. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/logging_config.py +0 -0
  229. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/__init__.py +0 -0
  230. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/_mixin_host.py +0 -0
  231. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/ai_config_mixin.py +0 -0
  232. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/auth_mixin.py +0 -0
  233. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/mcp_server_mixin.py +0 -0
  234. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/prompt_mixin.py +0 -0
  235. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/serverless_mixin.py +0 -0
  236. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/skill_mixin.py +0 -0
  237. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/state_mixin.py +0 -0
  238. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/tool_mixin.py +0 -0
  239. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/mixins/web_mixin.py +0 -0
  240. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/pom_builder.py +0 -0
  241. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/post_prompt.py +0 -0
  242. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/post_prompt_generated.py +0 -0
  243. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security/__init__.py +0 -0
  244. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security/security_utils.py +0 -0
  245. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security/session_manager.py +0 -0
  246. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security/webhook_middleware.py +0 -0
  247. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security/webhook_validator.py +0 -0
  248. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/security_config.py +0 -0
  249. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/semantic_gate.py +0 -0
  250. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/skill_base.py +0 -0
  251. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/skill_manager.py +0 -0
  252. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swaig_actions_generated.py +0 -0
  253. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swaig_function.py +0 -0
  254. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swaig_request_generated.py +0 -0
  255. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swml_builder.py +0 -0
  256. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swml_handler.py +0 -0
  257. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swml_renderer.py +0 -0
  258. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swml_service.py +0 -0
  259. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/swml_verbs_generated.py +0 -0
  260. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/core/web.py +0 -0
  261. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/livewire/__init__.py +0 -0
  262. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/livewire/plugins.py +0 -0
  263. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/llms.txt +0 -0
  264. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/mcp_gateway/__init__.py +0 -0
  265. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/mcp_gateway/gateway_service.py +0 -0
  266. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/mcp_gateway/mcp_manager.py +0 -0
  267. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/mcp_gateway/session_manager.py +0 -0
  268. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/pom/__init__.py +0 -0
  269. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/pom/pom.py +0 -0
  270. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/pom/pom_tool.py +0 -0
  271. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/__init__.py +0 -0
  272. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/concierge.py +0 -0
  273. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/faq_bot.py +0 -0
  274. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/info_gatherer.py +0 -0
  275. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/receptionist.py +0 -0
  276. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/prefabs/survey.py +0 -0
  277. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/py.typed +0 -0
  278. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/__init__.py +0 -0
  279. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/call.py +0 -0
  280. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/client.py +0 -0
  281. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/constants.py +0 -0
  282. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/event.py +0 -0
  283. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/message.py +0 -0
  284. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/relay/protocol_types_generated.py +0 -0
  285. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/__init__.py +0 -0
  286. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/_base.py +0 -0
  287. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/_pagination.py +0 -0
  288. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/_request_options.py +0 -0
  289. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/call_handler.py +0 -0
  290. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/client.py +0 -0
  291. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/__init__.py +0 -0
  292. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/_client_tree_generated.py +0 -0
  293. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/addresses.py +0 -0
  294. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/calling.py +0 -0
  295. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/calling_resources_generated.py +0 -0
  296. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/calling_types_generated.py +0 -0
  297. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/chat.py +0 -0
  298. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/chat_resources_generated.py +0 -0
  299. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/chat_types_generated.py +0 -0
  300. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/datasphere.py +0 -0
  301. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/datasphere_resources_generated.py +0 -0
  302. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/datasphere_types_generated.py +0 -0
  303. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/fabric.py +0 -0
  304. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/fabric_resources_generated.py +0 -0
  305. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/fabric_types_generated.py +0 -0
  306. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/fax_resources_generated.py +0 -0
  307. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/fax_types_generated.py +0 -0
  308. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/imported_numbers.py +0 -0
  309. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/logs.py +0 -0
  310. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/logs_resources_generated.py +0 -0
  311. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/logs_types_generated.py +0 -0
  312. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/lookup.py +0 -0
  313. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/message_resources_generated.py +0 -0
  314. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/message_types_generated.py +0 -0
  315. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/messages_resources_generated.py +0 -0
  316. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/messages_types_generated.py +0 -0
  317. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/mfa.py +0 -0
  318. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/number_groups.py +0 -0
  319. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/phone_numbers.py +0 -0
  320. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/project.py +0 -0
  321. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/project_resources_generated.py +0 -0
  322. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/project_types_generated.py +0 -0
  323. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/projects_resources_generated.py +0 -0
  324. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/projects_types_generated.py +0 -0
  325. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/pubsub.py +0 -0
  326. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/pubsub_resources_generated.py +0 -0
  327. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/pubsub_types_generated.py +0 -0
  328. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/queues.py +0 -0
  329. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/recordings.py +0 -0
  330. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/registry.py +0 -0
  331. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/relay_rest_resources_generated.py +0 -0
  332. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/relay_rest_types_generated.py +0 -0
  333. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/short_codes.py +0 -0
  334. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/sip_profile.py +0 -0
  335. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/swml_webhooks_types_generated.py +0 -0
  336. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/verified_callers.py +0 -0
  337. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/video.py +0 -0
  338. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/video_resources_generated.py +0 -0
  339. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/video_types_generated.py +0 -0
  340. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/voice_resources_generated.py +0 -0
  341. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/rest/namespaces/voice_types_generated.py +0 -0
  342. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/schema.json +0 -0
  343. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/__init__.py +0 -0
  344. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/migration.py +0 -0
  345. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/search/pgvector_backend.py +0 -0
  346. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/README.md +0 -0
  347. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/__init__.py +0 -0
  348. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/api_ninjas_trivia/README.md +0 -0
  349. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/api_ninjas_trivia/__init__.py +0 -0
  350. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/api_ninjas_trivia/skill.py +0 -0
  351. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/claude_skills/README.md +0 -0
  352. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/claude_skills/__init__.py +0 -0
  353. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/claude_skills/skill.py +0 -0
  354. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere/README.md +0 -0
  355. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere/__init__.py +0 -0
  356. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere/skill.py +0 -0
  357. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere_serverless/README.md +0 -0
  358. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere_serverless/__init__.py +0 -0
  359. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datasphere_serverless/skill.py +0 -0
  360. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datetime/README.md +0 -0
  361. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datetime/__init__.py +0 -0
  362. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/datetime/skill.py +0 -0
  363. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/google_maps/__init__.py +0 -0
  364. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/google_maps/skill.py +0 -0
  365. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/info_gatherer/README.md +0 -0
  366. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/info_gatherer/__init__.py +0 -0
  367. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/info_gatherer/skill.py +0 -0
  368. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/joke/README.md +0 -0
  369. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/joke/__init__.py +0 -0
  370. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/joke/skill.py +0 -0
  371. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/math/README.md +0 -0
  372. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/math/__init__.py +0 -0
  373. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/math/skill.py +0 -0
  374. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/mcp_gateway/README.md +0 -0
  375. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/mcp_gateway/__init__.py +0 -0
  376. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/mcp_gateway/skill.py +0 -0
  377. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/native_vector_search/README.md +0 -0
  378. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/native_vector_search/__init__.py +0 -0
  379. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/play_background_file/README.md +0 -0
  380. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/play_background_file/__init__.py +0 -0
  381. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/play_background_file/skill.py +0 -0
  382. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/registry.py +0 -0
  383. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/spider/README.md +0 -0
  384. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/spider/__init__.py +0 -0
  385. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/spider/skill.py +0 -0
  386. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/swml_transfer/README.md +0 -0
  387. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/swml_transfer/__init__.py +0 -0
  388. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/swml_transfer/skill.py +0 -0
  389. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/weather_api/README.md +0 -0
  390. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/weather_api/__init__.py +0 -0
  391. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/weather_api/skill.py +0 -0
  392. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/web_search/README.md +0 -0
  393. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/web_search/__init__.py +0 -0
  394. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/web_search/skill.py +0 -0
  395. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/web_search/skill_improved.py +0 -0
  396. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/web_search/skill_original.py +0 -0
  397. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/wikipedia_search/README.md +0 -0
  398. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/wikipedia_search/__init__.py +0 -0
  399. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/skills/wikipedia_search/skill.py +0 -0
  400. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/__init__.py +0 -0
  401. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/pom_utils.py +0 -0
  402. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/schema_utils.py +0 -0
  403. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/token_generators.py +0 -0
  404. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/url_validator.py +0 -0
  405. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/utils/validators.py +0 -0
  406. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/web/__init__.py +0 -0
  407. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire/web/web_service.py +0 -0
  408. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire_sdk.egg-info/SOURCES.txt +0 -0
  409. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire_sdk.egg-info/dependency_links.txt +0 -0
  410. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire_sdk.egg-info/entry_points.txt +0 -0
  411. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire_sdk.egg-info/requires.txt +0 -0
  412. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/signalwire/signalwire_sdk.egg-info/top_level.txt +0 -0
  413. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tests/test_examples.py +0 -0
  414. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tests/test_mcp_integration.py +0 -0
  415. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/.env.example +0 -0
  416. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/Dockerfile +0 -0
  417. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/Dockerfile.multi +0 -0
  418. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/docker-compose.yml +0 -0
  419. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/fred.py +0 -0
  420. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/fred.sh +0 -0
  421. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/requirements.txt +0 -0
  422. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/01-introduction.md +0 -0
  423. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/02-setup.md +0 -0
  424. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/03-basic-agent.md +0 -0
  425. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/04-wikipedia-skill.md +0 -0
  426. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/05-custom-functions.md +0 -0
  427. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/06-running-testing.md +0 -0
  428. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/README.md +0 -0
  429. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/appendix-complete-code.md +0 -0
  430. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/fred/tutorial/appendix-docker-deployment.md +0 -0
  431. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/.env.example +0 -0
  432. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/.gitignore +0 -0
  433. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/Dockerfile +0 -0
  434. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/check_docs.py +0 -0
  435. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/handlers.py +0 -0
  436. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/penny.py +0 -0
  437. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/penny.sh +0 -0
  438. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/requirements.txt +0 -0
  439. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/reservations.py +0 -0
  440. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/test_penny.py +0 -0
  441. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/01-why-guardrails.md +0 -0
  442. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/02-design-first.md +0 -0
  443. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/03-rules-first.md +0 -0
  444. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/04-the-shell.md +0 -0
  445. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/05-steps-and-scoping.md +0 -0
  446. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/06-tools-that-decide.md +0 -0
  447. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/07-gather-and-projection.md +0 -0
  448. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/08-the-verification-gate.md +0 -0
  449. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/09-people-and-endings.md +0 -0
  450. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/10-testing-and-running.md +0 -0
  451. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/README.md +0 -0
  452. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/appendix-complete-code.md +0 -0
  453. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/appendix-deployment.md +0 -0
  454. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/tutorial/appendix-technique-map.md +0 -0
  455. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/full-guardrails-agent/workflow.py +0 -0
  456. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/README.md +0 -0
  457. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/lesson1_first_agent.md +0 -0
  458. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/lesson2_knowledge_bases.md +0 -0
  459. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/lesson3_multi_agent_systems.md +0 -0
  460. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/lesson4_advanced_features.md +0 -0
  461. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/lesson5_extending_agents.md +0 -0
  462. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/pc_builder.py +0 -0
  463. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/sales_agent.py +0 -0
  464. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/sales_agent_with_search.py +0 -0
  465. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/sales_knowledge.md +0 -0
  466. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/sales_knowledge.swsearch +0 -0
  467. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/support_knowledge.md +0 -0
  468. {signalwire_sdk-3.7.2.dev132 → signalwire_sdk-3.7.2.dev134}/tutorial/multi_agents/support_knowledge.swsearch +0 -0
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ### Added
6
+ - `sw-search --query-stopwords` (and `IndexBuilder(query_stopwords=...)`)
7
+ records terms every document in the index is about, such as the product's
8
+ name. The search service and the native_vector_search skill drop them from
9
+ queries before embedding and keyword search, unless fewer than two content
10
+ words would remain, so "what is SignalWire" still searches for SignalWire.
11
+ In a corpus about one product, the name only favours the chunks that spell
12
+ it out: "SignalWire call pricing" ranked phone-number fees above call rates.
13
+ On SignalWire's corpus (58 labelled questions) hit@5 went from 0.88 to 0.95
14
+ and MRR@10 from 0.678 to 0.745; without the guard, a bare "SignalWire" fell
15
+ out of the top 10.
16
+ - Chunks can carry a `rank_weight` between 0 and 1 in their metadata. Search
17
+ multiplies it into the chunk's score, so an index can mark secondary sources,
18
+ such as commentary indexed next to reference material, and the reference
19
+ ranks first when both match. It only demotes: values outside that range are
20
+ ignored.
21
+
22
+ ### Fixed
23
+ - Search's same-file penalty now applies per document. It used to key on the
24
+ file a chunk was read from, so in a JSON file holding many documents every
25
+ chunk counted as one document and pushed the others down: in a pricing
26
+ collection, 50 rate cards shared one file, and the per-minute card for
27
+ "outbound call pricing" fell from 9th by relevance to below the top 20. A
28
+ chunk's document is its `document` metadata, else `url`, else `source`, else
29
+ its file, the same key the JSON loader already uses to tell documents apart.
30
+ Indexes with one document per file rank as before.
31
+ - The penalty's diversity pass no longer raises `KeyError` on a result
32
+ without `filename` metadata.
33
+
3
34
  ## [3.7.2] - 2026-10-14
4
35
 
5
36
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire-sdk
3
- Version: 3.7.2.dev132
3
+ Version: 3.7.2.dev134
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
@@ -2325,6 +2325,7 @@ sw-search <source> [<source> ...] [options]
2325
2325
  - `--topic-threshold FLOAT` - Threshold for topic-based chunking (default: 0.3)
2326
2326
  - `--index-nlp-backend BACKEND` - NLP backend for processing: `nltk` (default) or `spacy`
2327
2327
  - `--embed-text {content,processed}` - What the embedding model sees: the chunk as written (`content`, default), or the keyword-search text with tags appended (`processed`), as indexes were built before this option existed
2328
+ - `--query-stopwords TERMS` - Comma-separated terms every document is about, such as your product's name. Recorded in the index; search drops them from queries, unless fewer than two content words would remain (so "what is Acme" still searches for Acme)
2328
2329
  - `--split-newlines N` - Split on N or more consecutive newlines, in addition to sentence boundaries
2329
2330
  - `--languages LANGS` - Comma-separated language codes (default: en)
2330
2331
 
@@ -523,7 +523,9 @@ Common edits during review:
523
523
 
524
524
  - Add descriptive chunk IDs (replace auto-generated `chunk_0`, `chunk_1`)
525
525
  - Add relevant tags for hybrid search boosting
526
- - Add URLs to source documentation
526
+ - Add URLs to source documentation. In a JSON file that holds several documents, the URL (or a `document` value in the chunk's metadata) also tells search which chunks belong to the same document. Without one, every chunk in the file counts as one document and they push each other down the results. Make the value identify one document: a `source` shared by the whole collection (for example `"source": "docs-site"` on every chunk) makes every file that uses it count as a single document.
527
+ - If every document is about the same product, build with `--query-stopwords "<product name>"`. A name that every document is about carries no information in a query, and only favours the chunks that happen to spell it out. In one product corpus, "<product> call pricing" ranked the phone-number price cards (which mention porting numbers "into <product>") above the per-minute call rates.
528
+ - Set `rank_weight` (between 0 and 1) on secondary chunks, such as commentary next to reference material, so the reference ranks first when both match
527
529
  - Add priority levels (`high`, `normal`, `low`)
528
530
  - Link related chunks via `related_chunks`
529
531
  - Remove low-value chunks (e.g., header-only content)
@@ -327,9 +327,10 @@ The algorithm proceeds in these steps:
327
327
  2. Keyword matching, weighted metadata field matching (category, product, tags, source, section, and description each carry a different weight), and filename matching run against that same pool.
328
328
  3. Each candidate is scored. If it has a vector similarity score, that score is the base, and every additional agreeing signal adds a small boost, capped at a fixed maximum. Agreement can reorder near-ties; it cannot let a weak vector match outrank a stronger one.
329
329
  4. A candidate found only through keyword or metadata matching, with no vector score, is scaled below the pool's strongest vector match. A non-semantic match can never outrank a genuine semantic one.
330
- 5. Near-duplicate chunks are removed, keeping the highest-scoring copy of each.
331
- 6. Results are penalized when several chunks come from the same file, so one document cannot dominate the result list. The second chunk from a file keeps 85% of its computed score, the third 70%, the fourth 50%, and the fifth or later 40%.
332
- 7. The top N results are returned.
330
+ 5. A chunk with a `rank_weight` in its metadata has its score multiplied by it. Only values between 0 and 1 count, so a weight can demote a chunk but never promote it. Use it to mark secondary sources, such as commentary indexed next to reference material, so the reference wins when both match.
331
+ 6. Near-duplicate chunks are removed, keeping the highest-scoring copy of each.
332
+ 7. Results are penalized when several chunks come from the same document, so one document cannot dominate the result list. The second chunk of a document keeps 85% of its computed score, the third 70%, the fourth 50%, and the fifth or later 40%. A chunk's document is its `document` metadata if set, otherwise its `url`, then its `source`, then the file it was read from. Set `document` or `url` on chunks in a JSON file that holds many documents, or the whole file is treated as one.
333
+ 8. The top N results are returned.
333
334
 
334
335
  **Concrete example:**
335
336
 
@@ -460,13 +461,14 @@ if __name__ == "__main__":
460
461
 
461
462
  When a user asks a question, the following occurs:
462
463
 
463
- 1. The query is converted to a vector embedding.
464
- 2. The search engine compares the query vector to all chunk vectors in the index.
465
- 3. Chunks are scored by cosine similarity.
466
- 4. Keyword and metadata matches boost scores (hybrid scoring).
467
- 5. Top results (above the distance threshold) are returned.
468
- 6. Results are formatted and provided to the LLM.
469
- 7. The LLM generates an answer grounded in the retrieved content.
464
+ 1. If the index was built with `--query-stopwords`, those terms are removed from the query, unless fewer than two content words would remain.
465
+ 2. The query is converted to a vector embedding.
466
+ 3. The search engine compares the query vector to all chunk vectors in the index.
467
+ 4. Chunks are scored by cosine similarity.
468
+ 5. Keyword and metadata matches boost scores (hybrid scoring).
469
+ 6. Top results (above the distance threshold) are returned.
470
+ 7. Results are formatted and provided to the LLM.
471
+ 8. The LLM generates an answer grounded in the retrieved content.
470
472
 
471
473
  ### Testing Your Search
472
474
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "signalwire-sdk"
7
- version = "3.7.2.dev132"
7
+ version = "3.7.2.dev134"
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"}
@@ -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.2.dev132"
62
+ __version__ = "3.7.2.dev134"
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
@@ -68,7 +68,7 @@ class AgentServer:
68
68
  self.app = FastAPI(
69
69
  title="SignalWire AI Agents",
70
70
  description="Hosted SignalWire AI Agents",
71
- version="3.7.2.dev132",
71
+ version="3.7.2.dev134",
72
72
  redirect_slashes=False,
73
73
  docs_url=None,
74
74
  redoc_url=None,
@@ -330,6 +330,17 @@ Documentation: sw-pydocs prints the SDK's installed docs, examples and API.
330
330
  ),
331
331
  )
332
332
 
333
+ parser.add_argument(
334
+ "--query-stopwords",
335
+ default=None,
336
+ help=(
337
+ "Comma-separated terms every document is about, such as your "
338
+ "product's name. Recorded in the index; search drops them from "
339
+ "queries unless the query would be left with fewer than two "
340
+ "content words."
341
+ ),
342
+ )
343
+
333
344
  parser.add_argument("--verbose", action="store_true", help="Enable verbose output")
334
345
 
335
346
  parser.add_argument(
@@ -355,6 +366,13 @@ Documentation: sw-pydocs prints the SDK's installed docs, examples and API.
355
366
  return parser
356
367
 
357
368
 
369
+ def _split_terms(value: str | None) -> list[str] | None:
370
+ """Split a comma-separated --query-stopwords value; None when not given."""
371
+ if not value:
372
+ return None
373
+ return [t.strip() for t in value.split(",") if t.strip()]
374
+
375
+
358
376
  def main() -> None:
359
377
  """Main entry point for the build-search command"""
360
378
  args = _build_parser().parse_args()
@@ -531,6 +549,7 @@ def main() -> None:
531
549
  split_newlines=args.split_newlines,
532
550
  index_nlp_backend=args.index_nlp_backend,
533
551
  embed_text=args.embed_text,
552
+ query_stopwords=_split_terms(args.query_stopwords),
534
553
  verbose=args.verbose,
535
554
  semantic_threshold=args.semantic_threshold,
536
555
  topic_threshold=args.topic_threshold,
@@ -642,6 +661,7 @@ def main() -> None:
642
661
  split_newlines=args.split_newlines,
643
662
  index_nlp_backend=args.index_nlp_backend,
644
663
  embed_text=args.embed_text,
664
+ query_stopwords=_split_terms(args.query_stopwords),
645
665
  verbose=args.verbose,
646
666
  semantic_threshold=args.semantic_threshold,
647
667
  topic_threshold=args.topic_threshold,
@@ -95,6 +95,7 @@ else:
95
95
  magic = None
96
96
 
97
97
  from signalwire.core.logging_config import get_logger
98
+ from signalwire.search.models import document_key
98
99
 
99
100
  logger = get_logger(__name__)
100
101
 
@@ -1796,11 +1797,7 @@ class DocumentProcessor:
1796
1797
  # the heading is reset each time, and a scan of 16,894 chunks
1797
1798
  # found no instance -- but that is a property of those inputs,
1798
1799
  # not of this loop. Reset when the document changes.
1799
- doc_key = (
1800
- json_metadata.get("url")
1801
- or json_metadata.get("source")
1802
- or json_metadata.get("filename")
1803
- )
1800
+ doc_key = document_key(json_metadata)
1804
1801
  if doc_key != current_doc:
1805
1802
  current_doc = doc_key
1806
1803
  current_heading = ""
@@ -57,6 +57,7 @@ class IndexBuilder:
57
57
  backend: str = "sqlite",
58
58
  connection_string: str | None = None,
59
59
  embed_text: str = "content",
60
+ query_stopwords: list[str] | None = None,
60
61
  ):
61
62
  """
62
63
  Initialize the index builder
@@ -96,6 +97,10 @@ class IndexBuilder:
96
97
  'content', and 0.562 with content plus tags appended. Your
97
98
  corpus may differ; the option exists so you can measure both.
98
99
  Keyword search uses processed_content either way.
100
+ query_stopwords: Terms every document in the index is about, such
101
+ as the product's own name. They are recorded in the index, and
102
+ search drops them from queries; see
103
+ query_processor.drop_corpus_terms.
99
104
  """
100
105
  self.model_name = model_name
101
106
  self.chunking_strategy = chunking_strategy
@@ -111,6 +116,9 @@ class IndexBuilder:
111
116
  self.backend = backend
112
117
  self.connection_string = connection_string
113
118
  self.embed_text = embed_text
119
+ self.query_stopwords = [
120
+ t.strip() for t in (query_stopwords or []) if t and t.strip()
121
+ ]
114
122
  # SentenceTransformer instance, loaded lazily in _load_model(); the lib
115
123
  # ships no stubs, so this is effectively Any once populated.
116
124
  self.model: Any = None
@@ -738,6 +746,7 @@ class IndexBuilder:
738
746
  "chunk_overlap": str(self.chunk_overlap),
739
747
  "preprocessing_version": "1.0",
740
748
  "embed_text": self.embed_text,
749
+ "query_stopwords": json.dumps(self.query_stopwords),
741
750
  "languages": json.dumps(languages),
742
751
  "created_at": datetime.now().isoformat(),
743
752
  "sources": json.dumps(
@@ -962,6 +971,7 @@ class IndexBuilder:
962
971
  "chunk_overlap": self.chunk_overlap,
963
972
  "index_nlp_backend": self.index_nlp_backend,
964
973
  "embed_text": self.embed_text,
974
+ "query_stopwords": self.query_stopwords,
965
975
  },
966
976
  }
967
977
 
@@ -8,6 +8,8 @@ See LICENSE file in the project root for full license information.
8
8
  """
9
9
 
10
10
  import warnings
11
+ from collections.abc import Mapping
12
+ from typing import Any
11
13
 
12
14
  # Embedding model configuration
13
15
  MODEL_ALIASES = {
@@ -40,3 +42,27 @@ def resolve_model_alias(model_name: str) -> str:
40
42
  if model_name == "large":
41
43
  warnings.warn(LARGE_ALIAS_DEPRECATION, DeprecationWarning, stacklevel=2)
42
44
  return MODEL_ALIASES.get(model_name, model_name)
45
+
46
+
47
+ # Metadata keys naming the document a chunk came from, most specific first.
48
+ # `document` lets an index state it outright. Without it, a page URL or a
49
+ # repo:path source is the next-best identity, and the file the chunk was read
50
+ # from is the last resort -- which is right for one-document-per-file indexes
51
+ # and wrong for JSON collections, where one file holds many documents.
52
+ DOCUMENT_KEYS = ("document", "url", "source", "filename")
53
+
54
+
55
+ def document_key(metadata: Mapping[str, Any] | None) -> str | None:
56
+ """Identify the document a chunk belongs to, or None if nothing says.
57
+
58
+ Used wherever "the same document" matters: resetting heading context
59
+ between documents in a JSON file, and penalising several chunks of one
60
+ document in a result list. One definition, so the two cannot disagree.
61
+ """
62
+ if not metadata:
63
+ return None
64
+ for key in DOCUMENT_KEYS:
65
+ value = metadata.get(key)
66
+ if value:
67
+ return str(value)
68
+ return None
@@ -370,6 +370,97 @@ stopwords_language_map = {
370
370
  "tr": "turkish",
371
371
  }
372
372
 
373
+ # Used when NLTK's stopword corpus is unavailable, so the guard in
374
+ # drop_corpus_terms still recognises a question with nothing left to say.
375
+ _FALLBACK_STOPWORDS = frozenset(
376
+ {
377
+ "a",
378
+ "an",
379
+ "and",
380
+ "are",
381
+ "as",
382
+ "at",
383
+ "be",
384
+ "by",
385
+ "can",
386
+ "do",
387
+ "does",
388
+ "for",
389
+ "from",
390
+ "how",
391
+ "i",
392
+ "in",
393
+ "is",
394
+ "it",
395
+ "its",
396
+ "me",
397
+ "my",
398
+ "of",
399
+ "on",
400
+ "or",
401
+ "the",
402
+ "this",
403
+ "that",
404
+ "to",
405
+ "vs",
406
+ "versus",
407
+ "what",
408
+ "when",
409
+ "where",
410
+ "which",
411
+ "who",
412
+ "why",
413
+ "with",
414
+ "you",
415
+ "your",
416
+ }
417
+ )
418
+
419
+
420
+ def drop_corpus_terms(
421
+ query: str, terms: list[str] | tuple[str, ...], language: str = "en"
422
+ ) -> str:
423
+ """Remove terms that every document in an index is about from a query.
424
+
425
+ In a corpus about one product, the product's name carries no information:
426
+ everything is about it. In the query it only rewards the few chunks that
427
+ happen to spell the name out. In SignalWire's own corpus, "SignalWire call
428
+ pricing" ranked the phone-number rate cards first, because each says
429
+ numbers "can be ported into SignalWire", over the per-minute rates the
430
+ question was about. An index declares such terms when it is built
431
+ (`--query-stopwords`), and search drops them here, before embedding and
432
+ keyword matching.
433
+
434
+ A term is kept when dropping it would leave fewer than two content words.
435
+ "What is SignalWire" and a bare "SignalWire" are ABOUT the name, and
436
+ stripping it leaves nothing to search for: measured, a bare "SignalWire"
437
+ fell out of the top 10 without this guard.
438
+
439
+ Matching is case-insensitive, on word boundaries, and takes a possessive
440
+ with it. Terms may be phrases.
441
+ """
442
+ if not isinstance(terms, (list, tuple)):
443
+ return query
444
+ clean = [t.strip() for t in terms if isinstance(t, str) and t.strip()]
445
+ if not query or not clean:
446
+ return query
447
+ pattern = re.compile(
448
+ r"(?i)\b(?:"
449
+ + "|".join(r"\s+".join(map(re.escape, t.split())) for t in clean)
450
+ + r")(?:'s)?\b"
451
+ )
452
+ if not pattern.search(query):
453
+ return query
454
+ stripped = re.sub(r"\s+", " ", pattern.sub(" ", query)).strip()
455
+ try:
456
+ stop = set(
457
+ nltk.corpus.stopwords.words(stopwords_language_map.get(language, "english"))
458
+ )
459
+ except Exception: # corpus not downloaded: fall back to a small fixed list
460
+ stop = set(_FALLBACK_STOPWORDS)
461
+ content = [w for w in re.findall(r"[^\W_]+", stripped.lower()) if w not in stop]
462
+ return stripped if len(content) >= 2 else query
463
+
373
464
 
374
465
  # Function to ensure NLTK resources are downloaded
375
466
  def ensure_nltk_resources() -> None:
@@ -13,6 +13,7 @@ import warnings
13
13
  from typing import Any, TYPE_CHECKING
14
14
 
15
15
  from signalwire.core.logging_config import get_logger
16
+ from signalwire.search.models import document_key
16
17
 
17
18
  # NDArray is the runtime numpy array type when available, else Any; typed Any
18
19
  # because the fallback makes the two branches incompatible to mypy.
@@ -94,6 +95,27 @@ class SearchEngine:
94
95
  f"Invalid backend '{backend}'. Must be 'sqlite' or 'pgvector'"
95
96
  )
96
97
 
98
+ @property
99
+ def query_stopwords(self) -> list[str]:
100
+ """Terms the index was built to drop from queries; see drop_corpus_terms.
101
+
102
+ SQLite indexes keep them in the config table as a JSON list, pgvector
103
+ collections in collection_config.metadata. A missing or malformed value
104
+ means none, never an error: older indexes simply have no such key.
105
+ """
106
+ config: dict[str, Any] = getattr(self, "config", None) or {}
107
+ raw: Any = config.get("query_stopwords")
108
+ if raw is None and isinstance(config.get("metadata"), dict):
109
+ raw = config["metadata"].get("query_stopwords")
110
+ if isinstance(raw, str):
111
+ try:
112
+ raw = json.loads(raw)
113
+ except ValueError:
114
+ return []
115
+ if not isinstance(raw, list):
116
+ return []
117
+ return [t for t in raw if isinstance(t, str) and t.strip()]
118
+
97
119
  def _load_config(self) -> dict[str, str]:
98
120
  """Load index configuration"""
99
121
  conn = None
@@ -312,8 +334,9 @@ class SearchEngine:
312
334
  2. tag filter (optional)
313
335
  3. threshold filter on final score (redundant but safe)
314
336
  4. exact-match boost (when original_query provided)
337
+ 4b. rank weight — the chunk's own `rank_weight` metadata, if any
315
338
  5. content dedup — collapse near-identical chunks, keep highest scorer
316
- 6. filename diversity — decay 2nd/3rd/4th+ chunks from the same file
339
+ 6. document diversity — decay 2nd/3rd/4th+ chunks of one document
317
340
  7. match-type diversity — 40/40/20 hybrid/vector-only/keyword-only
318
341
  8. truncate to `count`
319
342
  """
@@ -377,6 +400,16 @@ class SearchEngine:
377
400
  r["final_score"] = min(r["final_score"], vector_ceiling * 0.99)
378
401
  final_results.sort(key=lambda x: x["final_score"], reverse=True)
379
402
 
403
+ # 4b. rank weight -- see _rank_weight
404
+ weighted = False
405
+ for r in final_results:
406
+ w = self._rank_weight(r.get("metadata"))
407
+ if w != 1.0:
408
+ r["final_score"] *= w
409
+ weighted = True
410
+ if weighted:
411
+ final_results.sort(key=lambda x: x["final_score"], reverse=True)
412
+
380
413
  # 5. content dedup (sorted best-first, so the kept copy is the winner)
381
414
  final_results = self._dedupe_by_content(final_results)
382
415
 
@@ -1550,10 +1583,36 @@ class SearchEngine:
1550
1583
  deduped.append(result)
1551
1584
  return deduped
1552
1585
 
1586
+ @staticmethod
1587
+ def _rank_weight(metadata: dict[str, Any] | None) -> float:
1588
+ """A chunk's declared rank weight: a number in (0, 1], else 1.0.
1589
+
1590
+ Lets an index say some chunks are secondary sources -- commentary next
1591
+ to reference, say -- so that when both match, the reference wins,
1592
+ without the query having to say which kind it wants. It multiplies the
1593
+ final score, so it only ever demotes: nothing can be weighted above
1594
+ what its relevance earned, which keeps the rule that non-semantic
1595
+ signals may reorder results but not choose them. Values outside
1596
+ (0, 1], booleans and non-numbers are ignored rather than trusted.
1597
+ """
1598
+ w = (metadata or {}).get("rank_weight")
1599
+ if isinstance(w, bool) or not isinstance(w, (int, float)):
1600
+ return 1.0
1601
+ return float(w) if 0.0 < w <= 1.0 else 1.0
1602
+
1553
1603
  def _apply_diversity_penalties(
1554
1604
  self, results: list[dict[str, Any]], target_count: int
1555
1605
  ) -> list[dict[str, Any]]:
1556
- """Apply penalties to prevent single-file dominance while maintaining quality"""
1606
+ """Apply penalties to prevent single-document dominance while maintaining quality.
1607
+
1608
+ "Document" is document_key(): the chunk's `document`, `url` or `source`
1609
+ metadata before its `filename`. Keying on the file alone treated every
1610
+ chunk of a JSON collection as one document -- 50 separate rate cards in
1611
+ one pricing file decayed each other out of the results, and the
1612
+ per-minute card for "outbound call pricing" fell from 9th by relevance
1613
+ to below the top 20. For one-document-per-file indexes the key is the
1614
+ filename, as before.
1615
+ """
1557
1616
  if not results:
1558
1617
  return results
1559
1618
 
@@ -1570,7 +1629,7 @@ class SearchEngine:
1570
1629
  }
1571
1630
 
1572
1631
  for result in results:
1573
- filename = (result.get("metadata") or {}).get("filename")
1632
+ filename = document_key(result.get("metadata"))
1574
1633
  if filename is None:
1575
1634
  # No filename signal - skip penalty logic for this result
1576
1635
  penalized_result = result.copy()
@@ -1605,28 +1664,32 @@ class SearchEngine:
1605
1664
  # Ensure minimum diversity if we have enough results
1606
1665
  if len(penalized_results) > target_count:
1607
1666
  unique_files = len(
1608
- {r["metadata"]["filename"] for r in penalized_results[:target_count]}
1667
+ {
1668
+ document_key(r.get("metadata"))
1669
+ for r in penalized_results[:target_count]
1670
+ }
1609
1671
  )
1610
1672
 
1611
1673
  # If top results are too homogeneous (e.g., all from 1-2 files)
1612
1674
  if unique_files < min(3, target_count):
1613
1675
  # Try to inject some diversity
1614
1676
  selected = penalized_results[:target_count]
1615
- seen_files = {r["metadata"]["filename"] for r in selected}
1677
+ seen_files = {document_key(r.get("metadata")) for r in selected}
1616
1678
 
1617
1679
  # Look for high-quality results from other files
1618
1680
  for result in penalized_results[target_count:]:
1619
1681
  # Only inject a result from a new file that's reasonably good
1620
1682
  # (within 50% of top score)
1621
1683
  if (
1622
- result["metadata"]["filename"] not in seen_files
1684
+ document_key(result.get("metadata")) not in seen_files
1623
1685
  and result["final_score"] > 0.5 * selected[0]["final_score"]
1624
1686
  ):
1625
1687
  # Replace the lowest scoring result from an over-represented file
1626
1688
  for i in range(len(selected) - 1, -1, -1):
1627
- if file_counts[selected[i]["metadata"]["filename"]] > 2:
1689
+ key = document_key(selected[i].get("metadata"))
1690
+ if key is not None and file_counts.get(key, 0) > 2:
1628
1691
  selected[i] = result
1629
- seen_files.add(result["metadata"]["filename"])
1692
+ seen_files.add(document_key(result.get("metadata")))
1630
1693
  break
1631
1694
 
1632
1695
  penalized_results[:target_count] = selected
@@ -39,7 +39,7 @@ else:
39
39
  except ImportError:
40
40
  SentenceTransformer = None
41
41
 
42
- from .query_processor import preprocess_query, set_global_model
42
+ from .query_processor import drop_corpus_terms, preprocess_query, set_global_model
43
43
  from .search_engine import SearchEngine
44
44
  from signalwire.core.security_config import SecurityConfig
45
45
  from signalwire.core.config_loader import ConfigLoader
@@ -564,17 +564,24 @@ class SearchService:
564
564
  # results for this query until the entry is evicted.
565
565
  degraded = False
566
566
 
567
+ # Terms the index declares every document is about (its product name,
568
+ # usually) carry no information and only reward the chunks that spell
569
+ # them out. See drop_corpus_terms.
570
+ query_text = drop_corpus_terms(
571
+ request.query, getattr(search_engine, "query_stopwords", None) or []
572
+ )
573
+
567
574
  # Enhance query
568
575
  try:
569
576
  enhanced = preprocess_query(
570
- request.query,
577
+ query_text,
571
578
  language=request.language or "auto",
572
579
  vector=True,
573
580
  model_name=model_name, # Pass the correct model!
574
581
  )
575
582
  except Exception as e:
576
583
  logger.error(f"Error preprocessing query: {e}")
577
- enhanced = {"enhanced_text": request.query, "vector": [], "language": "en"}
584
+ enhanced = {"enhanced_text": query_text, "vector": [], "language": "en"}
578
585
  degraded = True
579
586
 
580
587
  # Perform search
@@ -691,7 +691,10 @@ class NativeVectorSearchSkill(SkillBase):
691
691
  self.logger.debug("Remote search returned %d results", len(results))
692
692
  else:
693
693
  # For local searches, preprocess the query locally
694
- from signalwire.search.query_processor import preprocess_query
694
+ from signalwire.search.query_processor import (
695
+ drop_corpus_terms,
696
+ preprocess_query,
697
+ )
695
698
 
696
699
  # Guaranteed non-None here: the guard above returns early when
697
700
  # not use_remote and search_engine is falsy.
@@ -709,7 +712,10 @@ class NativeVectorSearchSkill(SkillBase):
709
712
  extra_kwargs["model_name"] = model_for_query # Use model from index
710
713
 
711
714
  enhanced = preprocess_query(
712
- query,
715
+ drop_corpus_terms(
716
+ query,
717
+ getattr(self.search_engine, "query_stopwords", None) or [],
718
+ ),
713
719
  language="en",
714
720
  vector=True,
715
721
  query_nlp_backend=self.query_nlp_backend,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: signalwire-sdk
3
- Version: 3.7.2.dev132
3
+ Version: 3.7.2.dev134
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