pub mod chunker;
pub mod context_trace;
pub mod oracle;
pub mod repl;
pub mod router;
pub mod tools;
pub use chunker::{Chunk, ChunkOptions, ContentType, RlmChunker};
pub use context_trace::{ContextTrace, ContextEvent};
pub use oracle::{
AstPayload, AstResult, FinalPayload, GeneratedQuery, GrepMatch, GrepOracle, GrepPayload,
OracleResult, QueryTemplate, SemanticPayload, TemplateKind,
TraceValidator, TreeSitterOracle, ValidatedTrace, VerificationMethod,
};
pub use repl::{ReplRuntime, RlmAnalysisResult, RlmExecutor, RlmRepl, SubQuery};
pub use router::{RlmRouter, RoutingContext, RoutingResult};
pub use tools::{RlmToolResult, dispatch_tool_call, rlm_tool_definitions};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RlmStats {
pub input_tokens: usize,
pub output_tokens: usize,
pub iterations: usize,
pub subcalls: usize,
pub elapsed_ms: u64,
pub compression_ratio: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RlmResult {
pub processed: String,
pub stats: RlmStats,
pub success: bool,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RlmConfig {
#[serde(default = "default_mode")]
pub mode: String,
#[serde(default = "default_threshold")]
pub threshold: f64,
#[serde(default = "default_max_iterations")]
pub max_iterations: usize,
#[serde(default = "default_max_subcalls")]
pub max_subcalls: usize,
#[serde(default = "default_runtime")]
pub runtime: String,
pub root_model: Option<String>,
pub subcall_model: Option<String>,
}
fn default_mode() -> String {
"auto".to_string()
}
fn default_threshold() -> f64 {
0.35
}
fn default_max_iterations() -> usize {
15
}
fn default_max_subcalls() -> usize {
50
}
fn default_runtime() -> String {
"rust".to_string()
}
impl Default for RlmConfig {
fn default() -> Self {
Self {
mode: default_mode(),
threshold: default_threshold(),
max_iterations: default_max_iterations(),
max_subcalls: default_max_subcalls(),
runtime: default_runtime(),
root_model: None,
subcall_model: None,
}
}
}