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(
60        long,
61        env = "LOCUS_GATEWAY_SQLITE_PATH",
62        default_value = "data/locus-gateway.sqlite"
63    )]
64    pub(crate) sqlite_path: String,
65
66    #[arg(
67        long,
68        env = "LOCUS_GATEWAY_EMBEDDINGS_ENABLED",
69        default_value_t = false
70    )]
71    pub(crate) embeddings_enabled: bool,
72
73    #[arg(
74        long,
75        env = "LOCUS_GATEWAY_EMBEDDINGS_PROVIDER",
76        value_enum,
77        default_value = "ollama"
78    )]
79    pub(crate) embeddings_provider: EmbeddingsProviderKind,
80
81    #[arg(
82        long,
83        env = "LOCUS_GATEWAY_EMBEDDINGS_ENDPOINT",
84        default_value = "http://127.0.0.1:11434/api/embeddings"
85    )]
86    pub(crate) embeddings_endpoint: String,
87
88    #[arg(
89        long,
90        env = "LOCUS_GATEWAY_EMBEDDINGS_MODEL",
91        default_value = "sttp-encoder"
92    )]
93    pub(crate) embeddings_model: String,
94
95    #[arg(
96        long,
97        env = "LOCUS_GATEWAY_EMBEDDINGS_REPO",
98        default_value = "sentence-transformers/all-MiniLM-L6-v2"
99    )]
100    pub(crate) embeddings_repo: String,
101
102    #[arg(
103        long,
104        env = "LOCUS_GATEWAY_AVEC_SCORING_ENABLED",
105        default_value_t = false
106    )]
107    pub(crate) avec_scoring_enabled: bool,
108
109    #[arg(
110        long,
111        env = "LOCUS_GATEWAY_AVEC_SCORING_ENDPOINT",
112        default_value = "http://127.0.0.1:11434/api/chat"
113    )]
114    pub(crate) avec_scoring_endpoint: String,
115
116    #[arg(
117        long,
118        env = "LOCUS_GATEWAY_AVEC_SCORING_MODEL",
119        default_value = "qwen2.5:0.5b"
120    )]
121    pub(crate) avec_scoring_model: String,
122}
123
124#[derive(Debug, Clone, ValueEnum)]
125pub(crate) enum GatewayBackend {
126    InMemory,
127    Sqlite,
128    Surreal,
129}
130
131#[derive(Debug, Clone, ValueEnum)]
132pub(crate) enum EmbeddingsProviderKind {
133    Ollama,
134    #[cfg(feature = "local-embedding")]
135    #[value(alias = "candle")]
136    Local,
137}