agentx-dev 3.4.0__tar.gz → 3.4.2__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.
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/CHANGELOG.md +78 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/LICENSE +21 -21
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/PKG-INFO +16 -3
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/README.md +6 -2
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Agents/Agent.py +527 -527
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Agents/__init__.py +10 -10
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/AsyncTools.py +160 -160
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/AutoSetup.py +164 -164
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Cache.py +471 -471
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/ChatModel.py +379 -15
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Compiler.py +308 -308
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Config.py +144 -144
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Embeddings.py +681 -681
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Evals.py +514 -514
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Handoffs.py +420 -420
- agentx_dev-3.4.2/agentx_dev/Media.py +864 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Memory.py +474 -474
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Observability.py +494 -494
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Planner.py +271 -271
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Runner/__init__.py +13 -13
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Runner/promptTemplate.yaml +139 -139
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Splitters.py +306 -306
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Streaming.py +297 -297
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Supervisor.py +1937 -1937
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Tools.py +246 -246
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/VectorStores/__init__.py +43 -43
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/VectorStores/chroma_store.py +171 -171
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/VectorStores/pg_store.py +237 -237
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/VectorStores/qdrant_store.py +239 -239
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/WebTools.py +501 -501
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/resources/__init__.py +3 -3
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev.egg-info/PKG-INFO +16 -3
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev.egg-info/requires.txt +10 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/agentic_rag_demo.py +270 -270
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/async_quickstart.py +81 -81
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/chatbot_example.py +206 -206
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/mcp_github_triage_demo.py +248 -248
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/planner_example.py +93 -93
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/supervisor_codebase_analysis_demo.py +257 -257
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/supervisor_example.py +97 -97
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/sync_quickstart.py +75 -75
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/v3_1_1_features_demo.py +246 -246
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/v3_1_comprehensive_demo.py +446 -446
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/v3_1_features_demo.py +260 -260
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/pyproject.toml +10 -1
- agentx_dev-3.4.0/agentx_dev/Media.py +0 -500
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/AGENTX.md +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/CONTRIBUTING.md +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/MANIFEST.in +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/DefaultTools.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Loader.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/MCP.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Runner/AgentRun.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Runner/AsyncAgentRun.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/Session.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/__init__.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev/resources/promptTemplate.yaml +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev.egg-info/SOURCES.txt +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev.egg-info/dependency_links.txt +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/agentx_dev.egg-info/top_level.txt +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/README.md +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/async_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/auto_features_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/caching_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/complete_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/concurrent_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/concurrent_tool_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/file_agent_demo.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/function_calling_demo.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/mcp_demo.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/observability_example.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/orchestration_demo.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/examples/robust_link_scraper.py +0 -0
- {agentx_dev-3.4.0 → agentx_dev-3.4.2}/setup.cfg +0 -0
|
@@ -4,6 +4,84 @@ All notable changes to `agentx-dev` are documented here. Format loosely
|
|
|
4
4
|
follows [Keep a Changelog](https://keepachangelog.com/); versioning is
|
|
5
5
|
[Semver](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [3.4.2] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
`media=` everywhere, CSV / text / Excel attachments, and structured output
|
|
10
|
+
on models that need the Responses API. Non-breaking.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`media=` on chat models and structured output.** `llm.invoke`,
|
|
15
|
+
`llm.ainvoke`, and `with_structured_output(...).invoke` / `.ainvoke` take
|
|
16
|
+
`media=[...]` (paths, URLs, `Media`, part dicts), appended to the last
|
|
17
|
+
user turn, matching the agent runner. Media inside `content` lists
|
|
18
|
+
already worked; this adds the argument.
|
|
19
|
+
- **CSV, text files, and Excel in `media=`.** Text-like files (CSV, TSV,
|
|
20
|
+
TXT, Markdown, JSON, XML, YAML, HTML) are read as text -- exactly as
|
|
21
|
+
written, UTF-8 or Windows-1252, CRLF normalised -- and spreadsheets
|
|
22
|
+
(.xlsx / .xls / .ods) are converted with pandas (`dtype=object`, so
|
|
23
|
+
cell values aren't re-inferred) to one CSV block per sheet. Both reach
|
|
24
|
+
GPT (chat and Responses) and Claude as a labelled text block, which
|
|
25
|
+
every model accepts. New `Media.text()` / `Media.spreadsheet()`; a
|
|
26
|
+
100,000-character cap (`max_chars=`, `truncate=True`). pandas and
|
|
27
|
+
openpyxl are now core dependencies, so spreadsheets work after a plain
|
|
28
|
+
`pip install agentx-dev` (`[excel]` still works). Date cells without a
|
|
29
|
+
time are written as dates, not `... 00:00:00`.
|
|
30
|
+
- **Media docs section.** Its own nav group: Overview & flow, With chat
|
|
31
|
+
models, With agents, Reference (constructors, per-provider wire
|
|
32
|
+
formats, errors). `docs/guides/media.md` is now a pointer to it.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- **`with_structured_output` on models that need the Responses API.**
|
|
37
|
+
Structured output forces a single tool; if the Responses API rejects a
|
|
38
|
+
forced tool choice for the model, `GPT` retries with
|
|
39
|
+
`tool_choice="required"` (the same tool when there is only one), then
|
|
40
|
+
`"auto"`, remembering it per model. `StructuredOutputRunnable` also
|
|
41
|
+
accepts a JSON text answer that validates against the schema.
|
|
42
|
+
- **`.txt` media failed on Claude.** 3.4.0 stored text files as base64
|
|
43
|
+
documents, which Anthropic only accepts for PDFs. Text files now go
|
|
44
|
+
out as text; older base64 text parts in saved histories are decoded
|
|
45
|
+
on the way out.
|
|
46
|
+
- **Unsupported files reached the provider.** `Media.document()`
|
|
47
|
+
accepted any file type -- including CSV, which Windows' own type table
|
|
48
|
+
labels `application/vnd.ms-excel` -- and sent it as an attachment
|
|
49
|
+
neither provider accepts. Word, PowerPoint and archives now raise
|
|
50
|
+
`ValueError` with the fix before any request; a text file or
|
|
51
|
+
spreadsheet by URL raises too, since only PDFs can be fetched by URL.
|
|
52
|
+
- **Misleading WARNING on recovered calls.** The retry wrapper logged
|
|
53
|
+
every non-retryable 400 at WARNING before the caller could recover, so a
|
|
54
|
+
call that switched to the Responses API and succeeded still printed the
|
|
55
|
+
original "Function tools with reasoning_effort are not supported" text.
|
|
56
|
+
Now DEBUG; recoveries log their own WARNING and real failures log ERROR.
|
|
57
|
+
|
|
58
|
+
## [3.4.1] - 2026-09-18
|
|
59
|
+
|
|
60
|
+
Tool calls on OpenAI models that require the Responses API.
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- **Tool calls failed on models that need the Responses API.** Some
|
|
65
|
+
OpenAI models (e.g. `gpt-6-astra`) reject function tools combined with
|
|
66
|
+
reasoning on `/v1/chat/completions`, and the error's suggested fix --
|
|
67
|
+
`reasoning_effort='none'` -- is itself rejected by those models, so
|
|
68
|
+
3.4.0's parameter adaptation had nowhere to go. `GPT` now switches a
|
|
69
|
+
model's tool calls to `/v1/responses` when the provider says to,
|
|
70
|
+
retries, and remembers it (WARNING-logged). History is translated only
|
|
71
|
+
at the wire (`function_call` / `function_call_output` items paired by
|
|
72
|
+
`call_id`), so agents, `tool_calls`, and completions are unchanged.
|
|
73
|
+
Learned parameter fixes carry across endpoints (`reasoning.effort` maps
|
|
74
|
+
to `reasoning_effort`). Requests are sent with `store=False`, matching
|
|
75
|
+
chat completions. Plain text calls and streaming stay on chat
|
|
76
|
+
completions.
|
|
77
|
+
- Requests chat completions can't express (a document URL) go to the
|
|
78
|
+
Responses API, which accepts `file_url`, instead of raising.
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- `GPT(use_responses_api=None | True | False)`: automatic (default),
|
|
83
|
+
always, or never.
|
|
84
|
+
|
|
7
85
|
## [3.4.0] - 2026-09-18
|
|
8
86
|
|
|
9
87
|
Media input for GPT and Claude, models that adapt to each generation's
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Bruce-Arhin Shadrach
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bruce-Arhin Shadrach
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentx-dev
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.2
|
|
4
4
|
Summary: A production-grade Python framework for building LLM agents. Multi-provider chat, permission-gated tools, RAG (in-mem + Chroma/Qdrant/pgvector), semantic memory, Supervisor + Handoffs multi-agent orchestration with streaming, evals harness, prompt caching, Batch API, prompt-optimizer, MCP integration.
|
|
5
5
|
Author-email: Bruce-Arhin Shadrach <brucearhin098@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -35,6 +35,8 @@ Requires-Dist: openai>=1.0.0
|
|
|
35
35
|
Requires-Dist: pydantic>=2.0
|
|
36
36
|
Requires-Dist: PyYAML>=5.3.1
|
|
37
37
|
Requires-Dist: rich>=10.0
|
|
38
|
+
Requires-Dist: pandas>=1.5
|
|
39
|
+
Requires-Dist: openpyxl>=3.1
|
|
38
40
|
Provides-Extra: anthropic
|
|
39
41
|
Requires-Dist: anthropic>=0.36; extra == "anthropic"
|
|
40
42
|
Provides-Extra: mcp
|
|
@@ -48,10 +50,15 @@ Provides-Extra: qdrant
|
|
|
48
50
|
Requires-Dist: qdrant-client>=1.6; extra == "qdrant"
|
|
49
51
|
Provides-Extra: pgvector
|
|
50
52
|
Requires-Dist: psycopg[binary]>=3.1; extra == "pgvector"
|
|
53
|
+
Provides-Extra: excel
|
|
54
|
+
Requires-Dist: pandas>=1.5; extra == "excel"
|
|
55
|
+
Requires-Dist: openpyxl>=3.1; extra == "excel"
|
|
51
56
|
Provides-Extra: dev
|
|
52
57
|
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
53
58
|
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
54
59
|
Requires-Dist: numpy>=1.24; extra == "dev"
|
|
60
|
+
Requires-Dist: pandas>=1.5; extra == "dev"
|
|
61
|
+
Requires-Dist: openpyxl>=3.1; extra == "dev"
|
|
55
62
|
Provides-Extra: all
|
|
56
63
|
Requires-Dist: anthropic>=0.36; extra == "all"
|
|
57
64
|
Requires-Dist: mcp>=0.1; extra == "all"
|
|
@@ -60,6 +67,8 @@ Requires-Dist: opentelemetry-sdk>=1.20; extra == "all"
|
|
|
60
67
|
Requires-Dist: chromadb>=0.4; extra == "all"
|
|
61
68
|
Requires-Dist: qdrant-client>=1.6; extra == "all"
|
|
62
69
|
Requires-Dist: psycopg[binary]>=3.1; extra == "all"
|
|
70
|
+
Requires-Dist: pandas>=1.5; extra == "all"
|
|
71
|
+
Requires-Dist: openpyxl>=3.1; extra == "all"
|
|
63
72
|
Dynamic: license-file
|
|
64
73
|
|
|
65
74
|
# agentx_dev
|
|
@@ -82,7 +91,7 @@ breaks — see [Upgrading](docs/guides/upgrading.md).
|
|
|
82
91
|
|
|
83
92
|
| Feature | What you get |
|
|
84
93
|
|---|---|
|
|
85
|
-
| **Media input** | `runner.invoke("Describe this", media=["photo.jpg", "report.pdf"])`. Paths, URLs, bytes or `Media` objects. The same code works on `GPT()` and `Claude()`: each model gets its own format, and either provider's native part shape is accepted too. Unsupported pairs — audio to Claude, a PDF URL to GPT — fail fast with a clear `ValueError`. [
|
|
94
|
+
| **Media input** | `runner.invoke("Describe this", media=["photo.jpg", "report.pdf"])`. Paths, URLs, bytes or `Media` objects. The same code works on `GPT()` and `Claude()`: each model gets its own format, and either provider's native part shape is accepted too. Unsupported pairs — audio to Claude, a PDF URL to GPT — fail fast with a clear `ValueError`. [Media docs](docs/media/overview.md). |
|
|
86
95
|
| **Models that adapt** | Parameter support changes between model generations — `reasoning_effort`'s allowed values, `max_tokens` vs `max_completion_tokens`, Claude's `temperature` + `top_p` conflict. When a model rejects a parameter, `GPT` and `Claude` make the smallest change the error asks for (`'none'` → `'low'`), retry, and remember it for that model. Logged at WARNING; `adapt_params=False` opts out. [Details](docs/concepts/models.md#old-and-new-models). |
|
|
87
96
|
| **More Claude settings** | `Claude(top_p=, top_k=, thinking=, stop_sequences=)`. `temperature` is only sent when you set it. |
|
|
88
97
|
| **Workspace paths** | With a workspace set, `/notes.txt` means the workspace's `notes.txt`, not `C:\notes.txt`. `run_python` now starts in the workspace, so `open("notes.txt")` finds it. |
|
|
@@ -972,10 +981,14 @@ llm.invoke([{"role": "user", "content": ["What's in this photo?", Media.image("c
|
|
|
972
981
|
|---|---|---|
|
|
973
982
|
| image (file or URL) | yes | yes |
|
|
974
983
|
| PDF | file | file or URL |
|
|
984
|
+
| CSV, TXT, JSON, Markdown ... | yes, as text | yes, as text |
|
|
985
|
+
| Excel (`.xlsx`) | yes, CSV per sheet (pandas, installed with agentx-dev) | same |
|
|
975
986
|
| audio (wav / mp3) | audio models | no — `ValueError` |
|
|
976
987
|
|
|
977
988
|
Paths are relative to where your program runs, not the agent's
|
|
978
|
-
workspace.
|
|
989
|
+
workspace. The same `media=` works on `llm.invoke(...)` and
|
|
990
|
+
`llm.with_structured_output(Schema).invoke(...)`. See
|
|
991
|
+
[Media](docs/media/overview.md).
|
|
979
992
|
|
|
980
993
|
## Get a typed result back
|
|
981
994
|
|
|
@@ -18,7 +18,7 @@ breaks — see [Upgrading](docs/guides/upgrading.md).
|
|
|
18
18
|
|
|
19
19
|
| Feature | What you get |
|
|
20
20
|
|---|---|
|
|
21
|
-
| **Media input** | `runner.invoke("Describe this", media=["photo.jpg", "report.pdf"])`. Paths, URLs, bytes or `Media` objects. The same code works on `GPT()` and `Claude()`: each model gets its own format, and either provider's native part shape is accepted too. Unsupported pairs — audio to Claude, a PDF URL to GPT — fail fast with a clear `ValueError`. [
|
|
21
|
+
| **Media input** | `runner.invoke("Describe this", media=["photo.jpg", "report.pdf"])`. Paths, URLs, bytes or `Media` objects. The same code works on `GPT()` and `Claude()`: each model gets its own format, and either provider's native part shape is accepted too. Unsupported pairs — audio to Claude, a PDF URL to GPT — fail fast with a clear `ValueError`. [Media docs](docs/media/overview.md). |
|
|
22
22
|
| **Models that adapt** | Parameter support changes between model generations — `reasoning_effort`'s allowed values, `max_tokens` vs `max_completion_tokens`, Claude's `temperature` + `top_p` conflict. When a model rejects a parameter, `GPT` and `Claude` make the smallest change the error asks for (`'none'` → `'low'`), retry, and remember it for that model. Logged at WARNING; `adapt_params=False` opts out. [Details](docs/concepts/models.md#old-and-new-models). |
|
|
23
23
|
| **More Claude settings** | `Claude(top_p=, top_k=, thinking=, stop_sequences=)`. `temperature` is only sent when you set it. |
|
|
24
24
|
| **Workspace paths** | With a workspace set, `/notes.txt` means the workspace's `notes.txt`, not `C:\notes.txt`. `run_python` now starts in the workspace, so `open("notes.txt")` finds it. |
|
|
@@ -908,10 +908,14 @@ llm.invoke([{"role": "user", "content": ["What's in this photo?", Media.image("c
|
|
|
908
908
|
|---|---|---|
|
|
909
909
|
| image (file or URL) | yes | yes |
|
|
910
910
|
| PDF | file | file or URL |
|
|
911
|
+
| CSV, TXT, JSON, Markdown ... | yes, as text | yes, as text |
|
|
912
|
+
| Excel (`.xlsx`) | yes, CSV per sheet (pandas, installed with agentx-dev) | same |
|
|
911
913
|
| audio (wav / mp3) | audio models | no — `ValueError` |
|
|
912
914
|
|
|
913
915
|
Paths are relative to where your program runs, not the agent's
|
|
914
|
-
workspace.
|
|
916
|
+
workspace. The same `media=` works on `llm.invoke(...)` and
|
|
917
|
+
`llm.with_structured_output(Schema).invoke(...)`. See
|
|
918
|
+
[Media](docs/media/overview.md).
|
|
915
919
|
|
|
916
920
|
## Get a typed result back
|
|
917
921
|
|