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.
Files changed (50) hide show
  1. cortex_agent_sdk-0.1.0/PKG-INFO +139 -0
  2. cortex_agent_sdk-0.1.0/README.md +105 -0
  3. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/pyproject.toml +2 -2
  4. cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/__init__.py +16 -0
  5. cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/agent.py +712 -0
  6. cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/control.py +159 -0
  7. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/hooks.py +2 -2
  8. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/results.py +6 -1
  9. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/runtime.py +1 -1
  10. cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/tools/approval.py +20 -0
  11. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/contracts.py +64 -5
  12. cortex_agent_sdk-0.1.0/src/cortex_agent_sdk/tools/decorators.py +151 -0
  13. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/execution.py +70 -19
  14. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/tools/models.py +23 -0
  15. cortex_agent_sdk-0.0.4/PKG-INFO +0 -262
  16. cortex_agent_sdk-0.0.4/README.md +0 -228
  17. cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/__init__.py +0 -7
  18. cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/agent.py +0 -324
  19. cortex_agent_sdk-0.0.4/src/cortex_agent_sdk/tools/decorators.py +0 -65
  20. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/.gitignore +0 -0
  21. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/LICENSE +0 -0
  22. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/engine.py +0 -0
  23. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/__init__.py +0 -0
  24. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/catalogo.py +0 -0
  25. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/errores/excepcion.py +0 -0
  26. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/gateway.py +0 -0
  27. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/google/__init__.py +0 -0
  28. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/__init__.py +0 -0
  29. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/models.py +0 -0
  30. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/pipeline.py +0 -0
  31. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/history/transform.py +0 -0
  32. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/immutable.py +0 -0
  33. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/lifecycle.py +0 -0
  34. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/__init__.py +0 -0
  35. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/engine.py +0 -0
  36. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/models.py +0 -0
  37. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/openai/options.py +0 -0
  38. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/postgres/__init__.py +0 -0
  39. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/postgres/store.py +0 -0
  40. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/py.typed +0 -0
  41. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/__init__.py +0 -0
  42. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/scripts.py +0 -0
  43. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/redis/store.py +0 -0
  44. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/__init__.py +0 -0
  45. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/codec.py +0 -0
  46. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/lease.py +0 -0
  47. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/memory.py +0 -0
  48. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/models.py +0 -0
  49. {cortex_agent_sdk-0.0.4 → cortex_agent_sdk-0.1.0}/src/cortex_agent_sdk/sessions/store.py +0 -0
  50. {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.4"
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")