wiil-python 0.0.0__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.
- wiil_python-0.0.0/PKG-INFO +511 -0
- wiil_python-0.0.0/README.md +472 -0
- wiil_python-0.0.0/pyproject.toml +136 -0
- wiil_python-0.0.0/setup.cfg +4 -0
- wiil_python-0.0.0/setup.py +5 -0
- wiil_python-0.0.0/wiil/__init__.py +27 -0
- wiil_python-0.0.0/wiil/py.typed +1 -0
- wiil_python-0.0.0/wiil_python.egg-info/PKG-INFO +511 -0
- wiil_python-0.0.0/wiil_python.egg-info/SOURCES.txt +10 -0
- wiil_python-0.0.0/wiil_python.egg-info/dependency_links.txt +1 -0
- wiil_python-0.0.0/wiil_python.egg-info/requires.txt +17 -0
- wiil_python-0.0.0/wiil_python.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wiil-python
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: Official Python SDK for WIIL Platform - AI-powered conversational services for intelligent customer interactions, voice processing, real-time translation, and business management
|
|
5
|
+
Author-email: WIIL <dev-support@wiil.io>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://console.wiil.io
|
|
8
|
+
Project-URL: Documentation, https://docs.wiil.io
|
|
9
|
+
Project-URL: Repository, https://github.com/wiil-io/wiil-python
|
|
10
|
+
Project-URL: Issues, https://github.com/wiil-io/wiil-python/issues
|
|
11
|
+
Keywords: wiil,wiil-platform,wiil-sdk,ai,artificial-intelligence,conversational-ai,chatbot,voice-ai,speech-to-text,text-to-speech,stt,tts,translation,real-time-translation,voice-translation,business-automation,appointment-booking,reservation-system,order-management,customer-service,telephony,voice-calls,agent-deployment,python,sdk
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Requires-Dist: requests>=2.31.0
|
|
26
|
+
Requires-Dist: pydantic<3.0.0,>=2.0.0
|
|
27
|
+
Requires-Dist: email-validator>=2.0.0
|
|
28
|
+
Requires-Dist: typing-extensions>=4.5.0; python_version < "3.11"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: httpx>=0.28.0; extra == "dev"
|
|
34
|
+
Requires-Dist: responses>=0.25.0; extra == "dev"
|
|
35
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: respx>=0.20.0; extra == "dev"
|
|
39
|
+
|
|
40
|
+
# WIIL Python SDK
|
|
41
|
+
|
|
42
|
+
Official Python SDK for the [WIIL Platform](https://console.wiil.io) - AI-powered conversational services platform for intelligent customer interactions, voice processing, real-time translation, and business management.
|
|
43
|
+
|
|
44
|
+
[](https://www.python.org/)
|
|
45
|
+
[](https://opensource.org/licenses/MIT)
|
|
46
|
+
|
|
47
|
+
## Features
|
|
48
|
+
|
|
49
|
+
- ✅ **Type-Safe** - Full type hints with Pydantic models
|
|
50
|
+
- ✅ **Production-Grade** - Built for enterprise use with robust error handling
|
|
51
|
+
- ✅ **Validated** - Runtime validation using Pydantic
|
|
52
|
+
- ✅ **Well-Documented** - Comprehensive docstrings and API documentation
|
|
53
|
+
- ✅ **Tested** - Extensive test coverage with pytest
|
|
54
|
+
- ✅ **Modern** - Async/await support with httpx
|
|
55
|
+
- ✅ **Comprehensive** - Access to all WIIL Platform domains
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
### 1. Create and activate a virtual environment
|
|
60
|
+
|
|
61
|
+
Linux/macOS:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python -m venv venv
|
|
65
|
+
source venv/bin/activate
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Windows (PowerShell):
|
|
69
|
+
|
|
70
|
+
```powershell
|
|
71
|
+
python -m venv venv
|
|
72
|
+
venv\Scripts\Activate.ps1
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Windows (Command Prompt):
|
|
76
|
+
|
|
77
|
+
```bat
|
|
78
|
+
python -m venv venv
|
|
79
|
+
venv\Scripts\activate
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2. Install the SDK
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
pip install wiil
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Quick Start
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from wiil import WiilClient
|
|
92
|
+
|
|
93
|
+
# Initialize the client with your API key
|
|
94
|
+
client = WiilClient(api_key="your-api-key")
|
|
95
|
+
|
|
96
|
+
# Get your organization
|
|
97
|
+
organization = client.organizations.get()
|
|
98
|
+
print(f"Organization: {organization.company_name}")
|
|
99
|
+
|
|
100
|
+
# Create a project
|
|
101
|
+
project = client.projects.create(
|
|
102
|
+
name="Production Environment",
|
|
103
|
+
description="Main production deployment"
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
print(f"Project created: {project.id}")
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Platform Architecture
|
|
110
|
+
|
|
111
|
+
The WIIL Platform provides a unified architecture that bridges AI agent deployment with business operations, enabling organizations to conduct intelligent customer conversations that drive measurable business outcomes.
|
|
112
|
+
|
|
113
|
+
### Unified Architecture Overview
|
|
114
|
+
|
|
115
|
+
The platform integrates two core architectural domains through the **Conversations** entity:
|
|
116
|
+
|
|
117
|
+

|
|
118
|
+
|
|
119
|
+
### Core Architectural Domains
|
|
120
|
+
|
|
121
|
+
#### 1. Service Configuration
|
|
122
|
+
|
|
123
|
+
**Purpose**: Manages the deployment and behavior of AI agents within the platform.
|
|
124
|
+
|
|
125
|
+
**Key Components**:
|
|
126
|
+
|
|
127
|
+
- **Agent Configurations** - Define AI agent capabilities and characteristics
|
|
128
|
+
- **Instruction Configurations** - The heart of agent behavior with system prompts, guidelines, and compliance rules
|
|
129
|
+
- **Deployment Configurations** - Combine agents and instructions into deployable units
|
|
130
|
+
- **Deployment Channels** - Communication channels (OTT Chat, Telephony, SMS, Email)
|
|
131
|
+
- **Phone Configurations** - Telephony-specific settings for voice calls
|
|
132
|
+
- **Conversation Configurations** - Configuration for conversation sessions
|
|
133
|
+
- **Knowledge Sources** - Knowledge bases for agent context and accuracy
|
|
134
|
+
|
|
135
|
+
**SDK Resources**: `agent_configs`, `instruction_configs`, `deployment_configs`, `deployment_channels`, `phone_configs`, `conversation_configs`, `knowledge_sources`
|
|
136
|
+
|
|
137
|
+
#### 2. Advanced Service Configuration
|
|
138
|
+
|
|
139
|
+
**Purpose**: Enables voice-powered conversations with end-to-end processing pipelines.
|
|
140
|
+
|
|
141
|
+
**Key Components**:
|
|
142
|
+
|
|
143
|
+
- **Provisioning Chain Configurations** - STT → Agent → TTS voice processing workflows
|
|
144
|
+
- **Speech-to-Text (STT)** - Voice-to-text conversion using Deepgram, OpenAI Whisper, Cartesia
|
|
145
|
+
- **Text-to-Speech (TTS)** - Natural voice generation using ElevenLabs, Cartesia, OpenAI
|
|
146
|
+
|
|
147
|
+
**SDK Resources**: `provisioning_configs`
|
|
148
|
+
|
|
149
|
+
#### 3. Translation Services
|
|
150
|
+
|
|
151
|
+
**Purpose**: Provides real-time multilingual voice translation capabilities.
|
|
152
|
+
|
|
153
|
+
**Key Components**:
|
|
154
|
+
|
|
155
|
+
- **Translation Chain Configurations** - STT → Translation Processing → TTS pipelines for language pairs
|
|
156
|
+
- **Translation Service Requests** - Initiate translation sessions
|
|
157
|
+
- **Translation Participants** - Multi-participant translation sessions with language isolation
|
|
158
|
+
- **Translation Service Logs** - Transcription logging and session records
|
|
159
|
+
|
|
160
|
+
**SDK Resources**: `translation_sessions`
|
|
161
|
+
|
|
162
|
+
#### 4. Business Management
|
|
163
|
+
|
|
164
|
+
**Purpose**: Manages business entity catalogs and their transactional operations through AI-powered conversations.
|
|
165
|
+
|
|
166
|
+
**Management Modules** (Platform Services):
|
|
167
|
+
|
|
168
|
+
| Module | Manages Catalog | Powers Transactions |
|
|
169
|
+
|--------|----------------|---------------------|
|
|
170
|
+
| **Appointment Management** | Business Services | Service Appointments |
|
|
171
|
+
| **Reservation Management** | Reservable Assets (Resources) | Reservations |
|
|
172
|
+
| **Menu Management** | Menu Categories & Items | Menu Orders |
|
|
173
|
+
| **Product Management** | Product Categories & Products | Product Orders |
|
|
174
|
+
|
|
175
|
+
**Business Catalogs**:
|
|
176
|
+
|
|
177
|
+
- **Business Services** - Bookable services (salons, clinics, consulting)
|
|
178
|
+
- **Reservable Assets** - Bookable resources (tables, rooms, equipment)
|
|
179
|
+
- **Menu Categories & Items** - Food and beverage offerings
|
|
180
|
+
- **Product Categories & Products** - Retail products
|
|
181
|
+
|
|
182
|
+
**Transactional Operations** (AI-Powered):
|
|
183
|
+
|
|
184
|
+
- **Service Appointments** - Created through AI conversations
|
|
185
|
+
- **Reservations** - Created through AI conversations
|
|
186
|
+
- **Menu Orders** - Created through AI conversations
|
|
187
|
+
- **Product Orders** - Created through AI conversations
|
|
188
|
+
|
|
189
|
+
**SDK Resources**: `business_services`, `reservation_resources`, `menus`, `products`, `customers`, `service_appointments`, `reservations`, `menu_orders`, `product_orders`
|
|
190
|
+
|
|
191
|
+
### Integration Hub: Conversations
|
|
192
|
+
|
|
193
|
+
The **Conversations** entity serves as the central integration point, bridging Service Configuration and Business Management:
|
|
194
|
+
|
|
195
|
+
**Key Attributes**:
|
|
196
|
+
|
|
197
|
+
```python
|
|
198
|
+
{
|
|
199
|
+
# Service Configuration References
|
|
200
|
+
"deployment_config_id": str, # Which agent deployment
|
|
201
|
+
"instruction_config_id": str, # Agent behavior guidelines
|
|
202
|
+
"channel_id": str, # Communication channel
|
|
203
|
+
|
|
204
|
+
# Business Context
|
|
205
|
+
"customer_id": str, # Business customer
|
|
206
|
+
"conversation_type": str, # OTT_CHAT, TELEPHONY_CALL, SMS, EMAIL
|
|
207
|
+
|
|
208
|
+
# Conversation Data
|
|
209
|
+
"messages": list, # Conversation history
|
|
210
|
+
"status": str, # ACTIVE, COMPLETED, TRANSFERRED
|
|
211
|
+
"conversation_summary": dict # AI-generated summary
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Role in Architecture**:
|
|
216
|
+
|
|
217
|
+
1. **Links** AI agents (via deployment/instruction configs) with business customers
|
|
218
|
+
2. **Enables** AI agents to leverage business catalogs during conversations
|
|
219
|
+
3. **Drives** transactional outcomes (appointments, reservations, orders)
|
|
220
|
+
4. **Supports** multi-channel conversations (voice, chat, SMS, email)
|
|
221
|
+
|
|
222
|
+
### Data Flow: Conversation to Transaction
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
1. Customer Initiates Contact
|
|
226
|
+
↓
|
|
227
|
+
2. Channel Routes to Deployment Configuration
|
|
228
|
+
↓
|
|
229
|
+
3. Conversation Created
|
|
230
|
+
• Links deployment_config_id
|
|
231
|
+
• Links instruction_config_id
|
|
232
|
+
• Links channel_id
|
|
233
|
+
• Links customer_id
|
|
234
|
+
↓
|
|
235
|
+
4. AI Agent Conducts Conversation
|
|
236
|
+
• Guided by Instruction Configuration
|
|
237
|
+
• Queries Business Catalogs (via Management Modules)
|
|
238
|
+
• Presents available services/products/resources
|
|
239
|
+
↓
|
|
240
|
+
5. Customer Confirms Intent
|
|
241
|
+
↓
|
|
242
|
+
6. Transaction Created
|
|
243
|
+
• Service Appointment
|
|
244
|
+
• Reservation
|
|
245
|
+
• Menu Order
|
|
246
|
+
• Product Order
|
|
247
|
+
↓
|
|
248
|
+
7. Management Module Processes Transaction
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Design Principles
|
|
252
|
+
|
|
253
|
+
**Unified Customer Experience**: Customers interact through Conversations, unaware of the underlying system complexity.
|
|
254
|
+
|
|
255
|
+
**Separation of Configuration and Execution**: Service Configuration defines *how* agents behave; Business Management defines *what* they can do.
|
|
256
|
+
|
|
257
|
+
**AI-First Conversations**: AI Powered Services leverages catalog data in customer conversations to intelligently drive transactional operations.
|
|
258
|
+
|
|
259
|
+
**Catalog-Transaction Separation**: Clear distinction between catalog/configuration data (managed by Management Modules) and transactional data (powered by AI Powered Services through conversations).
|
|
260
|
+
|
|
261
|
+
**Multi-Channel Support**: Conversations span multiple channel types (OTT Chat, Telephony, SMS, Email).
|
|
262
|
+
|
|
263
|
+
**Transactional Outcomes**: Every conversation can result in measurable business transactions.
|
|
264
|
+
|
|
265
|
+
## Usage Examples
|
|
266
|
+
|
|
267
|
+
### Account Management
|
|
268
|
+
|
|
269
|
+
```python
|
|
270
|
+
from wiil import WiilClient
|
|
271
|
+
|
|
272
|
+
client = WiilClient(api_key="your-api-key")
|
|
273
|
+
|
|
274
|
+
# Get your organization (read-only)
|
|
275
|
+
org = client.organizations.get()
|
|
276
|
+
print(f"Organization: {org.company_name}")
|
|
277
|
+
|
|
278
|
+
# Create a project
|
|
279
|
+
project = client.projects.create(
|
|
280
|
+
name="Production Environment",
|
|
281
|
+
description="Main production deployment"
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
# Get a project
|
|
285
|
+
project = client.projects.get("proj_123")
|
|
286
|
+
|
|
287
|
+
# Update a project
|
|
288
|
+
updated = client.projects.update(
|
|
289
|
+
id="proj_123",
|
|
290
|
+
name="Production Environment v2"
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
# Delete a project
|
|
294
|
+
deleted = client.projects.delete("proj_123")
|
|
295
|
+
|
|
296
|
+
# List projects
|
|
297
|
+
projects = client.projects.list(page=1, page_size=20)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Service Configuration
|
|
301
|
+
|
|
302
|
+
```python
|
|
303
|
+
# Create an agent configuration
|
|
304
|
+
agent = client.agent_configs.create(
|
|
305
|
+
name="Customer Support Agent",
|
|
306
|
+
description="AI agent for customer support"
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# Get agent configuration
|
|
310
|
+
agent = client.agent_configs.get("agent_123")
|
|
311
|
+
|
|
312
|
+
# List agent configurations
|
|
313
|
+
agents = client.agent_configs.list(page=1, page_size=20)
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Business Management
|
|
317
|
+
|
|
318
|
+
```python
|
|
319
|
+
# Create a business service
|
|
320
|
+
service = client.business_services.create(
|
|
321
|
+
name="Hair Cut",
|
|
322
|
+
description="30-minute hair cut service",
|
|
323
|
+
duration=30,
|
|
324
|
+
price=50.00
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
# Create a customer
|
|
328
|
+
customer = client.customers.create(
|
|
329
|
+
name="John Doe",
|
|
330
|
+
email="john@example.com",
|
|
331
|
+
phone="+1234567890"
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
# Create a service appointment
|
|
335
|
+
appointment = client.service_appointments.create(
|
|
336
|
+
customer_id="customer_123",
|
|
337
|
+
service_id="service_123",
|
|
338
|
+
scheduled_date="2025-01-15",
|
|
339
|
+
scheduled_time="14:00"
|
|
340
|
+
)
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
## Error Handling
|
|
344
|
+
|
|
345
|
+
```python
|
|
346
|
+
from wiil import WiilClient
|
|
347
|
+
from wiil.errors import (
|
|
348
|
+
WiilAPIError,
|
|
349
|
+
WiilValidationError,
|
|
350
|
+
WiilNetworkError,
|
|
351
|
+
WiilConfigurationError
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
try:
|
|
355
|
+
project = client.projects.create(name="My Project")
|
|
356
|
+
except WiilValidationError as e:
|
|
357
|
+
print(f"Validation failed: {e.message}")
|
|
358
|
+
print(f"Details: {e.details}")
|
|
359
|
+
except WiilAPIError as e:
|
|
360
|
+
print(f"API Error {e.status_code}: {e.message}")
|
|
361
|
+
print(f"Error Code: {e.code}")
|
|
362
|
+
except WiilNetworkError as e:
|
|
363
|
+
print(f"Network error: {e.message}")
|
|
364
|
+
except WiilConfigurationError as e:
|
|
365
|
+
print(f"Configuration error: {e.message}")
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
## Async Support
|
|
369
|
+
|
|
370
|
+
```python
|
|
371
|
+
from wiil import AsyncWiilClient
|
|
372
|
+
|
|
373
|
+
async def main():
|
|
374
|
+
async with AsyncWiilClient(api_key="your-api-key") as client:
|
|
375
|
+
# Get organization
|
|
376
|
+
org = await client.organizations.get()
|
|
377
|
+
print(f"Organization: {org.company_name}")
|
|
378
|
+
|
|
379
|
+
# Create project
|
|
380
|
+
project = await client.projects.create(
|
|
381
|
+
name="Production",
|
|
382
|
+
is_default=True
|
|
383
|
+
)
|
|
384
|
+
print(f"Project: {project.id}")
|
|
385
|
+
|
|
386
|
+
import asyncio
|
|
387
|
+
asyncio.run(main())
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## WillService (OTT + Translation)
|
|
391
|
+
|
|
392
|
+
`WillService` is a service-focused client exposes high-level workflows for OTT and translation services.
|
|
393
|
+
|
|
394
|
+
```python
|
|
395
|
+
from wiil import WillService
|
|
396
|
+
|
|
397
|
+
service = WillService(api_key="your-api-key")
|
|
398
|
+
|
|
399
|
+
# Create translation connection config
|
|
400
|
+
translation = service.translation.create_connection_config(
|
|
401
|
+
{
|
|
402
|
+
"initiatorId": "initiator_123",
|
|
403
|
+
"participantLanguageCode": "es",
|
|
404
|
+
"initiatorLanguageCode": "en",
|
|
405
|
+
}
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
print(translation.channel_identifier)
|
|
409
|
+
|
|
410
|
+
# Fetch OTT chat connection configuration
|
|
411
|
+
chat_config = service.ott.get_chat_connection_configuration(
|
|
412
|
+
{
|
|
413
|
+
"configId": "config_abc",
|
|
414
|
+
"contact": {
|
|
415
|
+
"email": "user@example.com",
|
|
416
|
+
"phone": "+12065551234",
|
|
417
|
+
},
|
|
418
|
+
}
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
print(chat_config.connection_url)
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Development
|
|
425
|
+
|
|
426
|
+
### Setup
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# Clone the repository
|
|
430
|
+
git clone https://github.com/wiil-io/wiil-python.git
|
|
431
|
+
cd wiil-python
|
|
432
|
+
|
|
433
|
+
# Create virtual environment
|
|
434
|
+
python -m venv venv
|
|
435
|
+
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
436
|
+
|
|
437
|
+
# Install development dependencies
|
|
438
|
+
pip install -e ".[dev]"
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Testing
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
# Run tests
|
|
445
|
+
pytest
|
|
446
|
+
|
|
447
|
+
# Run tests with coverage
|
|
448
|
+
pytest --cov=wiil --cov-report=html
|
|
449
|
+
|
|
450
|
+
# Run specific test file
|
|
451
|
+
pytest tests/unit/test_client.py
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Code Quality
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
# Format code with black
|
|
458
|
+
black wiil tests
|
|
459
|
+
|
|
460
|
+
# Lint with ruff
|
|
461
|
+
ruff check wiil tests
|
|
462
|
+
|
|
463
|
+
# Type check with mypy
|
|
464
|
+
mypy wiil
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
## Requirements
|
|
468
|
+
|
|
469
|
+
- **Python**: 3.8 or higher
|
|
470
|
+
- **Dependencies**: httpx, pydantic
|
|
471
|
+
|
|
472
|
+
## Security
|
|
473
|
+
|
|
474
|
+
⚠️ **Important**: This SDK is designed for **server-side use only**. Never expose your API key in client-side code.
|
|
475
|
+
|
|
476
|
+
- Store API keys securely using environment variables
|
|
477
|
+
- Never commit API keys to version control
|
|
478
|
+
- Use environment-specific API keys (development, staging, production)
|
|
479
|
+
- Rotate API keys regularly
|
|
480
|
+
|
|
481
|
+
### Best Practices
|
|
482
|
+
|
|
483
|
+
```python
|
|
484
|
+
import os
|
|
485
|
+
from wiil import WiilClient
|
|
486
|
+
|
|
487
|
+
# ✅ Good - Use environment variables
|
|
488
|
+
client = WiilClient(api_key=os.getenv("WIIL_API_KEY"))
|
|
489
|
+
|
|
490
|
+
# ❌ Bad - Never hardcode API keys
|
|
491
|
+
client = WiilClient(api_key="your-api-key-here") # Don't do this!
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
## License
|
|
495
|
+
|
|
496
|
+
MIT © [WIIL](https://console.wiil.io)
|
|
497
|
+
|
|
498
|
+
## Support
|
|
499
|
+
|
|
500
|
+
- **Documentation**: [https://docs.wiil.io](https://docs.wiil.io)
|
|
501
|
+
- **API Reference**: [https://docs.wiil.io/developer/api-reference](https://docs.wiil.io/developer/api-reference)
|
|
502
|
+
- **Issues**: [GitHub Issues](https://github.com/wiil-io/wiil-python/issues)
|
|
503
|
+
- **Email**: [dev-support@wiil.io](mailto:dev-support@wiil.io)
|
|
504
|
+
|
|
505
|
+
## Contributing
|
|
506
|
+
|
|
507
|
+
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
Built with ❤️ by the WIIL team
|