sim-lib-agent 0.1.1

Agent runtime surfaces for SIM.
Documentation
mod db;
mod query;
mod vector;
mod web;

use super::super::model::{AgentComponent, RetrieverBackend};
use crate::util::expr_to_value;
use sim_kernel::{Cx, Error, Result};
use sim_lib_server::{FrameKind, ServerFrame, eval_request_from_frame};

pub(in crate::components) fn answer_retriever(
    cx: &mut Cx,
    component: &AgentComponent,
    backend: &RetrieverBackend,
    frame: ServerFrame,
) -> Result<ServerFrame> {
    if frame.kind != FrameKind::Request {
        return Err(Error::Eval(format!(
            "{} only answers request frames",
            component.symbol
        )));
    }
    let consistency = frame.envelope.consistency;
    let request = eval_request_from_frame(cx, &frame)?;
    let result = match backend {
        RetrieverBackend::File { root } => db::file_result_expr(cx, root.as_ref(), request.expr)?,
        RetrieverBackend::Vector { store, corpus } => {
            vector::vector_result_expr(cx, store, corpus, request.expr)?
        }
        RetrieverBackend::Web { endpoint } => web::web_result_expr(cx, endpoint, request.expr)?,
        RetrieverBackend::Db { path } => db::db_result_expr(cx, path, request.expr)?,
    };
    let value = expr_to_value(cx, &result)?;
    crate::reply::reply_frame(cx, &frame, value, consistency)
}