signalwire-agents 0.1.6__py3-none-any.whl → 1.0.7__py3-none-any.whl

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 (140) hide show
  1. signalwire_agents/__init__.py +130 -4
  2. signalwire_agents/agent_server.py +438 -32
  3. signalwire_agents/agents/bedrock.py +296 -0
  4. signalwire_agents/cli/__init__.py +18 -0
  5. signalwire_agents/cli/build_search.py +1367 -0
  6. signalwire_agents/cli/config.py +80 -0
  7. signalwire_agents/cli/core/__init__.py +10 -0
  8. signalwire_agents/cli/core/agent_loader.py +470 -0
  9. signalwire_agents/cli/core/argparse_helpers.py +179 -0
  10. signalwire_agents/cli/core/dynamic_config.py +71 -0
  11. signalwire_agents/cli/core/service_loader.py +303 -0
  12. signalwire_agents/cli/execution/__init__.py +10 -0
  13. signalwire_agents/cli/execution/datamap_exec.py +446 -0
  14. signalwire_agents/cli/execution/webhook_exec.py +134 -0
  15. signalwire_agents/cli/init_project.py +1225 -0
  16. signalwire_agents/cli/output/__init__.py +10 -0
  17. signalwire_agents/cli/output/output_formatter.py +255 -0
  18. signalwire_agents/cli/output/swml_dump.py +186 -0
  19. signalwire_agents/cli/simulation/__init__.py +10 -0
  20. signalwire_agents/cli/simulation/data_generation.py +374 -0
  21. signalwire_agents/cli/simulation/data_overrides.py +200 -0
  22. signalwire_agents/cli/simulation/mock_env.py +282 -0
  23. signalwire_agents/cli/swaig_test_wrapper.py +52 -0
  24. signalwire_agents/cli/test_swaig.py +809 -0
  25. signalwire_agents/cli/types.py +81 -0
  26. signalwire_agents/core/__init__.py +2 -2
  27. signalwire_agents/core/agent/__init__.py +12 -0
  28. signalwire_agents/core/agent/config/__init__.py +12 -0
  29. signalwire_agents/core/agent/deployment/__init__.py +9 -0
  30. signalwire_agents/core/agent/deployment/handlers/__init__.py +9 -0
  31. signalwire_agents/core/agent/prompt/__init__.py +14 -0
  32. signalwire_agents/core/agent/prompt/manager.py +306 -0
  33. signalwire_agents/core/agent/routing/__init__.py +9 -0
  34. signalwire_agents/core/agent/security/__init__.py +9 -0
  35. signalwire_agents/core/agent/swml/__init__.py +9 -0
  36. signalwire_agents/core/agent/tools/__init__.py +15 -0
  37. signalwire_agents/core/agent/tools/decorator.py +97 -0
  38. signalwire_agents/core/agent/tools/registry.py +210 -0
  39. signalwire_agents/core/agent_base.py +959 -2166
  40. signalwire_agents/core/auth_handler.py +233 -0
  41. signalwire_agents/core/config_loader.py +259 -0
  42. signalwire_agents/core/contexts.py +707 -0
  43. signalwire_agents/core/data_map.py +487 -0
  44. signalwire_agents/core/function_result.py +1150 -1
  45. signalwire_agents/core/logging_config.py +376 -0
  46. signalwire_agents/core/mixins/__init__.py +28 -0
  47. signalwire_agents/core/mixins/ai_config_mixin.py +442 -0
  48. signalwire_agents/core/mixins/auth_mixin.py +287 -0
  49. signalwire_agents/core/mixins/prompt_mixin.py +358 -0
  50. signalwire_agents/core/mixins/serverless_mixin.py +368 -0
  51. signalwire_agents/core/mixins/skill_mixin.py +55 -0
  52. signalwire_agents/core/mixins/state_mixin.py +153 -0
  53. signalwire_agents/core/mixins/tool_mixin.py +230 -0
  54. signalwire_agents/core/mixins/web_mixin.py +1134 -0
  55. signalwire_agents/core/security/session_manager.py +174 -86
  56. signalwire_agents/core/security_config.py +333 -0
  57. signalwire_agents/core/skill_base.py +200 -0
  58. signalwire_agents/core/skill_manager.py +244 -0
  59. signalwire_agents/core/swaig_function.py +33 -9
  60. signalwire_agents/core/swml_builder.py +212 -12
  61. signalwire_agents/core/swml_handler.py +43 -13
  62. signalwire_agents/core/swml_renderer.py +123 -297
  63. signalwire_agents/core/swml_service.py +277 -260
  64. signalwire_agents/prefabs/concierge.py +6 -2
  65. signalwire_agents/prefabs/info_gatherer.py +149 -33
  66. signalwire_agents/prefabs/receptionist.py +14 -22
  67. signalwire_agents/prefabs/survey.py +6 -2
  68. signalwire_agents/schema.json +9218 -5489
  69. signalwire_agents/search/__init__.py +137 -0
  70. signalwire_agents/search/document_processor.py +1223 -0
  71. signalwire_agents/search/index_builder.py +804 -0
  72. signalwire_agents/search/migration.py +418 -0
  73. signalwire_agents/search/models.py +30 -0
  74. signalwire_agents/search/pgvector_backend.py +752 -0
  75. signalwire_agents/search/query_processor.py +502 -0
  76. signalwire_agents/search/search_engine.py +1264 -0
  77. signalwire_agents/search/search_service.py +574 -0
  78. signalwire_agents/skills/README.md +452 -0
  79. signalwire_agents/skills/__init__.py +23 -0
  80. signalwire_agents/skills/api_ninjas_trivia/README.md +215 -0
  81. signalwire_agents/skills/api_ninjas_trivia/__init__.py +12 -0
  82. signalwire_agents/skills/api_ninjas_trivia/skill.py +237 -0
  83. signalwire_agents/skills/datasphere/README.md +210 -0
  84. signalwire_agents/skills/datasphere/__init__.py +12 -0
  85. signalwire_agents/skills/datasphere/skill.py +310 -0
  86. signalwire_agents/skills/datasphere_serverless/README.md +258 -0
  87. signalwire_agents/skills/datasphere_serverless/__init__.py +10 -0
  88. signalwire_agents/skills/datasphere_serverless/skill.py +237 -0
  89. signalwire_agents/skills/datetime/README.md +132 -0
  90. signalwire_agents/skills/datetime/__init__.py +10 -0
  91. signalwire_agents/skills/datetime/skill.py +126 -0
  92. signalwire_agents/skills/joke/README.md +149 -0
  93. signalwire_agents/skills/joke/__init__.py +10 -0
  94. signalwire_agents/skills/joke/skill.py +109 -0
  95. signalwire_agents/skills/math/README.md +161 -0
  96. signalwire_agents/skills/math/__init__.py +10 -0
  97. signalwire_agents/skills/math/skill.py +105 -0
  98. signalwire_agents/skills/mcp_gateway/README.md +230 -0
  99. signalwire_agents/skills/mcp_gateway/__init__.py +10 -0
  100. signalwire_agents/skills/mcp_gateway/skill.py +421 -0
  101. signalwire_agents/skills/native_vector_search/README.md +210 -0
  102. signalwire_agents/skills/native_vector_search/__init__.py +10 -0
  103. signalwire_agents/skills/native_vector_search/skill.py +820 -0
  104. signalwire_agents/skills/play_background_file/README.md +218 -0
  105. signalwire_agents/skills/play_background_file/__init__.py +12 -0
  106. signalwire_agents/skills/play_background_file/skill.py +242 -0
  107. signalwire_agents/skills/registry.py +459 -0
  108. signalwire_agents/skills/spider/README.md +236 -0
  109. signalwire_agents/skills/spider/__init__.py +13 -0
  110. signalwire_agents/skills/spider/skill.py +598 -0
  111. signalwire_agents/skills/swml_transfer/README.md +395 -0
  112. signalwire_agents/skills/swml_transfer/__init__.py +10 -0
  113. signalwire_agents/skills/swml_transfer/skill.py +359 -0
  114. signalwire_agents/skills/weather_api/README.md +178 -0
  115. signalwire_agents/skills/weather_api/__init__.py +12 -0
  116. signalwire_agents/skills/weather_api/skill.py +191 -0
  117. signalwire_agents/skills/web_search/README.md +163 -0
  118. signalwire_agents/skills/web_search/__init__.py +10 -0
  119. signalwire_agents/skills/web_search/skill.py +739 -0
  120. signalwire_agents/skills/wikipedia_search/README.md +228 -0
  121. signalwire_agents/{core/state → skills/wikipedia_search}/__init__.py +5 -4
  122. signalwire_agents/skills/wikipedia_search/skill.py +210 -0
  123. signalwire_agents/utils/__init__.py +14 -0
  124. signalwire_agents/utils/schema_utils.py +111 -44
  125. signalwire_agents/web/__init__.py +17 -0
  126. signalwire_agents/web/web_service.py +559 -0
  127. signalwire_agents-1.0.7.data/data/share/man/man1/sw-agent-init.1 +307 -0
  128. signalwire_agents-1.0.7.data/data/share/man/man1/sw-search.1 +483 -0
  129. signalwire_agents-1.0.7.data/data/share/man/man1/swaig-test.1 +308 -0
  130. signalwire_agents-1.0.7.dist-info/METADATA +992 -0
  131. signalwire_agents-1.0.7.dist-info/RECORD +142 -0
  132. {signalwire_agents-0.1.6.dist-info → signalwire_agents-1.0.7.dist-info}/WHEEL +1 -1
  133. signalwire_agents-1.0.7.dist-info/entry_points.txt +4 -0
  134. signalwire_agents/core/state/file_state_manager.py +0 -219
  135. signalwire_agents/core/state/state_manager.py +0 -101
  136. signalwire_agents-0.1.6.data/data/schema.json +0 -5611
  137. signalwire_agents-0.1.6.dist-info/METADATA +0 -199
  138. signalwire_agents-0.1.6.dist-info/RECORD +0 -34
  139. {signalwire_agents-0.1.6.dist-info → signalwire_agents-1.0.7.dist-info}/licenses/LICENSE +0 -0
  140. {signalwire_agents-0.1.6.dist-info → signalwire_agents-1.0.7.dist-info}/top_level.txt +0 -0
