signalwire-agents 1.0.18.dev7__tar.gz → 1.0.18.dev9__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_agents-1.0.18.dev7/signalwire_agents.egg-info → signalwire_agents-1.0.18.dev9}/PKG-INFO +2 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/pyproject.toml +2 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/__init__.py +1 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/agent_server.py +1 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/function_result.py +155 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/schema_utils.py +69 -16
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9/signalwire_agents.egg-info}/PKG-INFO +2 -1
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents.egg-info/requires.txt +1 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/LICENSE +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/man/sw-agent-init.1 +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/man/sw-search.1 +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/man/swaig-test.1 +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/setup.cfg +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/setup.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/agents/bedrock.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/build_search.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/config.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/core/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/core/agent_loader.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/core/argparse_helpers.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/core/dynamic_config.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/core/service_loader.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/dokku.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/execution/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/execution/datamap_exec.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/execution/webhook_exec.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/init_project.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/output/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/output/output_formatter.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/output/swml_dump.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/simulation/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/simulation/data_generation.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/simulation/data_overrides.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/simulation/mock_env.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/swaig_test_wrapper.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/test_swaig.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/types.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/config/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/deployment/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/deployment/handlers/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/prompt/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/prompt/manager.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/routing/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/security/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/swml/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/tools/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/tools/decorator.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent/tools/registry.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent_base.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/auth_handler.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/config_loader.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/contexts.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/data_map.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/logging_config.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/ai_config_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/auth_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/prompt_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/serverless_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/skill_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/state_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/tool_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/mixins/web_mixin.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/pom_builder.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/security/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/security/session_manager.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/security_config.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/skill_base.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/skill_manager.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/swaig_function.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/swml_builder.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/swml_handler.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/swml_renderer.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/swml_service.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/mcp_gateway/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/mcp_gateway/gateway_service.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/mcp_gateway/mcp_manager.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/mcp_gateway/session_manager.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/concierge.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/faq_bot.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/info_gatherer.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/receptionist.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/survey.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/schema.json +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/document_processor.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/index_builder.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/migration.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/models.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/pgvector_backend.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/query_processor.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/search_engine.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/search_service.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/api_ninjas_trivia/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/api_ninjas_trivia/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/api_ninjas_trivia/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere_serverless/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere_serverless/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datasphere_serverless/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datetime/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datetime/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/datetime/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/joke/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/joke/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/joke/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/math/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/math/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/math/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/mcp_gateway/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/mcp_gateway/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/mcp_gateway/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/native_vector_search/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/native_vector_search/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/native_vector_search/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/play_background_file/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/play_background_file/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/play_background_file/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/registry.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/spider/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/spider/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/spider/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/swml_transfer/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/swml_transfer/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/swml_transfer/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/weather_api/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/weather_api/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/weather_api/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/web_search/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/web_search/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/web_search/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/wikipedia_search/README.md +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/wikipedia_search/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/wikipedia_search/skill.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/pom_utils.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/token_generators.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/validators.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/web/__init__.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/web/web_service.py +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents.egg-info/SOURCES.txt +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents.egg-info/dependency_links.txt +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents.egg-info/entry_points.txt +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents.egg-info/top_level.txt +0 -0
- {signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/tests/test_examples.py +0 -0
{signalwire_agents-1.0.18.dev7/signalwire_agents.egg-info → signalwire_agents-1.0.18.dev9}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: signalwire_agents
|
|
3
|
-
Version: 1.0.18.
|
|
3
|
+
Version: 1.0.18.dev9
|
|
4
4
|
Summary: SignalWire AI Agents SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -29,6 +29,7 @@ Requires-Dist: uvicorn>=0.34.2
|
|
|
29
29
|
Requires-Dist: beautifulsoup4>=4.12.3
|
|
30
30
|
Requires-Dist: pytz>=2023.3
|
|
31
31
|
Requires-Dist: lxml>=4.9.0
|
|
32
|
+
Requires-Dist: jsonschema>=4.26.0
|
|
32
33
|
Provides-Extra: search-queryonly
|
|
33
34
|
Requires-Dist: numpy>=1.24.0; extra == "search-queryonly"
|
|
34
35
|
Requires-Dist: scikit-learn>=1.3.0; extra == "search-queryonly"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "signalwire_agents"
|
|
7
|
-
version = "1.0.18.
|
|
7
|
+
version = "1.0.18.dev9"
|
|
8
8
|
description = "SignalWire AI Agents SDK"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "SignalWire Team", email = "info@signalwire.com"}
|
|
@@ -36,6 +36,7 @@ dependencies = [
|
|
|
36
36
|
"beautifulsoup4>=4.12.3",
|
|
37
37
|
"pytz>=2023.3",
|
|
38
38
|
"lxml>=4.9.0",
|
|
39
|
+
"jsonschema>=4.26.0",
|
|
39
40
|
]
|
|
40
41
|
|
|
41
42
|
# Optional dependencies for search functionality
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/__init__.py
RENAMED
|
@@ -18,7 +18,7 @@ A package for building AI agents using SignalWire's AI and SWML capabilities.
|
|
|
18
18
|
from .core.logging_config import configure_logging
|
|
19
19
|
configure_logging()
|
|
20
20
|
|
|
21
|
-
__version__ = "1.0.18.
|
|
21
|
+
__version__ = "1.0.18.dev9"
|
|
22
22
|
|
|
23
23
|
# Import core classes for easier access
|
|
24
24
|
from .core.agent_base import AgentBase
|
|
@@ -1170,10 +1170,164 @@ class SwaigFunctionResult:
|
|
|
1170
1170
|
]
|
|
1171
1171
|
}
|
|
1172
1172
|
}
|
|
1173
|
-
|
|
1173
|
+
|
|
1174
1174
|
# Use execute_swml to add the action
|
|
1175
1175
|
return self.execute_swml(swml_doc)
|
|
1176
1176
|
|
|
1177
|
+
def execute_rpc(self, method: str, params: Optional[Dict[str, Any]] = None,
|
|
1178
|
+
call_id: Optional[str] = None, node_id: Optional[str] = None) -> 'SwaigFunctionResult':
|
|
1179
|
+
"""
|
|
1180
|
+
Execute an RPC method on a call using SWML.
|
|
1181
|
+
|
|
1182
|
+
This is a generic helper for executing RPC commands. For common operations,
|
|
1183
|
+
consider using the specific helpers: rpc_dial(), rpc_ai_message(), rpc_ai_unhold().
|
|
1184
|
+
|
|
1185
|
+
Args:
|
|
1186
|
+
method: The RPC method to execute (e.g., "dial", "ai_message", "ai_unhold")
|
|
1187
|
+
params: Parameters for the RPC method (optional)
|
|
1188
|
+
call_id: Target call ID for the RPC (optional)
|
|
1189
|
+
node_id: Target node ID for the RPC (optional)
|
|
1190
|
+
|
|
1191
|
+
Returns:
|
|
1192
|
+
self for method chaining
|
|
1193
|
+
|
|
1194
|
+
Example:
|
|
1195
|
+
result = (
|
|
1196
|
+
SwaigFunctionResult("Executing RPC")
|
|
1197
|
+
.execute_rpc(
|
|
1198
|
+
method="ai_message",
|
|
1199
|
+
call_id="some-call-id",
|
|
1200
|
+
params={"role": "system", "message_text": "Hello"}
|
|
1201
|
+
)
|
|
1202
|
+
)
|
|
1203
|
+
"""
|
|
1204
|
+
# Build the execute_rpc parameters
|
|
1205
|
+
rpc_params: Dict[str, Any] = {"method": method}
|
|
1206
|
+
|
|
1207
|
+
if call_id:
|
|
1208
|
+
rpc_params["call_id"] = call_id
|
|
1209
|
+
if node_id:
|
|
1210
|
+
rpc_params["node_id"] = node_id
|
|
1211
|
+
if params:
|
|
1212
|
+
rpc_params["params"] = params
|
|
1213
|
+
|
|
1214
|
+
# Generate SWML document
|
|
1215
|
+
swml_doc = {
|
|
1216
|
+
"version": "1.0.0",
|
|
1217
|
+
"sections": {
|
|
1218
|
+
"main": [
|
|
1219
|
+
{"execute_rpc": rpc_params}
|
|
1220
|
+
]
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
# Use execute_swml to add the action
|
|
1225
|
+
return self.execute_swml(swml_doc)
|
|
1226
|
+
|
|
1227
|
+
def rpc_dial(self, to_number: str, from_number: str, dest_swml: str,
|
|
1228
|
+
device_type: str = "phone") -> 'SwaigFunctionResult':
|
|
1229
|
+
"""
|
|
1230
|
+
Dial out to a number with a destination SWML URL using execute_rpc.
|
|
1231
|
+
|
|
1232
|
+
This is commonly used in call screening scenarios where you place a caller
|
|
1233
|
+
on hold and dial out to a human, with the dest_swml specifying what agent
|
|
1234
|
+
handles the outbound leg.
|
|
1235
|
+
|
|
1236
|
+
Args:
|
|
1237
|
+
to_number: Phone number to dial (E.164 format)
|
|
1238
|
+
from_number: Caller ID to use (E.164 format)
|
|
1239
|
+
dest_swml: URL to the SWML that handles the outbound call
|
|
1240
|
+
device_type: Device type, typically "phone" (default: "phone")
|
|
1241
|
+
|
|
1242
|
+
Returns:
|
|
1243
|
+
self for method chaining
|
|
1244
|
+
|
|
1245
|
+
Example:
|
|
1246
|
+
result = (
|
|
1247
|
+
SwaigFunctionResult("Please hold while I connect you.")
|
|
1248
|
+
.hold(timeout=120)
|
|
1249
|
+
.rpc_dial(
|
|
1250
|
+
to_number="+15551234567",
|
|
1251
|
+
from_number="+15559876543",
|
|
1252
|
+
dest_swml="https://example.com/call-agent?caller=John"
|
|
1253
|
+
)
|
|
1254
|
+
)
|
|
1255
|
+
"""
|
|
1256
|
+
return self.execute_rpc(
|
|
1257
|
+
method="dial",
|
|
1258
|
+
params={
|
|
1259
|
+
"devices": {
|
|
1260
|
+
"type": device_type,
|
|
1261
|
+
"params": {
|
|
1262
|
+
"to_number": to_number,
|
|
1263
|
+
"from_number": from_number
|
|
1264
|
+
}
|
|
1265
|
+
},
|
|
1266
|
+
"dest_swml": dest_swml
|
|
1267
|
+
}
|
|
1268
|
+
)
|
|
1269
|
+
|
|
1270
|
+
def rpc_ai_message(self, call_id: str, message_text: str,
|
|
1271
|
+
role: str = "system") -> 'SwaigFunctionResult':
|
|
1272
|
+
"""
|
|
1273
|
+
Inject a message into an AI agent on another call using execute_rpc.
|
|
1274
|
+
|
|
1275
|
+
This is useful for cross-call communication, such as notifying a held
|
|
1276
|
+
caller's AI agent about a status change or instructing it to relay
|
|
1277
|
+
a message.
|
|
1278
|
+
|
|
1279
|
+
Args:
|
|
1280
|
+
call_id: The call ID of the target call
|
|
1281
|
+
message_text: The message text to inject into the AI conversation
|
|
1282
|
+
role: The role for the message, typically "system" (default: "system")
|
|
1283
|
+
|
|
1284
|
+
Returns:
|
|
1285
|
+
self for method chaining
|
|
1286
|
+
|
|
1287
|
+
Example:
|
|
1288
|
+
result = (
|
|
1289
|
+
SwaigFunctionResult("I'll let them know.")
|
|
1290
|
+
.rpc_ai_message(
|
|
1291
|
+
call_id=original_call_id,
|
|
1292
|
+
message_text="The person you were trying to reach is unavailable. Please take a message."
|
|
1293
|
+
)
|
|
1294
|
+
)
|
|
1295
|
+
"""
|
|
1296
|
+
return self.execute_rpc(
|
|
1297
|
+
method="ai_message",
|
|
1298
|
+
call_id=call_id,
|
|
1299
|
+
params={
|
|
1300
|
+
"role": role,
|
|
1301
|
+
"message_text": message_text
|
|
1302
|
+
}
|
|
1303
|
+
)
|
|
1304
|
+
|
|
1305
|
+
def rpc_ai_unhold(self, call_id: str) -> 'SwaigFunctionResult':
|
|
1306
|
+
"""
|
|
1307
|
+
Unhold another call using execute_rpc.
|
|
1308
|
+
|
|
1309
|
+
This releases a call from hold state, typically used after injecting
|
|
1310
|
+
a message to the held caller's AI agent.
|
|
1311
|
+
|
|
1312
|
+
Args:
|
|
1313
|
+
call_id: The call ID of the call to unhold
|
|
1314
|
+
|
|
1315
|
+
Returns:
|
|
1316
|
+
self for method chaining
|
|
1317
|
+
|
|
1318
|
+
Example:
|
|
1319
|
+
result = (
|
|
1320
|
+
SwaigFunctionResult("Understood, I'll let them know.")
|
|
1321
|
+
.rpc_ai_message(call_id, "No one is available. Please take a message.")
|
|
1322
|
+
.rpc_ai_unhold(call_id)
|
|
1323
|
+
)
|
|
1324
|
+
"""
|
|
1325
|
+
return self.execute_rpc(
|
|
1326
|
+
method="ai_unhold",
|
|
1327
|
+
call_id=call_id,
|
|
1328
|
+
params={}
|
|
1329
|
+
)
|
|
1330
|
+
|
|
1177
1331
|
@staticmethod
|
|
1178
1332
|
def create_payment_prompt(for_situation: str, actions: List[Dict[str, str]],
|
|
1179
1333
|
card_type: Optional[str] = None,
|
|
@@ -18,6 +18,10 @@ import json
|
|
|
18
18
|
import logging
|
|
19
19
|
from typing import Dict, Any, List, Optional, Tuple
|
|
20
20
|
|
|
21
|
+
# jsonschema is required for full JSON Schema Draft 2020-12 validation
|
|
22
|
+
from jsonschema import Draft202012Validator, ValidationError
|
|
23
|
+
from jsonschema.exceptions import best_match
|
|
24
|
+
|
|
21
25
|
try:
|
|
22
26
|
import structlog
|
|
23
27
|
# Ensure structlog is configured
|
|
@@ -241,35 +245,84 @@ class SchemaUtils:
|
|
|
241
245
|
return verb_props.get("required", [])
|
|
242
246
|
return []
|
|
243
247
|
|
|
248
|
+
def _get_verb_schema(self, verb_name: str) -> Optional[Dict[str, Any]]:
|
|
249
|
+
"""
|
|
250
|
+
Get the JSON Schema for validating a verb config.
|
|
251
|
+
|
|
252
|
+
This constructs a schema that can be used with jsonschema.validate() by:
|
|
253
|
+
1. Getting the verb's property schema
|
|
254
|
+
2. Including all $defs from the main schema so $ref references resolve
|
|
255
|
+
|
|
256
|
+
Args:
|
|
257
|
+
verb_name: The name of the verb
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
A schema dict suitable for jsonschema validation, or None if not found
|
|
261
|
+
"""
|
|
262
|
+
verb_props = self.get_verb_properties(verb_name)
|
|
263
|
+
if not verb_props:
|
|
264
|
+
return None
|
|
265
|
+
|
|
266
|
+
# Create a schema with the $defs from the main schema so refs work
|
|
267
|
+
schema = verb_props.copy()
|
|
268
|
+
if "$defs" in self.schema:
|
|
269
|
+
schema["$defs"] = self.schema["$defs"]
|
|
270
|
+
|
|
271
|
+
return schema
|
|
272
|
+
|
|
244
273
|
def validate_verb(self, verb_name: str, verb_config: Dict[str, Any]) -> Tuple[bool, List[str]]:
|
|
245
274
|
"""
|
|
246
|
-
Validate a verb configuration against the
|
|
247
|
-
|
|
275
|
+
Validate a verb configuration against the JSON Schema.
|
|
276
|
+
|
|
277
|
+
Uses the jsonschema library for full JSON Schema Draft 2020-12 validation,
|
|
278
|
+
which checks all constraints including:
|
|
279
|
+
- Required properties
|
|
280
|
+
- Type checking (string, number, boolean, array, object)
|
|
281
|
+
- Pattern matching (regex constraints)
|
|
282
|
+
- Enum values
|
|
283
|
+
- Minimum/maximum values
|
|
284
|
+
- MinLength/maxLength for strings
|
|
285
|
+
- MinItems/maxItems for arrays
|
|
286
|
+
- anyOf/oneOf/allOf composition
|
|
287
|
+
- And all other JSON Schema keywords
|
|
288
|
+
|
|
248
289
|
Args:
|
|
249
290
|
verb_name: The name of the verb (e.g., "ai", "answer", etc.)
|
|
250
291
|
verb_config: The configuration for the verb
|
|
251
|
-
|
|
292
|
+
|
|
252
293
|
Returns:
|
|
253
294
|
(is_valid, error_messages) tuple
|
|
254
295
|
"""
|
|
255
|
-
# Simple validation for now - can be enhanced with more complete JSON Schema validation
|
|
256
296
|
errors = []
|
|
257
|
-
|
|
297
|
+
|
|
258
298
|
# Check if the verb exists in the schema
|
|
259
299
|
if verb_name not in self.verbs:
|
|
260
300
|
errors.append(f"Unknown verb: {verb_name}")
|
|
261
301
|
return False, errors
|
|
262
|
-
|
|
263
|
-
# Get the
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
302
|
+
|
|
303
|
+
# Get the verb schema for validation
|
|
304
|
+
verb_schema = self._get_verb_schema(verb_name)
|
|
305
|
+
if not verb_schema:
|
|
306
|
+
self.log.debug("verb_schema_not_found", verb=verb_name,
|
|
307
|
+
message="Could not extract verb schema, allowing config")
|
|
308
|
+
return True, []
|
|
309
|
+
|
|
310
|
+
# Use jsonschema for full validation
|
|
311
|
+
validator = Draft202012Validator(verb_schema)
|
|
312
|
+
validation_errors = list(validator.iter_errors(verb_config))
|
|
313
|
+
|
|
314
|
+
if not validation_errors:
|
|
315
|
+
return True, []
|
|
316
|
+
|
|
317
|
+
# Collect all error messages with their paths
|
|
318
|
+
for error in validation_errors:
|
|
319
|
+
if error.path:
|
|
320
|
+
path_str = ".".join(str(p) for p in error.path)
|
|
321
|
+
errors.append(f"{path_str}: {error.message}")
|
|
322
|
+
else:
|
|
323
|
+
errors.append(error.message)
|
|
324
|
+
|
|
325
|
+
return False, errors
|
|
273
326
|
|
|
274
327
|
def get_all_verb_names(self) -> List[str]:
|
|
275
328
|
"""
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9/signalwire_agents.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: signalwire_agents
|
|
3
|
-
Version: 1.0.18.
|
|
3
|
+
Version: 1.0.18.dev9
|
|
4
4
|
Summary: SignalWire AI Agents SDK
|
|
5
5
|
Author-email: SignalWire Team <info@signalwire.com>
|
|
6
6
|
License: MIT
|
|
@@ -29,6 +29,7 @@ Requires-Dist: uvicorn>=0.34.2
|
|
|
29
29
|
Requires-Dist: beautifulsoup4>=4.12.3
|
|
30
30
|
Requires-Dist: pytz>=2023.3
|
|
31
31
|
Requires-Dist: lxml>=4.9.0
|
|
32
|
+
Requires-Dist: jsonschema>=4.26.0
|
|
32
33
|
Provides-Extra: search-queryonly
|
|
33
34
|
Requires-Dist: numpy>=1.24.0; extra == "search-queryonly"
|
|
34
35
|
Requires-Dist: scikit-learn>=1.3.0; extra == "search-queryonly"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/agents/bedrock.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/dokku.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/test_swaig.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/cli/types.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/__init__.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/agent_base.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/contexts.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/data_map.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/core/skill_base.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/faq_bot.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/prefabs/survey.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/schema.json
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/search/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/README.md
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/__init__.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/skills/registry.py
RENAMED
|
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_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/__init__.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/utils/pom_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/web/__init__.py
RENAMED
|
File without changes
|
{signalwire_agents-1.0.18.dev7 → signalwire_agents-1.0.18.dev9}/signalwire_agents/web/web_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|