vv-agent 0.6.2

VectorVein agent runtime, SDK, CLI, tools, and workspace backends
Documentation
use serde_json::json;
use vv_agent::{
    assemble_context_fragments, ContextError, ContextFragment, ContextProvider, ContextRequest,
};

struct StaticProvider;

impl ContextProvider for StaticProvider {
    fn fragments(
        &self,
        _request: &ContextRequest<'_>,
    ) -> Result<Vec<ContextFragment>, ContextError> {
        Ok(vec![
            ContextFragment::new("volatile", "second")
                .stable(false)
                .priority(20)
                .source("test"),
            ContextFragment::new("stable", "first")
                .stable(true)
                .priority(10)
                .cache_hint("cache"),
        ])
    }
}

#[test]
fn context_fragments_are_ordered_budgeted_and_hashed() {
    let request = ContextRequest::for_test("assistant", "input").max_prompt_chars(20);
    let fragments = StaticProvider.fragments(&request).expect("fragments");
    let bundle = assemble_context_fragments(&request, fragments).expect("bundle");

    assert_eq!(bundle.prompt, "first\n\nsecond");
    assert_eq!(bundle.sections[0].id, "stable");
    assert!(!bundle.stable_hash.is_empty());
    assert_eq!(bundle.sources["volatile"], "test");
    assert_eq!(
        bundle.sections[0].metadata.get("cache_hint"),
        Some(&json!("cache"))
    );
}