use super::{BlockKind, Transcript};
use saya_agent::AgentEvent;
pub(crate) fn push_knowledge_supplied(
transcript: &mut Transcript,
outcome: saya_agent::KnowledgeOutcome,
contracts: &[saya_agent::SuppliedContractDto],
dropped_by_bounds: usize,
) {
let text = crate::render::knowledge_supplied_text(outcome, contracts, dropped_by_bounds);
if !text.is_empty() {
transcript.push(BlockKind::System, text.trim_end_matches('\n'));
}
}
pub(crate) fn push_knowledge_overridden(
transcript: &mut Transcript,
findings: &[saya_agent::OverrideFindingDto],
) {
let text = crate::render::knowledge_overridden_text(findings);
if !text.is_empty() {
transcript.push(BlockKind::System, text.trim_end_matches('\n'));
}
}
pub(crate) fn push_learning_skipped(
transcript: &mut Transcript,
reason: saya_agent::LearningSkipReason,
) {
let text = crate::render::learning_skipped_text(reason);
if !text.is_empty() {
transcript.push(BlockKind::System, text.trim_end_matches('\n'));
}
}
pub(crate) fn push_learning_disabled(transcript: &mut Transcript, model: &str, misses: u32) {
let text = crate::render::learning_disabled_text(model, misses);
if !text.is_empty() {
transcript.push(BlockKind::System, text.trim_end_matches('\n'));
}
}
pub(crate) fn push_knowledge_proposed(
transcript: &mut Transcript,
claim: &saya_agent::ProposedClaimDto,
) {
let text = crate::render::knowledge_learned_text(claim);
if !text.is_empty() {
transcript.push(BlockKind::System, text.trim_end_matches('\n'));
}
}
#[allow(dead_code)]
pub(crate) fn is_knowledge_event(event: &AgentEvent) -> bool {
matches!(
event,
AgentEvent::KnowledgeSupplied { .. }
| AgentEvent::KnowledgeOverridden { .. }
| AgentEvent::KnowledgeLearningSkipped { .. }
| AgentEvent::KnowledgeLearningDisabled { .. }
| AgentEvent::KnowledgeProposed { .. }
)
}
pub(crate) fn apply_knowledge_event(transcript: &mut Transcript, event: AgentEvent) -> bool {
match event {
AgentEvent::KnowledgeSupplied {
outcome,
contracts,
dropped_by_bounds,
} => {
push_knowledge_supplied(transcript, outcome, &contracts, dropped_by_bounds);
true
}
AgentEvent::KnowledgeOverridden { findings } => {
push_knowledge_overridden(transcript, &findings);
true
}
AgentEvent::KnowledgeLearningSkipped { reason } => {
push_learning_skipped(transcript, reason);
true
}
AgentEvent::KnowledgeLearningDisabled { model, misses } => {
push_learning_disabled(transcript, &model, misses);
true
}
AgentEvent::KnowledgeProposed { claim } => {
push_knowledge_proposed(transcript, &claim);
true
}
_ => false,
}
}