Skip to main content

locus_gateway/
gateway_args.rs

1use clap::{ArgAction, Parser, ValueEnum};
2
3#[derive(Parser, Debug)]
4#[command(author, version, about)]
5pub(crate) struct GatewayArgs {
6    #[arg(long, env = "LOCUS_GATEWAY_HTTP_PORT", default_value_t = 8080)]
7    pub(crate) http_port: u16,
8
9    #[arg(long, env = "LOCUS_GATEWAY_GRPC_PORT", default_value_t = 8081)]
10    pub(crate) grpc_port: u16,
11
12    #[arg(
13        long,
14        env = "LOCUS_GATEWAY_BACKEND",
15        value_enum,
16        default_value = "in-memory"
17    )]
18    pub(crate) backend: GatewayBackend,
19
20    #[arg(
21        long,
22        env = "LOCUS_GATEWAY_ROOT_DIR_NAME",
23        default_value = ".locus-gateway"
24    )]
25    pub(crate) root_dir_name: String,
26
27    #[arg(long, env = "LOCUS_GATEWAY_REMOTE", default_value_t = false)]
28    pub(crate) remote: bool,
29
30    #[arg(
31        long,
32        env = "LOCUS_GATEWAY_CORS_ENABLED",
33        default_value_t = true,
34        action = ArgAction::Set
35    )]
36    pub(crate) cors_enabled: bool,
37
38    #[arg(long, env = "LOCUS_GATEWAY_CORS_ALLOWED_ORIGINS", default_value = "*")]
39    pub(crate) cors_allowed_origins: String,
40
41    #[arg(long, env = "LOCUS_SURREAL_EMBEDDED_ENDPOINT")]
42    pub(crate) surreal_embedded_endpoint: Option<String>,
43
44    #[arg(long, env = "LOCUS_SURREAL_REMOTE_ENDPOINT")]
45    pub(crate) surreal_remote_endpoint: Option<String>,
46
47    #[arg(long, env = "LOCUS_SURREAL_NAMESPACE", default_value = "entasis")]
48    pub(crate) surreal_namespace: String,
49
50    #[arg(long, env = "LOCUS_SURREAL_DATABASE", default_value = "locus_gateway")]
51    pub(crate) surreal_database: String,
52
53    #[arg(long, env = "LOCUS_SURREAL_USER", default_value = "root")]
54    pub(crate) surreal_user: String,
55
56    #[arg(long, env = "LOCUS_SURREAL_PASSWORD", default_value = "root")]
57    pub(crate) surreal_password: String,
58
59    #[arg(long, env = "LOCUS_GATEWAY_EMBEDDINGS_ENABLED", default_value_t = false)]
60    pub(crate) embeddings_enabled: bool,
61
62    #[arg(
63        long,
64        env = "LOCUS_GATEWAY_EMBEDDINGS_PROVIDER",
65        value_enum,
66        default_value = "ollama"
67    )]
68    pub(crate) embeddings_provider: EmbeddingsProviderKind,
69
70    #[arg(
71        long,
72        env = "LOCUS_GATEWAY_EMBEDDINGS_ENDPOINT",
73        default_value = "http://127.0.0.1:11434/api/embeddings"
74    )]
75    pub(crate) embeddings_endpoint: String,
76
77    #[arg(
78        long,
79        env = "LOCUS_GATEWAY_EMBEDDINGS_MODEL",
80        default_value = "sttp-encoder"
81    )]
82    pub(crate) embeddings_model: String,
83
84    #[arg(
85        long,
86        env = "LOCUS_GATEWAY_EMBEDDINGS_REPO",
87        default_value = "sentence-transformers/all-MiniLM-L6-v2"
88    )]
89    pub(crate) embeddings_repo: String,
90
91    #[arg(
92        long,
93        env = "LOCUS_GATEWAY_AVEC_SCORING_ENABLED",
94        default_value_t = false
95    )]
96    pub(crate) avec_scoring_enabled: bool,
97
98    #[arg(
99        long,
100        env = "LOCUS_GATEWAY_AVEC_SCORING_ENDPOINT",
101        default_value = "http://127.0.0.1:11434/api/chat"
102    )]
103    pub(crate) avec_scoring_endpoint: String,
104
105    #[arg(
106        long,
107        env = "LOCUS_GATEWAY_AVEC_SCORING_MODEL",
108        default_value = "qwen2.5:0.5b"
109    )]
110    pub(crate) avec_scoring_model: String,
111}
112
113#[derive(Debug, Clone, ValueEnum)]
114pub(crate) enum GatewayBackend {
115    InMemory,
116    Surreal,
117}
118
119#[derive(Debug, Clone, ValueEnum)]
120pub(crate) enum EmbeddingsProviderKind {
121    Ollama,
122    #[cfg(feature = "local-embedding")]
123    #[value(alias = "candle")]
124    Local,
125}