A SignalWire SWAIG interface for AI Agents
Project description
SignalWire SWAIG
SignalWire SWAIG is a Python package that provides an interface for AI Agents to interact with SignalWire services. This package is designed to simplify the integration of AI capabilities with SignalWire's robust communication platform.
Features
- Easy integration with SignalWire services
- Designed for AI Agents
- Lightweight and efficient
Installation
To install SignalWire SWAIG, use pip:
pip install signalwire-swaig
Usage
Basic Setup
-
Initialize SWAIG with a Flask app:
from flask import Flask from signalwire.swaig import SWAIG app = Flask(__name__) swaig = SWAIG(app)
-
Define an Endpoint:
Use the
@swaig.endpointdecorator to define an API endpoint.from signalwire.swaig import Parameter @swaig.endpoint("Check insurance eligibility", member_id=Parameter("string", "Member ID number", required=True), provider=Parameter("string", "Insurance provider name", required=True)) def check_insurance(member_id, provider, meta_data=None, meta_data_toke=None): return f"Checking insurance for {member_id} with {provider}"
-
Run the Flask App:
if __name__ == '__main__': app.run()
Advanced Parameter Usage
You can define parameters with additional attributes like required, enum, and default.
from signalwire.swaig import Parameter
@swaig.endpoint("Get user details",
user_id=Parameter("string", "User ID", required=True),
role=Parameter("string", "User role", enum=["admin", "user", "guest"]),
status=Parameter("string", "Account status", default="active"))
def get_user_details(user_id, role="user", status="active", meta_data=None, meta_data_toke=None):
return f"User {user_id} is a {role} with status {status}"
required: Indicates if the parameter is mandatory. If not provided, the request will be rejected.enum: Specifies a list of acceptable values for the parameter. If the provided value is not in the list, the request will be rejected.default: Provides a default value for the parameter if it is not supplied in the request.
SWAIGArgument, SWAIGArgumentItems & SWAIGFunctionProperties
SWAIGArgument and SWAIGArgumentItems are used to define complex argument structures for your endpoints.
SWAIGArgument: Represents a single argument with a specific type and description.SWAIGArgumentItems: Represents a collection ofSWAIGArgumentobjects, allowing you to define nested or grouped parameters.SWAIGFunctionProperties: Represents the top level properties for the SWAIG function.
Example usage:
from signalwire.swaig import SWAIGArgument, SWAIGArgumentItems
@swaig.endpoint("Process order",
order=Parameter("object", "Order details", required=True, items=SWAIGArgumentItems(
SWAIGArgument("product_id", "string", "Product ID", required=True),
SWAIGArgument("quantity", "integer", "Quantity of the product", required=True),
SWAIGArgument("color", "array", "Color of the product", required=True, items=SWAIGArgumentItems(
SWAIGArgument("type", "string", "Type of the product", enum=["shirt", "pants", "shoes"])
)
)))
def process_order(order, meta_data=None, meta_data_toke=None):
return f"Processing order for product {order['product_id']} with quantity {order['quantity']} at {order['price']} each"
SWAIGArgument: Define each argument with its type, description, and whether it is required.SWAIGArgumentItems: Use this to group multipleSWAIGArgumentobjects together for complex parameter structures.
Authentication
To enable basic authentication, provide a tuple of (username, password) when initializing SWAIG:
swaig = SWAIG(app, auth=("username", "password"))
Endpoint Details
- Description: A brief description of what the endpoint does.
- Parameters: Define the parameters with their type, description, and whether they are required.
Handling Requests
- Get Signature: Send a POST request to
/swaigwith{"action": "get_signature"}to retrieve the API signature. - Function Call: Send a POST request to
/swaigwith{"function": "function_name", "argument": {"parsed": [{"param1": "value1", ...}]}}to call a registered function.
Supported Argument Types and Examples
Below are examples of each argument type you can define using SWAIGArgument and SWAIGArgumentItems:
String
@swaig.endpoint(
"String Example",
string_example=SWAIGArgument(
type="string",
description="A simple string value",
required=True
)
)
def string_example(string_example, meta_data=None, meta_data_toke=None):
return f"String: {string_example}", {}
Integer
@swaig.endpoint(
"Integer Example",
integer_example=SWAIGArgument(
type="integer",
description="An integer value",
required=True
)
)
def integer_example(integer_example, meta_data=None, meta_data_toke=None):
return f"Integer: {integer_example}", {}
Number (float)
@swaig.endpoint(
"Number Example",
number_example=SWAIGArgument(
type="number",
description="A floating point number"
)
)
def number_example(number_example=None, meta_data=None, meta_data_toke=None):
return f"Number: {number_example}", {}
Boolean
@swaig.endpoint(
"Boolean Example",
boolean_example=SWAIGArgument(
type="boolean",
description="A true/false boolean value",
required=True
)
)
def boolean_example(boolean_example, meta_data=None, meta_data_toke=None):
return f"Boolean: {boolean_example}", {}
Enum (constrained string)
@swaig.endpoint(
"Enum Example",
enum_example=SWAIGArgument(
type="string",
description="A value constrained to a specific set of strings",
enum=["option1", "option2", "option3"]
)
)
def enum_example(enum_example=None, meta_data=None, meta_data_toke=None):
return f"Enum: {enum_example}", {}
Array of Strings
@swaig.endpoint(
"Array Example",
array_example=SWAIGArgument(
type="array",
description="An array of strings",
items=SWAIGArgumentItems(type="string")
)
)
def array_example(array_example=None, meta_data=None, meta_data_toke=None):
return f"Array: {array_example}", {}
Object (with nested fields)
@swaig.endpoint(
"Object Example",
object_example=SWAIGArgument(
type="object",
description="A nested object with internal fields",
items=SWAIGArgumentItems(
type="object",
properties={
"nested_string": SWAIGArgument(
type="string",
description="A nested string",
required=True
),
"nested_number": SWAIGArgument(
type="number",
description="A nested number"
)
},
required=["nested_string"]
)
)
)
def object_example(object_example=None, meta_data=None, meta_data_toke=None):
return f"Object: {object_example}", {}
Array of Objects
@swaig.endpoint(
"Array of Objects Example",
array_of_objects=SWAIGArgument(
type="array",
description="An array of structured objects",
items=SWAIGArgumentItems(
type="object",
properties={
"name": SWAIGArgument(
type="string",
description="Name of the item",
required=True
),
"value": SWAIGArgument(
type="integer",
description="Numeric value of the item",
required=True
)
},
required=["name", "value"]
)
)
)
def array_of_objects(array_of_objects=None, meta_data=None, meta_data_toke=None):
return f"Array of Objects: {array_of_objects}", {}
License
This project is licensed under the MIT License.
Contributing
Contributions are welcome! Please submit a pull request or open an issue for any improvements or bug fixes.
Contact
For any questions or support, please contact brian@signalwire.com.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file signalwire_swaig-2.7.1.tar.gz.
File metadata
- Download URL: signalwire_swaig-2.7.1.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e70b74b5b2630a67789deb4b24b9e8e748e02142fec829e0256667e6c87699eb
|
|
| MD5 |
8c957094861e6bdd978fa9a99906db76
|
|
| BLAKE2b-256 |
ac30099e792f6dafad59dcec7a919ec2eac32a5d289f87b2c6ed012e40730307
|
File details
Details for the file signalwire_swaig-2.7.1-py3-none-any.whl.
File metadata
- Download URL: signalwire_swaig-2.7.1-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fbb64f35c3985d9020d2cd97b68ba6452bbf7d6477008baf811d755c87515ee
|
|
| MD5 |
29ae7f2485a87364b420debc906a3aaf
|
|
| BLAKE2b-256 |
a4ae4658c36c84870dc504b89b981583bd5bc4afaea5c5fe73fa9f64b464d31e
|