fred-pod
What a Fred component needs to be a pod: configuration, identity, naming.
A Knowledge Base pod, a capability pod, an MCP server pod and an agent pod all read a
configuration.yaml, get a machine-to-machine token, and name things under a prefix they
own. That floor is this distribution.
| Question | Answer |
|---|---|
| What do I need to run a Fred component? | fred-pod |
| What do I need to build an agent? | fred-core / fred-sdk |
Why it is its own distribution
fred-core declares 31 runtime dependencies — pandas, pyarrow, google-cloud-storage, minio,
opensearch-py, sqlalchemy, asyncpg, azure-identity, fastapi, and a client for every LLM
provider. That is the right list for the agents/LLM platform fred-core is. It is the wrong
list for a pod whose job is one PROPFIND and a few GETs.
Extras were the obvious alternative and were rejected for one reason: a boundary the build
does not enforce erodes. fred-core reached 31 dependencies precisely because nothing
stopped it. Nothing would stop an import pandas landing in structures.py next month
either, and nobody would notice. A separate distribution cannot import what it does not
depend on — the rule keeps itself.
It showed its worth immediately: config_loader.py has always done import yaml, and
fred-core never declared PyYAML. It worked because something else happened to pull it in.
Here it is declared, because here it had to be.
The dependency list is the contract
pydantic python-dotenv pyyaml httpx
Four packages. Adding a fifth is a decision someone makes on purpose, in a diff, and that is
the whole point. If a change to this library needs a heavier import, the change belongs in
fred-core, not here.
Layout
fred_pod/
├── common/
│ ├── naming.py contributed names, prefixes, catalog ids
│ ├── structures.py configuration models (scheduler, stores, KPI sinks)
│ ├── config_files.py resolving configuration.yaml and its .env
│ └── config_loader.py loading and validating it into a Pydantic model
└── security/
├── structure.py security configuration models, KeycloakUser
└── backend_to_backend_auth.py M2M token provider and httpx auth
The paths mirror fred_core's on purpose: a call site migrates by swapping the prefix
fred_core. → fred_pod. and nothing else.
Compatibility
fred-core depends on fred-pod and re-exports every name it moved, at both the package
top level and the original submodule paths. Existing code keeps working unchanged; imports
migrate opportunistically.
from fred_pod import ConfigFiles, KeycloakUser, M2MTokenProvider
from fred_pod.common.naming import require_contributed_name
Development
make dev # install with the local monorepo checkout
make test # offline unit tests
make code-quality # ruff, bandit, detect-secrets, basedpyright
make publish # build and upload to PyPI (needs PYPI_TOKEN)
Metadata
Release files for fred-pod 4.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fred_pod-4.1.0.tar.gz | 18.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fred_pod-4.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.6 kB
Release files / fred_pod-4.1.0.tar.gz
| Download URL | fred_pod-4.1.0.tar.gz |
|---|---|
| Size | 18.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
49d83f68aff180809c689cff4ff5f610bcac38a4257d8ace4c9a4b05b0c76f27
|
|
BLAKE2b-256 checksum How to use checksums |
765a85d5fa25b535cbe0245dba8c7baa93a96ad9ff9b563290041a24812b7581
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / fred_pod-4.1.0-py3-none-any.whl
| Download URL | fred_pod-4.1.0-py3-none-any.whl |
|---|---|
| Size | 20.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b9006cd3be0d8d8da5ff00ae1180a6388941efcb30ef0c5eecee437c5b5bc06e
|
|
BLAKE2b-256 checksum How to use checksums |
fa73fa6701d6c9b38397261f0a06ab2e23765b28efa258ee0a17d211f2f32ac3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|