For platform leads

Build Python agents your platform team can operate

Duale AI gives Python teams a durable runtime for bounded agent work: stable contracts, routing policy, retries, task identifiers, and project-specific review context without tying every project to one provider stack.
See pricing

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.

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.
Inside Duale AI for Python developersYour Python code submits work with a task, a deadline, a response type, and a routing policy. Inside Duale, the Configured zone holds the policy your team owns. The Managed zone tracks task state, routes work, retries where configured, records events, and returns the terminal result. The typed result and task identifier 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.

Developer questions

Bring one Python agent and test the production path.

Review security posture