Merge pull request #377 from ggozad/chore/deps

Update dependencies
This commit is contained in:
Yiorgis Gozadinos 2026-05-18 16:13:12 +03:00 committed by GitHub
commit b98af1bf11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 1758 additions and 1559 deletions

View file

@ -1,6 +1,14 @@
# Changelog
## [Unreleased]
### Changed
- Bump `docling>=2.93.0` and `docling-core>=2.75.0`.
- Bump `pydantic-ai-slim>=1.96.0`. Migrate off deprecated APIs: AG-UI imports use `pydantic_ai.ui.ag_ui`, docs/CLI examples use the explicit `openai-chat:` model prefix, and `Agent(retries=)` is split into `tool_retries=` + `output_retries=`.
- Bump `pydantic-monty>=0.0.17`. Migrate off deprecated `pydantic_monty.run_repl_async(repl, ...)` to `repl.feed_run_async(...)`.
- Cap `transformers<5.0.0` in the `mxbai` extra: `mxbai-rerank>=0.1.6` calls `tokenizer.prepare_for_model` which transformers 5 removed.
- Refresh the rest of the lockfile to latest within current constraints (pydantic, pydantic-ai, rich, ruff, ty, pytest, torch, textual, textual-image, watchfiles, pre-commit, datasets, and transitives).
## [0.47.0] - 2026-05-14
### Added

View file

@ -6,8 +6,8 @@ from pathlib import Path
from dotenv import find_dotenv, load_dotenv
from pydantic_ai import Agent
from pydantic_ai.ag_ui import AGUIAdapter
from pydantic_ai.ui import SSE_CONTENT_TYPE
from pydantic_ai.ui.ag_ui import AGUIAdapter
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.cors import CORSMiddleware

View file

@ -490,7 +490,7 @@ skill = create_skill(db_path=db_path, config=config)
toolset = SkillToolset(skills=[skill])
agent = Agent(
"openai:gpt-4o",
"openai-chat:gpt-4o",
instructions=build_system_prompt(toolset.skill_catalog),
toolsets=[toolset],
)

View file

@ -59,7 +59,7 @@ analysis = create_analysis_skill(db_path=db_path)
toolset = SkillToolset(skills=[rag, analysis])
agent = Agent(
"openai:gpt-4o",
"openai-chat:gpt-4o",
instructions=build_system_prompt(toolset.skill_catalog),
toolsets=[toolset],
)

View file

