diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c4b3325c..c42c3db5 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -2,7 +2,7 @@ version: 2
updates:
- package-ecosystem: uv
directory: "/"
- versioning-strategy: increase-if-necessary
+ versioning-strategy: lockfile-only
schedule:
interval: weekly
groups:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f9b29b1..247aa5ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,33 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
---
+## v26.10.11 (2026-10-24)
+
+### Changed
+
+- Include the previously unreleased dependency metadata from Dependabot PR #196:
+ `agentic-openai-embeddings` and `agentic-azure-embeddings` require
+ `openai>=3.36.0`, `agentic-binary` requires `pypdf>=6.21.2`, and the `fastapi`
+ extra requires `fastapi>=0.158.0`. The v26.10.10 lock already selected OpenAI
+ 3.37.0, pypdf 6.21.2 and FastAPI 0.162.0; these changes raise declared
+ minimums without introducing an application API change. PR #196 also separates
+ native uv project updates from pip documentation updates.
+- Preserve the qualified SQLAlchemy `>=2.0.50` minimum while the repository lock
+ selects 2.1.6. Use Dependabot's `lockfile-only` strategy for project dependency
+ updates so compatible lock refreshes do not raise application requirements.
+ Keep documentation requirements under the separate pip updater and retain
+ the existing SDK and feature-flag compatibility caps.
+- Raise the book toolchain's PyYAML requirement to `>=6.0.3,<7` from Dependabot
+ PR #197; the installed version remains 6.0.3.
+- Refresh the Lumen and native Agentic book companion locks against 26.10.11,
+ including the current SDK pins, so their documented locked installs work.
+
+### Documentation
+
+- Refresh current release installation examples and download links, document
+ dependency-floor maintenance, and rebuild the aligned English/Spanish books.
+ Native Agentic APIs, Monty 0.0.23 examples and canonical artwork are preserved.
+
## v26.10.10 (2026-10-24)
### Fixed
diff --git a/README.md b/README.md
index 2bd455c9..25d95932 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
-
+
@@ -61,7 +61,7 @@
It covers the whole stack: dependency injection, configuration & profiles, the web layer, the Spring-Data `Repository` (derived queries, pagination, specifications, projections), DDD aggregates & `Money`, CQRS, domain events & event sourcing, messaging, HTTP clients, sagas, caching & resilience, security, observability, testing, scheduling, and going to production. Spring developers get a **Spring parity** callout at every turn.
-**📥 Download the books shipped with v26.10.10:** **[English PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example.pdf)** · **[English EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example.epub)** · **[Spanish PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example-es.pdf)** · **[Spanish EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example-es.epub)**. For a specific version, use its [tagged release](https://github.com/fireflyframework/fireflyframework-pyfly/releases), or build from source with `bash book/build/run.sh --out-dir book/release-output`. Run the companion sample with `cd samples/lumen && uv run --extra dev pytest` and `uv run pyfly run --server uvicorn`.
+**📥 Download the books shipped with v26.10.11:** **[English PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example.pdf)** · **[English EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example.epub)** · **[Spanish PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example-es.pdf)** · **[Spanish EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example-es.epub)**. For a specific version, use its [tagged release](https://github.com/fireflyframework/fireflyframework-pyfly/releases), or build from source with `bash book/build/run.sh --out-dir book/release-output`. Run the companion sample with `cd samples/lumen && uv run --extra dev pytest` and `uv run pyfly run --server uvicorn`.
---
@@ -851,7 +851,9 @@ See **[`samples/lumen/`](samples/lumen/README.md)** for an end-to-end DDD micros
> **Note:** PyFly is distributed exclusively via [GitHub Releases](https://github.com/fireflyframework/fireflyframework-pyfly/releases). It is **not** published to PyPI.
-**Upgrading to v26.10.10:** Optional script execution now uses Monty 0.0.23 with an owned worker and fresh session per run. Existing Code Mode calls keep their direct tool syntax. Remove non-`None` `max_allocations` limits; use memory, recursion and time budgets instead. See the [execution guide](docs/modules/agentic/execution.md).
+**Upgrading to v26.10.11:** This maintenance release preserves application APIs and the SQLAlchemy 2.0.50 minimum while refreshing the repository lock and book toolchain. Resolve and test your application lock. See the [dependency update notes](docs/dependency-updates.md).
+
+**From v26.10.10:** Optional script execution now uses Monty 0.0.23 with an owned worker and fresh session per run. Existing Code Mode calls keep their direct tool syntax. Remove non-`None` `max_allocations` limits; use memory, recursion and time budgets instead. See the [execution guide](docs/modules/agentic/execution.md).
**From v26.10.09:** Native pattern redaction remains enabled by default; the `pii` extra and Presidio backend are removed. Remove the `presidio` configuration block and use `engine: regex`; legacy `auto` selects regex. See the [logging migration](docs/modules/logging.md#upgrading-from-the-removed-presidio-backend).
@@ -869,13 +871,13 @@ hotfix baseline and the migration from the removed Presidio backend.
```bash
# Install the latest release (uv)
-uv add "pyfly @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.10-py3-none-any.whl"
+uv add "pyfly @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.11-py3-none-any.whl"
# Install with specific extras
-uv add "pyfly[web,data-relational,cache] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.10-py3-none-any.whl"
+uv add "pyfly[web,data-relational,cache] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.11-py3-none-any.whl"
# Or with pip
-pip install "pyfly @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.10-py3-none-any.whl"
+pip install "pyfly @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/latest/download/pyfly-26.10.11-py3-none-any.whl"
```
### One-Line Install (CLI + Framework)
@@ -1206,6 +1208,7 @@ The git tag and human-readable display use the leading-zero form (`v26.05.01`);
The full release history lives in **[CHANGELOG.md](CHANGELOG.md)** ([Keep a Changelog](https://keepachangelog.com/) format). Recent highlights:
+- **`v26.10.11`** (2026-10-24) — preserve supported dependency minimums, keep automated project updates in the lockfile, and refresh the book toolchain and both editions.
- **`v26.10.10`** (2026-10-24) — adapt optional sandbox execution to Monty 0.0.23, preserve direct sync/async Code Mode tools, and refresh the English/Spanish execution tutorials.
- **`v26.10.09`** (2026-10-24) — remove Presidio and the `pii` extra while keeping native pattern redaction enabled, refresh compatible dependencies, and reduce the admin logo size.
- **`v26.10.08`** (2026-10-24) — integrate the native optional `pyfly.agentic` module, application-owned runtime and agents/tools/knowledge/workflows, with complete migration guidance and English/Spanish book chapters.
diff --git a/book/README.md b/book/README.md
index 38d58dac..02372d33 100644
--- a/book/README.md
+++ b/book/README.md
@@ -7,10 +7,10 @@ wallet offer route, shared targeting fixture, runtime gates and operator workflo
| Edition | PDF | EPUB |
|---|---|---|
-| English | [PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example.pdf) | [EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example.epub) |
-| Spanish | [PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example-es.pdf) | [EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-by-example-es.epub) |
+| English | [PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example.pdf) | [EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example.epub) |
+| Spanish | [PDF](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example-es.pdf) | [EPUB](https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-by-example-es.epub) |
-These books are rebuilt from the `v26.10.10` software tag. The independently
+These books are rebuilt from the `v26.10.11` software tag. The independently
published [2026-10-14 edition](https://github.com/fireflyframework/fireflyframework-pyfly/releases/tag/books-26.10.14)
retains its original assets. For other editions, open the
[tagged releases](https://github.com/fireflyframework/fireflyframework-pyfly/releases)
@@ -23,7 +23,10 @@ native HTTP/events/plugins and the guarded Agentic admin console. The hotfix
refresh replaces the removed Presidio setup with native regex
redaction and migration guidance in both languages. The v26.10.10 refresh adds
a runnable Monty 0.0.23 computation and Code Mode tutorial to Chapter 19 in both
-editions, including worker/session ownership and supported resource limits. Local candidate builds must
+editions, including worker/session ownership and supported resource limits. The
+v26.10.11 maintenance refresh keeps those APIs, preserves supported dependency
+minimums and updates the book toolchain to PyYAML 6.0.3 or later within 6.x.
+Local candidate builds must
record the checkout commit and dirty source hashes until the release is published.
## Sources and examples
diff --git a/book/manuscript-es/19-agentic-agents.md b/book/manuscript-es/19-agentic-agents.md
index ce25656c..697d1b52 100644
--- a/book/manuscript-es/19-agentic-agents.md
+++ b/book/manuscript-es/19-agentic-agents.md
@@ -13,9 +13,15 @@ de la aplicación: versiones posteriores de Ragas y datasets tienen conflictos
de API o dependencias descritos en las
[notas de dependencias](https://fireflyframework.github.io/fireflyframework-pyfly/docs/dependency-updates/).
+La versión de mantenimiento v26.10.11 conserva estas API y el mínimo de
+SQLAlchemy 2.0.50. El lock del repositorio selecciona 2.1.6; cada aplicación
+conserva y prueba su propio lock de dependencias. Las actualizaciones automáticas
+del proyecto cambian el lockfile; modificar requisitos exige revisar compatibilidad
+por separado.
+
## 19.1. Activar el módulo de forma explícita
-Instala el núcleo opcional desde el wheel oficial de v26.10.10, seleccionando
+Instala el núcleo opcional desde el wheel oficial de v26.10.11, seleccionando
`pyfly[agentic]`, como indica la
[guía de instalación](https://fireflyframework.github.io/fireflyframework-pyfly/docs/modules/agentic/getting-started/installation/).
PyFly se distribuye mediante GitHub Releases. Una instalación base no necesita
@@ -180,7 +186,7 @@ de SQLite con una fila de negocio y un hecho asíncrono.
## 19.10. Ejecutar scripts limitados con Code Mode
-Instala `pyfly[agentic,agentic-script-execution]` desde el wheel de v26.10.10.
+Instala `pyfly[agentic,agentic-script-execution]` desde el wheel de v26.10.11.
Este extra opcional instala `pydantic-monty==0.0.23` y el binario de
`pydantic-monty-runtime`. El SDK localiza el binario instalado y admite
`MONTY_BIN` para indicar un ejecutable compatible. Si falta el runtime,
diff --git a/book/manuscript/19-agentic-agents.md b/book/manuscript/19-agentic-agents.md
index c7cf9622..cf160b14 100644
--- a/book/manuscript/19-agentic-agents.md
+++ b/book/manuscript/19-agentic-agents.md
@@ -12,9 +12,14 @@ community 0.3 adapter and datasets >=5.0.1. Resolve the complete application
graph: newer Ragas and datasets releases have API or dependency conflicts in the
[dependency notes](https://fireflyframework.github.io/fireflyframework-pyfly/docs/dependency-updates/).
+The v26.10.11 maintenance release preserves these APIs and the SQLAlchemy
+2.0.50 minimum. The repository lock selects 2.1.6; applications keep and test
+their own dependency locks. Automated project updates change the lockfile;
+requirement changes need separate compatibility review.
+
## 19.1. Enable the module deliberately
-Install the optional core from the official v26.10.10 release wheel, selecting
+Install the optional core from the official v26.10.11 release wheel, selecting
`pyfly[agentic]`, as shown in the
[installation guide](https://fireflyframework.github.io/fireflyframework-pyfly/docs/modules/agentic/getting-started/installation/).
PyFly is distributed through GitHub Releases. Base installations need no AI SDK. Enable managed integration in the effective configuration tree:
@@ -178,7 +183,7 @@ actual SQLite transaction containing both a business row and an async fact.
## 19.10. Execute bounded scripts with Code Mode
-Install `pyfly[agentic,agentic-script-execution]` from the v26.10.10 release
+Install `pyfly[agentic,agentic-script-execution]` from the v26.10.11 release
wheel. This optional extra installs `pydantic-monty==0.0.23` and the
`pydantic-monty-runtime` binary. The SDK discovers its installed binary and
honors `MONTY_BIN` for an explicit compatible executable. A missing runtime
diff --git a/docs/cli.md b/docs/cli.md
index 2ea4e450..875d0ee8 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -789,7 +789,7 @@ Missing optional tools are shown with a `-` dash indicator (dimmed), while missi
Verifies that PyFly itself is importable and displays the installed version:
```
-✓ pyfly v26.10.10
+✓ pyfly v26.10.11
```
### Summary
diff --git a/docs/dependency-updates.md b/docs/dependency-updates.md
index 83db58d4..7bb7b753 100644
--- a/docs/dependency-updates.md
+++ b/docs/dependency-updates.md
@@ -1,9 +1,25 @@
-# Dependency updates in v26.10.10
-
-This release adapts sandbox execution to Monty 0.0.23 from Dependabot
-[PR #195](https://github.com/fireflyframework/fireflyframework-pyfly/pull/195),
-following the compatible updates from Dependabot
-[PR #193](https://github.com/fireflyframework/fireflyframework-pyfly/pull/193).
+# Dependency updates in v26.10.11
+
+This maintenance release adopts the book toolchain's `PyYAML>=6.0.3,<7` from
+Dependabot [PR #197](https://github.com/fireflyframework/fireflyframework-pyfly/pull/197).
+It retains `SQLAlchemy>=2.0.50` instead of raising the supported minimum to
+2.1.6 as proposed by [PR #198](https://github.com/fireflyframework/fireflyframework-pyfly/pull/198).
+The repository lock already selects SQLAlchemy 2.1.6 and PyYAML 6.0.3. No
+application API migration is required from v26.10.10; Pydantic AI 2.59.0,
+Monty 0.0.23 and the existing compatibility caps remain in place.
+This release also includes previously unreleased dependency metadata from
+Dependabot [PR #196](https://github.com/fireflyframework/fireflyframework-pyfly/pull/196):
+OpenAI/Azure embedding extras now require `openai>=3.36.0`, the binary extra
+requires `pypdf>=6.21.2`, and the FastAPI extra requires `fastapi>=0.158.0`.
+The v26.10.10 lock already selected OpenAI 3.37.0, pypdf 6.21.2 and FastAPI
+0.162.0; the changed metadata makes those minimum requirements explicit.
+SQLAlchemy's locked selection advances from 2.1.4 to 2.1.6 while its supported
+2.0.50 minimum stays intact. PR #196 also introduced the native uv project
+updater and separate pip documentation updater.
+
+If an application selects one of these extras, reconcile any direct SDK pins
+below its new minimum before resolving the full graph, then test that adapter.
+Applications that do not select those extras do not need to add those SDKs.
The declared constraints are in `pyproject.toml`; `uv.lock` records the exact
repository selection. Applications must resolve and validate their own locks.
Python 3.12 and 3.13 remain the qualification targets.
@@ -11,18 +27,25 @@ Python 3.12 and 3.13 remain the qualification targets.
## Repository dependency automation
Dependabot uses the `uv` ecosystem so Python updates include `uv.lock`, matching
-CI's `uv sync --locked` checks. The `increase-if-necessary` strategy retains an
-existing supported requirement when it already allows the updated dependency;
-it still updates the resolved lock. The Python dependency group includes both
-runtime and development dependencies.
+CI's `uv sync --locked` checks. The `lockfile-only` strategy updates resolved
+versions within existing requirements and leaves declared compatibility floors
+unchanged. Review requirement changes separately with the affected adapter's
+minimum-version and current-version qualification lanes. The Python dependency
+group includes both runtime and development dependencies. On the next native
+`uv` updater run, inspect its job payload and confirm `lockfile-only: true`;
+checked-in configuration records intent, not proof that the updater applied it.
+An earlier run reported `requirements-update-strategy: null` and
+`lockfile-only: false`, so that run does not establish an upstream strategy bug.
The separate `pip` entry keeps maintaining the documentation requirements while
excluding `pyproject.toml` and `uv.lock`, which belong to the `uv` entry.
Intentional changes to Agentic extra requirements must also update the reviewed
contracts in `scripts/agentic-migration-manifest.json`. Regenerate the lock and
-run `scripts/verify_agentic_migration.py` before submitting those changes. Keep
-the SQLAlchemy 2.0.50 floor and the separate 2.0/2.1 qualification lanes; a newer
+run `scripts/verify_agentic_migration.py` before submitting those changes.
+Explicitly pinned Pydantic AI and Monty upgrades require this deliberate
+manifest review and adapter qualification; lockfile-only automation cannot
+advance those pins. Keep the SQLAlchemy 2.0.50 floor and the separate 2.0/2.1 qualification lanes; a newer
locked patch does not require dropping supported application combinations.
See [uv's Dependabot integration](https://docs.astral.sh/uv/guides/integration/dependabot/)
@@ -45,6 +68,11 @@ do not reuse their removed backend installation instructions for this hotfix.
| Dependency | Current selection | Compatibility boundary |
| --- | --- | --- |
+| OpenAI SDK (`agentic-openai-embeddings`, `agentic-azure-embeddings`) | `>=3.36.0`; lock `3.37.0` | Reconcile lower application pins when selecting either embedding extra. |
+| pypdf (`agentic-binary`) | `>=6.21.2`; lock `6.21.2` | Reconcile lower application pins for binary ingestion. |
+| FastAPI (`fastapi`) | `>=0.158.0`; lock `0.162.0` | Reconcile lower application pins when selecting the FastAPI adapter. |
+| SQLAlchemy | `>=2.0.50`; lock `2.1.6` | Preserve qualified 2.0 applications while exercising the newer 2.1 selection in repository environments. |
+| PyYAML (book toolchain) | `>=6.0.3,<7`; installed `6.0.3` | Keep documentation parsing within the supported 6.x series. |
| asyncmy | `>=0.2.11`; lock `0.2.16` | Keep the proven MySQL/MariaDB driver minimum while installing the newer compatible patch in repository environments. |
| openfeature-flagd-core | `>=1.0.0,<2` | Preserve the shared PyFly/LaraFly fractional cohort contract; 2.x changes the hash input and shifts existing assignments. |
| Pydantic AI | `==2.59.0` | Preserve provider extras and the native runtime contracts. |
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 1e30702c..f975ffc3 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -480,7 +480,7 @@ ______ ___.__._/ ____\ | ___.__.
| __// ____| |__| |____/ ____|
|__| \/ \/
- PyFly v26.10.10 | Python 3.12.0
+ PyFly v26.10.11 | Python 3.12.0
2026-01-15T10:30:00Z [info] starting_application app=my-service version=0.1.0
2026-01-15T10:30:00Z [info] no_active_profiles message=No active profiles set, falling back to default
diff --git a/docs/installation.md b/docs/installation.md
index dd5da747..47ad190c 100644
--- a/docs/installation.md
+++ b/docs/installation.md
@@ -531,7 +531,7 @@ PyFly Doctor
✓ mypy — Type checker
PyFly packages:
- ✓ pyfly v26.10.10
+ ✓ pyfly v26.10.11
All checks passed!
```
diff --git a/docs/modules/agentic/getting-started/installation.md b/docs/modules/agentic/getting-started/installation.md
index 7bc5d763..b413f194 100644
--- a/docs/modules/agentic/getting-started/installation.md
+++ b/docs/modules/agentic/getting-started/installation.md
@@ -12,15 +12,15 @@ those dependencies on every operating system.
## From a release
-This guide uses **v26.10.10** (package version `26.10.10`). Verify the release's
+This guide uses **v26.10.11** (package version `26.10.11`). Verify the release's
assets before installing its wheel. PyFly is distributed through
[GitHub Releases](https://github.com/fireflyframework/fireflyframework-pyfly/releases),
not PyPI. Install the wheel and select the optional module explicitly:
```bash
-python -m pip install "pyfly[agentic] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-26.10.10-py3-none-any.whl"
+python -m pip install "pyfly[agentic] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-26.10.11-py3-none-any.whl"
# In a uv-managed application:
-uv add "pyfly[agentic] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-26.10.10-py3-none-any.whl"
+uv add "pyfly[agentic] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-26.10.11-py3-none-any.whl"
```
Add namespaced extras such as `agentic-postgres` or `agentic-ollama-embeddings`
diff --git a/docs/modules/core.md b/docs/modules/core.md
index 6e8ce485..91dc5484 100644
--- a/docs/modules/core.md
+++ b/docs/modules/core.md
@@ -599,7 +599,7 @@ class BannerMode(enum.Enum):
| Mode | Behavior |
|---|---|
| `TEXT` | Full ASCII art banner (default) with a framework version line. |
-| `MINIMAL` | Single line: `:: PyFly :: (v26.10.10)` |
+| `MINIMAL` | Single line: `:: PyFly :: (v26.10.11)` |
| `OFF` | No banner output at all. |
### BannerPrinter Class
@@ -640,7 +640,7 @@ ______ ___.__._/ ____\ | ___.__.
| __// ____| |__| |____/ ____|
|__| \/ \/
-:: PyFly Framework :: (v26.10.10)
+:: PyFly Framework :: (v26.10.11)
```
### Custom Banner Files
diff --git a/docs/modules/feature-flags.md b/docs/modules/feature-flags.md
index 709b1032..a02b2d77 100644
--- a/docs/modules/feature-flags.md
+++ b/docs/modules/feature-flags.md
@@ -7,7 +7,7 @@ PyFly evaluates [flagd](https://flagd.dev) definitions through OpenFeature. The
Install the optional dependency from the pinned GitHub Release wheel and enable the subsystem. PyFly is distributed through GitHub Releases:
```bash
-uv add "pyfly[feature-flags] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.10/pyfly-26.10.10-py3-none-any.whl"
+uv add "pyfly[feature-flags] @ https://github.com/fireflyframework/fireflyframework-pyfly/releases/download/v26.10.11/pyfly-26.10.11-py3-none-any.whl"
```
```yaml
diff --git a/docs/versioning.md b/docs/versioning.md
index dee97fe4..a439ddae 100644
--- a/docs/versioning.md
+++ b/docs/versioning.md
@@ -64,6 +64,7 @@ rare case where a substantial change needs an additional review window.
| Version | Date | Notes |
|---------|------|-------|
+| `26.10.11` | 2026-10-24 | Preserve supported dependency floors, use lockfile-only project updates and refresh book tooling and both editions. |
| `26.10.10` | 2026-10-24 | Monty 0.0.23 worker-backed execution, preserved Code Mode API and updated EN/ES tutorials. |
| `26.10.09` | 2026-10-24 | Native regex redaction replaces Presidio; dependency hotfix and smaller admin branding. |
| `26.10.08` | 2026-10-24 | Native optional Agentic module, application-owned runtime and matching EN/ES book chapters; namespace migration required. |
@@ -108,20 +109,20 @@ shipped, with the version metadata updated.
```python
import pyfly
-print(pyfly.__version__) # → "26.10.10"
+print(pyfly.__version__) # → "26.10.11"
```
The CLI reads the installed distribution metadata and reports the normalized
package version:
```bash
-pyfly --version # → pyfly, version 26.10.10
+pyfly --version # → pyfly, version 26.10.11
```
The startup banner displays the leading-zero form:
```
-:: PyFly Framework :: (v26.10.10) (Python 3.13.9)
+:: PyFly Framework :: (v26.10.11) (Python 3.13.9)
```
---
diff --git a/install.sh b/install.sh
index 3b1ffc6b..9c3f57a0 100755
--- a/install.sh
+++ b/install.sh
@@ -28,7 +28,7 @@ set -euo pipefail
# ── Constants ──────────────────────────────────────────────────────────────────
-PYFLY_VERSION="26.10.10"
+PYFLY_VERSION="26.10.11"
PYFLY_REPO="https://github.com/fireflyframework/fireflyframework-pyfly.git"
DEFAULT_INSTALL_DIR="$HOME/.pyfly"
MIN_PYTHON_MAJOR=3
diff --git a/pyproject.toml b/pyproject.toml
index a3fcec62..17d66e33 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,7 +7,7 @@ name = "pyfly"
# CalVer YY.MM.PATCH — package metadata uses PEP 440 normalized form (26.5.4);
# git tag, GitHub release and human-readable display use leading-zero form
# (v26.05.04) to match the Java/.NET/Go siblings.
-version = "26.10.10"
+version = "26.10.11"
description = "The official Python implementation of the Firefly Framework — DI, CQRS, EDA, hexagonal architecture, and more."
readme = "README.md"
license = "Apache-2.0"
diff --git a/samples/agentic-book/uv.lock b/samples/agentic-book/uv.lock
index 82df8a94..f861e755 100644
--- a/samples/agentic-book/uv.lock
+++ b/samples/agentic-book/uv.lock
@@ -1749,14 +1749,14 @@ email = [
[[package]]
name = "pydantic-ai"
-version = "2.55.0"
+version = "2.59.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pydantic-ai-slim", extra = ["anthropic", "cli", "evals", "google", "logfire", "mcp", "openai", "web"] },
]
-sdist = { url = "https://files.pythonhosted.org/packages/52/a1/fe269bcb0ed07c00c549128095ccc62ccff6ec4eed36e68b6f7a164c57e7/pydantic_ai-2.55.0.tar.gz", hash = "sha256:b57057025a49392096821dccb6df5261880f558c9a99c470bcb0e946de10f47e", size = 28022, upload-time = "2026-10-09T19:40:48.347Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/1f/20/db85b3a96dc5931e8d4902a38376ceaf480aec4313ce928a8288cc4de410/pydantic_ai-2.59.0.tar.gz", hash = "sha256:2c6086a49fe97a200063a678cd0464f8bd6eae1e89256970a1ec02315f9fd8ae", size = 29880, upload-time = "2026-10-21T05:00:31.505Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/a3/14/eb55fb2a85072f7e7a730a285364d3648b12d6d8fa35ec924fa1084972cf/pydantic_ai-2.55.0-py3-none-any.whl", hash = "sha256:4b836463c5cb7ec462b7a8dc9d60715527bee3b11ff0136994c94d04ab5d1830", size = 10150, upload-time = "2026-10-09T19:40:32.292Z" },
+ { url = "https://files.pythonhosted.org/packages/46/8a/2919a67896b6e07c273611032de3cd96e1598cb2c737d18187486b3f5073/pydantic_ai-2.59.0-py3-none-any.whl", hash = "sha256:a303f0b999257471cea12632802ab2c76bff3a1308d6402ccc3e3d5a76fb36ea", size = 10472, upload-time = "2026-10-21T05:00:16.335Z" },
]
[package.optional-dependencies]
@@ -1796,7 +1796,7 @@ xai = [
[[package]]
name = "pydantic-ai-slim"
-version = "2.55.0"
+version = "2.59.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1808,9 +1808,9 @@ dependencies = [
{ name = "pydantic-graph" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/3526056afb236ac3c01b07ae05f1fefc97cbee59f8e824b96ffd5405bbfe/pydantic_ai_slim-2.55.0.tar.gz", hash = "sha256:50b5ee70d3a0509c1f36bec759249e69f4dc060f1a816b1bbf0730af54297376", size = 1878726, upload-time = "2026-10-09T19:40:52.951Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/1e/cd44ec11b296ec93fb9412f9aaef2b265f60e49a75b49cc0b2c6b1aa60fd/pydantic_ai_slim-2.59.0.tar.gz", hash = "sha256:ce441e646dd79a8dd80ef19c9f6821d803857f08870b260b61db5e8e7af95010", size = 2058453, upload-time = "2026-10-21T05:00:36.718Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/93/cc/16c6bc21748e3705a4c1f8e7d71dfc54228dbf142f8506a36689acb1e9c9/pydantic_ai_slim-2.55.0-py3-none-any.whl", hash = "sha256:7fcea628e78c2f247af94504534f0577151496166998d74ec145505040b19c68", size = 2197589, upload-time = "2026-10-09T19:40:38.767Z" },
+ { url = "https://files.pythonhosted.org/packages/73/79/d8c8cb808b69a6f286bc8bab6bab832c1da98163ab37689bfd5208508f25/pydantic_ai_slim-2.59.0-py3-none-any.whl", hash = "sha256:b4bc3a659176f616ad1a104cb8faed33c1565b449cb16226c6f6adb0c674770f", size = 2392716, upload-time = "2026-10-21T05:00:22.818Z" },
]
[package.optional-dependencies]
@@ -1930,7 +1930,7 @@ wheels = [
[[package]]
name = "pydantic-evals"
-version = "2.55.0"
+version = "2.59.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1940,14 +1940,14 @@ dependencies = [
{ name = "pyyaml" },
{ name = "rich" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/73/a8/32f739b8978b3862176a0dbe32ebf1831107b0a75e47f6d334874539572f/pydantic_evals-2.55.0.tar.gz", hash = "sha256:092676e8fc4765a9b921f242d31ebfd9f766b48f94cc0ff0882cb288ea3dddba", size = 91875, upload-time = "2026-10-09T19:40:56.076Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f5/4d/9fe28285c775a07781d4ade3510a5e7cd4e82500f9527c4a79b542fa3bdf/pydantic_evals-2.59.0.tar.gz", hash = "sha256:0d14d621ec2c85939601414e3541aaed8fcb2adc7cc6e8feeda21beb9025c291", size = 92185, upload-time = "2026-10-21T05:00:39.765Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/dc/80/fd87eac335810bf63c8bc975e579fd8c457e69e1c4831576cdf9c7c601fc/pydantic_evals-2.55.0-py3-none-any.whl", hash = "sha256:78e07e9ece6c36e1232c3141537584d402b15d29a82080f50e50ec869719b301", size = 107149, upload-time = "2026-10-09T19:40:43.171Z" },
+ { url = "https://files.pythonhosted.org/packages/69/c4/0db740716197ad51c847c9b2d54f14d0629b0d4ab7cb323e077a07a157bd/pydantic_evals-2.59.0-py3-none-any.whl", hash = "sha256:b9fbb47eb91543bd6edf55cbb714ba52b24bb5c62f31d1318bb3802a6149279b", size = 107193, upload-time = "2026-10-21T05:00:27.074Z" },
]
[[package]]
name = "pydantic-graph"
-version = "2.55.0"
+version = "2.59.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
@@ -1955,9 +1955,9 @@ dependencies = [
{ name = "pydantic" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b2/22/4e25465059448c4322e5f53f33e7b25ceb404c2d4dda8cfb0f497f7fb54b/pydantic_graph-2.55.0.tar.gz", hash = "sha256:461de7d0c33af634c3adeb21712f527f15878edf826d216184f024795e9c80c1", size = 45824, upload-time = "2026-10-09T19:40:57.238Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/e0/36/f00e344d48ab0065b5d93692dcd6245f4400dc946140b1fdc56657deb5d8/pydantic_graph-2.59.0.tar.gz", hash = "sha256:f8cf18e18cdea6c6ee412017373c156e4fadc0b4b205c174d564d878d1765989", size = 46085, upload-time = "2026-10-21T05:00:41.028Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/59/b5/630fc830897cfb0e458dea8ffcac5dd58791784220255637e99817b04cdd/pydantic_graph-2.55.0-py3-none-any.whl", hash = "sha256:774a64db707e759e22a4b2d6f8849986331fac009bb3f36ba3ed0cb8eee7a150", size = 53274, upload-time = "2026-10-09T19:40:44.876Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/41/c55560304acbf4d9e3f9d55e9be424dfc486c8b65e9496c8a857efee3e17/pydantic_graph-2.59.0-py3-none-any.whl", hash = "sha256:cf8b699f7322690590345028191c7e5ced9e57606c026f2480f90dc9665f176f", size = 53275, upload-time = "2026-10-21T05:00:28.731Z" },
]
[[package]]
@@ -1989,7 +1989,7 @@ wheels = [
[[package]]
name = "pyfly"
-version = "26.10.8"
+version = "26.10.11"
source = { editable = "../../" }
dependencies = [
{ name = "pydantic" },
@@ -2029,36 +2029,36 @@ agentic-relational = [
[package.metadata]
requires-dist = [
- { name = "aio-pika", marker = "extra == 'eda'", specifier = ">=10.0.4" },
- { name = "aio-pika", marker = "extra == 'rabbitmq'", specifier = ">=10.0.4" },
+ { name = "aio-pika", marker = "extra == 'eda'", specifier = ">=10.1.1" },
+ { name = "aio-pika", marker = "extra == 'rabbitmq'", specifier = ">=10.1.1" },
{ name = "aiokafka", marker = "extra == 'eda'", specifier = ">=0.14.0" },
{ name = "aiokafka", marker = "extra == 'kafka'", specifier = ">=0.14.0" },
{ name = "aiosqlite", marker = "extra == 'data-relational'", specifier = ">=0.22.1" },
{ name = "alembic", marker = "extra == 'data-relational'", specifier = ">=1.20.0" },
{ name = "argon2-cffi", marker = "extra == 'argon2'", specifier = ">=25.1.0" },
{ name = "asyncmy", marker = "extra == 'mysql'", specifier = ">=0.2.11" },
- { name = "asyncpg", marker = "extra == 'postgresql'", specifier = ">=0.31.0" },
- { name = "azure-storage-blob", marker = "extra == 'ecm-azure'", specifier = ">=12.30.3" },
+ { name = "asyncpg", marker = "extra == 'postgresql'", specifier = ">=0.32.0" },
+ { name = "azure-storage-blob", marker = "extra == 'ecm-azure'", specifier = ">=12.31.0" },
{ name = "bcrypt", marker = "extra == 'security'", specifier = ">=5.0.0" },
{ name = "beanie", marker = "extra == 'data-document'", specifier = ">=2.2.0" },
- { name = "boto3", marker = "extra == 'agentic-bedrock-embeddings'", specifier = ">=1.35.0" },
- { name = "boto3", marker = "extra == 'ecm-aws'", specifier = ">=1.43.103" },
- { name = "boto3", marker = "extra == 'idp-cognito'", specifier = ">=1.43.103" },
+ { name = "boto3", marker = "extra == 'agentic-bedrock-embeddings'", specifier = ">=1.43.116" },
+ { name = "boto3", marker = "extra == 'ecm-aws'", specifier = ">=1.43.116" },
+ { name = "boto3", marker = "extra == 'idp-cognito'", specifier = ">=1.43.116" },
{ name = "cairosvg", marker = "extra == 'agentic-binary'", specifier = ">=2.9.1" },
- { name = "chromadb", marker = "extra == 'agentic-vectorstores-chroma'", specifier = ">=0.5.0" },
+ { name = "chromadb", marker = "extra == 'agentic-vectorstores-chroma'", specifier = ">=1.5.9" },
{ name = "click", marker = "extra == 'cli'", specifier = ">=8.5.0" },
{ name = "click", marker = "extra == 'shell'", specifier = ">=8.5.0" },
- { name = "cohere", marker = "extra == 'agentic-cohere-embeddings'", specifier = ">=5.0.0" },
+ { name = "cohere", marker = "extra == 'agentic-cohere-embeddings'", specifier = ">=7.3.0" },
{ name = "croniter", marker = "extra == 'scheduling'", specifier = ">=6.2.4" },
- { name = "cryptography", marker = "extra == 'agentic-security'", specifier = ">=50.0.0" },
- { name = "cryptography", marker = "extra == 'security'", specifier = ">=50.0.1" },
+ { name = "cryptography", marker = "extra == 'agentic-security'", specifier = ">=50.0.2" },
+ { name = "cryptography", marker = "extra == 'security'", specifier = ">=50.0.2" },
{ name = "datasets", marker = "extra == 'agentic-evaluation'", specifier = ">=5.0.1" },
- { name = "extract-msg", marker = "extra == 'agentic-binary'", specifier = ">=0.51" },
- { name = "fastapi", marker = "extra == 'fastapi'", specifier = ">=0.141.1" },
- { name = "genai-prices", marker = "extra == 'agentic'", specifier = ">=0.1.9,<0.2" },
- { name = "gitpython", marker = "extra == 'config-server-git'", specifier = ">=3.1.62" },
- { name = "google-generativeai", marker = "extra == 'agentic-google-embeddings'", specifier = ">=0.8.0" },
- { name = "granian", marker = "extra == 'granian'", specifier = ">=2.8.3" },
+ { name = "extract-msg", marker = "extra == 'agentic-binary'", specifier = ">=0.56.1" },
+ { name = "fastapi", marker = "extra == 'fastapi'", specifier = ">=0.158.0" },
+ { name = "genai-prices", marker = "extra == 'agentic'", specifier = ">=0.1.13,<0.2" },
+ { name = "gitpython", marker = "extra == 'config-server-git'", specifier = ">=3.2.1" },
+ { name = "google-generativeai", marker = "extra == 'agentic-google-embeddings'", specifier = ">=0.8.6" },
+ { name = "granian", marker = "extra == 'granian'", specifier = ">=2.8.5" },
{ name = "grpcio", marker = "extra == 'grpc'", specifier = ">=1.84.0" },
{ name = "httpx", marker = "extra == 'agentic'", specifier = ">=0.28.0" },
{ name = "httpx", marker = "extra == 'agentic-ollama-embeddings'", specifier = ">=0.28.0" },
@@ -2072,39 +2072,37 @@ requires-dist = [
{ name = "jinja2", marker = "extra == 'cli'", specifier = ">=3.1.6" },
{ name = "jinja2", marker = "extra == 'notifications'", specifier = ">=3.1.6" },
{ name = "jinja2", marker = "extra == 'templates'", specifier = ">=3.1.6" },
- { name = "jsonpath-ng", marker = "extra == 'testing'", specifier = ">=1.8.0" },
- { name = "langchain-anthropic", marker = "extra == 'agentic-evaluation'", specifier = ">=0.3" },
+ { name = "jsonpath-ng", marker = "extra == 'testing'", specifier = ">=1.12.0" },
+ { name = "langchain-anthropic", marker = "extra == 'agentic-evaluation'", specifier = ">=1.7.6" },
{ name = "langchain-community", marker = "extra == 'agentic-evaluation'", specifier = ">=0.3.31,<0.4" },
- { name = "langchain-ollama", marker = "extra == 'agentic-evaluation'", specifier = ">=0.3" },
- { name = "langchain-openai", marker = "extra == 'agentic-evaluation'", specifier = ">=0.3" },
- { name = "markdown-it-py", marker = "extra == 'agentic'", specifier = ">=3.0" },
- { name = "mistralai", marker = "extra == 'agentic-mistral-embeddings'", specifier = ">=1.0.0" },
- { name = "numpy", marker = "extra == 'agentic-embeddings'", specifier = ">=1.26.0" },
- { name = "numpy", marker = "extra == 'agentic-evaluation'", specifier = ">=1.26.0" },
- { name = "numpy", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=2.0.0" },
- { name = "openai", marker = "extra == 'agentic-azure-embeddings'", specifier = ">=1.0.0" },
- { name = "openai", marker = "extra == 'agentic-openai-embeddings'", specifier = ">=1.0.0" },
- { name = "openfeature-flagd-core", marker = "extra == 'feature-flags'", specifier = ">=1.0.0" },
+ { name = "langchain-ollama", marker = "extra == 'agentic-evaluation'", specifier = ">=1.1.0" },
+ { name = "langchain-openai", marker = "extra == 'agentic-evaluation'", specifier = ">=1.7.2" },
+ { name = "markdown-it-py", marker = "extra == 'agentic'", specifier = ">=4.2.0" },
+ { name = "mistralai", marker = "extra == 'agentic-mistral-embeddings'", specifier = ">=3.3.0" },
+ { name = "numpy", marker = "extra == 'agentic-embeddings'", specifier = ">=2.5.4" },
+ { name = "numpy", marker = "extra == 'agentic-evaluation'", specifier = ">=2.5.4" },
+ { name = "numpy", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=2.5.4" },
+ { name = "openai", marker = "extra == 'agentic-azure-embeddings'", specifier = ">=3.36.0" },
+ { name = "openai", marker = "extra == 'agentic-openai-embeddings'", specifier = ">=3.36.0" },
+ { name = "openfeature-flagd-core", marker = "extra == 'feature-flags'", specifier = ">=1.0.0,<2" },
{ name = "openfeature-sdk", marker = "extra == 'feature-flags'", specifier = ">=0.10.0" },
- { name = "opentelemetry-api", marker = "extra == 'agentic'", specifier = ">=1.29.0" },
- { name = "opentelemetry-api", marker = "extra == 'observability'", specifier = ">=1.45.0" },
- { name = "opentelemetry-instrumentation-starlette", marker = "extra == 'observability'", specifier = ">=0.66b0" },
- { name = "opentelemetry-sdk", marker = "extra == 'agentic'", specifier = ">=1.29.0" },
- { name = "opentelemetry-sdk", marker = "extra == 'observability'", specifier = ">=1.45.0" },
- { name = "pandas", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=2.2.0" },
+ { name = "opentelemetry-api", marker = "extra == 'agentic'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-api", marker = "extra == 'observability'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-instrumentation-starlette", marker = "extra == 'observability'", specifier = ">=0.66b1" },
+ { name = "opentelemetry-sdk", marker = "extra == 'agentic'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-sdk", marker = "extra == 'observability'", specifier = ">=1.45.1" },
+ { name = "pandas", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=3.0.6" },
{ name = "pika", marker = "extra == 'testcontainers'", specifier = ">=1.4.4" },
- { name = "pillow", marker = "extra == 'agentic-binary'", specifier = ">=12.3.0" },
- { name = "pillow-heif", marker = "extra == 'agentic-binary'", specifier = ">=0.18" },
- { name = "pinecone", marker = "extra == 'agentic-vectorstores-pinecone'", specifier = ">=5.0.0" },
- { name = "presidio-analyzer", marker = "extra == 'pii'", specifier = ">=2.2.364" },
- { name = "presidio-anonymizer", marker = "extra == 'pii'", git = "https://github.com/data-privacy-stack/presidio.git?subdirectory=presidio-anonymizer&rev=5e2fcea990aa3b99660d2aea9121d0ba74a8940b" },
+ { name = "pillow", marker = "extra == 'agentic-binary'", specifier = ">=13.0.0" },
+ { name = "pillow-heif", marker = "extra == 'agentic-binary'", specifier = ">=1.8.1" },
+ { name = "pinecone", marker = "extra == 'agentic-vectorstores-pinecone'", specifier = ">=10.1.0" },
{ name = "prometheus-client", marker = "extra == 'observability'", specifier = ">=0.26.0" },
{ name = "py7zr", marker = "extra == 'agentic-binary'", specifier = ">=1.1.4" },
- { name = "pydantic", specifier = ">=2.13.5" },
- { name = "pydantic", marker = "extra == 'agentic'", specifier = ">=2.13,<3" },
- { name = "pydantic-ai", extras = ["ag-ui", "bedrock", "cohere", "groq", "huggingface", "mistral", "retries", "spec", "temporal", "ui", "xai"], marker = "extra == 'agentic'", specifier = "==2.55.0" },
- { name = "pydantic-monty", marker = "extra == 'agentic-script-execution'", specifier = "==0.0.18" },
- { name = "pydantic-settings", marker = "extra == 'agentic'", specifier = ">=2.14.2,<3" },
+ { name = "pydantic", specifier = ">=2.14.1" },
+ { name = "pydantic", marker = "extra == 'agentic'", specifier = ">=2.14.1,<3" },
+ { name = "pydantic-ai", extras = ["ag-ui", "bedrock", "cohere", "groq", "huggingface", "mistral", "retries", "spec", "temporal", "ui", "xai"], marker = "extra == 'agentic'", specifier = "==2.59.0" },
+ { name = "pydantic-monty", marker = "extra == 'agentic-script-execution'", specifier = "==0.0.23" },
+ { name = "pydantic-settings", marker = "extra == 'agentic'", specifier = ">=2.16.1,<3" },
{ name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-azure-embeddings'" },
{ name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-bedrock-embeddings'" },
{ name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-binary'" },
@@ -2133,59 +2131,59 @@ requires-dist = [
{ name = "pyfly", extras = ["web", "granian"], marker = "extra == 'web-fast'" },
{ name = "pyfly", extras = ["web", "templates", "data-relational", "data-document", "postgresql", "mysql", "eda", "cache", "client", "grpc", "websocket", "ecm-aws", "ecm-azure", "observability", "security", "scheduling", "cli", "shell", "kafka", "rabbitmq", "redis", "granian", "fastapi", "hypercorn", "idp-azure", "idp-keycloak", "idp-cognito", "notifications", "config-server-git", "feature-flags"], marker = "extra == 'full'" },
{ name = "pyfly", extras = ["web", "templates", "security"], marker = "extra == 'webapp'" },
- { name = "pyjwt", extras = ["crypto"], marker = "extra == 'security'", specifier = ">=2.15.0" },
+ { name = "pyjwt", extras = ["crypto"], marker = "extra == 'security'", specifier = ">=2.15.1" },
{ name = "pyotp", marker = "extra == 'security'", specifier = ">=2.10.0" },
- { name = "pypdf", marker = "extra == 'agentic-binary'", specifier = ">=6.19.0" },
- { name = "python-dotenv", marker = "extra == 'agentic'", specifier = ">=1.0.0" },
+ { name = "pypdf", marker = "extra == 'agentic-binary'", specifier = ">=6.21.2" },
+ { name = "python-dotenv", marker = "extra == 'agentic'", specifier = ">=1.2.4" },
{ name = "python-multipart", marker = "extra == 'web'", specifier = ">=0.0.32" },
{ name = "pyyaml", specifier = ">=6.0.3" },
{ name = "pyyaml", marker = "extra == 'agentic'", specifier = ">=6.0" },
- { name = "qdrant-client", marker = "extra == 'agentic-vectorstores-qdrant'", specifier = ">=1.12.0" },
+ { name = "qdrant-client", marker = "extra == 'agentic-vectorstores-qdrant'", specifier = ">=1.19.1" },
{ name = "questionary", marker = "extra == 'cli'", specifier = ">=2.1.1" },
{ name = "ragas", marker = "extra == 'agentic-evaluation'", specifier = ">=0.2.6,<0.2.7" },
{ name = "redis", extras = ["hiredis"], marker = "extra == 'cache'", specifier = ">=8.1.0" },
{ name = "redis", extras = ["hiredis"], marker = "extra == 'redis'", specifier = ">=8.1.0" },
{ name = "rich", marker = "extra == 'cli'", specifier = ">=15.0.0" },
{ name = "sqlalchemy", extras = ["asyncio"], marker = "extra == 'data-relational'", specifier = ">=2.0.50" },
- { name = "sqlite-vec", marker = "extra == 'agentic-vectorstores-sqlite-vec'", specifier = ">=0.1.6" },
- { name = "starlette", marker = "extra == 'web'", specifier = ">=1.7.0" },
+ { name = "sqlite-vec", marker = "extra == 'agentic-vectorstores-sqlite-vec'", specifier = ">=0.1.9" },
+ { name = "starlette", marker = "extra == 'web'", specifier = ">=1.9.0" },
{ name = "structlog", marker = "extra == 'observability'", specifier = ">=26.1.0" },
{ name = "testcontainers", marker = "extra == 'testcontainers'", specifier = ">=4.15.0" },
{ name = "uvicorn", extras = ["standard"], marker = "extra == 'web'", specifier = ">=0.54.0" },
- { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fast'", specifier = ">=0.22.1" },
- { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fastapi'", specifier = ">=0.22.1" },
- { name = "voyageai", marker = "extra == 'agentic-voyage-embeddings'", specifier = ">=0.3.0" },
- { name = "watchfiles", marker = "extra == 'agentic-watch'", specifier = ">=0.24.0" },
- { name = "websockets", marker = "extra == 'websocket'", specifier = ">=17.1" },
+ { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fast'", specifier = ">=0.23.0" },
+ { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fastapi'", specifier = ">=0.23.0" },
+ { name = "voyageai", marker = "extra == 'agentic-voyage-embeddings'", specifier = ">=0.5.0" },
+ { name = "watchfiles", marker = "extra == 'agentic-watch'", specifier = ">=1.3.0" },
+ { name = "websockets", marker = "extra == 'websocket'", specifier = ">=17.3" },
]
-provides-extras = ["agentic", "agentic-relational", "agentic-postgres", "agentic-mongodb", "agentic-security", "agentic-script-execution", "agentic-embeddings", "agentic-openai-embeddings", "agentic-cohere-embeddings", "agentic-google-embeddings", "agentic-mistral-embeddings", "agentic-voyage-embeddings", "agentic-azure-embeddings", "agentic-bedrock-embeddings", "agentic-ollama-embeddings", "agentic-reasoning-eval", "agentic-vectorstores-chroma", "agentic-vectorstores-sqlite-vec", "agentic-vectorstores-pinecone", "agentic-vectorstores-qdrant", "agentic-vectorstores-pgvector", "agentic-watch", "agentic-binary", "agentic-all", "agentic-evaluation", "templates", "webapp", "web", "data-relational", "testing", "argon2", "testcontainers", "data-document", "postgresql", "mysql", "eda", "fastapi", "granian", "hypercorn", "kafka", "rabbitmq", "redis", "cache", "oauth2-client", "client", "feature-flags", "config-server-git", "grpc", "websocket", "idp-azure", "idp-keycloak", "idp-cognito", "ecm-aws", "ecm-azure", "observability", "scheduling", "pii", "security", "notifications", "cli", "shell", "web-fast", "web-fastapi", "full"]
+provides-extras = ["agentic", "agentic-relational", "agentic-postgres", "agentic-mongodb", "agentic-security", "agentic-script-execution", "agentic-embeddings", "agentic-openai-embeddings", "agentic-cohere-embeddings", "agentic-google-embeddings", "agentic-mistral-embeddings", "agentic-voyage-embeddings", "agentic-azure-embeddings", "agentic-bedrock-embeddings", "agentic-ollama-embeddings", "agentic-reasoning-eval", "agentic-vectorstores-chroma", "agentic-vectorstores-sqlite-vec", "agentic-vectorstores-pinecone", "agentic-vectorstores-qdrant", "agentic-vectorstores-pgvector", "agentic-watch", "agentic-binary", "agentic-all", "agentic-evaluation", "templates", "webapp", "web", "data-relational", "testing", "argon2", "testcontainers", "data-document", "postgresql", "mysql", "eda", "fastapi", "granian", "hypercorn", "kafka", "rabbitmq", "redis", "cache", "oauth2-client", "client", "feature-flags", "config-server-git", "grpc", "websocket", "idp-azure", "idp-keycloak", "idp-cognito", "ecm-aws", "ecm-azure", "observability", "scheduling", "security", "notifications", "cli", "shell", "web-fast", "web-fastapi", "full"]
[package.metadata.requires-dev]
agentic-dev = [
{ name = "httpx", specifier = ">=0.28.0" },
- { name = "pdfplumber", specifier = ">=0.11.0" },
- { name = "pre-commit", specifier = ">=3.8.0" },
- { name = "pyright", specifier = ">=1.1.0" },
+ { name = "pdfplumber", specifier = ">=0.11.10" },
+ { name = "pre-commit", specifier = ">=4.7.0" },
+ { name = "pyright", specifier = ">=1.1.414" },
{ name = "pytest", specifier = ">=8.3.0" },
{ name = "pytest-asyncio", specifier = ">=0.24.0" },
- { name = "pytest-benchmark", specifier = ">=5.0.0" },
+ { name = "pytest-benchmark", specifier = ">=5.3.0" },
{ name = "pytest-cov", specifier = ">=6.0.0" },
- { name = "ruff", specifier = ">=0.9.0" },
+ { name = "ruff", specifier = ">=0.17.1" },
{ name = "testcontainers", specifier = ">=4.10.0" },
]
-browser = [{ name = "playwright", specifier = ">=1.63.0" }]
+browser = [{ name = "playwright", specifier = ">=1.64.0" }]
dev = [
{ name = "aiomysql", specifier = ">=0.3.2" },
{ name = "aiosmtpd", specifier = ">=1.4.6" },
- { name = "coverage", extras = ["toml"], specifier = ">=7.16.1" },
- { name = "jsonpath-ng", specifier = ">=1.8.0" },
- { name = "mypy", specifier = ">=2.3.1" },
- { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.45.0" },
+ { name = "coverage", extras = ["toml"], specifier = ">=7.16.2" },
+ { name = "jsonpath-ng", specifier = ">=1.12.0" },
+ { name = "mypy", specifier = ">=2.4.0" },
+ { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.45.1" },
{ name = "pytest", specifier = ">=9.1.1" },
{ name = "pytest-asyncio", specifier = ">=1.4.0" },
{ name = "pytest-cov", specifier = ">=7.1.0" },
{ name = "respx", specifier = ">=0.23.1" },
- { name = "ruff", specifier = ">=0.16.9" },
+ { name = "ruff", specifier = ">=0.17.1" },
]
[[package]]
diff --git a/samples/lumen/uv.lock b/samples/lumen/uv.lock
index e5d555fe..3778f23e 100644
--- a/samples/lumen/uv.lock
+++ b/samples/lumen/uv.lock
@@ -13,16 +13,16 @@ wheels = [
[[package]]
name = "alembic"
-version = "1.18.4"
+version = "1.20.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "mako" },
{ name = "sqlalchemy" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/94/13/8b084e0f2efb0275a1d534838844926f798bd766566b1375174e2448cd31/alembic-1.18.4.tar.gz", hash = "sha256:cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc", size = 2056725, upload-time = "2026-02-10T16:00:47.195Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/93/1c/00909e0fbebad2121d916fdcab044cae988146680e9ee4387ba25fef8747/alembic-1.20.1.tar.gz", hash = "sha256:83490def1f723413db5096591f7609ac52544805be93849170088ed04f5a2e0b", size = 2103576, upload-time = "2026-10-22T03:24:35.93Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl", hash = "sha256:a5ed4adcf6d8a4cb575f3d759f071b03cd6e5c7618eb796cb52497be25bfe19a", size = 263893, upload-time = "2026-02-10T16:00:49.997Z" },
+ { url = "https://files.pythonhosted.org/packages/11/3c/8740f5b4e1bd57333e4f84265b9b6363da4f7cf70f5622dd1e2fde7a0bd5/alembic-1.20.1-py3-none-any.whl", hash = "sha256:9970712cfb81ea26c8658d378aaa5b8f6ff9146e5bb111d70497c164016cf598", size = 270355, upload-time = "2026-10-22T03:24:37.667Z" },
]
[[package]]
@@ -58,14 +58,11 @@ wheels = [
[[package]]
name = "click"
-version = "8.4.1"
+version = "8.5.0"
source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "colorama", marker = "sys_platform == 'win32'" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/0e/7fa0ef50764b67090eca4114772a2abf8b6148198475e54c660b97caeee6/click-8.5.0.tar.gz", hash = "sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34", size = 382235, upload-time = "2026-08-26T13:33:14.56Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" },
+ { url = "https://files.pythonhosted.org/packages/58/50/6c0d534c5f134586a8e1ba4e330569e32f057e33372ae556463212fb4cd3/click-8.5.0-py3-none-any.whl", hash = "sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360", size = 125251, upload-time = "2026-08-26T13:33:12.928Z" },
]
[[package]]
@@ -580,7 +577,7 @@ wheels = [
[[package]]
name = "pydantic"
-version = "2.13.4"
+version = "2.14.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "annotated-types" },
@@ -588,89 +585,120 @@ dependencies = [
{ name = "typing-extensions" },
{ name = "typing-inspection" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/7c/0b/8e10b2e693af8ec54346a14caf36221334775975a747c9ceaa3f8371d96d/pydantic-2.14.1.tar.gz", hash = "sha256:94f478203dd03404682a1ada216965651dd74b1d2d5ffd62e00e0837caab5c26", size = 900362, upload-time = "2026-10-11T18:37:55.396Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
+ { url = "https://files.pythonhosted.org/packages/35/ea/a56b9fe5066f3537b7882f77e9c5dfb26d8c2eefdaed9b5fc73d57b4dc22/pydantic-2.14.1-py3-none-any.whl", hash = "sha256:9195d967ec791692a04438115466764fb8b9a27b31f14a760437694f40d6b454", size = 488106, upload-time = "2026-10-11T18:37:53.437Z" },
]
[[package]]
name = "pydantic-core"
-version = "2.46.4"
+version = "2.50.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/a6/24/af4ec4be49fbc810f35b0bdcacc3d433b56bbfa469fd3bfd4ae116cd9bf1/pydantic_core-2.50.1.tar.gz", hash = "sha256:e50d7b94baac6c7d09927fa5ca5800a0c7ee5015c7fcff65beb3a1931b5a6e09", size = 513515, upload-time = "2026-10-11T18:35:44.82Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" },
- { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" },
- { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" },
- { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" },
- { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" },
- { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" },
- { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" },
- { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" },
- { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" },
- { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" },
- { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" },
- { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" },
- { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" },
- { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" },
- { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" },
- { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" },
- { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" },
- { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" },
- { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" },
- { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" },
- { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" },
- { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" },
- { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" },
- { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" },
- { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" },
- { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" },
- { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" },
- { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" },
- { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" },
- { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" },
- { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" },
- { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" },
- { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" },
- { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" },
- { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" },
- { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" },
- { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" },
- { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" },
- { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" },
- { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" },
- { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" },
- { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" },
- { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" },
- { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" },
- { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" },
- { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" },
- { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" },
- { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" },
- { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" },
- { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" },
- { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" },
- { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" },
- { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" },
- { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" },
- { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" },
- { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" },
- { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" },
- { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" },
- { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" },
- { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" },
- { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" },
- { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" },
- { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" },
- { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/94/101b49a6c63f99586755690696eae14532772587d9e39e93f7b8d28a49da/pydantic_core-2.50.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:704075d10b74f2f3c6e15407c696d88701df35fc8953f434a431add0d0074db0", size = 2222428, upload-time = "2026-10-11T18:32:20.228Z" },
+ { url = "https://files.pythonhosted.org/packages/db/a3/f8b1b39349c33037c73d7a1b794c9c29d8f07d5bd2b74399c1375a529cc6/pydantic_core-2.50.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e8e1d6ce820aa23317e8209a86bd65a540973c12dc7552b48a4f6c8e9926815e", size = 2025779, upload-time = "2026-10-11T18:32:21.723Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/2d/862a7d115305cc621358e51ba13f296e0ffdf4fbd984be9f63bc7862730b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c18db21573bd2c6489f9a544b7499f0df2853958c568e5e783536ee1f690af41", size = 2048429, upload-time = "2026-10-11T18:32:23.3Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/7d/fed95d18bf2b5abe2d5ab2bbec4184bfc22b6805994a33ccdae8edffd25a/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb57f304525a5e3c13333b772bf9a473f36326e9c821b2e8e1b2fd36f80ae2c3", size = 2173274, upload-time = "2026-10-11T18:32:24.697Z" },
+ { url = "https://files.pythonhosted.org/packages/93/1e/c6f22ceac65dc3d291ff79bea0eb74cbd1de8b128f01fee48af03bcea1e1/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a27c09d86600f1bf2fe3f37e1ae697faf3143931c09322cd799da94deee923b5", size = 2360403, upload-time = "2026-10-11T18:32:26.281Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/97/190b5b6bfe4c72f265feb657913eb30749193927a5ad7b83cfa7866a25a2/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46b3301d3b5c886f77de7546e47274a5842c622ea2020b8c6524c6b66913b4a6", size = 2439799, upload-time = "2026-10-11T18:32:27.844Z" },
+ { url = "https://files.pythonhosted.org/packages/90/24/48cd98388e4ac2c08d0800af36d15413db15e20387f1038123a2c86cb2f6/pydantic_core-2.50.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ba4e9d8210d941c200431a56b2c0400b131865947903937ed3ec5404307d2e", size = 2160157, upload-time = "2026-10-11T18:32:29.553Z" },
+ { url = "https://files.pythonhosted.org/packages/00/86/d909133d0b9979ed14c20f110f21124a0e346caf071bd66ac5af3009062b/pydantic_core-2.50.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:e5faeaee74a57d32b3ab3aebad2e348f06d3ba946fc5d28c1728455f00a3d13a", size = 2229523, upload-time = "2026-10-11T18:32:31.027Z" },
+ { url = "https://files.pythonhosted.org/packages/90/31/4b43f08131b2098e73a852fd932063385f3103b33839fd9d1abdb89e673d/pydantic_core-2.50.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3cda0e538208e5d722bbf3698b24f19c0a7d05bc8d5f8a7f9b121ea7fa243d9", size = 2242700, upload-time = "2026-10-11T18:32:32.622Z" },
+ { url = "https://files.pythonhosted.org/packages/88/77/de39658569dc7a4c293d110a89629f61145e7538f00d1e4280c28debefd3/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:57f51b31ff826e2859120cf4737c5a758a48d96f3e97da40ccee1796d58078ff", size = 2278452, upload-time = "2026-10-11T18:32:34.165Z" },
+ { url = "https://files.pythonhosted.org/packages/46/bd/1eeb9e4e791e81210ef9096f58080b32ba15b5b13c108d50aaa3f8ce9f73/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8daa7ee75245d43ad7d747e5c9ecc1b1d06552f72b14887e9276f787d57375f4", size = 2450098, upload-time = "2026-10-11T18:32:35.547Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/e6/b2accfdff17e5a88d6358536702146de00f9339adaa4d5bbe1ee93cb4832/pydantic_core-2.50.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:acbf31f37c53a5ac0c34706c80b4f5107ba20b05fdd3816124bf236ef0c57dd2", size = 2476839, upload-time = "2026-10-11T18:32:37.119Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/7e/c8a83eb5d2cd42c2e13507150fb777b1edea5a018adc9cbf2858a1d08285/pydantic_core-2.50.1-cp312-cp312-win32.whl", hash = "sha256:45b11cac094aa25725581d9304eee93c9028516b9ea80dd9e175e13a5a2c840e", size = 2101425, upload-time = "2026-10-11T18:32:38.593Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/17/8bbd530b8659e9d963f5b16f6cb8e159f4cd174b4d6304e48969ab12dba8/pydantic_core-2.50.1-cp312-cp312-win_amd64.whl", hash = "sha256:132529c83901437ff642f585216831bf5fd7a91df66829907e155192ead62498", size = 2172522, upload-time = "2026-10-11T18:32:40.112Z" },
+ { url = "https://files.pythonhosted.org/packages/af/9f/a79d690b127e4e3cff143d031538ab9aa715f6b2fbeecbd07cd6f2bf9fb7/pydantic_core-2.50.1-cp312-cp312-win_arm64.whl", hash = "sha256:4e834f6a8e4ff772dcc34f58ef5504147a3ea5b0f4eeb13b0f8eb2ca75ac57f1", size = 2161366, upload-time = "2026-10-11T18:32:41.606Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/57/0e237d7091d2cd44a35d243b7344227f90440166860469cd036afc23a04d/pydantic_core-2.50.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d5e062c01286d861fd6a1c4ff6e063547b3e713067f2df033c0ff97ac2ca006b", size = 2222774, upload-time = "2026-10-11T18:32:43.103Z" },
+ { url = "https://files.pythonhosted.org/packages/f7/b9/c720e56858d4e1539503297ed37063e0c08e0f3541c41b777f6a800f75fa/pydantic_core-2.50.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0c003c3b7f49debb893d2d85ae099ac5959c9839e2f330fadb1fcdf7a6594482", size = 2024738, upload-time = "2026-10-11T18:32:44.587Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/b8/fbfc25875219cc060e613170ff10e850c6d8924beb4910da57c2ee3ba1d2/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:409e0ea40ec30d9158f33574fd758e689f6045a0f2596701828c27816ca9687d", size = 2047049, upload-time = "2026-10-11T18:32:46.164Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/43/34210124d504c553688f2f04b48500b131237528ac545b445e0d6d30e0d5/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:131059670f1d2444269b8585cb888963994871932447c08b39ac6a51fcfef658", size = 2173415, upload-time = "2026-10-11T18:32:47.722Z" },
+ { url = "https://files.pythonhosted.org/packages/65/cf/6e178e8fdc11da5965bef980983bf46326a42f436871dd51ba0a57f39df1/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dbcbee53bf17196a7f745aa9bf5a9603953a1e365b1f020be3207c676a3e7c4", size = 2361719, upload-time = "2026-10-11T18:32:49.217Z" },
+ { url = "https://files.pythonhosted.org/packages/11/14/bd5169d356aa91bf777e28ba0b281c192d286d03c2812c9c9db023a2f00e/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:325c23f3e35cfbf0fe3486fa5f7260d1e45885173002d30a28ca019994124255", size = 2439803, upload-time = "2026-10-11T18:32:51.025Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/bc/d79d000e5203ebef39af839f2ce77a777fcad6e08ad26af9a2fcd114ffc8/pydantic_core-2.50.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17e722e156d0444ecaefbe640bdb60928752bf2013e2b7a11cdb099aaae19bec", size = 2158402, upload-time = "2026-10-11T18:32:52.714Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/a5/4902cb5fd599422c130bd3124ab31ee8b771199bd56662702eed07d3fec7/pydantic_core-2.50.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:aa8224f10880d9bf1b5993988ba153d42a8b4f3f4f511f93b1f09c93ff613c72", size = 2229755, upload-time = "2026-10-11T18:32:54.126Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/f5/c1481f8669f6060d89110c9b1374173fc8767ca276b84f4870bd8acd5e3f/pydantic_core-2.50.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:41bc8237121bd8dc8d888dfd6279fc166ffc88c1f1bf3a8bf00869680533ca4c", size = 2242303, upload-time = "2026-10-11T18:32:55.641Z" },
+ { url = "https://files.pythonhosted.org/packages/04/f9/77fc3c7653ba9b6e42049e17e96b25388187d4a7c274ab1cb07f58ac8419/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:45c6266d071c241f2a168d45bf8c54344f0effce35e7e6b73afdec11f3687568", size = 2278345, upload-time = "2026-10-11T18:32:57.38Z" },
+ { url = "https://files.pythonhosted.org/packages/95/9b/0579c5d12e7f2b16b27e6782427987341fcce07b0725e02ddb0b74add0c4/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:1deeacb112d14d3f4fcb16b165f7dbaf76c70ba6e82f37ba042bdab51970a0b8", size = 2449947, upload-time = "2026-10-11T18:32:58.896Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/ac/1b677db91eba54cc5922f4de6edc46ba45c2bd712dfdc0130382d158e214/pydantic_core-2.50.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c96fd793b73d1b92e65570132505498fe7b21eaef73cdf74e67e5dfba7ac9e4", size = 2476889, upload-time = "2026-10-11T18:33:00.665Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/2a/3a9f6624ee3ea9ccba5249dde11418bb4c35780a7a92608f8768bd3fea39/pydantic_core-2.50.1-cp313-cp313-win32.whl", hash = "sha256:06ead20d39ffd6f2f6f2a8f8a6de67ff8bb1b4f14a8a30e058502514ee2ac685", size = 2101118, upload-time = "2026-10-11T18:33:02.329Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/1f/323f78ddd9d9938aac420c1abb4e8ba799fc8bdab0acc67c0593b837c979/pydantic_core-2.50.1-cp313-cp313-win_amd64.whl", hash = "sha256:7816e98acc08119dc0f340ab167048ecc54126316330c1f0caf7c6756c88e28f", size = 2170840, upload-time = "2026-10-11T18:33:03.919Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/09/8497c52a739ae425c3ac2f7f56414cbc711c67d374346174f40fe2062644/pydantic_core-2.50.1-cp313-cp313-win_arm64.whl", hash = "sha256:c17799a62c142d61b8a3c51752a7cbc87fe2ad4ccfab10e628a77b405075c662", size = 2161633, upload-time = "2026-10-11T18:33:05.518Z" },
+ { url = "https://files.pythonhosted.org/packages/49/33/28b96e81677153715e3eafb9f26663a80841e859fde282a380359b0d3fa1/pydantic_core-2.50.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1cf41f1ae3fa155cf167a72689ad044bcc1e3c97e064123677149bdfb5dafc4a", size = 2224428, upload-time = "2026-10-11T18:33:07.153Z" },
+ { url = "https://files.pythonhosted.org/packages/94/40/15c06410c9b7b8da5805d27b64e09bd3f900e986728106db2689dbc51513/pydantic_core-2.50.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4df197990c15b5a37c5a277d131d9f2c67de6133f2e5dafd80d9bba4b99f46f9", size = 2023740, upload-time = "2026-10-11T18:33:08.763Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/4e/5eb629f6efc2a27e421d789dd4bfacbb5f6d09c80c28b13d1e87d73163d5/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0036473f5583e6a60e50b8b21651511564277a3f05cc5dab8cf579f552cd5f6c", size = 2049435, upload-time = "2026-10-11T18:33:10.366Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/8e/f195aebec49ad12318876ac2368c197a7939f5d52f8e156d2238ef8a4588/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:992c3514ec891fa7858099183e4d64e6bd5a5d4ff452fae29df22faa77a006bb", size = 2172975, upload-time = "2026-10-11T18:33:12.368Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/f5/7ad9fb83010cd5ea0948409db105676ed779c4e709e2d3d89b9fe2558794/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:739dc730e6be3bd5ec2f4ab5cfc7eb047cc45fc1497b3bafec74ff2ed07df597", size = 2364197, upload-time = "2026-10-11T18:33:14.244Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/fb/bf0aab3e78301d202b82a0322ec968cd703b11fc0623fde9a28708936f62/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32fad3a91e51b6d2039c572db04a5a873260b399f6bd62c3552671fa7a4a2899", size = 2444259, upload-time = "2026-10-11T18:33:15.79Z" },
+ { url = "https://files.pythonhosted.org/packages/45/35/38f6d6564fae57d9b12e5676dfa947e0e7d5c46dbeaa7eb3352261d6d299/pydantic_core-2.50.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b54c2c90ad348b5e3a85e03e715d572c1fde357ef104cdfe3b03b697a404ea", size = 2159857, upload-time = "2026-10-11T18:33:17.51Z" },
+ { url = "https://files.pythonhosted.org/packages/65/a0/fb0a3ca10f139dcf765b2d312d10cf0f65c57c59993229d00ad12b14ceff/pydantic_core-2.50.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:2df1ff41884de2bc4b307bafd7c40a691094fad2ff8e767e5b45a319257bcf4e", size = 2233954, upload-time = "2026-10-11T18:33:19.591Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/6a/e63842252702aa4ec6e6b7178ca85e541a77459076592c23ebe2d9840b33/pydantic_core-2.50.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe90228920fd8ff2be62622b6bb8a2b11acd65046d50c6b130614b5879605a20", size = 2243876, upload-time = "2026-10-11T18:33:21.393Z" },
+ { url = "https://files.pythonhosted.org/packages/39/25/5991cf8318b37e0dfab47b87541619a1df8501a793cba0d978846cba37a7/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:844b869f118e22a41a091bdcedda8a71bc1b0f62c38d1a0c3211cece47e1d8fc", size = 2277908, upload-time = "2026-10-11T18:33:23.324Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/3e/3ee8baaa6cc25a6961c69168cf9ff0f002d56f4e0d541ad6724c18fb61f3/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:2eb75304506894a281d346220a4f7481a1b8729577c5ed2a05395991966a8396", size = 2449285, upload-time = "2026-10-11T18:33:24.942Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/c7/acbec6deac13fe697a80c275a9b6661db62c4d323bac8a47347b1f39c7cd/pydantic_core-2.50.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6b20a4bffabdad0db2927ac034ae3b8a681b1f7a0182f3e60b479ad2fde21ebb", size = 2479013, upload-time = "2026-10-11T18:33:26.925Z" },
+ { url = "https://files.pythonhosted.org/packages/10/08/21a3f237b264389f6219d053ee78fc1b5c2fd402c1b1cb2b6cb8b85f9834/pydantic_core-2.50.1-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:99ba9bc2b8062ea0c326a990f7f00e6530c23579de66dd246e72c4cafef950a5", size = 1484400, upload-time = "2026-10-11T18:33:28.693Z" },
+ { url = "https://files.pythonhosted.org/packages/09/ce/077a6d262d12ef09108377ac0717f029f420d773ace63cafd6143af75568/pydantic_core-2.50.1-cp314-cp314-win32.whl", hash = "sha256:cf356f70551d40374eaffb1aa63f1eb6d2006681cbd7a9faea173ce0f4dd7cd2", size = 2103222, upload-time = "2026-10-11T18:33:30.326Z" },
+ { url = "https://files.pythonhosted.org/packages/14/4c/350a2415209c43d670eb71d3c040f332c04a30583d39e311b05c7ac15762/pydantic_core-2.50.1-cp314-cp314-win_amd64.whl", hash = "sha256:d32f3acc081cc3923386d88f422cde8892335e95f034e0104bb4cf9310d9915f", size = 2171586, upload-time = "2026-10-11T18:33:32.139Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/92/9bea6ca96580a0902fed366f064f0829e404f41889b34543279a1162b888/pydantic_core-2.50.1-cp314-cp314-win_arm64.whl", hash = "sha256:bed5163e03b98bc1fa2eb05d74c63d9c5c95d8ed6254985481640fbf5e237dea", size = 2155773, upload-time = "2026-10-11T18:33:33.896Z" },
+ { url = "https://files.pythonhosted.org/packages/86/8c/f121f073cf32bdd5cba7e6230b1ce0ac845b0cf43e44dd597d95af272db2/pydantic_core-2.50.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:9572c1369e9c9da2d64a7b7992c786d90ff295abc93964cfe3125e4290768070", size = 2234017, upload-time = "2026-10-11T18:33:35.588Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/69/2bb2bcd6146cffe98d760a46c42ae71efd5151d9b2f9c9bf6619a3b32083/pydantic_core-2.50.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2005207aafe1231315718bf6ed5d064a7300fb4772754af35ee72fc68159492e", size = 2001016, upload-time = "2026-10-11T18:33:37.57Z" },
+ { url = "https://files.pythonhosted.org/packages/20/b3/fbf854c7d07ec114260c26e9e2071a4381740f9ae09641dbfcbdf2a18c45/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f6047f62a6c5ae08d0a6afb035667aa2d97c3d20d69762e034c5ea144d92a5", size = 2023015, upload-time = "2026-10-11T18:33:39.433Z" },
+ { url = "https://files.pythonhosted.org/packages/65/20/6de55b2f92cdb614b745c6e9ced639fc4fd7e1e77604825a88bdece6fcbd/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ef800dd7d85bcdadf4c3076e4c94e43939493558a3b69a1ea830c706d4617bb", size = 2192543, upload-time = "2026-10-11T18:33:41.381Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/d9/19e91c94bd5c405945ce2f15526808aea37e162c253160de8ed7bf70b406/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b0135bcdcaa0f23573f286e4cb5e0fd2962700964ed13df085b85f2b97aeab9e", size = 2388704, upload-time = "2026-10-11T18:33:43.167Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/bc/2e24c8415eae1a25ee5a5484946a917123bad2e9d01689a759236928175a/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0b3a6f334c6a2345ca15318ff894502a90012536404b37c844a976c76c846e0b", size = 2464118, upload-time = "2026-10-11T18:33:44.856Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/1f/945b8053cb061c64e102bcaf7bfb9ed740c0bd4349f9bb978a7d4ddff4ab/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06e01fbbfdb9be777b316a71b6c49efaf4a08b615d0a98d678cda3023f79d019", size = 2150142, upload-time = "2026-10-11T18:33:46.661Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/78/96a3e50bf0d64aaae781107eb9335b7529d05a85793ed6e7241c4cd1d931/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:a29a061fec0b4e2d714f277e70a3a18125ecff803f2fea6eade2f2e53711d112", size = 2245577, upload-time = "2026-10-11T18:33:48.574Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/5d/a6038a0322232758a6ebfa709f4ca14a60bf5b93940cd0b345056a557da4/pydantic_core-2.50.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f5187624823423e1d1b82b1072ac41dc837389e18d3d0572cc19bbee46cd550a", size = 2263728, upload-time = "2026-10-11T18:33:50.527Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/4b/76ded3333a457a9344c4f2d63f2d82d0101654b05178fa4ddfe7d3627674/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3e46a9eb0a0901dd6275e6b06ac3a464885ef350ec4121fe486869de8053e4bb", size = 2293630, upload-time = "2026-10-11T18:33:52.362Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/00/9eca378335c9c1b72bc779bf6e4c2a82ce784f14ec48a0e87102c9870e05/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:756d669f04e62ec4148ecfe22be6a4484d9b1181a6ef32e205ebfd200540858b", size = 2468048, upload-time = "2026-10-11T18:33:54.118Z" },
+ { url = "https://files.pythonhosted.org/packages/35/ca/e3832e9cf93651251de43c8c5c029ed680a3c1a0a1b17ee26c81bed08cbd/pydantic_core-2.50.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:c516cc5367ca3448995d42cb994bf3f4c9002d2a7c22eac9622551269ad1b807", size = 2512159, upload-time = "2026-10-11T18:33:55.99Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/f2/773469b5a10a39116a2cb17edaf6d722f017dd8da07161b371465311c542/pydantic_core-2.50.1-cp314-cp314t-win32.whl", hash = "sha256:9d1bed94af6a63835461f3cf7502058eb166c58c4778e11d0f433cfb1bd69e19", size = 2098406, upload-time = "2026-10-11T18:33:58.043Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/42/0bb74f8f25204b259b11ab7c12dc7f180893b6bd706118b385147fb6efd5/pydantic_core-2.50.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c8dce1f1e0e5358b682a6ad3fa5e31b31d4560997b8e61417e9217c8d60f8a0c", size = 2148481, upload-time = "2026-10-11T18:33:59.913Z" },
+ { url = "https://files.pythonhosted.org/packages/47/0d/d801646c9679a4e630e15cf521d4108b93854b42a6e6e02391bd4c6b1095/pydantic_core-2.50.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ceff0acc940be2715bd6ad17b24c0e5304abf44f6efd0f81ee8499e640f9dc86", size = 2174972, upload-time = "2026-10-11T18:34:01.875Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/84/23984b763d8862a02a13d27a44b6e8169428fd85ecfed88f54c29108604d/pydantic_core-2.50.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:8a6791afa2245e6c6b180122d105941644f5bd410bb18623b408808cc41a3102", size = 2224599, upload-time = "2026-10-11T18:34:04.016Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/90/a63cf8586abc1d1a3f6d9b18f0224789ebf003851f092ebda3c7c863fd32/pydantic_core-2.50.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:84f34323a61a365b4e9295de6028474754829aaddd59c7bf1a040e7487ef8f3c", size = 2024191, upload-time = "2026-10-11T18:34:05.901Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/6a/f34bff9808ffb4907fbf5f5040457d253cacf2da7fce9efbc99ca1b1a44d/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23edad659e8dbd8ca7e4e877fe6c81573abbdf215bd25a68b53e1272f58b80c7", size = 2048252, upload-time = "2026-10-11T18:34:07.757Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/54/13f419bf1eb59852003818e25935aaf175687d978f4c4bca70e08fe40a3b/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a5fce22f1e87d181e924e12da7d81cfe031fb3881a5ddf26ad28f141756ca43", size = 2173376, upload-time = "2026-10-11T18:34:09.592Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/6c/b5a34d24cd0c81669d8f8339d74e6815abcf2f8fb48ab4b49b84c09be1d5/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c73622ef819328873b53109ee4f77ceb598bffedd02daf916102be3228866b78", size = 2364559, upload-time = "2026-10-11T18:34:11.534Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/8d/d64d6216a8df365082665927ff923f183056f9049fee08e9777c9ac05296/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce8c25ca38cc0e3d7753ba180808de2c0c8cb24eae0df64491e40921454e9831", size = 2444697, upload-time = "2026-10-11T18:34:13.535Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/0d/1b1149f60a00ea21ba5f70e28acbd40feb4598af414f80f53c921fac07c9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7689580e72a642ab5ec64d5f55b2e33636fa43b4ebe63c0c2c965ef307c7d1aa", size = 2159961, upload-time = "2026-10-11T18:34:15.56Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/35/f236549299dcc78e71e945495d7ec67e78d20844d0999c60601685003031/pydantic_core-2.50.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d5c0e32fdbce7f1e8ef4d11f655694bf5f4175c757a9f1dc2be09b8864e5bcf5", size = 2234581, upload-time = "2026-10-11T18:34:17.502Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/85/26901a490522b7f75ef9bb9a7afb73e5bb550f0e1cb5b99a0069183e2eb9/pydantic_core-2.50.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40f523349960fa30f3ea51404308ff50f9997a90df639590f47a057c1f32b415", size = 2244090, upload-time = "2026-10-11T18:34:19.402Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/2c/481bcfc70ceeb77a778ca6e5b705fe592cb64735c108157f81b7dd9c280e/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:d4193206b6587047437f6f11d7e776df23e1c1e23af2a54d9347275614791e10", size = 2277948, upload-time = "2026-10-11T18:34:21.317Z" },
+ { url = "https://files.pythonhosted.org/packages/24/eb/f1e09333faa7ba447cde967310f758430cc7c5e987bdab5228816c70030d/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:84bc765b282a9d5b7fe0348b8648904f25a6a04b2139da52b1dd30c8ac3a2c8f", size = 2449688, upload-time = "2026-10-11T18:34:23.321Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/b3/036bde636db8f76d92996e81aefc75678ab5cec4a07eea1ad0c72a893fc3/pydantic_core-2.50.1-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:ed1e728b39a383c81035b2459cfcb35d99dfb01f7d6ebe3a913bc1cc5b81e459", size = 2479286, upload-time = "2026-10-11T18:34:25.214Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/a3/07f018294ee18d144afeb6df1a47d9e92960f014be45c5ed13519fa5af95/pydantic_core-2.50.1-cp315-cp315-win32.whl", hash = "sha256:bc94f474417604bd383d2cd445d071b07dd55fedceed3ce33407bf1fcc107290", size = 2103683, upload-time = "2026-10-11T18:34:27.42Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/98/f9bd7e1f9b6709f155acb9ef826d9c3884fe925f811fd8e55b9b52280bad/pydantic_core-2.50.1-cp315-cp315-win_amd64.whl", hash = "sha256:983a662de2571cb2502fc8ff47b6770b03d025d2eb314c92f77b3f07c74720ed", size = 2171681, upload-time = "2026-10-11T18:34:29.508Z" },
+ { url = "https://files.pythonhosted.org/packages/10/87/4bb3e1e7f385c076ab5af4d6dd0571b22042cd8207eb810d5b9fef15ae31/pydantic_core-2.50.1-cp315-cp315-win_arm64.whl", hash = "sha256:94845ff54dc5193f228cab81b2662a04bfbb892e95bdc15edf7399000ce57d54", size = 2156251, upload-time = "2026-10-11T18:34:31.455Z" },
+ { url = "https://files.pythonhosted.org/packages/47/47/83643225b08f2aef6c8cc4bbe6e3f79c5e139c4364a6e450d0f399d87774/pydantic_core-2.50.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:4a53d13cdfbedbfa87f08b83c1a0a5efcc767d785a4b41934fa9cb672670493a", size = 2234363, upload-time = "2026-10-11T18:34:33.65Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/66/127ca649ba2f2462039dc1e694c6c01e00a3689f023a617364d3507e6d97/pydantic_core-2.50.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:efbecf43d321f7b9281441f1f213f7c21c66988b0e06c2730ba13ed47a46bb08", size = 2000972, upload-time = "2026-10-11T18:34:36.037Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/4f/e421e0a5d653b1203b090b2e48745976988d7338a647940704b5b9c2b399/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1f08f68dac9f9e83845a8039880aba2ab553eb9b2259c3243a313182c253fe", size = 2022925, upload-time = "2026-10-11T18:34:37.972Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/4e/ea5568e2491e1a71100f15ae8c2d01ef52db42a184a2d4e716bc79e5eb8f/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dfe41f232befddb9c4377f6cfc702b51595e2d78ed082672adf8758d2c4619f", size = 2192867, upload-time = "2026-10-11T18:34:39.921Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/5e/3b8c3a35acbe219909ada5defad5d7d9fed845fb2b37bd5ec518f453c119/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adc06d218a1cadfd2ec4628424d7d79ce4eba69c2965e7e7b55106f0da5208c8", size = 2388687, upload-time = "2026-10-11T18:34:42.184Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/aa/7889b4e515f91a2e8c0ae6b5081fec0feb30c4398d1434e14793c60f173a/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cf91809d0721ab81592ba67bea7694821679c10b1a2e3c3460082b286c1918a", size = 2464415, upload-time = "2026-10-11T18:34:44.384Z" },
+ { url = "https://files.pythonhosted.org/packages/08/78/93449e628eb8a6fdcce3eff9043081179d1bc7ce6f1bff32dc5006f41e00/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23923ab9292c40da026330b1ecf4dc2618c8e86e0422e5d1fbf50d94d64ca4f8", size = 2150823, upload-time = "2026-10-11T18:34:46.392Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f1/72c5bc129fceb0d00f05dc1e67f518c1728de1928c55f81fc13d7690de39/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:f3377c8c2b3ce898423c5e5dd94c7982e30aa7717a7e6ab2470b9de364963709", size = 2245806, upload-time = "2026-10-11T18:34:48.805Z" },
+ { url = "https://files.pythonhosted.org/packages/28/2a/922a0e78f3aa6ab837b59f88190233fb8dad546c17995fde9bb3ed3b9b49/pydantic_core-2.50.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:455a773617b5913bf5c20d0692e5787b119e52c4d40ea644ca31f5758fd31be2", size = 2264160, upload-time = "2026-10-11T18:34:50.876Z" },
+ { url = "https://files.pythonhosted.org/packages/52/a8/0f1449e3e1b20941c9372faa18e7b6a092e30cdfa841902473f7989532ac/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:1a9006395dece0e32e704c315eff8a00bede494f6108546cfc5539c89fef4f9a", size = 2294031, upload-time = "2026-10-11T18:34:52.876Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/d0/1031f492857de70355fb16524bbb03efce5fd34c93ed4a1ec60be07e0d4b/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:d2d82aa62521c55ddfb000ae70f88cdd8de974078f6024e821dfe5addd0c818f", size = 2468423, upload-time = "2026-10-11T18:34:54.995Z" },
+ { url = "https://files.pythonhosted.org/packages/46/52/269ffffa645b8e47906395a39cf9db1151ae9fa4bcd7f47b960bc31baf37/pydantic_core-2.50.1-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:009634b83993777ddcd69cad0ffcace43dabde692109528e35f0fde91e386a8b", size = 2512598, upload-time = "2026-10-11T18:34:57.149Z" },
+ { url = "https://files.pythonhosted.org/packages/31/5c/e47e28281f20326ff6f3c31d626f0a83e615d2d94ba41bb0ad6ec237184a/pydantic_core-2.50.1-cp315-cp315t-win32.whl", hash = "sha256:3fde4fdc6487a58d944ca87cf5adc95d5f266e872c19599f5f4c0a8a1b1f9f9f", size = 2098535, upload-time = "2026-10-11T18:34:59.313Z" },
+ { url = "https://files.pythonhosted.org/packages/03/ad/759e181e69c1b472c60b2049e5f61d5da1deefdd5ce1df4bb2ebcf771f25/pydantic_core-2.50.1-cp315-cp315t-win_amd64.whl", hash = "sha256:1c8632d4ac04e6f91128fca584b3a8a507d81604c24eeaaad00d4be42765c32b", size = 2148645, upload-time = "2026-10-11T18:35:01.571Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/56/8a702c27e5be9f47e5f19d8669227424290e4c024e7c370279cbaf244b4e/pydantic_core-2.50.1-cp315-cp315t-win_arm64.whl", hash = "sha256:c3ede305158e75510be50869b319550ab072008c13d64d4ab1e094fb286b6f44", size = 2175297, upload-time = "2026-10-11T18:35:04.079Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/09/1bcf160f3cd6333e2a76982fae5963e5032de0bcaaba38464223dc266bfe/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:76e2e83fa6ec8cdc972d438dafc2522b3a47bee4ec0ae668b29cfb1977ab5242", size = 2217070, upload-time = "2026-10-11T18:35:15.688Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/81/f02de95eec7794dfc7a5bc69a834f0e834b31b3009014ce6de903855f775/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:a51eee75939cf811ac09b278745a6cee7dc873ccfbc8b9af3cc88fe4b7ce25b5", size = 2039027, upload-time = "2026-10-11T18:35:18.07Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/16/227746ed3771d9bf2304568b55134849ece34e13b38b1d76de763015c77f/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae28183297fb0d2b8dc46a1f01d51f5e45825fc5afe76a835a6cb7fb34821295", size = 2109009, upload-time = "2026-10-11T18:35:20.218Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/b9/7664d1592a0e5a74903f357cd5b28ceb7336f3473256c5a4e8c8432f1881/pydantic_core-2.50.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88e492e8b9d0312e7dc13667c30222abf284dc3b79b5302b3607b41a5784ce61", size = 2269883, upload-time = "2026-10-11T18:35:22.48Z" },
]
[[package]]
name = "pyfly"
-version = "26.10.1"
+version = "26.10.11"
source = { editable = "../../" }
dependencies = [
{ name = "pydantic" },
@@ -702,85 +730,161 @@ web = [
[package.metadata]
requires-dist = [
- { name = "aio-pika", marker = "extra == 'eda'", specifier = ">=9.6.2" },
- { name = "aio-pika", marker = "extra == 'rabbitmq'", specifier = ">=9.6.2" },
+ { name = "aio-pika", marker = "extra == 'eda'", specifier = ">=10.1.1" },
+ { name = "aio-pika", marker = "extra == 'rabbitmq'", specifier = ">=10.1.1" },
{ name = "aiokafka", marker = "extra == 'eda'", specifier = ">=0.14.0" },
{ name = "aiokafka", marker = "extra == 'kafka'", specifier = ">=0.14.0" },
{ name = "aiosqlite", marker = "extra == 'data-relational'", specifier = ">=0.22.1" },
- { name = "alembic", marker = "extra == 'data-relational'", specifier = ">=1.18.4" },
- { name = "argon2-cffi", marker = "extra == 'argon2'", specifier = ">=23.1.0" },
+ { name = "alembic", marker = "extra == 'data-relational'", specifier = ">=1.20.0" },
+ { name = "argon2-cffi", marker = "extra == 'argon2'", specifier = ">=25.1.0" },
{ name = "asyncmy", marker = "extra == 'mysql'", specifier = ">=0.2.11" },
- { name = "asyncpg", marker = "extra == 'postgresql'", specifier = ">=0.31.0" },
- { name = "azure-storage-blob", marker = "extra == 'ecm-azure'", specifier = ">=12.19.0" },
+ { name = "asyncpg", marker = "extra == 'postgresql'", specifier = ">=0.32.0" },
+ { name = "azure-storage-blob", marker = "extra == 'ecm-azure'", specifier = ">=12.31.0" },
{ name = "bcrypt", marker = "extra == 'security'", specifier = ">=5.0.0" },
- { name = "beanie", marker = "extra == 'data-document'", specifier = ">=2.1.0" },
- { name = "boto3", marker = "extra == 'ecm-aws'", specifier = ">=1.34.0" },
- { name = "boto3", marker = "extra == 'idp-cognito'", specifier = ">=1.34.0" },
- { name = "click", marker = "extra == 'cli'", specifier = ">=8.3.3" },
- { name = "click", marker = "extra == 'shell'", specifier = ">=8.3.3" },
- { name = "croniter", marker = "extra == 'scheduling'", specifier = ">=6.2.2" },
- { name = "cryptography", marker = "extra == 'security'", specifier = ">=48.0.0" },
- { name = "fastapi", marker = "extra == 'fastapi'", specifier = ">=0.136.1" },
- { name = "gitpython", marker = "extra == 'config-server-git'", specifier = ">=3.1" },
- { name = "granian", marker = "extra == 'granian'", specifier = ">=2.7.4" },
- { name = "grpcio", marker = "extra == 'grpc'", specifier = ">=1.60.0" },
+ { name = "beanie", marker = "extra == 'data-document'", specifier = ">=2.2.0" },
+ { name = "boto3", marker = "extra == 'agentic-bedrock-embeddings'", specifier = ">=1.43.116" },
+ { name = "boto3", marker = "extra == 'ecm-aws'", specifier = ">=1.43.116" },
+ { name = "boto3", marker = "extra == 'idp-cognito'", specifier = ">=1.43.116" },
+ { name = "cairosvg", marker = "extra == 'agentic-binary'", specifier = ">=2.9.1" },
+ { name = "chromadb", marker = "extra == 'agentic-vectorstores-chroma'", specifier = ">=1.5.9" },
+ { name = "click", marker = "extra == 'cli'", specifier = ">=8.5.0" },
+ { name = "click", marker = "extra == 'shell'", specifier = ">=8.5.0" },
+ { name = "cohere", marker = "extra == 'agentic-cohere-embeddings'", specifier = ">=7.3.0" },
+ { name = "croniter", marker = "extra == 'scheduling'", specifier = ">=6.2.4" },
+ { name = "cryptography", marker = "extra == 'agentic-security'", specifier = ">=50.0.2" },
+ { name = "cryptography", marker = "extra == 'security'", specifier = ">=50.0.2" },
+ { name = "datasets", marker = "extra == 'agentic-evaluation'", specifier = ">=5.0.1" },
+ { name = "extract-msg", marker = "extra == 'agentic-binary'", specifier = ">=0.56.1" },
+ { name = "fastapi", marker = "extra == 'fastapi'", specifier = ">=0.158.0" },
+ { name = "genai-prices", marker = "extra == 'agentic'", specifier = ">=0.1.13,<0.2" },
+ { name = "gitpython", marker = "extra == 'config-server-git'", specifier = ">=3.2.1" },
+ { name = "google-generativeai", marker = "extra == 'agentic-google-embeddings'", specifier = ">=0.8.6" },
+ { name = "granian", marker = "extra == 'granian'", specifier = ">=2.8.5" },
+ { name = "grpcio", marker = "extra == 'grpc'", specifier = ">=1.84.0" },
+ { name = "httpx", marker = "extra == 'agentic'", specifier = ">=0.28.0" },
+ { name = "httpx", marker = "extra == 'agentic-ollama-embeddings'", specifier = ">=0.28.0" },
{ name = "httpx", marker = "extra == 'client'", specifier = ">=0.28.1" },
{ name = "httpx", marker = "extra == 'feature-flags'", specifier = ">=0.28" },
{ name = "httpx", marker = "extra == 'idp-azure'", specifier = ">=0.28.1" },
{ name = "httpx", marker = "extra == 'idp-keycloak'", specifier = ">=0.28.1" },
{ name = "httpx", marker = "extra == 'oauth2-client'", specifier = ">=0.28.1" },
{ name = "hypercorn", marker = "extra == 'hypercorn'", specifier = ">=0.18.0" },
+ { name = "jinja2", marker = "extra == 'agentic'", specifier = ">=3.1.0" },
{ name = "jinja2", marker = "extra == 'cli'", specifier = ">=3.1.6" },
{ name = "jinja2", marker = "extra == 'notifications'", specifier = ">=3.1.6" },
{ name = "jinja2", marker = "extra == 'templates'", specifier = ">=3.1.6" },
- { name = "jsonpath-ng", marker = "extra == 'testing'", specifier = ">=1.8.0" },
- { name = "openfeature-flagd-core", marker = "extra == 'feature-flags'", specifier = ">=1.0.0" },
+ { name = "jsonpath-ng", marker = "extra == 'testing'", specifier = ">=1.12.0" },
+ { name = "langchain-anthropic", marker = "extra == 'agentic-evaluation'", specifier = ">=1.7.6" },
+ { name = "langchain-community", marker = "extra == 'agentic-evaluation'", specifier = ">=0.3.31,<0.4" },
+ { name = "langchain-ollama", marker = "extra == 'agentic-evaluation'", specifier = ">=1.1.0" },
+ { name = "langchain-openai", marker = "extra == 'agentic-evaluation'", specifier = ">=1.7.2" },
+ { name = "markdown-it-py", marker = "extra == 'agentic'", specifier = ">=4.2.0" },
+ { name = "mistralai", marker = "extra == 'agentic-mistral-embeddings'", specifier = ">=3.3.0" },
+ { name = "numpy", marker = "extra == 'agentic-embeddings'", specifier = ">=2.5.4" },
+ { name = "numpy", marker = "extra == 'agentic-evaluation'", specifier = ">=2.5.4" },
+ { name = "numpy", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=2.5.4" },
+ { name = "openai", marker = "extra == 'agentic-azure-embeddings'", specifier = ">=3.36.0" },
+ { name = "openai", marker = "extra == 'agentic-openai-embeddings'", specifier = ">=3.36.0" },
+ { name = "openfeature-flagd-core", marker = "extra == 'feature-flags'", specifier = ">=1.0.0,<2" },
{ name = "openfeature-sdk", marker = "extra == 'feature-flags'", specifier = ">=0.10.0" },
- { name = "opentelemetry-api", marker = "extra == 'observability'", specifier = ">=1.41.1" },
- { name = "opentelemetry-instrumentation-starlette", marker = "extra == 'observability'", specifier = ">=0.62b1" },
- { name = "opentelemetry-sdk", marker = "extra == 'observability'", specifier = ">=1.41.1" },
- { name = "pika", marker = "extra == 'testcontainers'", specifier = ">=1.3.0" },
- { name = "presidio-analyzer", marker = "extra == 'pii'", specifier = ">=2.2" },
- { name = "presidio-anonymizer", marker = "extra == 'pii'", specifier = ">=2.2" },
- { name = "prometheus-client", marker = "extra == 'observability'", specifier = ">=0.25.0" },
- { name = "pydantic", specifier = ">=2.13.3" },
+ { name = "opentelemetry-api", marker = "extra == 'agentic'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-api", marker = "extra == 'observability'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-instrumentation-starlette", marker = "extra == 'observability'", specifier = ">=0.66b1" },
+ { name = "opentelemetry-sdk", marker = "extra == 'agentic'", specifier = ">=1.45.1" },
+ { name = "opentelemetry-sdk", marker = "extra == 'observability'", specifier = ">=1.45.1" },
+ { name = "pandas", marker = "extra == 'agentic-reasoning-eval'", specifier = ">=3.0.6" },
+ { name = "pika", marker = "extra == 'testcontainers'", specifier = ">=1.4.4" },
+ { name = "pillow", marker = "extra == 'agentic-binary'", specifier = ">=13.0.0" },
+ { name = "pillow-heif", marker = "extra == 'agentic-binary'", specifier = ">=1.8.1" },
+ { name = "pinecone", marker = "extra == 'agentic-vectorstores-pinecone'", specifier = ">=10.1.0" },
+ { name = "prometheus-client", marker = "extra == 'observability'", specifier = ">=0.26.0" },
+ { name = "py7zr", marker = "extra == 'agentic-binary'", specifier = ">=1.1.4" },
+ { name = "pydantic", specifier = ">=2.14.1" },
+ { name = "pydantic", marker = "extra == 'agentic'", specifier = ">=2.14.1,<3" },
+ { name = "pydantic-ai", extras = ["ag-ui", "bedrock", "cohere", "groq", "huggingface", "mistral", "retries", "spec", "temporal", "ui", "xai"], marker = "extra == 'agentic'", specifier = "==2.59.0" },
+ { name = "pydantic-monty", marker = "extra == 'agentic-script-execution'", specifier = "==0.0.23" },
+ { name = "pydantic-settings", marker = "extra == 'agentic'", specifier = ">=2.16.1,<3" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-azure-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-bedrock-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-binary'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-cohere-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-evaluation'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-google-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-mistral-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-ollama-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-openai-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-reasoning-eval'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-script-execution'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-security'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-vectorstores-chroma'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-vectorstores-pinecone'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-vectorstores-qdrant'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-vectorstores-sqlite-vec'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-voyage-embeddings'" },
+ { name = "pyfly", extras = ["agentic"], marker = "extra == 'agentic-watch'" },
+ { name = "pyfly", extras = ["agentic", "agentic-postgres", "agentic-mongodb", "agentic-security", "agentic-embeddings", "agentic-openai-embeddings", "agentic-cohere-embeddings", "agentic-google-embeddings", "agentic-mistral-embeddings", "agentic-voyage-embeddings", "agentic-azure-embeddings", "agentic-bedrock-embeddings", "agentic-ollama-embeddings", "agentic-vectorstores-chroma", "agentic-vectorstores-pinecone", "agentic-vectorstores-qdrant", "agentic-vectorstores-pgvector", "agentic-vectorstores-sqlite-vec", "agentic-watch", "agentic-binary", "agentic-script-execution"], marker = "extra == 'agentic-all'" },
+ { name = "pyfly", extras = ["agentic", "data-document"], marker = "extra == 'agentic-mongodb'" },
+ { name = "pyfly", extras = ["agentic", "data-relational"], marker = "extra == 'agentic-relational'" },
+ { name = "pyfly", extras = ["agentic", "data-relational", "postgresql"], marker = "extra == 'agentic-postgres'" },
+ { name = "pyfly", extras = ["agentic", "data-relational", "postgresql"], marker = "extra == 'agentic-vectorstores-pgvector'" },
{ name = "pyfly", extras = ["fastapi", "granian"], marker = "extra == 'web-fastapi'" },
{ name = "pyfly", extras = ["web", "granian"], marker = "extra == 'web-fast'" },
{ name = "pyfly", extras = ["web", "templates", "data-relational", "data-document", "postgresql", "mysql", "eda", "cache", "client", "grpc", "websocket", "ecm-aws", "ecm-azure", "observability", "security", "scheduling", "cli", "shell", "kafka", "rabbitmq", "redis", "granian", "fastapi", "hypercorn", "idp-azure", "idp-keycloak", "idp-cognito", "notifications", "config-server-git", "feature-flags"], marker = "extra == 'full'" },
{ name = "pyfly", extras = ["web", "templates", "security"], marker = "extra == 'webapp'" },
- { name = "pyjwt", extras = ["crypto"], marker = "extra == 'security'", specifier = ">=2.12.1" },
- { name = "pyotp", marker = "extra == 'security'", specifier = ">=2.9.0" },
- { name = "python-multipart", marker = "extra == 'web'", specifier = ">=0.0.27" },
+ { name = "pyjwt", extras = ["crypto"], marker = "extra == 'security'", specifier = ">=2.15.1" },
+ { name = "pyotp", marker = "extra == 'security'", specifier = ">=2.10.0" },
+ { name = "pypdf", marker = "extra == 'agentic-binary'", specifier = ">=6.21.2" },
+ { name = "python-dotenv", marker = "extra == 'agentic'", specifier = ">=1.2.4" },
+ { name = "python-multipart", marker = "extra == 'web'", specifier = ">=0.0.32" },
{ name = "pyyaml", specifier = ">=6.0.3" },
+ { name = "pyyaml", marker = "extra == 'agentic'", specifier = ">=6.0" },
+ { name = "qdrant-client", marker = "extra == 'agentic-vectorstores-qdrant'", specifier = ">=1.19.1" },
{ name = "questionary", marker = "extra == 'cli'", specifier = ">=2.1.1" },
- { name = "redis", extras = ["hiredis"], marker = "extra == 'cache'", specifier = ">=7.4.0" },
- { name = "redis", extras = ["hiredis"], marker = "extra == 'redis'", specifier = ">=7.4.0" },
+ { name = "ragas", marker = "extra == 'agentic-evaluation'", specifier = ">=0.2.6,<0.2.7" },
+ { name = "redis", extras = ["hiredis"], marker = "extra == 'cache'", specifier = ">=8.1.0" },
+ { name = "redis", extras = ["hiredis"], marker = "extra == 'redis'", specifier = ">=8.1.0" },
{ name = "rich", marker = "extra == 'cli'", specifier = ">=15.0.0" },
{ name = "sqlalchemy", extras = ["asyncio"], marker = "extra == 'data-relational'", specifier = ">=2.0.50" },
- { name = "starlette", marker = "extra == 'web'", specifier = ">=1.0.0" },
- { name = "structlog", marker = "extra == 'observability'", specifier = ">=25.5.0" },
- { name = "testcontainers", marker = "extra == 'testcontainers'", specifier = ">=4.0.0" },
- { name = "uvicorn", extras = ["standard"], marker = "extra == 'web'", specifier = ">=0.46.0" },
- { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fast'", specifier = ">=0.22.1" },
- { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fastapi'", specifier = ">=0.22.1" },
- { name = "websockets", marker = "extra == 'websocket'", specifier = ">=12.0" },
-]
-provides-extras = ["templates", "webapp", "web", "data-relational", "testing", "argon2", "testcontainers", "data-document", "postgresql", "mysql", "eda", "fastapi", "granian", "hypercorn", "kafka", "rabbitmq", "redis", "cache", "oauth2-client", "client", "feature-flags", "config-server-git", "grpc", "websocket", "idp-azure", "idp-keycloak", "idp-cognito", "ecm-aws", "ecm-azure", "observability", "scheduling", "pii", "security", "notifications", "cli", "shell", "web-fast", "web-fastapi", "full"]
+ { name = "sqlite-vec", marker = "extra == 'agentic-vectorstores-sqlite-vec'", specifier = ">=0.1.9" },
+ { name = "starlette", marker = "extra == 'web'", specifier = ">=1.9.0" },
+ { name = "structlog", marker = "extra == 'observability'", specifier = ">=26.1.0" },
+ { name = "testcontainers", marker = "extra == 'testcontainers'", specifier = ">=4.15.0" },
+ { name = "uvicorn", extras = ["standard"], marker = "extra == 'web'", specifier = ">=0.54.0" },
+ { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fast'", specifier = ">=0.23.0" },
+ { name = "uvloop", marker = "sys_platform != 'win32' and extra == 'web-fastapi'", specifier = ">=0.23.0" },
+ { name = "voyageai", marker = "extra == 'agentic-voyage-embeddings'", specifier = ">=0.5.0" },
+ { name = "watchfiles", marker = "extra == 'agentic-watch'", specifier = ">=1.3.0" },
+ { name = "websockets", marker = "extra == 'websocket'", specifier = ">=17.3" },
+]
+provides-extras = ["agentic", "agentic-relational", "agentic-postgres", "agentic-mongodb", "agentic-security", "agentic-script-execution", "agentic-embeddings", "agentic-openai-embeddings", "agentic-cohere-embeddings", "agentic-google-embeddings", "agentic-mistral-embeddings", "agentic-voyage-embeddings", "agentic-azure-embeddings", "agentic-bedrock-embeddings", "agentic-ollama-embeddings", "agentic-reasoning-eval", "agentic-vectorstores-chroma", "agentic-vectorstores-sqlite-vec", "agentic-vectorstores-pinecone", "agentic-vectorstores-qdrant", "agentic-vectorstores-pgvector", "agentic-watch", "agentic-binary", "agentic-all", "agentic-evaluation", "templates", "webapp", "web", "data-relational", "testing", "argon2", "testcontainers", "data-document", "postgresql", "mysql", "eda", "fastapi", "granian", "hypercorn", "kafka", "rabbitmq", "redis", "cache", "oauth2-client", "client", "feature-flags", "config-server-git", "grpc", "websocket", "idp-azure", "idp-keycloak", "idp-cognito", "ecm-aws", "ecm-azure", "observability", "scheduling", "security", "notifications", "cli", "shell", "web-fast", "web-fastapi", "full"]
[package.metadata.requires-dev]
-browser = [{ name = "playwright", specifier = ">=1.63.0" }]
+agentic-dev = [
+ { name = "httpx", specifier = ">=0.28.0" },
+ { name = "pdfplumber", specifier = ">=0.11.10" },
+ { name = "pre-commit", specifier = ">=4.7.0" },
+ { name = "pyright", specifier = ">=1.1.414" },
+ { name = "pytest", specifier = ">=8.3.0" },
+ { name = "pytest-asyncio", specifier = ">=0.24.0" },
+ { name = "pytest-benchmark", specifier = ">=5.3.0" },
+ { name = "pytest-cov", specifier = ">=6.0.0" },
+ { name = "ruff", specifier = ">=0.17.1" },
+ { name = "testcontainers", specifier = ">=4.10.0" },
+]
+browser = [{ name = "playwright", specifier = ">=1.64.0" }]
dev = [
{ name = "aiomysql", specifier = ">=0.3.2" },
- { name = "aiosmtpd", specifier = ">=1.4" },
- { name = "coverage", extras = ["toml"], specifier = ">=7.13.5" },
- { name = "jsonpath-ng", specifier = ">=1.8.0" },
- { name = "mypy", specifier = ">=1.20.2" },
- { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.41.1" },
- { name = "pytest", specifier = ">=9.0.3" },
- { name = "pytest-asyncio", specifier = ">=1.3.0" },
+ { name = "aiosmtpd", specifier = ">=1.4.6" },
+ { name = "coverage", extras = ["toml"], specifier = ">=7.16.2" },
+ { name = "jsonpath-ng", specifier = ">=1.12.0" },
+ { name = "mypy", specifier = ">=2.4.0" },
+ { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.45.1" },
+ { name = "pytest", specifier = ">=9.1.1" },
+ { name = "pytest-asyncio", specifier = ">=1.4.0" },
{ name = "pytest-cov", specifier = ">=7.1.0" },
- { name = "respx", specifier = ">=0.21.0" },
- { name = "ruff", specifier = ">=0.15.12" },
+ { name = "respx", specifier = ">=0.23.1" },
+ { name = "ruff", specifier = ">=0.17.1" },
]
[[package]]
@@ -967,54 +1071,53 @@ asyncio = [
[[package]]
name = "starlette"
-version = "1.2.1"
+version = "1.10.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyio" },
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/25/44/ec35f1b6e83094b997da438a02c8c9b0ade2b1e84cfc48bd4656780760a6/starlette-1.2.1.tar.gz", hash = "sha256:9b9b5ebb992e67d6093741e63c2f59e4f6fff986f81163c087867bd7b924b3f6", size = 2701854, upload-time = "2026-05-31T01:07:51.847Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/48/bb/3d8757f21e9a53d9035c9eb039a777047139a16bfdbedfc7a58241c3d914/starlette-1.10.0.tar.gz", hash = "sha256:b8399098d4c1e3522734f7235dc79b1fc967f96cf139c81e0fa30479e0685f9b", size = 2734356, upload-time = "2026-10-24T15:04:12.342Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/1c/54/196d0c1db10af76baa4f64894448505d60d3cdf70ef92cbb35f46a4e4c71/starlette-1.2.1-py3-none-any.whl", hash = "sha256:4de0082d08c8f6764a85a54cf1120d6939507a19905c7768acad2a9f875d2b89", size = 73350, upload-time = "2026-05-31T01:07:50.09Z" },
+ { url = "https://files.pythonhosted.org/packages/88/2e/947cfe02def9371c07cd5bf5b6b61c829e9aecb9904db02a66cfafbc1eec/starlette-1.10.0-py3-none-any.whl", hash = "sha256:478c0ab3b4ced6e82719849c118fa406f0278a3499c1a898cd15cd31bdc38ce4", size = 80571, upload-time = "2026-10-24T15:04:10.371Z" },
]
[[package]]
name = "typing-extensions"
-version = "4.15.0"
+version = "4.16.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
+ { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" },
]
[[package]]
name = "typing-inspection"
-version = "0.4.2"
+version = "0.4.4"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" },
+ { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" },
]
[[package]]
name = "uvicorn"
-version = "0.49.0"
+version = "0.54.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
{ name = "h11" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/da/34/30e9280707135d2cfc589dfff3cb796bd07a3aeb1a3e415ba09dd89d7bb4/uvicorn-0.54.0.tar.gz", hash = "sha256:a2e33cbfaa0306f8e6b0c13e0cb89d7d7a2da3e62b90c66e18c33d9807b28620", size = 112283, upload-time = "2026-09-25T06:52:37.601Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/88/fa/e1388bbcf24ef3274f45c0c1c7b501fd14971037c1b6ee23610553307497/uvicorn-0.49.0-py3-none-any.whl", hash = "sha256:ba3d14c3ee7e41c6c654c46c9eb489d33213cdd30aa1696eab1374337c13f68f", size = 71376, upload-time = "2026-06-03T22:01:29.037Z" },
+ { url = "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", hash = "sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", size = 87427, upload-time = "2026-09-25T06:52:35.829Z" },
]
[package.optional-dependencies]
standard = [
- { name = "colorama", marker = "sys_platform == 'win32'" },
{ name = "httptools" },
{ name = "python-dotenv" },
{ name = "pyyaml" },
diff --git a/src/pyfly/__init__.py b/src/pyfly/__init__.py
index af2aa63c..70ff44ae 100644
--- a/src/pyfly/__init__.py
+++ b/src/pyfly/__init__.py
@@ -14,4 +14,4 @@
# limitations under the License.
"""PyFly — Enterprise Python Framework."""
-__version__ = "26.10.10"
+__version__ = "26.10.11"
diff --git a/tests/cli/test_agentic_scaffold.py b/tests/cli/test_agentic_scaffold.py
index 891b93b2..b4e9f780 100644
--- a/tests/cli/test_agentic_scaffold.py
+++ b/tests/cli/test_agentic_scaffold.py
@@ -50,7 +50,7 @@ def test_agentic_selection_generates_explicit_native_config(tmp_path: Path, inte
dependencies = tomllib.loads((project / "pyproject.toml").read_text())["project"]["dependencies"]
assert dependencies == [
"pyfly[agentic] @ https://github.com/fireflyframework/fireflyframework-pyfly/"
- "releases/download/v26.10.10/pyfly-26.10.10-py3-none-any.whl"
+ "releases/download/v26.10.11/pyfly-26.10.11-py3-none-any.whl"
]
@@ -66,7 +66,7 @@ def test_agentic_selection_generates_explicit_native_config(tmp_path: Path, inte
)
@pytest.mark.parametrize(
("version", "tag", "wheel_version"),
- [("26.10.10", "v26.10.10", "26.10.10"), ("26.1.02", "v26.01.02", "26.1.2")],
+ [("26.10.11", "v26.10.11", "26.10.11"), ("26.1.02", "v26.01.02", "26.1.2")],
)
def test_agentic_scaffold_pins_official_wheel_for_cli_version(
tmp_path: Path,
@@ -155,7 +155,7 @@ def test_new_plain_core_then_add_agentic_pins_native_release(tmp_path: Path) ->
assert requirement.extras == {"agentic"}
assert requirement.url == (
"https://github.com/fireflyframework/fireflyframework-pyfly/releases/"
- "download/v26.10.10/pyfly-26.10.10-py3-none-any.whl"
+ "download/v26.10.11/pyfly-26.10.11-py3-none-any.whl"
)
@@ -169,7 +169,7 @@ def test_add_agentic_to_unversioned_dependency_preserves_extras_and_literal_mark
tail = " " + rest if rest.startswith(";") else rest
assert dependency == (
"pyfly[agentic,web] @ https://github.com/fireflyframework/fireflyframework-pyfly/"
- "releases/download/v26.10.10/pyfly-26.10.10-py3-none-any.whl" + tail
+ "releases/download/v26.10.11/pyfly-26.10.11-py3-none-any.whl" + tail
)
assert Requirement(dependency).extras == {"agentic", "web"}
@@ -185,7 +185,7 @@ def test_add_agentic_rejects_version_constraint_without_mutation(tmp_path: Path,
assert added.exit_code == 1, added.output
assert "version constraint" in added.output
assert "official release wheel" in added.output
- assert "v26.10.10/pyfly-26.10.10-py3-none-any.whl" in added.output
+ assert "v26.10.11/pyfly-26.10.11-py3-none-any.whl" in added.output
assert manifest.read_text() == original
@@ -193,7 +193,7 @@ def test_add_agentic_rejects_version_constraint_without_mutation(tmp_path: Path,
def test_add_list_remove_agentic_preserves_direct_wheel_reference(tmp_path: Path, separator: str) -> None:
reference = (
separator + "https://github.com/fireflyframework/fireflyframework-pyfly/releases/"
- "download/v26.10.10/pyfly-26.10.10-py3-none-any.whl ; python_version >= '3.12'"
+ "download/v26.10.11/pyfly-26.10.11-py3-none-any.whl ; python_version >= '3.12'"
)
manifest = tmp_path / "pyproject.toml"
manifest.write_text('[project]\nname = "app"\ndependencies = ["pyfly[web]' + reference + '"]\n')
diff --git a/uv.lock b/uv.lock
index 24f40850..4c5c01fa 100644
--- a/uv.lock
+++ b/uv.lock
@@ -6108,7 +6108,7 @@ wheels = [
[[package]]
name = "pyfly"
-version = "26.10.10"
+version = "26.10.11"
source = { editable = "." }
dependencies = [
{ name = "pydantic" },
diff --git a/web/index.html b/web/index.html
index a7ab6cd9..200714a2 100644
--- a/web/index.html
+++ b/web/index.html
@@ -90,7 +90,7 @@
The official, project-driven book. Across 21 chapters in six parts it builds Lumen — a real wallet & ledger microservice — from an empty folder into a secured, observable, event-driven service. Every listing is drawn from a running project. Spring developers get a parity callout at every turn.