functualize-ai
Status: Published — Independently installable from PyPI.
AI Domain SDK for functualize — provider-agnostic LLM interaction capabilities.
Provides the AI capability class with structured output, tool calling, streaming,
and extraction methods backed by a pluggable AIProvider protocol. Includes
deny-by-default tool visibility via ToolScope, cumulative budget enforcement,
lifecycle event emission, and a deterministic MockAI testing double for unit
testing without network calls or API keys.
Installation
pip install functualize-ai
Quick Start
from functualize_ai import AI, ToolScope, AILimits
from functualize_ai.testing import MockAI
# Use MockAI for deterministic testing (no API key needed)
ai = MockAI(responses={"*summarize*": "A brief summary of the document."})
# Simple text completion
result = ai.complete("Please summarize this text")
print(result) # "A brief summary of the document."
# Run with tool scope and budget limits
scope = ToolScope.only(["search", "calculate"])
limits = AILimits(budget_usd=1.00, max_tool_calls=5)
ai_result = ai.run("Find the answer", tools=scope, limits=limits)
print(ai_result.output)
Features
- Provider-agnostic AI class with
complete(),run(),stream(), andextract()methods for text, structured output, tool calling, and streaming - ToolScope builder implementing deny-by-default tool visibility — restrict tools by name, tag, group, or plain callables with composable
+operator - Budget enforcement tracking cumulative USD spend across calls with automatic
BudgetExceedederrors when limits are reached - Structured output validation with automatic retry (up to 3 attempts) against Pydantic models or dataclasses
- MockAI testing double using glob-pattern matching for deterministic, network-free testing with full call recording
- Lifecycle event emission (
AI_CALL_STARTED,AI_CALL_COMPLETED,AI_CALL_FAILED,AI_BUDGET_EXCEEDED,AI_TOOL_CALLED) for observability and audit logging - AIProvider protocol enabling custom backend implementations (PydanticAI, LiteLLM, or any LLM SDK)
API Reference
Public classes and functions exported by this plugin:
Capability
AI— Provider-agnostic LLM interaction class withcomplete(),run(),stream(),extract()methods
Protocol
AIProvider— Runtime-checkable protocol that AI backend implementations must satisfy
Tool Scope
ToolScope— Deny-by-default tool visibility builder withonly(),tagged(),group(),functions()factory methods
Types
AIResult— Result of an AI run containingoutput,tool_calls,usage, andduration_msTokenUsage— Token usage statistics (prompt_tokens,completion_tokens,total_tokens,cost_usd)ToolDef— Provider-agnostic tool definition with name, description, and parameters schemaAILimits— Budget and constraint caps (max_tool_calls,max_tokens,budget_usd,timeout_seconds)ToolCallRecord— Record of a single tool call with name, args, result, and duration
Configuration
AIConfig— Pydantic model for AI domain configuration (provider, model, max_tokens, budget_usd, timeout_seconds)
Errors
AINotAvailable— Raised when no AI provider is configuredBudgetExceeded— Raised when cumulative spend reaches the budget limitToolNotPermitted— Raised when a tool call is not permitted by the current ToolScope
Events
AI_CALL_STARTED— Emitted when an AI call beginsAI_CALL_COMPLETED— Emitted when an AI call completes successfullyAI_CALL_FAILED— Emitted when an AI call failsAI_BUDGET_EXCEEDED— Emitted when budget is exceededAI_TOOL_CALLED— Emitted when a tool is called during a run
Testing
MockAI— Pattern-matching AI mock for deterministic testingMockAICall— Record of a single MockAI call (prompt, response_model, response)
Provider Discovery
discover_ai_providers()— Discover available AI provider entry pointsselect_ai_provider()— Select a provider by name from discovered providersresolve_ai_provider()— Resolve and instantiate the configured AI provider
State Fallback
EphemeralStateBackend— In-memory state backend for when no persistent state is availableStrictStateBackendWrapper— Wrapper enforcing strict key access on a state backendresolve_ai_state_backend()— Resolve the AI state backend from context
Development
Run plugin tests:
uv run pytest plugins/functualize-ai/tests/ -v
Release files for functualize-ai 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| functualize_ai-0.2.1.tar.gz | 23.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| functualize_ai-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.0 kB
Release files / functualize_ai-0.2.1.tar.gz
| Download URL | functualize_ai-0.2.1.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00458753b60193a4ce3733d224c733a77e6b3d758a2d96eee2684b5dde5f67ef
|
|
BLAKE2b-256 checksum How to use checksums |
f59a496bf4cdbf92b33651699232e8d784712273b6e66146cc94f82de3513e59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.
Transparency logRelease files / functualize_ai-0.2.1-py3-none-any.whl
| Download URL | functualize_ai-0.2.1-py3-none-any.whl |
|---|---|
| Size | 25.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d0fb687fee7643b2f55edec0ab9d6f48cee3cb1bec2ce930985498f861f44127
|
|
BLAKE2b-256 checksum How to use checksums |
de7a2ee34c2dfde71164e62ab1897e42ba5975312ad19ec993947072e067f068
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.
Transparency log