torg_core/lib.rs
1//! TØR-G: Token-Only Reasoner (Graph)
2//!
3//! A zero-parser, boolean-circuit IR for AI agent policy synthesis.
4//!
5//! # Overview
6//!
7//! TØR-G provides a deterministic state machine for constructing and
8//! evaluating boolean circuit DAGs from token streams. Key properties:
9//!
10//! - **No text parsing** — token stream only
11//! - **Deterministic state machine** — guaranteed valid construction
12//! - **Pure boolean combinatorics** — no arithmetic, state, or loops
13//! - **DAG structure** — formally verifiable
14//!
15//! # Example
16//!
17//! ```
18//! use torg_core::{Builder, Token, evaluate};
19//! use std::collections::HashMap;
20//!
21//! // Build a simple OR circuit: output = input0 OR input1
22//! let mut builder = Builder::new();
23//!
24//! // Declare inputs
25//! builder.push(Token::InputDecl).unwrap();
26//! builder.push(Token::Id(0)).unwrap();
27//! builder.push(Token::InputDecl).unwrap();
28//! builder.push(Token::Id(1)).unwrap();
29//!
30//! // Define node: node(2) = input(0) OR input(1)
31//! builder.push(Token::NodeStart).unwrap();
32//! builder.push(Token::Id(2)).unwrap();
33//! builder.push(Token::Or).unwrap();
34//! builder.push(Token::Id(0)).unwrap();
35//! builder.push(Token::Id(1)).unwrap();
36//! builder.push(Token::NodeEnd).unwrap();
37//!
38//! // Declare output
39//! builder.push(Token::OutputDecl).unwrap();
40//! builder.push(Token::Id(2)).unwrap();
41//!
42//! let graph = builder.finish().unwrap();
43//!
44//! // Evaluate with inputs
45//! let inputs: HashMap<u16, bool> = [(0, false), (1, true)].into();
46//! let outputs = evaluate(&graph, &inputs).unwrap();
47//! assert_eq!(outputs[&2], true); // false OR true = true
48//! ```
49//!
50//! # LLM Integration
51//!
52//! The [`Builder::valid_next_tokens`] method returns the set of tokens
53//! valid in the current state. This enables logit masking during LLM
54//! inference, guaranteeing syntactically correct output:
55//!
56//! ```
57//! use torg_core::{Builder, Token};
58//!
59//! let mut builder = Builder::new();
60//! builder.push(Token::InputDecl).unwrap();
61//! builder.push(Token::Id(0)).unwrap();
62//! builder.push(Token::NodeStart).unwrap();
63//! builder.push(Token::Id(1)).unwrap();
64//!
65//! // At this point, only operators are valid
66//! let valid = builder.valid_next_tokens();
67//! assert!(valid.contains(&Token::Or));
68//! assert!(valid.contains(&Token::Nor));
69//! assert!(valid.contains(&Token::Xor));
70//! assert!(!valid.contains(&Token::NodeEnd));
71//! ```
72
73pub mod builder;
74pub mod error;
75pub mod eval;
76pub mod graph;
77pub mod limits;
78pub mod token;
79
80pub use builder::{Builder, Phase};
81pub use error::{BuildError, EvalError};
82pub use eval::evaluate;
83pub use graph::{Graph, Node};
84pub use limits::Limits;
85pub use token::{BoolOp, Source, Token};