use std::borrow::Cow;
use std::sync::Arc;
use zeph_config::{DocumentConfig, GraphConfig, PersonaConfig, TrajectoryConfig, TreeConfig};
use zeph_memory::semantic::SemanticMemory;
use zeph_memory::{ConversationId, TokenCounter};
use crate::manager::ContextManager;
pub struct ContextAssemblyInput<'a> {
pub memory: &'a ContextMemoryView,
pub context_manager: &'a ContextManager,
pub token_counter: &'a TokenCounter,
pub skills_prompt: &'a str,
pub index: Option<&'a dyn IndexAccess>,
pub correction_config: Option<CorrectionConfig>,
pub sidequest_turn_counter: u64,
pub messages: &'a [zeph_llm::provider::Message],
pub query: &'a str,
pub scrub: fn(&str) -> Cow<'_, str>,
}
#[derive(Debug, Clone, Copy)]
pub struct CorrectionConfig {
pub correction_detection: bool,
pub correction_recall_limit: u32,
pub correction_min_similarity: f32,
}
pub struct ContextMemoryView {
pub memory: Option<Arc<SemanticMemory>>,
pub conversation_id: Option<ConversationId>,
pub recall_limit: usize,
pub cross_session_score_threshold: f32,
pub context_strategy: zeph_config::ContextStrategy,
pub crossover_turn_threshold: u32,
pub cached_session_digest: Option<(String, usize)>,
pub graph_config: GraphConfig,
pub document_config: DocumentConfig,
pub persona_config: PersonaConfig,
pub trajectory_config: TrajectoryConfig,
pub tree_config: TreeConfig,
}
pub trait IndexAccess: Send + Sync {
fn fetch_code_rag<'a>(
&'a self,
query: &'a str,
budget_tokens: usize,
) -> std::pin::Pin<
Box<
dyn std::future::Future<Output = Result<Option<String>, crate::error::ContextError>>
+ Send
+ 'a,
>,
>;
}