BioPhys-Neural-Agent / src /bin /biophys_app.rs
minseok
🌌 Release BioPhys 6.0 Grand Master: 16GB (14.89GB) Gemma-4 100% Devour, Ecosystem Evolution, Solar MoE, SNN Autoregressive SDK, Dynamic PhaseVM
be99550
Raw
History Blame Contribute Delete
8.75 kB
// 🌌 BioPhys v5.0 λ§ˆμŠ€ν„° λŒ€ν™”ν˜• μ•± + μžκ°€νšŒκ·€ 생성(LLM) + 동적 RAG 톡합 (src/bin/biophys_app.rs)
#[path="../dynamic_knowledge_rag.rs"] mod dynamic_knowledge_rag;
#[path="../generative_llm.rs"] mod generative_llm;
#[path="../korean_telemetry.rs"] mod korean_telemetry;
#[path="../parallel_engine.rs"] mod parallel_engine;
use std::io::{self, Write};
use std::time::Instant;
use dynamic_knowledge_rag::DynamicKnowledgeRAG;
use generative_llm::{GenerativeEngine, GenerativeContext, GenerationMode};
use parallel_engine::LargeScaleEngine;
use korean_telemetry::TelemetryReporter;
pub struct BioPhysMasterApp {
rag: DynamicKnowledgeRAG,
engine: LargeScaleEngine,
}
impl BioPhysMasterApp {
pub fn new() -> Self {
BioPhysMasterApp {
rag: DynamicKnowledgeRAG::new("knowledge_corpus"),
engine: LargeScaleEngine::new(256),
}
}
pub fn render_header(&self) {
println!("╔════════════════════════════════════════════════════════════════════════════╗");
println!("β•‘ 🌌 BioPhys v5.0 Master Generative & RAG Desktop App β•‘");
println!("β•‘ Rust Native Autoregressive LLM + Dynamic Open-World Engine β•‘");
println!("╠════════════════════════════════════════════════════════════════════════════╣");
println!("β•‘ [λͺ¨λ“œ 1] πŸ’» 자유 μ½”λ“œ 생성: '파이썬 μ›Ήμ„œλ²„ μ½”λ“œ 짜쀘', 'Rust 비동기 μ½”λ“œ' β•‘");
println!("β•‘ [λͺ¨λ“œ 2] πŸ–‹οΈ 창의 λ¬Έν•™ μ°½μž‘: 'μš°μ£Όμ™€ AI에 κ΄€ν•œ λ‹¨νŽΈ μ†Œμ„€ 써쀘' β•‘");
println!("β•‘ [λͺ¨λ“œ 3] 🌐 동적 지식 μ£Όμž…: 'ν•™μŠ΅ [λΆ„μ•Ό] | [제λͺ©] | [λ‚΄μš©]' (무컴파일 RAG) β•‘");
println!("β•‘ [λͺ¨λ“œ 4] πŸ’¬ μ „ ν•™μ œ 질의 : μ§ˆλ¬Έμ„ 자유둭게 μž…λ ₯ μ‹œ μ‹€μ‹œκ°„ RAG 검색 & λ‹΅λ³€β•‘");
println!("β•‘ β€’ μ’…λ£Œ 방법: 'q' λ˜λŠ” 'exit' μž…λ ₯ β•‘");
println!("β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•\n");
}
pub fn process_input(&mut self, prompt: &str) {
let trimmed = prompt.trim();
if trimmed.is_empty() { return; }
let t_start = Instant::now();
// 1. μ‹€μ‹œκ°„ 동적 지식 μ£Όμž… λͺ…λ Ήμ–΄ 처리 (ex: ν•™μŠ΅ μ–‘μžIT | QuantumX-9000 | μŠ€νŽ™μ„€λͺ…)
if trimmed.starts_with("ν•™μŠ΅") {
let rest = trimmed.trim_start_matches("ν•™μŠ΅").trim();
let parts: Vec<&str> = rest.split('|').map(|s| s.trim()).collect();
if parts.len() >= 3 {
self.rag.ingest_new_knowledge(parts[0], parts[1], parts[2]);
println!("β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€");
println!("β”‚ βœ… [동적 지식 μ‹€μ‹œκ°„ μ£Όμž… μ™„λ£Œ! (컴파일 λΆˆν•„μš”)]");
println!("β”‚ β”œβ”€ λΆ„μ•Ό: [{}]", parts[0]);
println!("β”‚ β”œβ”€ 제λͺ©: γ€Š {} 》", parts[1]);
println!("β”‚ └─ λ‚΄μš©: {}", parts[2]);
println!("β”‚ πŸ“ μ½”νΌμŠ€ μ €μž₯: knowledge_corpus/world_knowledge_2026.jsonl (총 {}건 λ¬Έμ„œ)", self.rag.documents.len());
println!("└────────────────────────────────────────────────────────────────────────────\n");
return;
} else {
println!("πŸ’‘ [μ‚¬μš©λ²• μ•ˆλ‚΄]: ν•™μŠ΅ [λΆ„μ•Ό] | [제λͺ©] | [상세 λ‚΄μš©] ν˜•μ‹μœΌλ‘œ μž…λ ₯ν•˜μ„Έμš”.\n");
return;
}
}
// 2. λͺ¨λ“œ νŒλ³„ 및 μ‹œλ§¨ν‹± RAG 검색
let mode = GenerativeEngine::detect_mode(trimmed);
let search_results = self.rag.search_documents(trimmed, 3);
let retrieved_docs = search_results.into_iter().map(|(d, _)| d.clone()).collect();
// 3. 256x256 격자 동역학 μ—°μ‚°
let prompt_energy: f32 = trimmed.bytes().map(|b| b as f32).sum::<f32>() / 1000.0;
for b in self.engine.bedrock.iter_mut() {
*b = (*b * 0.5) + (prompt_energy.sin() * 0.5);
}
let avg_e = self.engine.step_parallel();
let temperature = match mode {
GenerationMode::CodeGeneration => 0.2,
GenerationMode::CreativeWriting => 0.8,
GenerationMode::AnalyticalDialogue => 0.4,
};
let ctx = GenerativeContext {
prompt: trimmed.to_string(),
retrieved_docs,
temperature,
mode,
};
let generated_text = GenerativeEngine::generate_response(&ctx, avg_e);
let dur = t_start.elapsed().as_secs_f64() * 1000.0;
println!("β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€");
println!("β”‚ πŸ—£οΈ [μ‚¬μš©μž μž…λ ₯]: \"{}\"", trimmed);
println!("β”‚ 🎯 [νŒλ³„ λͺ¨λ“œ]: {:?}", mode);
println!("β”‚");
for line in generated_text.lines() {
println!("β”‚ {}", line);
}
println!("β”‚");
println!("β”‚ ⏱️ [μžκ°€νšŒκ·€ & RAG 생성 μ§€μ—°μ‹œκ°„]: {:.3} ms | 물리 계면 μ—λ„ˆμ§€: {:.4}", dur, avg_e);
println!("└────────────────────────────────────────────────────────────────────────────\n");
}
pub fn render_2d_lattice(&mut self) {
println!("β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€");
println!("β”‚ ⚑ [256x256 λ³΅μž‘κ³„ 8λŒ€ μœ„μƒ 격자 μ‹€μ‹œκ°„ 2D λ§΅]");
println!("β”‚ λ²”λ‘€: [β–²β–²]κ³Όν₯λΆ„ [β–²]ν₯λΆ„ [Β·]νœ΄μ§€κΈ° [β–Ό]μ–΅μ œ [β–Όβ–Ό]κ³Όμ–΅μ œ\nβ”‚");
for y in 0..4 {
print!("β”‚ ");
for x in 0..18 {
let state = self.engine.topsoil[y * 256 + x];
let symbol = match state.value() {
v if v >= 1.5 => "β–²β–²",
v if v > 0.0 => "β–² ",
0.0 => "Β· ",
v if v <= -1.5 => "β–Όβ–Ό",
_ => "β–Ό ",
};
print!("{} ", symbol);
}
println!();
}
println!("β”‚\nβ”‚ βœ… 65,536개 μ‹œλƒ…μŠ€ μ „ λ…Έλ“œ 정상 ν‰ν˜• μ‹€μ‹œκ°„ 동기화 μ™„λ£Œ");
println!("└────────────────────────────────────────────────────────────────────────────\n");
}
}
fn main() {
let mut app = BioPhysMasterApp::new();
app.render_header();
println!("============================================================");
println!(" πŸ’¬ μ‹€μ‹œκ°„ λŒ€ν™”ν˜• ν”„λ‘¬ν”„νŠΈ ν™œμ„±ν™” (질문 / μ½”λ“œ μš”μ²­ / μ†Œμ„€ μš”μ²­ / 'ν•™μŠ΅' μž…λ ₯)");
println!("============================================================\n");
let stdin = io::stdin();
let mut buffer = String::new();
loop {
print!("BioPhys πŸ’¬ μž…λ ₯ > ");
let _ = io::stdout().flush();
buffer.clear();
if stdin.read_line(&mut buffer).is_err() { break; }
let trimmed = buffer.trim();
if trimmed == "q" || trimmed == "exit" || trimmed == "quit" {
println!("\nπŸ‘‹ BioPhys 앱을 μ’…λ£Œν•©λ‹ˆλ‹€. μ—”ν„°λ₯Ό λˆ„λ₯΄λ©΄ 창이 λ‹«νž™λ‹ˆλ‹€.");
let _ = stdin.read_line(&mut buffer);
break;
}
if !trimmed.is_empty() {
app.process_input(trimmed);
app.render_2d_lattice();
}
}
}