pub(crate) mod extractor;
pub(crate) mod extractor_prompt;
pub(crate) mod extractor_schema;
pub(crate) mod gate;
pub(crate) mod ingest;
pub(crate) mod profile_catalog;
pub(crate) mod resolver;
pub(crate) mod runner;
pub(crate) mod turn_record;
pub(crate) mod turn_table;
pub(crate) const EXTRACTION_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(15);
#[allow(unused_imports)]
pub(crate) use extractor::parse_extraction_response;
#[allow(unused_imports)]
pub(crate) use extractor_prompt::build_extraction_prompt;
#[allow(unused_imports)]
pub(crate) use extractor_schema::{
ExtractedProposal, ExtractionError, MAX_PROPOSALS_PER_EXTRACTION, ProposalOrigin,
};
#[allow(unused_imports)]
pub(crate) use gate::{GatingDecision, ProposalGating};
#[allow(unused_imports)]
pub(crate) use ingest::{
IngestionError, filter_anti_self_reinforcement, filter_anti_self_reinforcement_dto,
ingest_proposals,
};
#[allow(unused_imports)]
pub(crate) use resolver::{ResolutionError, ResolvedProposal, resolve_proposal, resolve_proposals};
#[allow(unused_imports)]
pub(crate) use runner::{ExtractionRunnerError, run_extraction};
#[allow(unused_imports)]
pub(crate) use turn_record::{
MAX_ANSWER_BYTES, MAX_PROMPT_BYTES, MAX_TURN_RECORD_BYTES, SuppliedClaimDto,
SuppliedContractDto, TurnRecord,
};
#[allow(unused_imports)]
pub(crate) use turn_table::{MAX_TURN_OBJECTS, TurnObjectEntry, TurnObjectId, TurnObjectTable};
use crate::agent::tools::ObservationLog;
use crate::contracts::{RecallBounds, RecallMode};
use saya_config::{MemoryMode, ResolvedMemory};
use std::sync::Arc;
pub(crate) struct LearningSetup {
pub(crate) permit_candidate_writes: bool,
pub(crate) observations: Option<Arc<ObservationLog>>,
}
impl LearningSetup {
pub(crate) fn from(mode: MemoryMode) -> Self {
match mode {
MemoryMode::Off => Self {
permit_candidate_writes: false,
observations: None,
},
MemoryMode::Assisted => Self {
permit_candidate_writes: true,
observations: Some(Arc::new(ObservationLog::new())),
},
_ => Self {
permit_candidate_writes: false,
observations: None,
},
}
}
#[cfg(test)]
pub(crate) fn observes(&self) -> bool {
self.observations.is_some()
}
}
pub(crate) fn recall_mode_for(mode: MemoryMode) -> Option<RecallMode> {
match mode {
MemoryMode::Off => None,
MemoryMode::Assisted => Some(RecallMode::IncludeCandidates),
_ => None,
}
}
pub(crate) fn bounds_from(memory: &ResolvedMemory) -> RecallBounds {
RecallBounds {
max_objects: memory.max_contracts as usize,
max_claims_per_object: memory.max_claims_per_contract as usize,
max_bytes: memory.max_context_bytes as usize,
}
}
#[cfg(test)]
#[path = "../learning_tests.rs"]
mod tests;