Python Package Management
Monorepo Structure
code
python/ ├── pyproject.toml # Root package (agent-framework) ├── packages/ │ ├── core/ # agent-framework-core (main package) │ ├── azure-ai/ # agent-framework-azure-ai │ ├── anthropic/ # agent-framework-anthropic │ └── ... # Other connector packages
- •
agent-framework-corecontains core abstractions and OpenAI/Azure OpenAI built-in - •Provider packages extend core with specific integrations
- •Root
agent-frameworkdepends onagent-framework-core[all]
Dependency Management
Uses uv for dependency management and poethepoet for task automation.
bash
# Full setup (venv + install + prek hooks) uv run poe setup # Install/update all dependencies uv run poe install # Create venv with specific Python version uv run poe venv --python 3.12
Lazy Loading Pattern
Provider folders in core use __getattr__ to lazy load from connector packages:
python
# In agent_framework/azure/__init__.py
_IMPORTS: dict[str, tuple[str, str]] = {
"AzureAIAgentClient": ("agent_framework_azure_ai", "agent-framework-azure-ai"),
}
def __getattr__(name: str) -> Any:
if name in _IMPORTS:
import_path, package_name = _IMPORTS[name]
try:
return getattr(importlib.import_module(import_path), name)
except ModuleNotFoundError as exc:
raise ModuleNotFoundError(
f"The package {package_name} is required to use `{name}`. "
f"Install it with: pip install {package_name}"
) from exc
Adding a New Connector Package
Important: Do not create a new package unless approved by the core team.
Initial Release (Preview)
- •Create directory under
packages/(e.g.,packages/my-connector/) - •Add the package to
tool.uv.sourcesin rootpyproject.toml - •Include samples inside the package (e.g.,
packages/my-connector/samples/) - •Do NOT add to
[all]extra inpackages/core/pyproject.toml - •Do NOT create lazy loading in core yet
Promotion to Stable
- •Move samples to root
samples/folder - •Add to
[all]extra inpackages/core/pyproject.toml - •Create provider folder in
agent_framework/with lazy loading__init__.py
Versioning
- •All non-core packages declare a lower bound on
agent-framework-core - •When core version bumps with breaking changes, update the lower bound in all packages
- •Non-core packages version independently; only raise core bound when using new core APIs
Installation Options
bash
pip install agent-framework-core # Core only pip install agent-framework-core[all] # Core + all connectors pip install agent-framework # Same as core[all] pip install agent-framework-azure-ai # Specific connector (pulls in core)
Maintaining Documentation
When changing a package, check if its AGENTS.md needs updates:
- •Adding/removing/renaming public classes or functions
- •Changing the package's purpose or architecture
- •Modifying import paths or usage patterns