AI-powered natural language to REST API translation. v2: Claude native tool calling, zero hardcoding, works with any OpenAPI spec.
Project description
Enable AI
Natural language to REST API translation using LLM tool calling.
Zero hardcoding - works with any OpenAPI spec. Parent module provides all configuration.
Installation
pip install enable-ai
# For Anthropic/Claude support:
pip install enable-ai[anthropic]
Quick Start
from enable_ai_v2 import Orchestrator, Config, JWTAuth
config = Config(
openapi_schema="path/to/openapi.json", # or dict
base_url="https://api.example.com",
# llm_provider="openai", # default
# llm_provider="anthropic", # optional
)
ai = Orchestrator(
config=config,
auth=JWTAuth(token="your-jwt-token"),
)
result = ai.process("show all pending orders")
print(result.message)
Features
- LLM tool calling - OpenAPI spec converted to LLM tools (OpenAI default, Anthropic optional)
- Server-side scoping - doesn't inject user filters; server's
get_queryset()handles permissions - Resource hints - status values, enums from your API for better accuracy
- Status synonyms - map natural language ("pending") to actual values ("DRAFT")
- Query caching - exact match + pattern match for fast repeat queries
- Progress tracking - real-time callbacks for UI updates
Configuration
Parent module provides everything:
from enable_ai_v2 import (
Config,
ResourceHint,
UserContext,
build_resource_hints_from_api,
build_status_synonyms,
)
# Fetch from your APIs (parent module's responsibility)
openapi_schema = your_api.get_schema()
statuses = your_api.get_service_order_statuses()
priorities = your_api.get_service_order_priorities()
config = Config(
# Required
openapi_schema=openapi_schema,
base_url="https://api.example.com",
# Recommended (for accuracy)
resource_hints=build_resource_hints_from_api(
openapi_schema,
statuses,
priorities,
),
status_synonyms=build_status_synonyms(statuses),
# Optional
model="claude-sonnet-4-20250514",
temperature=0.0,
cache_enabled=True,
include_trace=False, # True for debugging
)
User Context
Parent module provides user context (doesn't fetch from APIs):
from enable_ai_v2 import UserContext
user_ctx = UserContext(
user_id=123,
username="john.doe",
role="Technician",
company_id=456,
is_admin=False,
)
result = ai.process("show my orders", user_context=user_ctx)
Authentication
from enable_ai_v2 import JWTAuth, APIKeyAuth, BasicAuth, NoAuth
# JWT (most common)
auth = JWTAuth(token="your-jwt-token")
# API Key
auth = APIKeyAuth(api_key="your-api-key", header_name="X-API-Key")
# Basic Auth
auth = BasicAuth(username="user", password="pass")
# No auth
auth = NoAuth()
ai = Orchestrator(config=config, auth=auth)
Progress Tracking
def on_progress(message: str, progress: float):
print(f"[{int(progress*100)}%] {message}")
config = Config(
openapi_schema=schema,
base_url="https://api.example.com",
progress_callback=on_progress,
)
Response
result = ai.process("show pending orders")
result.message # Natural language response
result.data # Raw API data
result.success # True/False
result.trace # Debug info (if include_trace=True)
Key Principle
Server handles data scoping. The system prompt instructs Claude:
Do NOT add user ID filters (like technician=, customer=, created_by=) unless the user explicitly asks to filter by a specific person.
Your backend's get_queryset() permissions handle which data each user sees.
Requirements
- Python 3.9+
OPENAI_API_KEYenvironment variable (default provider)- Or
ANTHROPIC_API_KEYif usingllm_provider="anthropic"
License
MIT
Project details
Release history Release notifications | RSS feed
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 enable_ai-1.0.4.tar.gz.
File metadata
- Download URL: enable_ai-1.0.4.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.9.6 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a6110ef9206083ea1c4ef6e7848dfa1c5815fa209d891e411d76bca2a04d3a3
|
|
| MD5 |
b800865b93ed9ffd365e5bef08f9d230
|
|
| BLAKE2b-256 |
a8d01f4eaff6cf38204aca2c333b6e1b4be1d60d95f4082a3a71c118f5bc653b
|
File details
Details for the file enable_ai-1.0.4-py3-none-any.whl.
File metadata
- Download URL: enable_ai-1.0.4-py3-none-any.whl
- Upload date:
- Size: 38.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.9.6 Darwin/25.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
859fad973801b9bae74d7823abfbfc33ba89f0b21c74944fb816ea4617ed2c85
|
|
| MD5 |
4286cca1956a9c14fc6f97805bcf102c
|
|
| BLAKE2b-256 |
995c3136acaf1d55c7b4bce43f010c50e9fc8a7b363df0a7f5a762067d046409
|