oxibrain_cli/cmd/
extract.rs1use crate::cmd::llm;
8use oxibrain::{Brain, BrainConfig};
9use oxibrain_ports::SystemClock;
10use std::path::Path;
11use std::sync::Arc;
12
13pub async fn run(dir: &Path, episode_id: &str, space: &str) -> anyhow::Result<()> {
14 let provider = llm::from_env().await?;
15 let clock = Arc::new(SystemClock);
16 let brain = match provider.tokenizer.clone() {
17 Some(tok) => {
18 Brain::with_llm_and_tokenizer(BrainConfig::at(dir), clock, provider.port.clone(), tok)
19 .await?
20 }
21 None => Brain::with_llm(BrainConfig::at(dir), clock, provider.port.clone()).await?,
22 };
23 let space_id = brain.ensure_space(space).await?;
24 let config = llm::config(
25 provider.model_id.clone(),
26 provider.mechanism,
27 provider.model_digest.clone(),
28 provider.profile_id(),
29 );
30
31 let summary = brain.extract_one(&space_id, episode_id, &config).await?;
32 println!(
33 "episode {episode_id}: {} extracted, {} quarantined (repair attempts consumed)",
34 summary.extracted, summary.quarantined
35 );
36 Ok(())
37}