Core concepts
SchemaNode, ReasoningNode, CombineNode
Drop tiny, scoped AI models into ordinary code paths. Each constructor has a fixed contract; the control layer — not the model — owns transitions.SchemaNode — constrained JSON
Provider-backed extraction. The model must return JSON matching output_schema. It has no tools. input_schema, output_schema, and prompt are required.
Python SDKpython
SchemaNode(
id="ExtractTicket",
input_schema=OpenInput, # required — what state the node reads
output_schema=SupportTicket, # required — constrained JSON contract
prompt="Extract a support ticket as JSON from the customer message.",
)ReasoningNode — tools and notes
Provider-backed reasoning. The model calls allow-listed tools and writes plain-text notes (not structured JSON). Its output feeds a later SchemaNode or CombineNode. input_schema, prompt, and tools are required — empty tools=() raises ValueError.
Python SDKpython
ReasoningNode(
id="InvestigateRefund",
input_schema=RefundInput, # required
prompt="Investigate the refund claim using tools. Reason step-by-step.",
tools=( # required — at least one tool
"lookup_customer_account",
"fetch_transaction_history",
),
)CombineNode — reasoning then schema
Authoring shortcut that compiles into two FSM states: {id} (reasoning + tools) then {id}.Schema (constrained JSON). External edges enter {id} and leave {id}.Schema. The internal linking edge is injected automatically.
Python SDKpython
CombineNode(
id="InvestigateAndSummarise",
input_schema=RefundInput, # required
tools=("lookup_customer_account",), # required — at least one tool
output_schema=RefundDecision, # required — constrained JSON for {id}.Schema
prompt="Investigate the claim with tools, then summarise.",
)Grounded in neosyntropy-framework/docs/concepts-explained.md §3–5.