@ -31,7 +31,7 @@ skill = create_skill(db_path=db_path, config=config)
toolset = SkillToolset(skills=[skill])
agent = Agent(
"openai:gpt-4o",
"openai-chat:gpt-4o",
instructions=build_system_prompt(toolset.skill_catalog),
toolsets=[toolset],
)
@ -98,7 +98,7 @@ See the individual skill pages for state model details.
For web applications, use pydantic-ai's `AGUIAdapter` to stream tool calls, text, and state deltas:
```python
from pydantic_ai.ag_ui import AGUIAdapter
from pydantic_ai.ui.ag_ui import AGUIAdapter
adapter = AGUIAdapter(agent=agent, run_input=run_input)
event_stream = adapter.run_stream()

View file

@ -51,7 +51,8 @@ class LLMJudge:
model=model_obj,
output_type=LLMJudgeResponseSchema,
system_prompt=ANSWER_EQUIVALENCE_RUBRIC,
retries=3,
tool_retries=3,
output_retries=3,
)
async def judge_answers(

View file

@ -16,8 +16,8 @@ import sys
from pathlib import Path
from pydantic_ai import Agent
from pydantic_ai.ag_ui import AGUIAdapter
from pydantic_ai.ui import SSE_CONTENT_TYPE
from pydantic_ai.ui.ag_ui import AGUIAdapter
from starlette.applications import Starlette
from starlette.requests import Request
from starlette.responses import JSONResponse, Response, StreamingResponse

View file

@ -27,7 +27,8 @@ def create_analysis_agent(config: AppConfig) -> Agent[AnalysisDeps, RawAnalysisR
deps_type=AnalysisDeps,
output_type=RawAnalysisResult,
instructions=ANALYSIS_SYSTEM_PROMPT,
retries=3,
tool_retries=3,
output_retries=3,
)
@agent.tool

View file

@ -260,8 +260,7 @@ class Sandbox:
},
)
if self._context.documents:
await pydantic_monty.run_repl_async(
self._repl,
await self._repl.feed_run_async(
"pass",
inputs={
"documents": [
@ -296,8 +295,7 @@ class Sandbox:
max_chars = self._config.analysis.max_output_chars
try:
output = await pydantic_monty.run_repl_async(
repl,
output = await repl.feed_run_async(
code,
external_functions=external_fns,
print_callback=print_callback,

View file

@ -69,7 +69,8 @@ class QuestionAnswerAgent:
output_type=RawSearchAnswer,
instructions=system_prompt,
toolsets=[search_toolset],
retries=3,
tool_retries=3,
output_retries=3,
)
deps = _QARunDeps(client=self._client)

View file

@ -70,7 +70,8 @@ async def _iterative_plan_logic(
model=model,
output_type=IterativePlanResult,
instructions=effective_prompt,
retries=3,
tool_retries=3,
output_retries=3,
deps_type=ResearchDependencies,
)
@ -120,7 +121,8 @@ async def _search_one_step_logic(
model=model,
output_type=RawSearchAnswer,
instructions=search_prompt,
retries=3,
tool_retries=3,
output_retries=3,
deps_type=ResearchDependencies,
)
@ -222,7 +224,8 @@ def build_research_graph(
model=model,
output_type=ResearchReport,
instructions=synthesis_prompt,
retries=3,
tool_retries=3,
output_retries=3,
deps_type=ResearchDependencies,
)

View file

@ -21,7 +21,7 @@ from ag_ui.core import (
)
from jsonpatch import JsonPatch
from pydantic_ai import Agent
from pydantic_ai.ag_ui import AGUIAdapter
from pydantic_ai.ui.ag_ui import AGUIAdapter
from textual.app import App, SystemCommand
from textual.binding import Binding
from textual.widgets import Footer, Header, Input

View file

@ -663,7 +663,7 @@ def chat( # pragma: no cover
model: str | None = typer.Option(
None,
"--model",
help="Model to use for the chat (e.g. openai:gpt-4o)",
help="Model to use for the chat (e.g. openai-chat:gpt-4o)",
),
skill: list[str] | None = typer.Option(
None,

View file

@ -393,6 +393,8 @@ async def _rebuild_embed_only(
embeddings.extend(batch_embeddings)
for chunk, content_fts, embedding in zip(chunks, texts, embeddings):
assert chunk.id is not None
assert chunk.document_id is not None
pending_records.append(
client.store.ChunkRecord(
id=chunk.id,

View file

@ -96,7 +96,7 @@ async def _apply_compress_docling_document(store: Store) -> None: # pragma: no
"Recovering %d documents from failed migration", len(staging_ids)
)
# Create new documents table and copy from staging
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(
@ -137,7 +137,7 @@ async def _apply_compress_docling_document(store: Store) -> None: # pragma: no
return
# No documents and no staging to recover, just recreate table with new schema
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(
@ -177,7 +177,7 @@ async def _apply_compress_docling_document(store: Store) -> None: # pragma: no
)
# Replace old table with staging table
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(

View file

@ -118,7 +118,7 @@ async def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
logger.info(
"Recovering %d documents from failed migration", len(staging_ids)
)
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(
@ -144,7 +144,7 @@ async def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
return
# No documents and no staging — recreate table with new schema
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(
@ -188,7 +188,7 @@ async def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
)
# Replace old table with staging table
store.documents_table = None
del store.documents_table
if "documents" in (await store.db.list_tables()).tables:
await store.db.drop_table("documents")
store.documents_table = await store.db.create_table(

View file

@ -22,7 +22,7 @@ classifiers = [
]
dependencies = [
"docling-core>=2.74.1",
"docling-core>=2.75.0",
"haiku.skills>=0.16.0",
"httpx>=0.28.1",
"jinja2>=3.1.0",
@ -30,8 +30,8 @@ dependencies = [
"lancedb==0.30.2",
"pathspec>=1.0.4",
"pydantic>=2.12.5",
"pydantic-ai-slim[openai,fastmcp,logfire,ag-ui]>=1.81.0",
"pydantic-monty>=0.0.9",
"pydantic-ai-slim[openai,fastmcp,logfire,ag-ui]>=1.96.0",
"pydantic-monty>=0.0.17",
"python-dotenv>=1.2.2",
"pyyaml>=6.0.3",
"rich>=14.3.3",
@ -42,13 +42,13 @@ dependencies = [
[project.optional-dependencies]
# Document processing
docling = ["docling>=2.91.0", "opencv-python-headless>=4.13.0.92"]
docling = ["docling>=2.93.0", "opencv-python-headless>=4.13.0.92"]
# S3 / object-storage monitoring
s3 = ["obstore>=0.9,<0.10"]
# Embedding providers
voyageai = ["pydantic-ai-slim[voyageai]"]
# Rerankers
mxbai = ["mxbai-rerank>=0.1.6"]
mxbai = ["mxbai-rerank>=0.1.6", "transformers>=4.49.0,<5.0.0"]
cohere = ["cohere>=5.21.1"]
zeroentropy = ["zeroentropy>=0.1.0a11"]
jina = ["transformers>=4.40.0", "torch>=2.0.0"]

3245
uv.lock

File diff suppressed because it is too large Load diff