#![forbid(unsafe_code)]
pub mod compact;
pub mod summary;
pub mod tree;
pub mod view;
pub mod zoom;
pub use compact::{ModelSummarizer, PendingSummary, Section, SectionOrigin, Summarizer};
pub use view::{
LogContent, SkillText, Transcript, TranscriptSettings, TranscriptStats, TranscriptView,
UsageBreakdown, WorkerOutcome,
};
pub use zoom::{ZOOM_MAX_BYTES, Zoom};
use std::sync::{Arc, Mutex};
pub fn attach(
inner: Arc<dyn rhema_core::ModelProvider>,
settings: TranscriptSettings,
) -> (Arc<dyn rhema_core::ModelProvider>, Zoom) {
let (provider, zoom, _mirror) = attach_with_summarizer(inner, settings, None);
(provider, zoom)
}
pub fn attach_with_summarizer(
inner: Arc<dyn rhema_core::ModelProvider>,
settings: TranscriptSettings,
summarizer: Option<Arc<dyn Summarizer>>,
) -> (
Arc<dyn rhema_core::ModelProvider>,
Zoom,
Arc<Mutex<Transcript>>,
) {
let transcript = Arc::new(Mutex::new(Transcript::new(settings)));
let view = match summarizer {
Some(summarizer) => TranscriptView::with_summarizer(inner, transcript.clone(), summarizer),
None => TranscriptView::new(inner, transcript.clone()),
};
let zoom = Zoom::new(transcript.clone());
(Arc::new(view), zoom, transcript)
}