Observed since 20 Oct, 22:21 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agentics-py
Agentics is a Python framework that provides structured, scalable, and semantically grounded agentic computation.
Transduction is all you need
Agentics is a Python framework for structured, scalable, and semantically grounded agentic computation.
Build AI-powered pipelines as typed data transformations—combining Pydantic schemas, LLM-powered transduction, and async execution.
Most "agent frameworks" let untyped text flow through a pipeline. Agentics flips that: types are the interface. Workflows are expressed as transformations between structured states, with predictable schemas and composable operators.
<<): Transform data between types using LLMs (few-shot examples, tools, memory).amap and areduce over datasets.Quickstart:
Install Agentics in your current env, set up your environment variable, and run your first logical transduction:
uv pip install agentics-py
set up your .env using the required parameters for your LLM provider of choice. Use .env_sample as a reference.
Find out more 👉 Getting Started: docs/getting_started.md
Examples
Run scripts in the examples/ folder (via uv):
uv run python examples/hello_world.py
from pydantic import BaseModel, Field
from agentics.core.transducible_functions import transducible, Transduce
class ProductDescription(BaseModel):
name: str
features: str
price: float
class ViralTweet(BaseModel):
tweet: str = Field(..., description="Engaging tweet under 280 characters")
hashtags: list[str] = Field(..., description="3-5 relevant hashtags")
hook: str = Field(..., description="Attention-grabbing opening line")
@transducible()
async def generate_viral_tweet(product: ProductDescription) -> ViralTweet:
"""Transform boring product descriptions into viral social media content."""
return Transduce(product)
# Transform a product into viral content
product = ProductDescription(
name="Agentics Framework",
features="Type-safe AI workflows with LLM-powered transductions",
price=0.0 # Open source!
)
tweet = await generate_viral_tweet(product)
print(f"🔥 {tweet.tweet}")
print(f"📱 {' '.join(tweet.hashtags)}")
Output:
🔥 Stop wrestling with unstructured LLM outputs! 🎯 Agentics gives you type-safe AI workflows that just work. Build production-ready agents in minutes, not weeks. And it's FREE! 🚀
📱 #AI #OpenSource #Python #LLM #DevTools
Complete documentation available here
| Notebook | Description |
|---|---|
| agentics.ipynb | Core Agentics concepts: typed states, operators, and workflow structure |
| atypes.ipynb | Working with ATypes: schema composition, merging, and type-driven design patterns |
| logical_transduction_algebra.ipynb | Logical Transduction Algebra: principles and examples behind << |
| map_reduce.ipynb | Scale out workflows with amap / areduce (MapReduce-style execution) |
| synthetic_data_generation.ipynb | Generate structured synthetic datasets using typed transductions |
| transducible_functions.ipynb | Build reusable @transducible functions, explanations, and transduction control |
Run all tests:
uv run pytest
Apache 2.0
Project Lead and Main Contributor
Core Contributors
Community Contributors
Most “agent frameworks” let untyped text flow through a pipeline. Agentics flips that: types are the interface. Workflows are expressed as transformations between structured states, with predictable schemas and composable operators.
Because every step is a typed transformation, you can compose workflows safely (merge and compose types/instances, chain transductions, and reuse @transducible functions) without losing semantic structure.
Agentics makes it natural to scale out: apply transformations over collections with async amap, and aggregate results with areduce.
Agentics models workflows as transformations between typed states.
Core operations:
amap(func): apply an async function over each stateareduce(func): reduce a list of states into a single value<<: logical transduction from source to target Agentics&: merge Pydantic types / instances@: compose Pydantic types / instancesAgentics implements Logical Transduction Algebra, described in:
Contributions are welcome! CONTRIBUTING.md
Please ensure your commit messages include:
Signed-off-by: Author Name <authoremail@example.com>
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
aiosqliteEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | aiosqlite>=0.21.0 | runtime |
apschedulerEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | apscheduler>=3.10.0 | runtime |
async-lruEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | async-lru>=2.0.5 | runtime |
crewai-toolsEnvironment{
"extras": "mcp",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | crewai-tools[mcp] | runtime |
crewaiEnvironment{
"extras": "google-genai",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | crewai[google-genai] | runtime |
crewaiEnvironment{
"extras": "tools",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | crewai[tools] | runtime |
datasetsEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | datasets<5.0.0,>=4.0.0 | runtime |
ddgsEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | ddgs | runtime |
duckdbEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | duckdb>=1.4.3 | runtime |
fastapi-ssoEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | fastapi-sso>=0.10.0 | runtime |
googleEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | google<4.0.0,>=3.0.0 | runtime |
hnswlibEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | hnswlib>=0.8.0 | runtime |
ipywidgetsEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | ipywidgets>=8.1.7 | runtime |
json-schema-to-pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | json-schema-to-pydantic<0.4.0,>=0.3.0 | runtime |
jsonfinderEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | jsonfinder | runtime |
langchain-huggingfaceEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | langchain-huggingface<0.3.0,>=0.2.0 | runtime |
litellmEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | litellm<1.82.7,>=1.80.0 | runtime |
loguruEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | loguru<0.8.0,>=0.7.3 | runtime |
mcpEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | mcp<2.0.0,>=1.13.1 | runtime |
melleaEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | mellea | runtime |
numerizeEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | numerize>=0.12 | runtime |
openaiEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | openai<2.0.0,>=1.88.0 | runtime |
openapi-python-clientEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | openapi-python-client<0.25.0,>=0.24.3 | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | pandas>=2 | runtime |
plotlyEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | plotly>=6.5.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic | runtime |
pyyamlEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | pyyaml<7.0.0,>=6.0.2 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | rich<14.0.0,>=13.0.0 | runtime |
streamlitEnvironment{
"extras": "",
"marker": null,
"requires_python": "<3.13,>=3.11",
"evaluation": "NOT_EVALUATED"
} | streamlit<2.0.0,>=1.45.1 | runtime |
bdist_wheel · 59.43 KB · Python py3
sdist · 3,098.3 KB · Python source
Observed since 20 Oct, 22:21 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:ea7101084b4d2c826e3e1c315a2f4718155cefed5f883163b8bef695d83676f7