Skip to content

Latest commit

 

History

History
79 lines (51 loc) · 2.4 KB

File metadata and controls

79 lines (51 loc) · 2.4 KB
hide
toc

OpenArmature

A workflow framework for LLM pipelines and tool-calling agents. Typed state, structural graph checks, and observability that doesn't require buy-in from every node.

Get started{ .md-button .md-button--primary } View on GitHub{ .md-button target="_blank" rel="noopener" }


  • :material-shield-check:{ .lg .middle }   Workflows to agents, one engine


    Built for LLM-infused pipelines first. Tool-calling agents (cycle back to an LLM node) and pure deterministic ETL sit at the two ends of the same spectrum.

  • :material-content-save:{ .lg .middle }   Crash-safe by contract


    Synchronous checkpoint save after every node. Process dies mid-step, next invoke(resume_invocation=...) picks up from the last save with correlation_id preserved.

  • :material-eye:{ .lg .middle }   Pluggable observability


    Native OTelObserver emits GenAI semantic conventions any OTLP backend renders. Separate LangfuseObserver for the Langfuse destination. No vendor lock-in to a paid SaaS.

  • :material-graph:{ .lg .middle }   Bad graphs don't compile


    .compile() rejects six categories of structural error before invoke() is reachable: dangling edges, unreachable nodes, conflicting reducers, no entry, undeclared subgraph fields, multiple outgoing edges.

  • :material-arrow-split-vertical:{ .lg .middle }   Parallelism, formalized


    Fan-out with bounded concurrency and per-instance error policy. Parallel-branches runs N named sub-graphs. Both nest with attribution-correct observability.

  • :material-language-python:{ .lg .middle }   Async-first, LLM-agnostic


    asyncio-native throughout: every node, observer, and checkpointer is async. Use any LLM provider, any model, any external system. Drops directly into FastAPI lifespan hooks.


Open specification

OpenArmature is defined by a public, language-agnostic specification, not a Python-shaped opinion exported to other languages. Reference implementations share conformance fixtures, so behavior stays identical across languages, runtimes, and tooling stacks.

Read the spec →{target="_blank" rel="noopener"}