sim_lib_agent/
runner_projection.rs1use std::sync::Arc;
2
3use sim_kernel::{CapabilityName, Cx, Expr, Result, Symbol, Value};
4use sim_lib_server::ServerAddress;
5
6use crate::{
7 ComponentKind, ModelRunner, components::AgentComponent, components::ComponentBackend,
8 components::RunnerBackend, components::component_value, installed_codecs,
9};
10
11pub struct ExternalRunnerSpec {
13 pub symbol: Symbol,
15 pub model: String,
17 pub capabilities: Vec<CapabilityName>,
19 pub spec: Vec<(Symbol, Expr)>,
21 pub runner: Arc<dyn ModelRunner>,
23}
24
25pub fn external_runner_value(cx: &mut Cx, spec: ExternalRunnerSpec) -> Result<Value> {
27 let mut component_spec = vec![
28 (
29 Symbol::new("backend"),
30 Expr::Symbol(Symbol::new("external")),
31 ),
32 (Symbol::new("model"), Expr::String(spec.model)),
33 ];
34 component_spec.extend(spec.spec);
35 component_value(
36 cx,
37 AgentComponent {
38 symbol: spec.symbol,
39 kind: ComponentKind::Runner,
40 capabilities: spec.capabilities,
41 address: ServerAddress::Local,
42 codecs: installed_codecs(cx),
43 spec: component_spec,
44 backend: ComponentBackend::Runner(RunnerBackend::External {
45 runner: spec.runner,
46 }),
47 },
48 )
49}