minseok
π Release BioPhys 6.0 Grand Master: 16GB (14.89GB) Gemma-4 100% Devour, Ecosystem Evolution, Solar MoE, SNN Autoregressive SDK, Dynamic PhaseVM
be99550 | // π BioPhys v5.0 λ§μ€ν° λνν μ± + μκ°νκ· μμ±(LLM) + λμ RAG ν΅ν© (src/bin/biophys_app.rs) | |
| mod dynamic_knowledge_rag; | |
| mod generative_llm; | |
| mod korean_telemetry; | |
| 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(); | |
| } | |
| } | |
| } | |