@@ -1,199 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: signalwire_agents
3
- Version: 0.1.6
4
- Summary: SignalWire AI Agents SDK
5
- Author-email: SignalWire Team <info@signalwire.com>
6
- Project-URL: Homepage, https://github.com/signalwire/signalwire-ai-agents
7
- Classifier: Development Status :: 3 - Alpha
8
- Classifier: Intended Audience :: Developers
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.7
12
- Classifier: Programming Language :: Python :: 3.8
13
- Classifier: Programming Language :: Python :: 3.9
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Requires-Python: >=3.7
17
- Description-Content-Type: text/markdown
18
- License-File: LICENSE
19
- Requires-Dist: fastapi==0.115.12
20
- Requires-Dist: pydantic==2.11.4
21
- Requires-Dist: PyYAML==6.0.2
22
- Requires-Dist: Requests==2.32.3
23
- Requires-Dist: setuptools==66.1.1
24
- Requires-Dist: signalwire_pom==2.7.1
25
- Requires-Dist: structlog==25.3.0
26
- Requires-Dist: uvicorn==0.34.2
27
- Dynamic: license-file
28
-
29
- # SignalWire AI Agent SDK
30
-
31
- A Python SDK for creating, hosting, and securing SignalWire AI agents as microservices with minimal boilerplate.
32
-
33
- ## Features
34
-
35
- - **Self-Contained Agents**: Each agent is both a web app and an AI persona
36
- - **Prompt Object Model**: Structured prompt composition using POM
37
- - **SWAIG Integration**: Easily define and handle AI tools/functions
38
- - **Custom Routing**: Dynamic request handling for different paths and content
39
- - **Security Built-In**: Session management, function-specific security tokens, and basic auth
40
- - **State Management**: Persistent conversation state with automatic tracking
41
- - **Prefab Archetypes**: Ready-to-use agent types for common scenarios
42
- - **Multi-Agent Support**: Host multiple agents on a single server
43
-
44
- ## Installation
45
-
46
- ```bash
47
- pip install signalwire-agents
48
- ```
49
-
50
- ## Quick Start
51
-
52
- ```python
53
- from signalwire_agents import AgentBase
54
- from signalwire_agents.core.function_result import SwaigFunctionResult
55
-
56
- class SimpleAgent(AgentBase):
57
- def __init__(self):
58
- super().__init__(name="simple", route="/simple")
59
-
60
- # Configure the agent's personality
61
- self.prompt_add_section("Personality", body="You are a helpful assistant.")
62
- self.prompt_add_section("Goal", body="Help users with basic questions.")
63
- self.prompt_add_section("Instructions", bullets=["Be concise and clear."])
64
-
65
- # Alternative using convenience methods:
66
- # self.setPersonality("You are a helpful assistant.")
67
- # self.setGoal("Help users with basic questions.")
68
- # self.setInstructions(["Be concise and clear."])
69
-
70
- @AgentBase.tool(
71
- name="get_time",
72
- description="Get the current time",
73
- parameters={}
74
- )
75
- def get_time(self, args, raw_data):
76
- from datetime import datetime
77
- now = datetime.now().strftime("%H:%M:%S")
78
- return SwaigFunctionResult(f"The current time is {now}")
79
-
80
- # Run the agent
81
- if __name__ == "__main__":
82
- agent = SimpleAgent()
83
- agent.serve(host="0.0.0.0", port=8000)
84
- ```
85
-
86
- ## Using State Management
87
-
88
- ```python
89
- from signalwire_agents import AgentBase
90
- from signalwire_agents.core.function_result import SwaigFunctionResult
91
- from signalwire_agents.core.state import FileStateManager
92
-
93
- class StatefulAgent(AgentBase):
94
- def __init__(self):
95
- # Configure state management
96
- state_manager = FileStateManager(storage_dir="./state_data")
97
-
98
- super().__init__(
99
- name="stateful",
100
- route="/stateful",
101
- enable_state_tracking=True, # Enable state tracking
102
- state_manager=state_manager # Use custom state manager
103
- )
104
-
105
- # When enable_state_tracking=True, startup_hook and hangup_hook
106
- # are automatically registered to track session lifecycle
107
-
108
- # Custom tool for accessing and updating state
109
- @AgentBase.tool(
110
- name="save_preference",
111
- description="Save a user preference",
112
- parameters={
113
- "preference_name": {
114
- "type": "string",
115
- "description": "Name of the preference to save"
116
- },
117
- "preference_value": {
118
- "type": "string",
119
- "description": "Value of the preference"
120
- }
121
- }
122
- )
123
- def save_preference(self, args, raw_data):
124
- # Get the call ID from the raw data
125
- call_id = raw_data.get("call_id")
126
-
127
- if call_id:
128
- # Get current state or empty dict if none exists
129
- state = self.get_state(call_id) or {}
130
-
131
- # Update the state
132
- preferences = state.get("preferences", {})
133
- preferences[args.get("preference_name")] = args.get("preference_value")
134
- state["preferences"] = preferences
135
-
136
- # Save the updated state
137
- self.update_state(call_id, state)
138
-
139
- return SwaigFunctionResult("Preference saved successfully")
140
- else:
141
- return SwaigFunctionResult("Could not save preference: No call ID")
142
- ```
143
-
144
- ## Using Prefab Agents
145
-
146
- ```python
147
- from signalwire_agents.prefabs import InfoGathererAgent
148
-
149
- agent = InfoGathererAgent(
150
- fields=[
151
- {"name": "full_name", "prompt": "What is your full name?"},
152
- {"name": "reason", "prompt": "How can I help you today?"}
153
- ],
154
- confirmation_template="Thanks {full_name}, I'll help you with {reason}.",
155
- name="info-gatherer",
156
- route="/info-gatherer"
157
- )
158
-
159
- agent.serve(host="0.0.0.0", port=8000)
160
- ```
161
-
162
- Available prefabs include:
163
- - `InfoGathererAgent`: Collects structured information from users
164
- - `FAQBotAgent`: Answers questions based on a knowledge base
165
- - `ConciergeAgent`: Routes users to specialized agents
166
- - `SurveyAgent`: Conducts structured surveys with questions and rating scales
167
-
168
- ## Configuration
169
-
170
- ### Environment Variables
171
-
172
- The SDK supports the following environment variables:
173
-
174
- - `SWML_BASIC_AUTH_USER`: Username for basic auth (default: auto-generated)
175
- - `SWML_BASIC_AUTH_PASSWORD`: Password for basic auth (default: auto-generated)
176
- - `SWML_PROXY_URL_BASE`: Base URL to use when behind a reverse proxy, used for constructing webhook URLs
177
- - `SWML_SSL_ENABLED`: Enable HTTPS/SSL support (values: "true", "1", "yes")
178
- - `SWML_SSL_CERT_PATH`: Path to SSL certificate file
179
- - `SWML_SSL_KEY_PATH`: Path to SSL private key file
180
- - `SWML_DOMAIN`: Domain name for SSL certificate and external URLs
181
- - `SWML_SCHEMA_PATH`: Optional path to override the location of the schema.json file
182
-
183
- When the auth environment variables are set, they will be used for all agents instead of generating random credentials. The proxy URL base is useful when your service is behind a reverse proxy or when you need external services to access your webhooks.
184
-
185
- To enable HTTPS directly (without a reverse proxy), set `SWML_SSL_ENABLED` to "true", provide valid paths to your certificate and key files, and specify your domain name.
186
-
187
- ## Documentation
188
-
189
- The package includes comprehensive documentation in the `docs/` directory:
190
-
191
- - [Agent Guide](docs/agent_guide.md) - Detailed guide to creating and customizing agents
192
- - [Architecture](docs/architecture.md) - Overview of the SDK architecture and core concepts
193
- - [SWML Service Guide](docs/swml_service_guide.md) - Guide to the underlying SWML service
194
-
195
- These documents provide in-depth explanations of the features, APIs, and usage patterns.
196
-
197
- ## License
198
-
199
- MIT
@@ -1,34 +0,0 @@
1
- signalwire_agents/__init__.py,sha256=q_3tXAaEKU5Yrua20bVq-dFYg0Q4burukwe_9KBujdw,800
2
- signalwire_agents/agent_server.py,sha256=se_YzOQE5UUoRUKCbTnOg9qr4G3qN7iVuQLutwXEwFU,12850
3
- signalwire_agents/schema.json,sha256=M8Mn6pQda2P9jhbmkALrLr1wt-fRuhYRqdmEi9Rbhqk,178075
4
- signalwire_agents/core/__init__.py,sha256=mVDLbpq1pg_WwiqsQR28NNZwJ6-VUXFIfg-vN7pk0ew,806
5
- signalwire_agents/core/agent_base.py,sha256=Qd25AARkFl7zGj01o7XZogtk6f8PpXYsz7bfRcpwUuA,99436
6
- signalwire_agents/core/function_result.py,sha256=vD8eBDJBQNNnss1jShadfogCZw_prODB6eBkTuVgZKA,3538
7
- signalwire_agents/core/pom_builder.py,sha256=ywuiIfP8BeLBPo_G4X1teZlG6zTCMkW71CZnmyoDTAQ,6636
8
- signalwire_agents/core/swaig_function.py,sha256=WoHGQuCmU9L9k39pttRunmfRtIa_PnNRn9W0Xq3MfIk,6316
9
- signalwire_agents/core/swml_builder.py,sha256=Y_eHThVVso-_Hz4f73eEuu3HJstsM9PtBl-36GvAXhI,6594
10
- signalwire_agents/core/swml_handler.py,sha256=KvphI_YY47VWGVXaix_N3SuQSyygHEUr9We6xESQK44,7002
11
- signalwire_agents/core/swml_renderer.py,sha256=iobMWWoBR7dkHndI3Qlwf4C0fg2p7DmAU2Rb7ZmmLhA,13891
12
- signalwire_agents/core/swml_service.py,sha256=J3IHJxU172bQa0zd2xRtFwVWonui4f1v_ki1KYHl9lI,47414
13
- signalwire_agents/core/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
14
- signalwire_agents/core/security/session_manager.py,sha256=5y0Mr3cI63cO34ctFgq-KX26mdG0Tpr7rTEsgoTS_44,5229
15
- signalwire_agents/core/state/__init__.py,sha256=qpYIfQBApet6VQsy6diS3yu0lMxCBC6REOUk5l1McUw,379
16
- signalwire_agents/core/state/file_state_manager.py,sha256=52I_KVlmhHCbKIaHj74Q-ksP_-AF6ewYmOXCf4n5DTQ,7307
17
- signalwire_agents/core/state/state_manager.py,sha256=76B4mDutMb826dK4c_IJhOXH09BW1bJu6EZa6Mh_LB4,2511
18
- signalwire_agents/prefabs/__init__.py,sha256=MW11J63XH7KxF2MWguRsMFM9iqMWexaEO9ynDPL_PDM,715
19
- signalwire_agents/prefabs/concierge.py,sha256=--esvAV1lozQGYXHAqvSg8_TtlIoVfQK75APJ5zqX9I,9779
20
- signalwire_agents/prefabs/faq_bot.py,sha256=cUuHhnDB8S4aVg-DiQe4jBmCAPrYQrND_Mff9iaeEa0,10572
21
- signalwire_agents/prefabs/info_gatherer.py,sha256=y9gxjq1vF0-TrE6m734dCcAHqxt0I_DyCqxoM45QY8U,9940
22
- signalwire_agents/prefabs/receptionist.py,sha256=Wb22igXTD8QK9lQVcJq88eIk7qQ2GSSIzSGuYyK-Dbk,10293
23
- signalwire_agents/prefabs/survey.py,sha256=1pyUeZ5heDqFAYqkYs5fHN_jQ7TKqJInnOOUQEajSsY,14358
24
- signalwire_agents/utils/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
25
- signalwire_agents/utils/pom_utils.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
26
- signalwire_agents/utils/schema_utils.py,sha256=LvFCFvJTQk_xYK0B-NXbkXKEF7Zmv-LqpV_vfpPnOb4,13473
27
- signalwire_agents/utils/token_generators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
28
- signalwire_agents/utils/validators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
29
- signalwire_agents-0.1.6.data/data/schema.json,sha256=M8Mn6pQda2P9jhbmkALrLr1wt-fRuhYRqdmEi9Rbhqk,178075
30
- signalwire_agents-0.1.6.dist-info/licenses/LICENSE,sha256=NYvAsB-rTcSvG9cqHt9EUHAWLiA9YzM4Qfz-mPdvDR0,1067
31
- signalwire_agents-0.1.6.dist-info/METADATA,sha256=A4krRD2w2jb0ukbBI1kHZ6nYctSZodaaMC6Oyja13nI,7414
32
- signalwire_agents-0.1.6.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
33
- signalwire_agents-0.1.6.dist-info/top_level.txt,sha256=kDGS6ZYv84K9P5Kyg9_S8P_pbUXoHkso0On_DB5bbWc,18
34
- signalwire_agents-0.1.6.dist-info/RECORD,,