Skip to content

v0.11.0 — A module Phase 2+3

Choose a tag to compare

@vamsiramakrishnan vamsiramakrishnan released this 01 Mar 09:41
· 280 commits to master since this release

A Module Phase 2+3: Content Transforms, Schemas & Contracts

Completes the A (Artifact) module, adding content transforms, LLM-aware loading, tool factories, declarative schemas, and contract validation.

Phase 2: Content Transforms & Tool Integration

  • Post-snapshot transforms: A.as_json(key), A.as_csv(key), A.as_text(key) — parse artifact content after loading into state
  • Pre-publish transforms: A.from_json(key), A.from_csv(key), A.from_markdown(key) — serialize state before publishing as artifact
  • LLM-aware loading: A.for_llm(filename) — CTransform that injects artifact content directly into LLM context (no state bridging)
  • Tool factories: A.tool.save/load/list/version — generate ADK FunctionTool instances for LLM-driven artifact interaction
  • Batch ops: A.publish_many(), A.snapshot_many() — create multiple ATransforms from (filename, key) pairs

Phase 3: Schema, Contracts & Visualization

  • ArtifactSchema: Declarative artifact contracts using Produces("file.md") / Consumes("data.csv") annotations, built on DeclarativeMetaclass
  • Pass 16: Contract checker validates consumed artifacts have upstream producers; warns on MIME mismatches
  • Visualization: ArtifactNodes render as hexagons in Mermaid; artifact flow tracked with data flow edges
  • Prelude: Exports ArtifactSchema, Produces, Consumes (44 total prelude exports)

Example

from adk_fluent.prelude import *

class ResearchArtifacts(ArtifactSchema):
    findings: str = Produces("findings.json", mime="application/json")
    source: str = Consumes("raw_data.csv", mime="text/csv")

pipeline = (
    Agent("loader")
    >> A.snapshot("raw_data.csv", into_key="rows")
    >> A.as_csv("rows")
    >> Agent("researcher")
        .artifact_schema(ResearchArtifacts)
        .tools(A.tool.save("save_findings"))
    >> A.from_json("result")
    >> A.publish("findings.json", from_key="result")
)

Stats

  • 58 new tests (2232 total)
  • 0 Pyright errors
  • 18 files changed, +1304 lines