sim_lib_openai_server/plan/
address.rs1use sim_kernel::{Error, Result, Symbol};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
6pub struct BackendDescriptor {
7 pub address: String,
9 pub head: String,
11 pub runner: Symbol,
13 pub fixture: bool,
15}
16
17impl BackendDescriptor {
18 pub fn is_runner_backed(&self) -> bool {
20 !self.fixture && self.head != "gateway"
21 }
22
23 pub fn is_gateway(&self) -> bool {
25 self.head == "gateway"
26 }
27}
28
29pub fn resolve_atom_address(address: &str) -> Result<BackendDescriptor> {
32 let Some((head, _)) = address.split_once('/') else {
33 return Err(model_not_found(address));
34 };
35 if !KNOWN_PROVIDER_PREFIXES.contains(&head) {
36 return Err(model_not_found(address));
37 }
38 Ok(BackendDescriptor {
39 address: address.to_owned(),
40 head: head.to_owned(),
41 runner: Symbol::new(address.to_owned()),
42 fixture: head == "fixture",
43 })
44}
45
46fn model_not_found(address: &str) -> Error {
47 Error::Eval(format!("model_not_found: {address}"))
48}
49
50const KNOWN_PROVIDER_PREFIXES: &[&str] = &[
51 "openai",
52 "anthropic",
53 "ollama",
54 "lm-studio",
55 "lemonade",
56 "process",
57 "runner",
58 "agent",
59 "skill",
60 "sim",
61 "fixture",
62 "gateway",
63];
64
65pub fn provider_prefixes() -> &'static [&'static str] {
67 KNOWN_PROVIDER_PREFIXES
68}