You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Replace the minimal install/quick-example shape with a landing
README modeled on pydantic-ai's structure. New sections, in order:
- Header with badges (CI, PyPI, spec version, Python versions,
license) — the spec badge reads tool.openarmature.spec_version
from pyproject.toml on main via Shields.io's dynamic TOML
endpoint, so the badge auto-updates when the spec pin moves.
- Documentation pointer to openarmature.ai.
- Hero copy: workflow framework framing; the graph engine is
content-agnostic so the same primitives drive ETL and agents.
- Install: uv add + pip install, core + [otel] extras.
- Why OpenArmature: nine bullets in framework-author voice
covering frozen state, schema-validated merges, per-field
reducer policy, subgraph projection seams, compile-time
topology (six categories), content-agnostic engine,
determinism contract, synchronous checkpoints, TracerProvider
isolation.
- Hello World: three-node classification pipeline showing three
reducer policies on one state class, conditional routing as a
pure state function, and an observer (no LLM setup needed).
- Next steps: Quickstart / Concepts / Model Providers / API
reference / Examples / Spec links to openarmature.ai pages.
Drafted on the discuss-readme-rework coord thread; spec-side
sign-off on file 03 of that thread.
Python reference implementation of [OpenArmature](https://github.com/LunarCommand/openarmature-spec) — a workflow framework for LLM pipelines and tool-calling agents.
The spec lives in [`openarmature-spec`](https://github.com/LunarCommand/openarmature-spec) and is pinned here as a git submodule. Conformance fixtures from the spec are exercised by `tests/conformance/`.
65
154
66
-
The pinned spec version is recorded in `tool.openarmature.spec_version` (in `pyproject.toml`) and exposed as `openarmature.__spec_version__`.
155
+
graph = (
156
+
GraphBuilder(PipelineState)
157
+
.add_node("classify", classify)
158
+
.add_node("research", research)
159
+
.add_node("summarize", summarize)
160
+
.add_conditional_edge("classify", route)
161
+
.add_edge("research", END)
162
+
.add_edge("summarize", END)
163
+
.set_entry("classify")
164
+
.compile()
165
+
)
166
+
graph.attach_observer(trace)
67
167
68
-
## License
168
+
final = asyncio.run(graph.invoke(PipelineState(query="what is RAG?")))
169
+
# classify: sources=[]
170
+
# research: sources=['wikipedia', 'arxiv']
171
+
```
69
172
70
-
Apache-2.0.
173
+
A few things to notice in ~40 lines:
174
+
175
+
-**Three reducer policies on one state schema.**`query` and
176
+
`classification` get the default `last_write_wins`. `sources` is
0 commit comments