signalwire-agents 0.1.10__py3-none-any.whl → 0.1.11__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 (37) hide show
  1. signalwire_agents/__init__.py +39 -4
  2. signalwire_agents/agent_server.py +46 -2
  3. signalwire_agents/cli/__init__.py +9 -0
  4. signalwire_agents/cli/test_swaig.py +2545 -0
  5. signalwire_agents/core/agent_base.py +691 -82
  6. signalwire_agents/core/contexts.py +289 -0
  7. signalwire_agents/core/data_map.py +499 -0
  8. signalwire_agents/core/function_result.py +57 -10
  9. signalwire_agents/core/skill_base.py +27 -37
  10. signalwire_agents/core/skill_manager.py +89 -23
  11. signalwire_agents/core/swaig_function.py +13 -1
  12. signalwire_agents/core/swml_handler.py +37 -13
  13. signalwire_agents/core/swml_service.py +37 -28
  14. signalwire_agents/skills/datasphere/__init__.py +12 -0
  15. signalwire_agents/skills/datasphere/skill.py +229 -0
  16. signalwire_agents/skills/datasphere_serverless/__init__.py +1 -0
  17. signalwire_agents/skills/datasphere_serverless/skill.py +156 -0
  18. signalwire_agents/skills/datetime/skill.py +9 -5
  19. signalwire_agents/skills/joke/__init__.py +1 -0
  20. signalwire_agents/skills/joke/skill.py +88 -0
  21. signalwire_agents/skills/math/skill.py +9 -6
  22. signalwire_agents/skills/registry.py +23 -4
  23. signalwire_agents/skills/web_search/skill.py +57 -21
  24. signalwire_agents/skills/wikipedia/__init__.py +9 -0
  25. signalwire_agents/skills/wikipedia/skill.py +180 -0
  26. signalwire_agents/utils/__init__.py +2 -0
  27. signalwire_agents/utils/schema_utils.py +111 -44
  28. signalwire_agents/utils/serverless.py +38 -0
  29. signalwire_agents-0.1.11.dist-info/METADATA +756 -0
  30. signalwire_agents-0.1.11.dist-info/RECORD +58 -0
  31. {signalwire_agents-0.1.10.dist-info → signalwire_agents-0.1.11.dist-info}/WHEEL +1 -1
  32. signalwire_agents-0.1.11.dist-info/entry_points.txt +2 -0
  33. signalwire_agents-0.1.10.dist-info/METADATA +0 -319
  34. signalwire_agents-0.1.10.dist-info/RECORD +0 -44
  35. {signalwire_agents-0.1.10.data → signalwire_agents-0.1.11.data}/data/schema.json +0 -0
  36. {signalwire_agents-0.1.10.dist-info → signalwire_agents-0.1.11.dist-info}/licenses/LICENSE +0 -0
  37. {signalwire_agents-0.1.10.dist-info → signalwire_agents-0.1.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,58 @@
1
+ signalwire_agents/__init__.py,sha256=mEPuH4ErsZlh9JLfubfSeGV0I4KuoQpWSJRRP2Sn3-8,1945
2
+ signalwire_agents/agent_server.py,sha256=izHQGIGnThVhBNtcDKEakS54uew4rn82bnwKIZL8M34,15519
3
+ signalwire_agents/schema.json,sha256=M8Mn6pQda2P9jhbmkALrLr1wt-fRuhYRqdmEi9Rbhqk,178075
4
+ signalwire_agents/cli/__init__.py,sha256=Iy2BfWDWBEZoA1cyHTDsooBSVMx4vH5Ddhr3sEuFe8c,197
5
+ signalwire_agents/cli/test_swaig.py,sha256=PZYb87-lzdi_Q9qIfEjUG989tRxme9B-6kWSKfFujLw,96208
6
+ signalwire_agents/core/__init__.py,sha256=mVDLbpq1pg_WwiqsQR28NNZwJ6-VUXFIfg-vN7pk0ew,806
7
+ signalwire_agents/core/agent_base.py,sha256=aFrF2oZOwWogLbJwF3Ezit_auliurW5U5pPqDYxNtdE,141709
8
+ signalwire_agents/core/contexts.py,sha256=h7hra4xoiKAUdVyJhcKggl8X9EoqwTVWBmNMp-sEsuc,9598
9
+ signalwire_agents/core/data_map.py,sha256=U-HLEZQomWf-UI0-nLAE8g1oyRdE5bU_WxQpboI2YI4,17695
10
+ signalwire_agents/core/function_result.py,sha256=SP46vPAliEzwh3JeeSxmLD_f7_ixRxMBtpSl3t7jieU,45370
11
+ signalwire_agents/core/pom_builder.py,sha256=ywuiIfP8BeLBPo_G4X1teZlG6zTCMkW71CZnmyoDTAQ,6636
12
+ signalwire_agents/core/skill_base.py,sha256=lOpVTLhD9NjStF7Lxh6bAQUGa3DpNYV4agXJRakRuX0,4258
13
+ signalwire_agents/core/skill_manager.py,sha256=6vAzkWYeycilX-5T1B039sf8s11BfRh6ASstt70wWsw,8074
14
+ signalwire_agents/core/swaig_function.py,sha256=OG76Hrtbc8H1mPR5opTmNUEOo0yOMbpbMfZMZjG69Ek,6874
15
+ signalwire_agents/core/swml_builder.py,sha256=Q1ikU9pedgjW888mjbqDFv-jMDvDZ-tZgfyMfu4qQN0,6719
16
+ signalwire_agents/core/swml_handler.py,sha256=C8NvMpNdFg9UiEzPwMmMXMn8X6w10IShKjBJ8VSITBk,8189
17
+ signalwire_agents/core/swml_renderer.py,sha256=iobMWWoBR7dkHndI3Qlwf4C0fg2p7DmAU2Rb7ZmmLhA,13891
18
+ signalwire_agents/core/swml_service.py,sha256=3yhYfowgdKphjf2OLJYuaPsE6Paewe6rAO3e7F7NPic,49797
19
+ signalwire_agents/core/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
20
+ signalwire_agents/core/security/session_manager.py,sha256=s5hXYcFnrsYFoyo-zcN7EJy-wInZQI_cWTBHX9MxHR4,9164
21
+ signalwire_agents/core/state/__init__.py,sha256=qpYIfQBApet6VQsy6diS3yu0lMxCBC6REOUk5l1McUw,379
22
+ signalwire_agents/core/state/file_state_manager.py,sha256=52I_KVlmhHCbKIaHj74Q-ksP_-AF6ewYmOXCf4n5DTQ,7307
23
+ signalwire_agents/core/state/state_manager.py,sha256=76B4mDutMb826dK4c_IJhOXH09BW1bJu6EZa6Mh_LB4,2511
24
+ signalwire_agents/prefabs/__init__.py,sha256=MW11J63XH7KxF2MWguRsMFM9iqMWexaEO9ynDPL_PDM,715
25
+ signalwire_agents/prefabs/concierge.py,sha256=FQxSUBAVH2ECtNs4GGa3f0EPiOrAKaz14h7byNFy5K8,10106
26
+ signalwire_agents/prefabs/faq_bot.py,sha256=NrUn5AGmtdzYTyxTHPt8BZ14ZN1sh4xKA2SVQUlfPPQ,10834
27
+ signalwire_agents/prefabs/info_gatherer.py,sha256=dr9UUgNGX7MIKdCMth3jDVLf6OrHov5G6_zIuNvnrOY,15468
28
+ signalwire_agents/prefabs/receptionist.py,sha256=8EyQ6M0Egs3g7KKWukHFiO9UPoVUxT4MLkvyT3V8o64,10585
29
+ signalwire_agents/prefabs/survey.py,sha256=IIIQfgvMlfVNjEEEdWUn4lAJqVsCDlBsIAkOJ1ckyAE,14796
30
+ signalwire_agents/skills/__init__.py,sha256=xfxrQ0i-aTRomHiCsqelU4RlNlHPJFPgPu-UBDaBOqA,340
31
+ signalwire_agents/skills/registry.py,sha256=BBYEh-9j6FCy5RMegsat7wyMnB-Upj3e1HiqU6e4H4k,4109
32
+ signalwire_agents/skills/datasphere/__init__.py,sha256=SJJlmeMSeezjINPgkuWN1XzDPN_Z3GzZ_StzO1BtxQs,257
33
+ signalwire_agents/skills/datasphere/skill.py,sha256=L6GrGwej3sKPcHljKBNf4it5g4DaGzR18KlQx65_XKg,9598
34
+ signalwire_agents/skills/datasphere_serverless/__init__.py,sha256=65hu8_0eqiczLSZ-aJgASpMQqTUjzTQUI1fC8GI7qTI,70
35
+ signalwire_agents/skills/datasphere_serverless/skill.py,sha256=C3wynBZT2qCezPwb1_F8d37die98bMTNWX8mz5ugiE4,6826
36
+ signalwire_agents/skills/datetime/__init__.py,sha256=coPaY-k2EyZWuYckGunhSJ65Y1Jwz66h-iOo0QWb5WY,43
37
+ signalwire_agents/skills/datetime/skill.py,sha256=aBBdcPV5xWX6uWi9W0VqZ0kKOqC3JHrAhG1bZn58ro8,3900
38
+ signalwire_agents/skills/joke/__init__.py,sha256=R-iS9UMMvOdpkxL9aooVik16eCddJw14Rz4PmFqCdsM,53
39
+ signalwire_agents/skills/joke/skill.py,sha256=AFaf6fMy0sxUPJHvcnf3CWMuPqpJP4ODscUexMadEcU,3381
40
+ signalwire_agents/skills/math/__init__.py,sha256=lGAFWEmJH2fuwkuZUdDTY5dmucrIwtjfNT8bE2hOSP8,39
41
+ signalwire_agents/skills/math/skill.py,sha256=5sErd5x1rFHJg2GlmdJB3LvrmvTNOrZsA2jRnG67Zw8,3342
42
+ signalwire_agents/skills/web_search/__init__.py,sha256=wJlptYDExYw-nxZJVzlTLOgkKkDOLUUt1ZdoLt44ixs,45
43
+ signalwire_agents/skills/web_search/skill.py,sha256=GkfhG3Vz2HxOv91TvVuA4e_4b5cuswUpnJDLdaZW37k,10304
44
+ signalwire_agents/skills/wikipedia/__init__.py,sha256=8Db_aE0ly7QoXg7n2RDvCqKupkyR-UYlK9uFUnGNCE8,184
45
+ signalwire_agents/skills/wikipedia/skill.py,sha256=Q_HWJoG2RkQuZMgWxD9czuzEor79Gy1tjo6ywVzec84,6877
46
+ signalwire_agents/utils/__init__.py,sha256=7KO-y334QOjvKFOur3HIi6ruqJJbQdHpLygTMIuRkNk,255
47
+ signalwire_agents/utils/pom_utils.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
48
+ signalwire_agents/utils/schema_utils.py,sha256=i4okv_O9bUApwT_jJf4Yoij3bLCrGrW3DC-vzSy2RuY,16392
49
+ signalwire_agents/utils/serverless.py,sha256=5kEdoN8Sngv-x4pyk4wRrn8SafJEm6LWqkM2wfO7v2k,979
50
+ signalwire_agents/utils/token_generators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
51
+ signalwire_agents/utils/validators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
52
+ signalwire_agents-0.1.11.data/data/schema.json,sha256=M8Mn6pQda2P9jhbmkALrLr1wt-fRuhYRqdmEi9Rbhqk,178075
53
+ signalwire_agents-0.1.11.dist-info/licenses/LICENSE,sha256=NYvAsB-rTcSvG9cqHt9EUHAWLiA9YzM4Qfz-mPdvDR0,1067
54
+ signalwire_agents-0.1.11.dist-info/METADATA,sha256=KULCAfQ9MtDQXG_GhR0gGksIbjaRU5il26oBLduL-Hk,30205
55
+ signalwire_agents-0.1.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
+ signalwire_agents-0.1.11.dist-info/entry_points.txt,sha256=pPs-ulmQRldQzQh-uscgrXyUOSn9-9ceplwg5awBa5o,84
57
+ signalwire_agents-0.1.11.dist-info/top_level.txt,sha256=kDGS6ZYv84K9P5Kyg9_S8P_pbUXoHkso0On_DB5bbWc,18
58
+ signalwire_agents-0.1.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ swaig-test = signalwire_agents.cli.test_swaig:console_entry_point
@@ -1,319 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: signalwire_agents
3
- Version: 0.1.10
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
- Requires-Dist: beautifulsoup4==4.12.3
28
- Requires-Dist: pytz==2023.3
29
- Dynamic: license-file
30
-
31
- # SignalWire AI Agent SDK
32
-
33
- A Python SDK for creating, hosting, and securing SignalWire AI agents as microservices with minimal boilerplate.
34
-
35
- ## Features
36
-
37
- - **Self-Contained Agents**: Each agent is both a web app and an AI persona
38
- - **Prompt Object Model**: Structured prompt composition using POM
39
- - **SWAIG Integration**: Easily define and handle AI tools/functions
40
- - **Dynamic Configuration**: Configure agents per-request for multi-tenant apps and personalization
41
- - **Custom Routing**: Dynamic request handling for different paths and content
42
- - **SIP Integration**: Route SIP calls to agents based on SIP usernames
43
- - **Security Built-In**: Session management, function-specific security tokens, and basic auth
44
- - **State Management**: Persistent conversation state with automatic tracking
45
- - **Prefab Archetypes**: Ready-to-use agent types for common scenarios
46
- - **Multi-Agent Support**: Host multiple agents on a single server
47
- - **Modular Skills System**: Add capabilities to agents with simple one-liner calls
48
-
49
- ## Skills System
50
-
51
- The SignalWire Agents SDK includes a powerful modular skills system that allows you to add complex capabilities to your agents with simple one-liner calls:
52
-
53
- ```python
54
- from signalwire_agents import AgentBase
55
-
56
- # Create an agent
57
- agent = AgentBase("My Assistant", route="/assistant")
58
-
59
- # Add skills with one-liners
60
- agent.add_skill("web_search") # Web search capability
61
- agent.add_skill("datetime") # Current date/time info
62
- agent.add_skill("math") # Mathematical calculations
63
-
64
- # Configure skills with parameters
65
- agent.add_skill("web_search", {
66
- "num_results": 3, # Get 3 search results
67
- "delay": 0.5 # Small delay between requests
68
- })
69
-
70
- # Advanced: Customize SWAIG function properties
71
- agent.add_skill("math", {
72
- "swaig_fields": {
73
- "secure": False, # Override security settings
74
- "fillers": {"en-US": ["Calculating..."]} # Custom filler phrases
75
- }
76
- })
77
-
78
- agent.serve()
79
- ```
80
-
81
- ### Available Built-in Skills
82
-
83
- - **web_search**: Google Custom Search API integration with web scraping
84
- - **datetime**: Current date and time with timezone support
85
- - **math**: Safe mathematical expression evaluation
86
-
87
- ### Benefits
88
-
89
- - **One-liner integration**: `agent.add_skill("skill_name")`
90
- - **Configurable parameters**: `agent.add_skill("skill_name", {"param": "value"})`
91
- - **Automatic discovery**: Skills are automatically found from the skills directory
92
- - **Dependency validation**: Clear error messages for missing requirements
93
- - **Modular architecture**: Skills are self-contained and reusable
94
-
95
- For detailed documentation, see [Skills System README](docs/SKILLS_SYSTEM_README.md).
96
-
97
- ## Installation
98
-
99
- ```bash
100
- pip install signalwire-agents
101
- ```
102
-
103
- ## Quick Start
104
-
105
- ```python
106
- from signalwire_agents import AgentBase
107
- from signalwire_agents.core.function_result import SwaigFunctionResult
108
-
109
- class SimpleAgent(AgentBase):
110
- def __init__(self):
111
- super().__init__(name="simple", route="/simple")
112
-
113
- # Configure the agent's personality
114
- self.prompt_add_section("Personality", body="You are a helpful assistant.")
115
- self.prompt_add_section("Goal", body="Help users with basic questions.")
116
- self.prompt_add_section("Instructions", bullets=["Be concise and clear."])
117
-
118
- # Alternative using convenience methods:
119
- # self.setPersonality("You are a helpful assistant.")
120
- # self.setGoal("Help users with basic questions.")
121
- # self.setInstructions(["Be concise and clear."])
122
-
123
- @AgentBase.tool(
124
- name="get_time",
125
- description="Get the current time",
126
- parameters={}
127
- )
128
- def get_time(self, args, raw_data):
129
- from datetime import datetime
130
- now = datetime.now().strftime("%H:%M:%S")
131
- return SwaigFunctionResult(f"The current time is {now}")
132
-
133
- # Run the agent
134
- if __name__ == "__main__":
135
- agent = SimpleAgent()
136
- agent.serve(host="0.0.0.0", port=8000)
137
- ```
138
-
139
- ## Using State Management
140
-
141
- ```python
142
- from signalwire_agents import AgentBase
143
- from signalwire_agents.core.function_result import SwaigFunctionResult
144
- from signalwire_agents.core.state import FileStateManager
145
-
146
- class StatefulAgent(AgentBase):
147
- def __init__(self):
148
- # Configure state management
149
- state_manager = FileStateManager(storage_dir="./state_data")
150
-
151
- super().__init__(
152
- name="stateful",
153
- route="/stateful",
154
- enable_state_tracking=True, # Enable state tracking
155
- state_manager=state_manager # Use custom state manager
156
- )
157
-
158
- # When enable_state_tracking=True, startup_hook and hangup_hook
159
- # are automatically registered to track session lifecycle
160
-
161
- # Custom tool for accessing and updating state
162
- @AgentBase.tool(
163
- name="save_preference",
164
- description="Save a user preference",
165
- parameters={
166
- "preference_name": {
167
- "type": "string",
168
- "description": "Name of the preference to save"
169
- },
170
- "preference_value": {
171
- "type": "string",
172
- "description": "Value of the preference"
173
- }
174
- }
175
- )
176
- def save_preference(self, args, raw_data):
177
- # Get the call ID from the raw data
178
- call_id = raw_data.get("call_id")
179
-
180
- if call_id:
181
- # Get current state or empty dict if none exists
182
- state = self.get_state(call_id) or {}
183
-
184
- # Update the state
185
- preferences = state.get("preferences", {})
186
- preferences[args.get("preference_name")] = args.get("preference_value")
187
- state["preferences"] = preferences
188
-
189
- # Save the updated state
190
- self.update_state(call_id, state)
191
-
192
- return SwaigFunctionResult("Preference saved successfully")
193
- else:
194
- return SwaigFunctionResult("Could not save preference: No call ID")
195
- ```
196
-
197
- ## Using Prefab Agents
198
-
199
- ```python
200
- from signalwire_agents.prefabs import InfoGathererAgent
201
-
202
- agent = InfoGathererAgent(
203
- fields=[
204
- {"name": "full_name", "prompt": "What is your full name?"},
205
- {"name": "reason", "prompt": "How can I help you today?"}
206
- ],
207
- confirmation_template="Thanks {full_name}, I'll help you with {reason}.",
208
- name="info-gatherer",
209
- route="/info-gatherer"
210
- )
211
-
212
- agent.serve(host="0.0.0.0", port=8000)
213
- ```
214
-
215
- Available prefabs include:
216
- - `InfoGathererAgent`: Collects structured information from users
217
- - `FAQBotAgent`: Answers questions based on a knowledge base
218
- - `ConciergeAgent`: Routes users to specialized agents
219
- - `SurveyAgent`: Conducts structured surveys with questions and rating scales
220
- - `ReceptionistAgent`: Greets callers and transfers them to appropriate departments
221
-
222
- ## Dynamic Agent Configuration
223
-
224
- Configure agents dynamically based on request parameters for multi-tenant applications, A/B testing, and personalization.
225
-
226
- ### Static vs Dynamic Configuration
227
-
228
- - **Static**: Agent configured once at startup (traditional approach)
229
- - **Dynamic**: Agent configured fresh for each request based on parameters
230
-
231
- ### Basic Example
232
-
233
- ```python
234
- from signalwire_agents import AgentBase
235
-
236
- class DynamicAgent(AgentBase):
237
- def __init__(self):
238
- super().__init__(name="dynamic-agent", route="/dynamic")
239
-
240
- # Set up dynamic configuration callback
241
- self.set_dynamic_config_callback(self.configure_per_request)
242
-
243
- def configure_per_request(self, query_params, body_params, headers, agent):
244
- """Configure agent based on request parameters"""
245
-
246
- # Extract parameters from request
247
- tier = query_params.get('tier', 'standard')
248
- language = query_params.get('language', 'en')
249
- customer_id = query_params.get('customer_id')
250
-
251
- # Configure voice and language
252
- if language == 'es':
253
- agent.add_language("Spanish", "es-ES", "rime.spore:mistv2")
254
- else:
255
- agent.add_language("English", "en-US", "rime.spore:mistv2")
256
-
257
- # Configure based on service tier
258
- if tier == 'premium':
259
- agent.set_params({"end_of_speech_timeout": 300}) # Faster response
260
- agent.prompt_add_section("Service Level", "You provide premium support.")
261
- else:
262
- agent.set_params({"end_of_speech_timeout": 500}) # Standard response
263
- agent.prompt_add_section("Service Level", "You provide standard support.")
264
-
265
- # Personalize with customer data
266
- global_data = {"tier": tier, "language": language}
267
- if customer_id:
268
- global_data["customer_id"] = customer_id
269
- agent.set_global_data(global_data)
270
-
271
- # Usage examples:
272
- # curl "http://localhost:3000/dynamic?tier=premium&language=es&customer_id=123"
273
- # curl "http://localhost:3000/dynamic?tier=standard&language=en"
274
- ```
275
-
276
- ### Use Cases
277
-
278
- - **Multi-tenant SaaS**: Different configurations per customer/organization
279
- - **A/B Testing**: Test different agent behaviors with different user groups
280
- - **Personalization**: Customize voice, prompts, and behavior per user
281
- - **Localization**: Language and cultural adaptation based on user location
282
- - **Dynamic Pricing**: Adjust features and capabilities based on subscription tiers
283
-
284
- The `EphemeralAgentConfig` object provides all the same familiar methods as `AgentBase` (like `add_language()`, `prompt_add_section()`, `set_global_data()`) but applies them per-request instead of at startup.
285
-
286
- For detailed documentation and advanced examples, see the [Agent Guide](docs/agent_guide.md#dynamic-agent-configuration).
287
-
288
- ## Configuration
289
-
290
- ### Environment Variables
291
-
292
- The SDK supports the following environment variables:
293
-
294
- - `SWML_BASIC_AUTH_USER`: Username for basic auth (default: auto-generated)
295
- - `SWML_BASIC_AUTH_PASSWORD`: Password for basic auth (default: auto-generated)
296
- - `SWML_PROXY_URL_BASE`: Base URL to use when behind a reverse proxy, used for constructing webhook URLs
297
- - `SWML_SSL_ENABLED`: Enable HTTPS/SSL support (values: "true", "1", "yes")
298
- - `SWML_SSL_CERT_PATH`: Path to SSL certificate file
299
- - `SWML_SSL_KEY_PATH`: Path to SSL private key file
300
- - `SWML_DOMAIN`: Domain name for SSL certificate and external URLs
301
- - `SWML_SCHEMA_PATH`: Optional path to override the location of the schema.json file
302
-
303
- 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.
304
-
305
- 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.
306
-
307
- ## Documentation
308
-
309
- The package includes comprehensive documentation in the `docs/` directory:
310
-
311
- - [Agent Guide](docs/agent_guide.md) - Detailed guide to creating and customizing agents, including dynamic configuration
312
- - [Architecture](docs/architecture.md) - Overview of the SDK architecture and core concepts
313
- - [SWML Service Guide](docs/swml_service_guide.md) - Guide to the underlying SWML service
314
-
315
- These documents provide in-depth explanations of the features, APIs, and usage patterns.
316
-
317
- ## License
318
-
319
- MIT
@@ -1,44 +0,0 @@
1
- signalwire_agents/__init__.py,sha256=_r4Dn73_fAf-6vmjR6lL4HPcF6QVL4gDZMXeWQQAhgs,871
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=sQHFKzOHtQrmMn9TGSda-BzfLsqNV9JgG9npUPUrovE,114016
6
- signalwire_agents/core/function_result.py,sha256=OXzm4GOvA6TKbzZFsdz3iBU5vQs9LXxsmQue7zWVolE,43538
7
- signalwire_agents/core/pom_builder.py,sha256=ywuiIfP8BeLBPo_G4X1teZlG6zTCMkW71CZnmyoDTAQ,6636
8
- signalwire_agents/core/skill_base.py,sha256=ornJFNPl-H1-LHzAltYHgUjAMiWUXtg1uim5pbLAQ90,4426
9
- signalwire_agents/core/skill_manager.py,sha256=kW17EOUR4u9mePo_90qKoCP6rusXDWzqZvJA0_FB-q4,5486
10
- signalwire_agents/core/swaig_function.py,sha256=WoHGQuCmU9L9k39pttRunmfRtIa_PnNRn9W0Xq3MfIk,6316
11
- signalwire_agents/core/swml_builder.py,sha256=Q1ikU9pedgjW888mjbqDFv-jMDvDZ-tZgfyMfu4qQN0,6719
12
- signalwire_agents/core/swml_handler.py,sha256=KvphI_YY47VWGVXaix_N3SuQSyygHEUr9We6xESQK44,7002
13
- signalwire_agents/core/swml_renderer.py,sha256=iobMWWoBR7dkHndI3Qlwf4C0fg2p7DmAU2Rb7ZmmLhA,13891
14
- signalwire_agents/core/swml_service.py,sha256=4zTtpIKDtL59MzKgkBdpPmBCT6s1wVIikWEzZ1hqnyc,49309
15
- signalwire_agents/core/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
16
- signalwire_agents/core/security/session_manager.py,sha256=s5hXYcFnrsYFoyo-zcN7EJy-wInZQI_cWTBHX9MxHR4,9164
17
- signalwire_agents/core/state/__init__.py,sha256=qpYIfQBApet6VQsy6diS3yu0lMxCBC6REOUk5l1McUw,379
18
- signalwire_agents/core/state/file_state_manager.py,sha256=52I_KVlmhHCbKIaHj74Q-ksP_-AF6ewYmOXCf4n5DTQ,7307
19
- signalwire_agents/core/state/state_manager.py,sha256=76B4mDutMb826dK4c_IJhOXH09BW1bJu6EZa6Mh_LB4,2511
20
- signalwire_agents/prefabs/__init__.py,sha256=MW11J63XH7KxF2MWguRsMFM9iqMWexaEO9ynDPL_PDM,715
21
- signalwire_agents/prefabs/concierge.py,sha256=FQxSUBAVH2ECtNs4GGa3f0EPiOrAKaz14h7byNFy5K8,10106
22
- signalwire_agents/prefabs/faq_bot.py,sha256=NrUn5AGmtdzYTyxTHPt8BZ14ZN1sh4xKA2SVQUlfPPQ,10834
23
- signalwire_agents/prefabs/info_gatherer.py,sha256=dr9UUgNGX7MIKdCMth3jDVLf6OrHov5G6_zIuNvnrOY,15468
24
- signalwire_agents/prefabs/receptionist.py,sha256=8EyQ6M0Egs3g7KKWukHFiO9UPoVUxT4MLkvyT3V8o64,10585
25
- signalwire_agents/prefabs/survey.py,sha256=IIIQfgvMlfVNjEEEdWUn4lAJqVsCDlBsIAkOJ1ckyAE,14796
26
- signalwire_agents/skills/__init__.py,sha256=xfxrQ0i-aTRomHiCsqelU4RlNlHPJFPgPu-UBDaBOqA,340
27
- signalwire_agents/skills/registry.py,sha256=XffqhZQ4ZbAMRssMW8vnK5-Qk8oJBmiEoPwFCMcz1Gc,3515
28
- signalwire_agents/skills/datetime/__init__.py,sha256=coPaY-k2EyZWuYckGunhSJ65Y1Jwz66h-iOo0QWb5WY,43
29
- signalwire_agents/skills/datetime/skill.py,sha256=t9VyRPqBFyk-DEeswiNMp54RA7xLiXVnqO4urLJTRXs,3770
30
- signalwire_agents/skills/math/__init__.py,sha256=lGAFWEmJH2fuwkuZUdDTY5dmucrIwtjfNT8bE2hOSP8,39
31
- signalwire_agents/skills/math/skill.py,sha256=KNQ2wk3tGakdMKyhh7GDQoYpY2gkagpDaK5oDMPG9y8,3227
32
- signalwire_agents/skills/web_search/__init__.py,sha256=wJlptYDExYw-nxZJVzlTLOgkKkDOLUUt1ZdoLt44ixs,45
33
- signalwire_agents/skills/web_search/skill.py,sha256=Dg6RaUbDhB_7jvCzMYZqd9fo5knMEDlnnVITBnjElGw,8545
34
- signalwire_agents/utils/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
35
- signalwire_agents/utils/pom_utils.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
36
- signalwire_agents/utils/schema_utils.py,sha256=LvFCFvJTQk_xYK0B-NXbkXKEF7Zmv-LqpV_vfpPnOb4,13473
37
- signalwire_agents/utils/token_generators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
38
- signalwire_agents/utils/validators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
39
- signalwire_agents-0.1.10.data/data/schema.json,sha256=M8Mn6pQda2P9jhbmkALrLr1wt-fRuhYRqdmEi9Rbhqk,178075
40
- signalwire_agents-0.1.10.dist-info/licenses/LICENSE,sha256=NYvAsB-rTcSvG9cqHt9EUHAWLiA9YzM4Qfz-mPdvDR0,1067
41
- signalwire_agents-0.1.10.dist-info/METADATA,sha256=zfl6Go2Ee_6BwMhs6RaixRzS64gYCAEq4DcSmFdX2oU,12276
42
- signalwire_agents-0.1.10.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
43
- signalwire_agents-0.1.10.dist-info/top_level.txt,sha256=kDGS6ZYv84K9P5Kyg9_S8P_pbUXoHkso0On_DB5bbWc,18
44
- signalwire_agents-0.1.10.dist-info/RECORD,,