Cortex Agent SDK
SDK async para construir agentes con una API pequeña y control explícito del loop, las tools, el historial y el ciclo de vida.
Cortex Agent SDK está en alfa. La API puede cambiar antes de la versión
0.1.0.
Requisitos
- Python
>=3.13. - Una credencial del provider elegido.
Instalación
Para OpenAI Responses:
uv add "cortex-agent-sdk[openai]"
También puede instalarse con pip:
python -m pip install "cortex-agent-sdk[openai]"
El core instala únicamente Pydantic y JSON Schema. Los providers y transportes se habilitan mediante extras opcionales:
openai: engine de OpenAI Responses.gateway: conexión mediante un endpoint compatible con OpenAI Responses.redis: sesiones persistentes en Redis.postgres: sesiones persistentes en PostgreSQL.all: todas las integraciones disponibles.
Uso mínimo
El SDK oficial de OpenAI lee OPENAI_API_KEY del entorno.
import asyncio
from cortex_agent_sdk import Agent
from cortex_agent_sdk.openai import OpenAIEngine, OpenAIOptions
async def main() -> None:
options = OpenAIOptions(max_output_tokens=128, reasoning_effort="low")
async with Agent(OpenAIEngine("gpt-5.6-luna", options=options)) as agent:
result = await agent.run("Responde únicamente: hola")
print(result.text)
asyncio.run(main())
Gateway compatible
OpenAIEngine también acepta un endpoint que conserve el protocolo de OpenAI Responses:
import os
from cortex_agent_sdk.gateway import OpenAICompatibleGateway
from cortex_agent_sdk.openai import OpenAIEngine
gateway = OpenAICompatibleGateway(
url=os.environ["CORTEX_GATEWAY_URL"],
api_key=os.environ["CORTEX_GATEWAY_API_KEY"],
)
engine = OpenAIEngine("your-model", gateway=gateway)
Tools
Una función async decorada puede exponerse al modelo como respuesta final:
import asyncio
from cortex_agent_sdk import Agent, final_answer
from cortex_agent_sdk.openai import OpenAIEngine
@final_answer
async def sumar(a: int, b: int) -> str:
"""Suma dos enteros."""
return str(a + b)
async def main() -> None:
instructions = "Para sumar, usa siempre la herramienta sumar."
async with Agent(
OpenAIEngine("gpt-5.6-luna"),
instructions=instructions,
tools=(sumar,),
) as agent:
result = await agent.run("Suma 20 y 22.")
print(result.text)
asyncio.run(main())
Capacidades del alfa
- Loop async acotado.
- Tools async con schema inferido o explícito.
- Historial y sesiones en memoria, Redis o PostgreSQL.
- Hooks locales.
- Timeouts para providers y tools.
- Respuesta tipada con texto, usage, razón de salida y respuesta raw.
- OpenAI Responses directo o mediante un gateway compatible.
Google conserva un namespace estable para la evolución multiproveedor, pero todavía no incluye un engine funcional. Anthropic y streaming están fuera de este alfa.
Sesiones persistentes
Redis y PostgreSQL implementan el mismo contrato de sesiones que el store en memoria. El historial
queda aislado por session_id, ligado al provider y modelo originales, y protegido con lease
renovable, fencing token y compare-and-swap.
Redis no requiere inicialización de schema:
import os
from cortex_agent_sdk import Agent
from cortex_agent_sdk.openai import OpenAIEngine
from cortex_agent_sdk.redis import RedisSessionStore
store = RedisSessionStore(os.environ["REDIS_URL"])
agent = Agent(
OpenAIEngine("gpt-5.6-luna"),
session_store=store,
own_session_store=True,
)
result = await agent.run("Hola", session_id="producto:tenant:usuario")
await agent.aclose()
PostgreSQL exige crear su tabla de forma explícita una vez:
import os
from cortex_agent_sdk.postgres import PostgresSessionStore
store = PostgresSessionStore(os.environ["POSTGRES_URL"])
await store.setup()
Una tarea periódica puede ejecutar await store.cleanup_expired() para vaciar historiales vencidos
que nunca volvieron a solicitarse. El row mínimo permanece para conservar el fencing counter.
Agent.aclose() hace un cierre ordenado: deja de aceptar turnos nuevos, espera los turnos activos y
después cierra los recursos que posee. El límite se configura con
AgentOptions.shutdown_timeout_seconds. Si vence, el SDK no cancela el turno ni cierra conexiones;
regresa RUNTIME_CIERRE_TIMEOUT para que la aplicación pueda reintentar el cierre.
Una sesión dañada o deliberadamente descartada se elimina mediante
await agent.reset_session(session_id).
Licencia
Apache License 2.0.
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 cortex_agent_sdk-0.0.2.tar.gz.
File metadata
- Download URL: cortex_agent_sdk-0.0.2.tar.gz
- Upload date:
- Size: 28.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e24f273c41be3afc15b711968470badb9d2caba381fde9b3439c0b8b48f52ae
|
|
| MD5 |
353370a06a3c8e7284daf699722a1619
|
|
| BLAKE2b-256 |
7ce2228708df2de4292970a622f8add028b1ad818541eeeec8a7ef1e076ec985
|
File details
Details for the file cortex_agent_sdk-0.0.2-py3-none-any.whl.
File metadata
- Download URL: cortex_agent_sdk-0.0.2-py3-none-any.whl
- Upload date:
- Size: 43.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b984a97db59374cd2d5112c0ecf4eb9c82c0790326eca38eb38d7a96a9972ce1
|
|
| MD5 |
3ff928330b819e8b6b2a612f61803d84
|
|
| BLAKE2b-256 |
b3e58c1393ff79c9b8f16eaef59e4caccda1c5a964a73426425d735473a5a228
|