frankenstein / src /main.rs
SNAPKITTYWEST's picture
Add Frankenstein source: Rust Tokio BRAIN/HANDS/LEGS pipeline, gates, trust deed
3d2a871 verified
Raw
History Blame Contribute Delete
7.99 kB
// SOVEREIGN 3.5
// Claude 3.5 Bedrock + Tavily + DuckDuckGo + Lean4 Gate + Prolog + vLLM
// Tokio async fire β€” SnapKitty Collective 2026 β€” Apache 2.0
mod inject { pub mod trust_deed; }
mod tools { pub mod tavily; pub mod ddg; }
mod gates { pub mod lean4; pub mod prolog; }
mod models { pub mod bedrock; pub mod vllm; }
use anyhow::Result;
use colored::Colorize;
use sha2::{Sha256, Digest};
use std::time::Instant;
use tokio::io::{AsyncBufReadExt, BufReader};
// ── WORM chain ──────────────────────────────────────────────
struct Worm { prev: String, count: u64 }
impl Worm {
fn new() -> Self { Self { prev: "GENESIS_SOVEREIGN_35".to_string(), count: 0 } }
fn seal(&mut self, event: &str) -> String {
let msg = format!("{}|{}|{}", self.prev, event, chrono::Utc::now().timestamp_millis());
let hash = hex::encode(Sha256::digest(msg.as_bytes()));
self.prev = hash.clone();
self.count += 1;
hash
}
}
// ── Agent turn ───────────────────────────────────────────────
async fn run_turn(
query: &str,
worm: &mut Worm,
http: &reqwest::Client,
bedrock: &aws_sdk_bedrockruntime::Client,
) -> Result<()> {
let t0 = Instant::now();
println!("\n{}", "═".repeat(60).dimmed());
println!("{} {}", "⬑ QUERY:".yellow().bold(), query);
let is_code = query.to_lowercase().contains("code")
|| query.to_lowercase().contains("write")
|| query.to_lowercase().contains("implement")
|| query.to_lowercase().contains("function")
|| query.to_lowercase().contains("build");
// ── Fire all tasks concurrently (Tokio) ─────────────────
let (tavily_res, ddg_res, lean_res) = tokio::join!(
tools::tavily::search(http, query),
tools::ddg::search(http, query),
gates::lean4::verify(query),
);
// ── Lean 4 gate report ────────────────────────────────────
let gate_report = gates::lean4::report(&lean_res);
println!("{}", gate_report.cyan().dimmed());
worm.seal(&format!("LEAN4|{}", matches!(lean_res, gates::lean4::GateVerdict::Pass(_))));
// ── Search context ────────────────────────────────────────
let mut search_ctx = String::new();
match tavily_res {
Ok(t) => {
let formatted = tools::tavily::format_results(&t);
print!("{}", "πŸ“‘ TAVILY: ".green());
println!("{}", t.answer.as_deref().unwrap_or("searching...").dimmed());
search_ctx.push_str(&formatted);
worm.seal("TAVILY:OK");
}
Err(e) => {
println!("{} {}", "TAVILY ERR:".red(), e);
worm.seal("TAVILY:ERR");
}
}
match ddg_res {
Ok(d) => {
if !d.contains("no results") {
print!("{}", "πŸ¦† DDG: ".blue());
println!("{}", d.lines().next().unwrap_or("").dimmed());
search_ctx.push_str(&d);
worm.seal("DDG:OK");
}
}
Err(_) => { worm.seal("DDG:ERR"); }
}
// ── Prolog constraint ─────────────────────────────────────
let facts: Vec<&str> = query.split_whitespace().collect();
let prolog_out = gates::prolog::constrain(query, &facts).await;
println!("{}", prolog_out.purple().dimmed());
worm.seal("PROLOG");
// ── Code path β†’ vLLM ────────────────────────────────────
if is_code {
println!("{}", "⚑ CODE PATH β†’ vLLM coder".cyan());
let code = models::vllm::complete_code(
http,
&format!("// Task: {}\n// Write clean, documented code:\n\n", query),
"Qwen/Qwen2.5-Coder-7B-Instruct",
).await?;
println!("{}\n{}", "vLLM OUTPUT:".cyan().bold(), code.white());
worm.seal("VLLM:CODE");
}
// ── Bedrock Claude 3.5 ────────────────────────────────────
let system = inject::trust_deed::build_system_prompt(None);
let user_msg = format!(
"QUERY: {}\n\nSEARCH CONTEXT:\n{}\n\nGATE: {}\n\nAnswer using Evidence or Silence protocol.",
query, search_ctx, gate_report
);
println!("\n{}", "🧠 CLAUDE 3.5 BEDROCK...".yellow());
match models::bedrock::invoke(bedrock, &system, &[("user", &user_msg)], 1024).await {
Ok(response) => {
println!("\n{}", "─ SOVEREIGN RESPONSE ─".yellow().bold());
println!("{}", response.white());
worm.seal(&format!("BEDROCK|{}", &response[..response.len().min(32)]));
}
Err(e) => {
println!("{} {:?}", "BEDROCK ERR:".red(), e);
worm.seal("BEDROCK:ERR");
}
}
let elapsed = t0.elapsed();
println!(
"\n{} Ξ© {} | seals: {} | {}ms",
"WORM:".dimmed(),
&worm.prev[..16].yellow(),
worm.count.to_string().dimmed(),
elapsed.as_millis().to_string().dimmed()
);
Ok(())
}
// ── Main ─────────────────────────────────────────────────────
#[tokio::main]
async fn main() -> Result<()> {
// Load .env
let _ = dotenvy::from_filename(
std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join(".env")
);
println!("{}", r#"
╔══════════════════════════════════════════════════════════╗
β•‘ SOVEREIGN 3.5 β•‘
β•‘ Claude 3.5 Bedrock Β· Tavily Β· DDG Β· Lean4 Β· Prolog β•‘
β•‘ vLLM Coder Β· Tokio Async Fire Β· WORM Sealed β•‘
β•‘ Apache 2.0 Β· SnapKitty Collective 2026 β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
"#.cyan());
// AWS Bedrock client (uses ~/.aws/credentials)
let aws_cfg = aws_config::defaults(aws_config::BehaviorVersion::latest())
.region(aws_config::Region::new("us-east-1"))
.load()
.await;
let bedrock = aws_sdk_bedrockruntime::Client::new(&aws_cfg);
let http = reqwest::Client::new();
let mut worm = Worm::new();
worm.seal("SOVEREIGN_35_BOOT");
println!("{} Ξ© {}", "WORM:".dimmed(), &worm.prev[..16].yellow());
// ── REPL ────────────────────────────────────────────────
println!("\n{}", "Type your query (Ctrl+C to exit):".dimmed());
let stdin = tokio::io::stdin();
let mut lines = BufReader::new(stdin).lines();
loop {
print!("{} ", "SOVEREIGN>".yellow().bold());
use std::io::Write;
std::io::stdout().flush()?;
match lines.next_line().await? {
None => break,
Some(line) => {
let q = line.trim().to_string();
if q.is_empty() { continue; }
if q == "exit" || q == "quit" { break; }
if let Err(e) = run_turn(&q, &mut worm, &http, &bedrock).await {
println!("{} {}", "ERROR:".red(), e);
}
}
}
}
println!("\n{} Ξ© {} | total seals: {}", "FINAL WORM:".yellow(), &worm.prev[..16], worm.count);
Ok(())
}