Supported today
The developer promise is intentionally narrow: Python first, runtime primitives first, production path first.Python SDK
Use Python to submit bounded agent work, attach routing policy, set deadlines, request typed results, and keep a task identifier for follow-up.
Provider routing
Treat models as replaceable capacity. Route by policy inputs such as quality, speed, guardrail preference, and priority instead of hard-coding every call.
Task events
Task submission, terminal result, timeouts, errors, retries, and routing decisions can become product events where the integration captures them.
Python shape
Real code path, not a multi-framework marketing grid.import asyncio
from datetime import datetime, timedelta, timezone
from pydantic import BaseModel
from duale import DualeConfig, DualeSDK, RoutingPolicy, ask
class SupportDecision(BaseModel):
next_action: str
reason: str
risk: str
async def main() -> None:
deadline = datetime.now(timezone.utc) + timedelta(minutes=30)
async with DualeSDK(config=DualeConfig(), auto_start=False) as sdk:
response = await ask(
action="Review this support case and return the next safe action.",
res=SupportDecision,
routing=RoutingPolicy(
target_accuracy=0.8,
target_guardrails=0.7,
speed_preference=0.4,
),
deadline=deadline,
sdk=sdk,
)
decision = await response.model()
print(response.task_id, decision.next_action)
asyncio.run(main())Reusable production layer
The point is to stop every agent project from inventing its own production substrate.Retries and deadlines
Agent work can fail, run long, or need a safer route. The runtime keeps those behaviors explicit instead of hiding them in application glue.
Stable input and output
Define the work boundary once. Models, provider policy, retention, and governance requirements can change without rewriting the business algorithm.
Project controls
Keep enough task context for teams to decide whether a workflow should continue, retry, pause, or move to a project-specific review step. The product does not make that review policy implicit.
Provider choices
Move between supported model providers as costs, latency, quality, and requirements change. The agent contract remains the durable interface.
Traceable task context
Keep enough context to understand why a task succeeded, failed, waited, or retried where the integration records those signals.
Security review
Security teams can review hosting, subprocessors, access controls, data movement, and requestable review inputs before a project expands.
What happens after task submission
One task submission becomes a bounded runtime task. Your policy stays explicit, provider choice stays configurable where supported, and the task identifier plus typed result return to your code.Fit today
Clear boundaries are better than broad claims.Use Duale AI for
Python agents that need routing policy, recovery behavior, typed results, task context, and a path from prototype to operated software.
Current boundary
Other language-native development, visual agent builders, prebuilt assistant marketplaces, or framework-specific starter packs.