cortex-agent-sdk 0.0.4__tar.gz → 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cortex_agent_sdk-0.1.0/PKG-INFO +139 -0
- cortex_agent_sdk-0.1.0/README.md +105 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/pyproject.toml +2 -2
- cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/__init__.py +16 -0
- cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/agent.py +712 -0
- cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/control.py +159 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/hooks.py +2 -2
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/results.py +6 -1
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/runtime.py +1 -1
- cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/tools/approval.py +20 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/contracts.py +64 -5
- cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/tools/decorators.py +151 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/execution.py +70 -19
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/models.py +23 -0
- cortex_agent_sdk-0.0.4/PKG-INFO +0 -262
- cortex_agent_sdk-0.0.4/README.md +0 -228
- cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/__init__.py +0 -7
- cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/agent.py +0 -324
- cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/tools/decorators.py +0 -65
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/.gitignore +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/LICENSE +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/engine.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/catalogo.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/excepcion.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/gateway.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/google/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/models.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/pipeline.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/transform.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/immutable.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/lifecycle.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/engine.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/models.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/options.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/postgres/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/postgres/store.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/py.typed +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/scripts.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/store.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/__init__.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/codec.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/lease.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/memory.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/models.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/store.py +0 -0
- {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/__init__.py +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cortex-agent-sdk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: SDK async y multiproveedor para construir agentes con control explícito
|
|
5
|
+
Project-URL: Repository, https://github.com/epok200/cortex_agent_sdk
|
|
6
|
+
Project-URL: Issues, https://github.com/epok200/cortex_agent_sdk/issues
|
|
7
|
+
Author: EPOK
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: agents,asyncio,openai,sdk
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Typing :: Typed
|
|
18
|
+
Requires-Python: >=3.13
|
|
19
|
+
Requires-Dist: jsonschema<5,>=4.25
|
|
20
|
+
Requires-Dist: pydantic<3,>=2.13
|
|
21
|
+
Provides-Extra: all
|
|
22
|
+
Requires-Dist: asyncpg>=0.31.0; extra == 'all'
|
|
23
|
+
Requires-Dist: openai<3,>=2.52; extra == 'all'
|
|
24
|
+
Requires-Dist: redis>=8.1.0; extra == 'all'
|
|
25
|
+
Provides-Extra: gateway
|
|
26
|
+
Requires-Dist: openai<3,>=2.52; extra == 'gateway'
|
|
27
|
+
Provides-Extra: openai
|
|
28
|
+
Requires-Dist: openai<3,>=2.52; extra == 'openai'
|
|
29
|
+
Provides-Extra: postgres
|
|
30
|
+
Requires-Dist: asyncpg>=0.31.0; extra == 'postgres'
|
|
31
|
+
Provides-Extra: redis
|
|
32
|
+
Requires-Dist: redis>=8.1.0; extra == 'redis'
|
|
33
|
+
Description-Content-Type: text/markdown
|
|
34
|
+
|
|
35
|
+
# Cortex Agent SDK
|
|
36
|
+
|
|
37
|
+
SDK async y multiproveedor para construir agentes con una API pequeña y control explícito del loop,
|
|
38
|
+
las tools, el historial y el ciclo de vida.
|
|
39
|
+
|
|
40
|
+
> Cortex Agent SDK está en alfa. La API puede cambiar antes de la versión `1.0.0`.
|
|
41
|
+
|
|
42
|
+
## Requisitos
|
|
43
|
+
|
|
44
|
+
- Python `>=3.13`.
|
|
45
|
+
- Una credencial del provider elegido.
|
|
46
|
+
|
|
47
|
+
## Instalación
|
|
48
|
+
|
|
49
|
+
OpenAI Responses:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
uv add "cortex-agent-sdk[openai]"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
También puede instalarse con `pip`:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m pip install "cortex-agent-sdk[openai]"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Extras disponibles: `openai`, `gateway`, `redis`, `postgres` y `all`.
|
|
62
|
+
|
|
63
|
+
## Uso mínimo
|
|
64
|
+
|
|
65
|
+
El SDK oficial de OpenAI lee `OPENAI_API_KEY` del entorno.
|
|
66
|
+
|
|
67
|
+
```python
|
|
68
|
+
import asyncio
|
|
69
|
+
|
|
70
|
+
from cortex_agent_sdk import Agent
|
|
71
|
+
from cortex_agent_sdk.openai import OpenAIEngine
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
async def main() -> None:
|
|
75
|
+
async with Agent(OpenAIEngine("gpt-5.6-luna")) as agent:
|
|
76
|
+
result = await agent.run("Responde únicamente: hola")
|
|
77
|
+
print(result.text)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
asyncio.run(main())
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Tools
|
|
84
|
+
|
|
85
|
+
Cortex conserva tres semánticas explícitas para el resultado de una tool:
|
|
86
|
+
|
|
87
|
+
- `@tool`: ejecuta y devuelve el resultado al modelo para continuar el loop.
|
|
88
|
+
- `@fallback_answer`: continúa el loop y conserva un resultado de respaldo para un cierre limpio sin
|
|
89
|
+
texto visible.
|
|
90
|
+
- `@final_answer`: un `str` exitoso termina el run sin pedir otro turno al modelo.
|
|
91
|
+
|
|
92
|
+
Las tres variantes aceptan contratos inferidos por type hints o un `BaseModel` mediante
|
|
93
|
+
`input_model=...`. También pueden declarar `needs_approval=True` o un predicate sync/async para
|
|
94
|
+
human-in-the-loop por llamada.
|
|
95
|
+
|
|
96
|
+
`Agent(tool_result_policy=...)` queda como mecanismo opcional cuando la decisión de continuar o
|
|
97
|
+
terminar depende del resultado de una tanda de tools y no de una tool fija.
|
|
98
|
+
|
|
99
|
+
## Ejemplos
|
|
100
|
+
|
|
101
|
+
Los ejemplos ejecutables son la referencia práctica de uso:
|
|
102
|
+
|
|
103
|
+
- [`examples/minimal_openai.py`](examples/minimal_openai.py): ejecución mínima con OpenAI Responses.
|
|
104
|
+
- [`examples/tool_openai.py`](examples/tool_openai.py): `@final_answer` sencillo.
|
|
105
|
+
- [`examples/tool_result_control.py`](examples/tool_result_control.py): `tool`, `fallback_answer`,
|
|
106
|
+
`final_answer` y `tool_result_policy`.
|
|
107
|
+
- [`examples/human_in_the_loop.py`](examples/human_in_the_loop.py): approval estático/dinámico,
|
|
108
|
+
approve/reject, serialización y `Agent.resume()`.
|
|
109
|
+
- [`examples/openai_gateway.py`](examples/openai_gateway.py): endpoint compatible con OpenAI
|
|
110
|
+
Responses.
|
|
111
|
+
- [`examples/list_openai_models.py`](examples/list_openai_models.py): consulta de modelos disponibles.
|
|
112
|
+
|
|
113
|
+
## Capacidades actuales
|
|
114
|
+
|
|
115
|
+
- Loop async acotado y multi-tool.
|
|
116
|
+
- Contratos de tools por type hints, Pydantic explícito o `ToolSpec` manual.
|
|
117
|
+
- Modos de resultado `continue`, `fallback` y `final`.
|
|
118
|
+
- Policy post-tool opcional.
|
|
119
|
+
- Human-in-the-loop con approval estático o dinámico, pause, approve/reject, serialización y resume.
|
|
120
|
+
- Historial y sesiones en memoria, Redis o PostgreSQL.
|
|
121
|
+
- Hooks locales y timeouts para providers/tools.
|
|
122
|
+
- OpenAI Responses directo o mediante un gateway compatible.
|
|
123
|
+
|
|
124
|
+
Google conserva un namespace para la evolución multiproveedor, pero todavía no incluye un engine
|
|
125
|
+
funcional. Anthropic y streaming permanecen fuera de este alfa.
|
|
126
|
+
|
|
127
|
+
## Sesiones
|
|
128
|
+
|
|
129
|
+
Las sesiones persistentes conservan el historial por `session_id` y lo ligan al provider/modelo
|
|
130
|
+
original. `MemorySessionStore`, Redis y PostgreSQL implementan el mismo contrato; Redis y PostgreSQL
|
|
131
|
+
permiten compartir estado entre procesos.
|
|
132
|
+
|
|
133
|
+
Durante una pausa por approval, Cortex conserva el turno activo y sólo lo termina cuando las calls
|
|
134
|
+
pendientes quedan resueltas. Una sesión dañada o deliberadamente descartada puede reiniciarse con
|
|
135
|
+
`await agent.reset_session(session_id)`.
|
|
136
|
+
|
|
137
|
+
## Licencia
|
|
138
|
+
|
|
139
|
+
Apache License 2.0.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Cortex Agent SDK
|
|
2
|
+
|
|
3
|
+
SDK async y multiproveedor para construir agentes con una API pequeña y control explícito del loop,
|
|
4
|
+
las tools, el historial y el ciclo de vida.
|
|
5
|
+
|
|
6
|
+
> Cortex Agent SDK está en alfa. La API puede cambiar antes de la versión `1.0.0`.
|
|
7
|
+
|
|
8
|
+
## Requisitos
|
|
9
|
+
|
|
10
|
+
- Python `>=3.13`.
|
|
11
|
+
- Una credencial del provider elegido.
|
|
12
|
+
|
|
13
|
+
## Instalación
|
|
14
|
+
|
|
15
|
+
OpenAI Responses:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv add "cortex-agent-sdk[openai]"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
También puede instalarse con `pip`:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
python -m pip install "cortex-agent-sdk[openai]"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Extras disponibles: `openai`, `gateway`, `redis`, `postgres` y `all`.
|
|
28
|
+
|
|
29
|
+
## Uso mínimo
|
|
30
|
+
|
|
31
|
+
El SDK oficial de OpenAI lee `OPENAI_API_KEY` del entorno.
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
import asyncio
|
|
35
|
+
|
|
36
|
+
from cortex_agent_sdk import Agent
|
|
37
|
+
from cortex_agent_sdk.openai import OpenAIEngine
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def main() -> None:
|
|
41
|
+
async with Agent(OpenAIEngine("gpt-5.6-luna")) as agent:
|
|
42
|
+
result = await agent.run("Responde únicamente: hola")
|
|
43
|
+
print(result.text)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
asyncio.run(main())
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Tools
|
|
50
|
+
|
|
51
|
+
Cortex conserva tres semánticas explícitas para el resultado de una tool:
|
|
52
|
+
|
|
53
|
+
- `@tool`: ejecuta y devuelve el resultado al modelo para continuar el loop.
|
|
54
|
+
- `@fallback_answer`: continúa el loop y conserva un resultado de respaldo para un cierre limpio sin
|
|
55
|
+
texto visible.
|
|
56
|
+
- `@final_answer`: un `str` exitoso termina el run sin pedir otro turno al modelo.
|
|
57
|
+
|
|
58
|
+
Las tres variantes aceptan contratos inferidos por type hints o un `BaseModel` mediante
|
|
59
|
+
`input_model=...`. También pueden declarar `needs_approval=True` o un predicate sync/async para
|
|
60
|
+
human-in-the-loop por llamada.
|
|
61
|
+
|
|
62
|
+
`Agent(tool_result_policy=...)` queda como mecanismo opcional cuando la decisión de continuar o
|
|
63
|
+
terminar depende del resultado de una tanda de tools y no de una tool fija.
|
|
64
|
+
|
|
65
|
+
## Ejemplos
|
|
66
|
+
|
|
67
|
+
Los ejemplos ejecutables son la referencia práctica de uso:
|
|
68
|
+
|
|
69
|
+
- [`examples/minimal_openai.py`](examples/minimal_openai.py): ejecución mínima con OpenAI Responses.
|
|
70
|
+
- [`examples/tool_openai.py`](examples/tool_openai.py): `@final_answer` sencillo.
|
|
71
|
+
- [`examples/tool_result_control.py`](examples/tool_result_control.py): `tool`, `fallback_answer`,
|
|
72
|
+
`final_answer` y `tool_result_policy`.
|
|
73
|
+
- [`examples/human_in_the_loop.py`](examples/human_in_the_loop.py): approval estático/dinámico,
|
|
74
|
+
approve/reject, serialización y `Agent.resume()`.
|
|
75
|
+
- [`examples/openai_gateway.py`](examples/openai_gateway.py): endpoint compatible con OpenAI
|
|
76
|
+
Responses.
|
|
77
|
+
- [`examples/list_openai_models.py`](examples/list_openai_models.py): consulta de modelos disponibles.
|
|
78
|
+
|
|
79
|
+
## Capacidades actuales
|
|
80
|
+
|
|
81
|
+
- Loop async acotado y multi-tool.
|
|
82
|
+
- Contratos de tools por type hints, Pydantic explícito o `ToolSpec` manual.
|
|
83
|
+
- Modos de resultado `continue`, `fallback` y `final`.
|
|
84
|
+
- Policy post-tool opcional.
|
|
85
|
+
- Human-in-the-loop con approval estático o dinámico, pause, approve/reject, serialización y resume.
|
|
86
|
+
- Historial y sesiones en memoria, Redis o PostgreSQL.
|
|
87
|
+
- Hooks locales y timeouts para providers/tools.
|
|
88
|
+
- OpenAI Responses directo o mediante un gateway compatible.
|
|
89
|
+
|
|
90
|
+
Google conserva un namespace para la evolución multiproveedor, pero todavía no incluye un engine
|
|
91
|
+
funcional. Anthropic y streaming permanecen fuera de este alfa.
|
|
92
|
+
|
|
93
|
+
## Sesiones
|
|
94
|
+
|
|
95
|
+
Las sesiones persistentes conservan el historial por `session_id` y lo ligan al provider/modelo
|
|
96
|
+
original. `MemorySessionStore`, Redis y PostgreSQL implementan el mismo contrato; Redis y PostgreSQL
|
|
97
|
+
permiten compartir estado entre procesos.
|
|
98
|
+
|
|
99
|
+
Durante una pausa por approval, Cortex conserva el turno activo y sólo lo termina cuando las calls
|
|
100
|
+
pendientes quedan resueltas. Una sesión dañada o deliberadamente descartada puede reiniciarse con
|
|
101
|
+
`await agent.reset_session(session_id)`.
|
|
102
|
+
|
|
103
|
+
## Licencia
|
|
104
|
+
|
|
105
|
+
Apache License 2.0.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cortex-agent-sdk"
|
|
3
|
-
version = "0.0
|
|
3
|
+
version = "0.1.0"
|
|
4
4
|
description = "SDK async y multiproveedor para construir agentes con control explícito"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -74,7 +74,7 @@ markers = [
|
|
|
74
74
|
]
|
|
75
75
|
|
|
76
76
|
[tool.pyright]
|
|
77
|
-
include = ["src", "tests"]
|
|
77
|
+
include = ["src", "tests", "examples"]
|
|
78
78
|
pythonVersion = "3.13"
|
|
79
79
|
typeCheckingMode = "standard"
|
|
80
80
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from importlib.metadata import version as _package_version
|
|
2
|
+
|
|
3
|
+
from cortex_agent_sdk.agent import Agent
|
|
4
|
+
from cortex_agent_sdk.control import (
|
|
5
|
+
CONTINUE,
|
|
6
|
+
FinalOutput,
|
|
7
|
+
PendingRun,
|
|
8
|
+
ToolApproval,
|
|
9
|
+
ToolResultContext,
|
|
10
|
+
ToolResultPolicy,
|
|
11
|
+
)
|
|
12
|
+
from cortex_agent_sdk.results import AgentResult
|
|
13
|
+
from cortex_agent_sdk.tools.approval import ToolApprovalContext
|
|
14
|
+
from cortex_agent_sdk.tools.decorators import fallback_answer, final_answer, tool
|
|
15
|
+
|
|
16
|
+
__version__ = _package_version("cortex-agent-sdk")
|