Skip to main content

mesh_llm_protocol/proto/
node.rs

1// This file is @generated by prost-build.
2/// Stream 0x01 — Gossip
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct GossipFrame {
5    #[prost(uint32, tag = "1")]
6    pub r#gen: u32,
7    #[prost(message, repeated, tag = "2")]
8    pub peers: ::prost::alloc::vec::Vec<PeerAnnouncement>,
9    /// must be exactly 32 bytes; must match QUIC peer identity
10    #[prost(bytes = "vec", tag = "3")]
11    pub sender_id: ::prost::alloc::vec::Vec<u8>,
12}
13#[derive(Clone, PartialEq, ::prost::Message)]
14pub struct PeerAnnouncement {
15    /// exactly 32 bytes
16    #[prost(bytes = "vec", tag = "1")]
17    pub endpoint_id: ::prost::alloc::vec::Vec<u8>,
18    #[prost(enumeration = "NodeRole", tag = "2")]
19    pub role: i32,
20    #[prost(uint32, optional, tag = "3")]
21    pub http_port: ::core::option::Option<u32>,
22    #[prost(string, optional, tag = "4")]
23    pub version: ::core::option::Option<::prost::alloc::string::String>,
24    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].name
25    #[prost(string, optional, tag = "5")]
26    pub gpu_name: ::core::option::Option<::prost::alloc::string::String>,
27    /// Deprecated in v0.60.0: prefer hardware.hostname
28    #[prost(string, optional, tag = "6")]
29    pub hostname: ::core::option::Option<::prost::alloc::string::String>,
30    /// Deprecated in v0.60.0: prefer hardware.is_soc; true for system-on-chip / unified-memory hosts such as Apple Silicon and Jetson
31    #[prost(bool, optional, tag = "7")]
32    pub is_soc: ::core::option::Option<bool>,
33    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].vram_bytes
34    #[prost(string, optional, tag = "8")]
35    pub gpu_vram: ::core::option::Option<::prost::alloc::string::String>,
36    /// Deprecated in v0.55.0 for protobuf gossip; compatibility surface only
37    #[prost(string, repeated, tag = "9")]
38    pub available_models: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
39    /// Deprecated in v0.55.0: prefer served_model_identities and served_model_runtime
40    #[prost(string, repeated, tag = "10")]
41    pub serving_models: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
42    #[prost(string, repeated, tag = "11")]
43    pub requested_models: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
44    #[prost(message, repeated, tag = "12")]
45    pub available_model_metadata: ::prost::alloc::vec::Vec<CompactModelMetadata>,
46    #[prost(message, optional, tag = "13")]
47    pub experts_summary: ::core::option::Option<ExpertsSummary>,
48    #[prost(uint32, optional, tag = "14")]
49    pub rtt_ms: ::core::option::Option<u32>,
50    /// GGUF model names (mesh catalog contribution; was JSON `models`)
51    #[prost(string, repeated, tag = "15")]
52    pub catalog_models: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
53    /// GPU VRAM in bytes
54    #[prost(uint64, tag = "16")]
55    pub vram_bytes: u64,
56    /// how to obtain this node's model
57    #[prost(string, optional, tag = "17")]
58    pub model_source: ::core::option::Option<::prost::alloc::string::String>,
59    /// primary serving model (backward compat; was JSON `serving`)
60    #[prost(string, optional, tag = "18")]
61    pub primary_serving: ::core::option::Option<::prost::alloc::string::String>,
62    /// stable mesh identity (self entry only)
63    #[prost(string, optional, tag = "19")]
64    pub mesh_id: ::core::option::Option<::prost::alloc::string::String>,
65    /// demand map entries (self entry only)
66    #[prost(message, repeated, tag = "20")]
67    pub demand: ::prost::alloc::vec::Vec<ModelDemandEntry>,
68    /// file sizes (bytes) per GGUF model name
69    #[prost(map = "string, uint64", tag = "21")]
70    pub available_model_sizes: ::std::collections::HashMap<::prost::alloc::string::String, u64>,
71    /// JSON-serialized EndpointAddr (includes network addresses for peer discovery)
72    #[prost(bytes = "vec", tag = "22")]
73    pub serialized_addr: ::prost::alloc::vec::Vec<u8>,
74    /// actually routable / healthy
75    #[prost(string, repeated, tag = "23")]
76    pub hosted_models: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
77    /// false/absent when relayed from legacy JSON peers
78    #[prost(bool, optional, tag = "24")]
79    pub hosted_models_known: ::core::option::Option<bool>,
80    #[prost(message, repeated, tag = "25")]
81    pub served_model_descriptors: ::prost::alloc::vec::Vec<ServedModelDescriptor>,
82    #[prost(message, repeated, tag = "26")]
83    pub served_model_identities: ::prost::alloc::vec::Vec<ServedModelIdentity>,
84    #[prost(message, repeated, tag = "27")]
85    pub served_model_runtime: ::prost::alloc::vec::Vec<ModelRuntimeDescriptor>,
86    #[prost(message, optional, tag = "28")]
87    pub owner_attestation: ::core::option::Option<SignedNodeOwnership>,
88    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].mem_bandwidth_gbps
89    #[prost(string, optional, tag = "29")]
90    pub gpu_mem_bandwidth_gbps: ::core::option::Option<::prost::alloc::string::String>,
91    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].compute_tflops_fp32
92    #[prost(string, optional, tag = "30")]
93    pub gpu_compute_tflops_fp32: ::core::option::Option<::prost::alloc::string::String>,
94    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].compute_tflops_fp16
95    #[prost(string, optional, tag = "31")]
96    pub gpu_compute_tflops_fp16: ::core::option::Option<::prost::alloc::string::String>,
97    /// Deprecated in v0.60.0: prefer hardware.gpus\[\].reserved_bytes
98    #[prost(string, optional, tag = "32")]
99    pub gpu_reserved_bytes: ::core::option::Option<::prost::alloc::string::String>,
100    /// Introduced in v0.60.0; preferred structured hardware inventory
101    #[prost(message, optional, tag = "33")]
102    pub hardware: ::core::option::Option<HardwareInfo>,
103    #[prost(uint64, optional, tag = "34")]
104    pub first_joined_mesh_ts: ::core::option::Option<u64>,
105    /// Advisory canonical refs this node wants the mesh to consider
106    #[prost(string, repeated, tag = "35")]
107    pub explicit_model_interests: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
108    /// Additive feature discovery for admitted subsystem protocols
109    #[prost(message, repeated, tag = "37")]
110    pub subprotocols: ::prost::alloc::vec::Vec<MeshSubprotocol>,
111    #[prost(uint32, optional, tag = "40")]
112    pub latency_ms: ::core::option::Option<u32>,
113    #[prost(enumeration = "LatencySource", tag = "41")]
114    pub latency_source: i32,
115    #[prost(uint32, optional, tag = "42")]
116    pub latency_age_ms: ::core::option::Option<u32>,
117    #[prost(bytes = "vec", optional, tag = "43")]
118    pub latency_observer_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
119    #[prost(message, repeated, tag = "44")]
120    pub advertised_model_throughput: ::prost::alloc::vec::Vec<AdvertisedModelThroughput>,
121}
122#[derive(Clone, PartialEq, ::prost::Message)]
123pub struct AdvertisedModelThroughput {
124    #[prost(string, tag = "1")]
125    pub model_name: ::prost::alloc::string::String,
126    #[prost(uint64, tag = "2")]
127    pub avg_tokens_per_second_milli: u64,
128    #[prost(uint64, tag = "3")]
129    pub throughput_samples: u64,
130}
131#[derive(Clone, PartialEq, ::prost::Message)]
132pub struct MeshSubprotocol {
133    /// e.g. "skippy-stage"
134    #[prost(string, tag = "1")]
135    pub name: ::prost::alloc::string::String,
136    /// subprotocol major version
137    #[prost(uint32, tag = "2")]
138    pub major: u32,
139    /// e.g. "artifact-transfer"
140    #[prost(string, repeated, tag = "3")]
141    pub features: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
142}
143#[derive(Clone, PartialEq, ::prost::Message)]
144pub struct MeshSubprotocolOpen {
145    #[prost(uint32, tag = "1")]
146    pub r#gen: u32,
147    /// e.g. "skippy-stage"
148    #[prost(string, tag = "2")]
149    pub name: ::prost::alloc::string::String,
150    /// subprotocol major version
151    #[prost(uint32, tag = "3")]
152    pub major: u32,
153}
154#[derive(Clone, PartialEq, ::prost::Message)]
155pub struct HardwareInfo {
156    /// True for system-on-chip / unified-memory hosts such as Apple Silicon and Jetson
157    #[prost(bool, optional, tag = "1")]
158    pub is_soc: ::core::option::Option<bool>,
159    #[prost(string, optional, tag = "2")]
160    pub hostname: ::core::option::Option<::prost::alloc::string::String>,
161    #[prost(message, repeated, tag = "3")]
162    pub gpus: ::prost::alloc::vec::Vec<GpuInfo>,
163}
164#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
165pub struct GpuInfo {
166    #[prost(string, optional, tag = "1")]
167    pub name: ::core::option::Option<::prost::alloc::string::String>,
168    #[prost(string, optional, tag = "2")]
169    pub vram_bytes: ::core::option::Option<::prost::alloc::string::String>,
170    #[prost(string, optional, tag = "3")]
171    pub reserved_bytes: ::core::option::Option<::prost::alloc::string::String>,
172    #[prost(string, optional, tag = "4")]
173    pub mem_bandwidth_gbps: ::core::option::Option<::prost::alloc::string::String>,
174    #[prost(string, optional, tag = "5")]
175    pub compute_tflops_fp32: ::core::option::Option<::prost::alloc::string::String>,
176    #[prost(string, optional, tag = "6")]
177    pub compute_tflops_fp16: ::core::option::Option<::prost::alloc::string::String>,
178}
179#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
180pub struct SignedNodeOwnership {
181    #[prost(uint32, tag = "1")]
182    pub version: u32,
183    #[prost(string, tag = "2")]
184    pub cert_id: ::prost::alloc::string::String,
185    #[prost(string, tag = "3")]
186    pub owner_id: ::prost::alloc::string::String,
187    /// 32 bytes
188    #[prost(bytes = "vec", tag = "4")]
189    pub owner_sign_public_key: ::prost::alloc::vec::Vec<u8>,
190    /// 32 bytes
191    #[prost(bytes = "vec", tag = "5")]
192    pub node_endpoint_id: ::prost::alloc::vec::Vec<u8>,
193    #[prost(uint64, tag = "6")]
194    pub issued_at_unix_ms: u64,
195    #[prost(uint64, tag = "7")]
196    pub expires_at_unix_ms: u64,
197    #[prost(string, optional, tag = "8")]
198    pub node_label: ::core::option::Option<::prost::alloc::string::String>,
199    #[prost(string, optional, tag = "9")]
200    pub hostname_hint: ::core::option::Option<::prost::alloc::string::String>,
201    /// Ed25519 signature over canonical claim bytes
202    #[prost(bytes = "vec", tag = "10")]
203    pub signature: ::prost::alloc::vec::Vec<u8>,
204}
205#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
206pub struct ServedModelDescriptor {
207    #[prost(message, optional, tag = "1")]
208    pub identity: ::core::option::Option<ServedModelIdentity>,
209    #[prost(message, optional, tag = "2")]
210    pub capabilities: ::core::option::Option<ModelCapabilities>,
211    #[prost(message, optional, tag = "3")]
212    pub topology: ::core::option::Option<ModelTopology>,
213    #[prost(bool, optional, tag = "4")]
214    pub capabilities_known: ::core::option::Option<bool>,
215}
216#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
217pub struct ServedModelIdentity {
218    #[prost(string, tag = "1")]
219    pub model_name: ::prost::alloc::string::String,
220    #[prost(bool, tag = "2")]
221    pub is_primary: bool,
222    #[prost(enumeration = "ModelSourceKind", tag = "3")]
223    pub source_kind: i32,
224    #[prost(string, optional, tag = "4")]
225    pub canonical_ref: ::core::option::Option<::prost::alloc::string::String>,
226    #[prost(string, optional, tag = "5")]
227    pub repository: ::core::option::Option<::prost::alloc::string::String>,
228    #[prost(string, optional, tag = "6")]
229    pub revision: ::core::option::Option<::prost::alloc::string::String>,
230    #[prost(string, optional, tag = "7")]
231    pub artifact: ::core::option::Option<::prost::alloc::string::String>,
232    #[prost(string, optional, tag = "8")]
233    pub local_file_name: ::core::option::Option<::prost::alloc::string::String>,
234    #[prost(string, optional, tag = "9")]
235    pub identity_hash: ::core::option::Option<::prost::alloc::string::String>,
236}
237#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
238pub struct ModelCapabilities {
239    #[prost(enumeration = "CapabilityLevel", tag = "1")]
240    pub vision: i32,
241    #[prost(enumeration = "CapabilityLevel", tag = "2")]
242    pub reasoning: i32,
243    #[prost(enumeration = "CapabilityLevel", tag = "3")]
244    pub tool_use: i32,
245    #[prost(bool, tag = "4")]
246    pub moe: bool,
247    #[prost(bool, tag = "5")]
248    pub multimodal: bool,
249    #[prost(enumeration = "CapabilityLevel", tag = "6")]
250    pub audio: i32,
251}
252#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
253pub struct ModelTopology {
254    #[prost(message, optional, tag = "1")]
255    pub moe: ::core::option::Option<ModelMoeInfo>,
256}
257#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
258pub struct ModelRuntimeDescriptor {
259    #[prost(string, tag = "1")]
260    pub model_name: ::prost::alloc::string::String,
261    #[prost(string, optional, tag = "2")]
262    pub identity_hash: ::core::option::Option<::prost::alloc::string::String>,
263    #[prost(uint32, optional, tag = "3")]
264    pub context_length: ::core::option::Option<u32>,
265    #[prost(bool, tag = "4")]
266    pub ready: bool,
267}
268#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
269pub struct ModelMoeInfo {
270    #[prost(uint32, tag = "1")]
271    pub expert_count: u32,
272    #[prost(uint32, tag = "2")]
273    pub used_expert_count: u32,
274    #[prost(uint32, optional, tag = "3")]
275    pub min_experts_per_node: ::core::option::Option<u32>,
276    #[prost(string, optional, tag = "4")]
277    pub source: ::core::option::Option<::prost::alloc::string::String>,
278    #[prost(string, optional, tag = "5")]
279    pub ranking_source: ::core::option::Option<::prost::alloc::string::String>,
280    #[prost(uint32, repeated, tag = "6")]
281    pub ranking: ::prost::alloc::vec::Vec<u32>,
282    #[prost(uint32, optional, tag = "7")]
283    pub ranking_prompt_count: ::core::option::Option<u32>,
284    #[prost(uint32, optional, tag = "8")]
285    pub ranking_tokens: ::core::option::Option<u32>,
286    #[prost(string, optional, tag = "9")]
287    pub ranking_layer_scope: ::core::option::Option<::prost::alloc::string::String>,
288    #[prost(string, optional, tag = "10")]
289    pub ranking_origin: ::core::option::Option<::prost::alloc::string::String>,
290}
291#[derive(Clone, PartialEq, ::prost::Message)]
292pub struct CompactModelMetadata {
293    #[prost(string, tag = "1")]
294    pub model_key: ::prost::alloc::string::String,
295    #[prost(uint32, tag = "2")]
296    pub context_length: u32,
297    #[prost(uint32, tag = "3")]
298    pub vocab_size: u32,
299    #[prost(uint32, tag = "4")]
300    pub embedding_size: u32,
301    #[prost(uint32, tag = "5")]
302    pub head_count: u32,
303    #[prost(uint32, tag = "6")]
304    pub layer_count: u32,
305    #[prost(uint32, tag = "7")]
306    pub feed_forward_length: u32,
307    #[prost(uint32, tag = "8")]
308    pub key_length: u32,
309    #[prost(uint32, tag = "9")]
310    pub value_length: u32,
311    #[prost(string, tag = "10")]
312    pub architecture: ::prost::alloc::string::String,
313    #[prost(string, tag = "11")]
314    pub tokenizer_model_name: ::prost::alloc::string::String,
315    #[prost(message, repeated, tag = "12")]
316    pub special_tokens: ::prost::alloc::vec::Vec<SpecialToken>,
317    #[prost(float, tag = "13")]
318    pub rope_scale: f32,
319    #[prost(float, tag = "14")]
320    pub rope_freq_base: f32,
321    #[prost(bool, tag = "15")]
322    pub is_moe: bool,
323    #[prost(uint32, tag = "16")]
324    pub expert_count: u32,
325    #[prost(uint32, tag = "17")]
326    pub used_expert_count: u32,
327    /// GGUF quantization type string (e.g. "Q4_K_M")
328    #[prost(string, tag = "18")]
329    pub quantization_type: ::prost::alloc::string::String,
330}
331#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
332pub struct SpecialToken {
333    #[prost(string, tag = "1")]
334    pub name: ::prost::alloc::string::String,
335    #[prost(uint32, tag = "2")]
336    pub token_id: u32,
337}
338#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
339pub struct ExpertsSummary {
340    #[prost(uint32, tag = "1")]
341    pub total_experts: u32,
342    #[prost(uint32, tag = "2")]
343    pub expert_count_used: u32,
344    #[prost(uint32, repeated, tag = "3")]
345    pub top_expert_ids: ::prost::alloc::vec::Vec<u32>,
346}
347#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
348pub struct ModelDemandEntry {
349    #[prost(string, tag = "1")]
350    pub model_name: ::prost::alloc::string::String,
351    #[prost(uint64, tag = "2")]
352    pub last_active: u64,
353    #[prost(uint64, tag = "3")]
354    pub request_count: u64,
355}
356/// Stream 0x03 — Tunnel Map
357#[derive(Clone, PartialEq, ::prost::Message)]
358pub struct TunnelMap {
359    #[prost(bytes = "vec", tag = "1")]
360    pub owner_peer_id: ::prost::alloc::vec::Vec<u8>,
361    #[prost(message, repeated, tag = "2")]
362    pub entries: ::prost::alloc::vec::Vec<TunnelEntry>,
363}
364#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
365pub struct TunnelEntry {
366    #[prost(bytes = "vec", tag = "1")]
367    pub target_peer_id: ::prost::alloc::vec::Vec<u8>,
368    #[prost(bytes = "vec", optional, tag = "2")]
369    pub relay_peer_id: ::core::option::Option<::prost::alloc::vec::Vec<u8>>,
370    #[prost(uint32, tag = "3")]
371    pub tunnel_port: u32,
372}
373/// Stream 0x05 — Route Table
374#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
375pub struct RouteTableRequest {
376    /// 0 or exactly 32 bytes (passive callers may omit)
377    #[prost(bytes = "vec", tag = "1")]
378    pub requester_id: ::prost::alloc::vec::Vec<u8>,
379    /// must equal NODE_PROTOCOL_GENERATION; rejected otherwise
380    #[prost(uint32, tag = "2")]
381    pub r#gen: u32,
382}
383#[derive(Clone, PartialEq, ::prost::Message)]
384pub struct RouteTable {
385    #[prost(message, repeated, tag = "1")]
386    pub entries: ::prost::alloc::vec::Vec<RouteEntry>,
387    /// stable mesh identity — passive/client callers learn this here
388    #[prost(string, optional, tag = "2")]
389    pub mesh_id: ::core::option::Option<::prost::alloc::string::String>,
390    /// must equal NODE_PROTOCOL_GENERATION; caller rejects mismatches
391    #[prost(uint32, tag = "3")]
392    pub r#gen: u32,
393}
394#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
395pub struct RouteEntry {
396    /// exactly 32 bytes (peer public key)
397    #[prost(bytes = "vec", tag = "1")]
398    pub endpoint_id: ::prost::alloc::vec::Vec<u8>,
399    /// model being served (empty if node is not actively serving)
400    #[prost(string, tag = "2")]
401    pub model: ::prost::alloc::string::String,
402}
403/// Stream 0x06 — Peer Down
404#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
405pub struct PeerDown {
406    /// exactly 32 bytes; the peer being reported as unreachable
407    #[prost(bytes = "vec", tag = "1")]
408    pub peer_id: ::prost::alloc::vec::Vec<u8>,
409    /// must equal NODE_PROTOCOL_GENERATION; rejected otherwise
410    #[prost(uint32, tag = "2")]
411    pub r#gen: u32,
412}
413/// Stream 0x07 — Peer Leaving
414#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
415pub struct PeerLeaving {
416    /// exactly 32 bytes; must match the QUIC sender identity
417    #[prost(bytes = "vec", tag = "1")]
418    pub peer_id: ::prost::alloc::vec::Vec<u8>,
419    /// must equal NODE_PROTOCOL_GENERATION; rejected otherwise
420    #[prost(uint32, tag = "2")]
421    pub r#gen: u32,
422}
423#[derive(Clone, PartialEq, ::prost::Message)]
424pub struct NodeConfigSnapshot {
425    /// config schema version (currently 1)
426    #[prost(uint32, tag = "1")]
427    pub version: u32,
428    #[prost(message, optional, tag = "2")]
429    pub gpu: ::core::option::Option<NodeGpuConfig>,
430    #[prost(message, repeated, tag = "3")]
431    pub models: ::prost::alloc::vec::Vec<NodeModelEntry>,
432    #[prost(message, repeated, tag = "4")]
433    pub plugins: ::prost::alloc::vec::Vec<NodePluginEntry>,
434    /// canonical persisted config payload for additive owner-control roundtrip
435    #[prost(string, optional, tag = "5")]
436    pub config_toml: ::core::option::Option<::prost::alloc::string::String>,
437}
438#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
439pub struct NodeGpuConfig {
440    #[prost(enumeration = "GpuAssignment", tag = "1")]
441    pub assignment: i32,
442}
443#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
444pub struct ConfiguredModelRef {
445    #[prost(string, tag = "1")]
446    pub declared_ref: ::prost::alloc::string::String,
447    #[prost(string, optional, tag = "2")]
448    pub source_kind: ::core::option::Option<::prost::alloc::string::String>,
449    #[prost(string, optional, tag = "3")]
450    pub revision: ::core::option::Option<::prost::alloc::string::String>,
451}
452#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
453pub struct NodeModelEntry {
454    #[prost(string, tag = "1")]
455    pub model: ::prost::alloc::string::String,
456    #[prost(string, optional, tag = "2")]
457    pub mmproj: ::core::option::Option<::prost::alloc::string::String>,
458    #[prost(uint32, optional, tag = "3")]
459    pub ctx_size: ::core::option::Option<u32>,
460    #[prost(string, optional, tag = "4")]
461    pub gpu_id: ::core::option::Option<::prost::alloc::string::String>,
462    #[prost(message, optional, tag = "5")]
463    pub model_ref: ::core::option::Option<ConfiguredModelRef>,
464    #[prost(message, optional, tag = "6")]
465    pub mmproj_ref: ::core::option::Option<ConfiguredModelRef>,
466}
467#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
468pub struct NodePluginEntry {
469    #[prost(string, tag = "1")]
470    pub name: ::prost::alloc::string::String,
471    #[prost(bool, optional, tag = "2")]
472    pub enabled: ::core::option::Option<bool>,
473    #[prost(string, optional, tag = "3")]
474    pub command: ::core::option::Option<::prost::alloc::string::String>,
475    #[prost(string, repeated, tag = "4")]
476    pub args: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
477}
478#[derive(Clone, PartialEq, ::prost::Message)]
479pub struct OwnerControlEnvelope {
480    /// must equal NODE_PROTOCOL_GENERATION
481    #[prost(uint32, tag = "1")]
482    pub r#gen: u32,
483    #[prost(message, optional, tag = "2")]
484    pub handshake: ::core::option::Option<OwnerControlHandshake>,
485    #[prost(message, optional, tag = "3")]
486    pub request: ::core::option::Option<OwnerControlRequest>,
487    #[prost(message, optional, tag = "4")]
488    pub response: ::core::option::Option<OwnerControlResponse>,
489    #[prost(message, optional, tag = "5")]
490    pub error: ::core::option::Option<OwnerControlError>,
491}
492#[derive(Clone, PartialEq, ::prost::Message)]
493pub struct OwnerControlHandshake {
494    #[prost(message, optional, tag = "1")]
495    pub ownership: ::core::option::Option<SignedNodeOwnership>,
496}
497#[derive(Clone, PartialEq, ::prost::Message)]
498pub struct OwnerControlRequest {
499    #[prost(uint64, tag = "1")]
500    pub request_id: u64,
501    #[prost(message, optional, tag = "2")]
502    pub get_config: ::core::option::Option<OwnerControlGetConfigRequest>,
503    #[prost(message, optional, tag = "3")]
504    pub watch_config: ::core::option::Option<OwnerControlWatchConfigRequest>,
505    #[prost(message, optional, tag = "4")]
506    pub apply_config: ::core::option::Option<OwnerControlApplyConfigRequest>,
507    #[prost(message, optional, tag = "5")]
508    pub refresh_inventory: ::core::option::Option<OwnerControlRefreshInventoryRequest>,
509}
510#[derive(Clone, PartialEq, ::prost::Message)]
511pub struct OwnerControlResponse {
512    #[prost(uint64, tag = "1")]
513    pub request_id: u64,
514    #[prost(message, optional, tag = "2")]
515    pub get_config: ::core::option::Option<OwnerControlGetConfigResponse>,
516    #[prost(message, optional, tag = "3")]
517    pub watch_config: ::core::option::Option<OwnerControlWatchConfigResponse>,
518    #[prost(message, optional, tag = "4")]
519    pub apply_config: ::core::option::Option<OwnerControlApplyConfigResponse>,
520    #[prost(message, optional, tag = "5")]
521    pub refresh_inventory: ::core::option::Option<OwnerControlRefreshInventoryResponse>,
522}
523#[derive(Clone, PartialEq, ::prost::Message)]
524pub struct OwnerControlError {
525    #[prost(enumeration = "OwnerControlErrorCode", tag = "1")]
526    pub code: i32,
527    #[prost(string, tag = "2")]
528    pub message: ::prost::alloc::string::String,
529    #[prost(uint64, optional, tag = "3")]
530    pub request_id: ::core::option::Option<u64>,
531    #[prost(uint64, optional, tag = "4")]
532    pub current_revision: ::core::option::Option<u64>,
533}
534#[derive(Clone, PartialEq, ::prost::Message)]
535pub struct OwnerControlGetConfigRequest {
536    /// exactly 32 bytes
537    #[prost(bytes = "vec", tag = "1")]
538    pub requester_node_id: ::prost::alloc::vec::Vec<u8>,
539    /// exactly 32 bytes
540    #[prost(bytes = "vec", tag = "2")]
541    pub target_node_id: ::prost::alloc::vec::Vec<u8>,
542}
543#[derive(Clone, PartialEq, ::prost::Message)]
544pub struct OwnerControlGetConfigResponse {
545    #[prost(message, optional, tag = "1")]
546    pub snapshot: ::core::option::Option<OwnerControlConfigSnapshot>,
547}
548#[derive(Clone, PartialEq, ::prost::Message)]
549pub struct OwnerControlWatchConfigRequest {
550    /// exactly 32 bytes
551    #[prost(bytes = "vec", tag = "1")]
552    pub requester_node_id: ::prost::alloc::vec::Vec<u8>,
553    /// exactly 32 bytes
554    #[prost(bytes = "vec", tag = "2")]
555    pub target_node_id: ::prost::alloc::vec::Vec<u8>,
556    #[prost(bool, tag = "3")]
557    pub include_snapshot: bool,
558}
559#[derive(Clone, PartialEq, ::prost::Message)]
560pub struct OwnerControlWatchConfigResponse {
561    #[prost(message, optional, tag = "1")]
562    pub accepted: ::core::option::Option<OwnerControlWatchAccepted>,
563    #[prost(message, optional, tag = "2")]
564    pub snapshot: ::core::option::Option<OwnerControlConfigSnapshot>,
565    #[prost(message, optional, tag = "3")]
566    pub update: ::core::option::Option<OwnerControlConfigUpdate>,
567}
568#[derive(Clone, PartialEq, ::prost::Message)]
569pub struct OwnerControlWatchAccepted {
570    /// exactly 32 bytes
571    #[prost(bytes = "vec", tag = "1")]
572    pub target_node_id: ::prost::alloc::vec::Vec<u8>,
573}
574#[derive(Clone, PartialEq, ::prost::Message)]
575pub struct OwnerControlApplyConfigRequest {
576    /// exactly 32 bytes
577    #[prost(bytes = "vec", tag = "1")]
578    pub requester_node_id: ::prost::alloc::vec::Vec<u8>,
579    /// exactly 32 bytes
580    #[prost(bytes = "vec", tag = "2")]
581    pub target_node_id: ::prost::alloc::vec::Vec<u8>,
582    #[prost(uint64, tag = "3")]
583    pub expected_revision: u64,
584    #[prost(message, optional, tag = "4")]
585    pub config: ::core::option::Option<NodeConfigSnapshot>,
586}
587#[derive(Clone, PartialEq, ::prost::Message)]
588pub struct OwnerControlApplyConfigResponse {
589    #[prost(bool, tag = "1")]
590    pub success: bool,
591    #[prost(uint64, tag = "2")]
592    pub current_revision: u64,
593    #[prost(bytes = "vec", tag = "3")]
594    pub config_hash: ::prost::alloc::vec::Vec<u8>,
595    #[prost(string, optional, tag = "4")]
596    pub error: ::core::option::Option<::prost::alloc::string::String>,
597    #[prost(enumeration = "ConfigApplyMode", tag = "5")]
598    pub apply_mode: i32,
599}
600#[derive(Clone, PartialEq, ::prost::Message)]
601pub struct OwnerControlRefreshInventoryRequest {
602    /// exactly 32 bytes
603    #[prost(bytes = "vec", tag = "1")]
604    pub requester_node_id: ::prost::alloc::vec::Vec<u8>,
605    /// exactly 32 bytes
606    #[prost(bytes = "vec", tag = "2")]
607    pub target_node_id: ::prost::alloc::vec::Vec<u8>,
608}
609#[derive(Clone, PartialEq, ::prost::Message)]
610pub struct OwnerControlRefreshInventoryResponse {
611    #[prost(message, optional, tag = "1")]
612    pub snapshot: ::core::option::Option<OwnerControlConfigSnapshot>,
613}
614#[derive(Clone, PartialEq, ::prost::Message)]
615pub struct OwnerControlConfigSnapshot {
616    /// exactly 32 bytes
617    #[prost(bytes = "vec", tag = "1")]
618    pub node_id: ::prost::alloc::vec::Vec<u8>,
619    #[prost(uint64, tag = "2")]
620    pub revision: u64,
621    /// SHA-256 of canonical proto bytes (32 bytes)
622    #[prost(bytes = "vec", tag = "3")]
623    pub config_hash: ::prost::alloc::vec::Vec<u8>,
624    #[prost(message, optional, tag = "4")]
625    pub config: ::core::option::Option<NodeConfigSnapshot>,
626    #[prost(string, optional, tag = "5")]
627    pub hostname: ::core::option::Option<::prost::alloc::string::String>,
628}
629#[derive(Clone, PartialEq, ::prost::Message)]
630pub struct OwnerControlConfigUpdate {
631    /// exactly 32 bytes
632    #[prost(bytes = "vec", tag = "1")]
633    pub node_id: ::prost::alloc::vec::Vec<u8>,
634    #[prost(uint64, tag = "2")]
635    pub revision: u64,
636    /// SHA-256 of canonical proto bytes (32 bytes)
637    #[prost(bytes = "vec", tag = "3")]
638    pub config_hash: ::prost::alloc::vec::Vec<u8>,
639    #[prost(message, optional, tag = "4")]
640    pub config: ::core::option::Option<NodeConfigSnapshot>,
641}
642#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
643#[repr(i32)]
644pub enum CapabilityLevel {
645    Unspecified = 0,
646    None = 1,
647    Likely = 2,
648    Supported = 3,
649}
650impl CapabilityLevel {
651    /// String value of the enum field names used in the ProtoBuf definition.
652    ///
653    /// The values are not transformed in any way and thus are considered stable
654    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
655    pub fn as_str_name(&self) -> &'static str {
656        match self {
657            Self::Unspecified => "CAPABILITY_LEVEL_UNSPECIFIED",
658            Self::None => "CAPABILITY_LEVEL_NONE",
659            Self::Likely => "CAPABILITY_LEVEL_LIKELY",
660            Self::Supported => "CAPABILITY_LEVEL_SUPPORTED",
661        }
662    }
663    /// Creates an enum from field names used in the ProtoBuf definition.
664    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
665        match value {
666            "CAPABILITY_LEVEL_UNSPECIFIED" => Some(Self::Unspecified),
667            "CAPABILITY_LEVEL_NONE" => Some(Self::None),
668            "CAPABILITY_LEVEL_LIKELY" => Some(Self::Likely),
669            "CAPABILITY_LEVEL_SUPPORTED" => Some(Self::Supported),
670            _ => None,
671        }
672    }
673}
674#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
675#[repr(i32)]
676pub enum ModelSourceKind {
677    Unspecified = 0,
678    Catalog = 1,
679    HuggingFace = 2,
680    LocalGguf = 3,
681    DirectUrl = 4,
682    Unknown = 5,
683}
684impl ModelSourceKind {
685    /// String value of the enum field names used in the ProtoBuf definition.
686    ///
687    /// The values are not transformed in any way and thus are considered stable
688    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
689    pub fn as_str_name(&self) -> &'static str {
690        match self {
691            Self::Unspecified => "MODEL_SOURCE_KIND_UNSPECIFIED",
692            Self::Catalog => "MODEL_SOURCE_KIND_CATALOG",
693            Self::HuggingFace => "MODEL_SOURCE_KIND_HUGGING_FACE",
694            Self::LocalGguf => "MODEL_SOURCE_KIND_LOCAL_GGUF",
695            Self::DirectUrl => "MODEL_SOURCE_KIND_DIRECT_URL",
696            Self::Unknown => "MODEL_SOURCE_KIND_UNKNOWN",
697        }
698    }
699    /// Creates an enum from field names used in the ProtoBuf definition.
700    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
701        match value {
702            "MODEL_SOURCE_KIND_UNSPECIFIED" => Some(Self::Unspecified),
703            "MODEL_SOURCE_KIND_CATALOG" => Some(Self::Catalog),
704            "MODEL_SOURCE_KIND_HUGGING_FACE" => Some(Self::HuggingFace),
705            "MODEL_SOURCE_KIND_LOCAL_GGUF" => Some(Self::LocalGguf),
706            "MODEL_SOURCE_KIND_DIRECT_URL" => Some(Self::DirectUrl),
707            "MODEL_SOURCE_KIND_UNKNOWN" => Some(Self::Unknown),
708            _ => None,
709        }
710    }
711}
712/// Shared enum
713#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
714#[repr(i32)]
715pub enum NodeRole {
716    Unspecified = 0,
717    Worker = 1,
718    Host = 2,
719    Client = 3,
720}
721impl NodeRole {
722    /// String value of the enum field names used in the ProtoBuf definition.
723    ///
724    /// The values are not transformed in any way and thus are considered stable
725    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
726    pub fn as_str_name(&self) -> &'static str {
727        match self {
728            Self::Unspecified => "NODE_ROLE_UNSPECIFIED",
729            Self::Worker => "WORKER",
730            Self::Host => "HOST",
731            Self::Client => "CLIENT",
732        }
733    }
734    /// Creates an enum from field names used in the ProtoBuf definition.
735    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
736        match value {
737            "NODE_ROLE_UNSPECIFIED" => Some(Self::Unspecified),
738            "WORKER" => Some(Self::Worker),
739            "HOST" => Some(Self::Host),
740            "CLIENT" => Some(Self::Client),
741            _ => None,
742        }
743    }
744}
745/// Latency source type for peer latency data
746#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
747#[repr(i32)]
748pub enum LatencySource {
749    Unspecified = 0,
750    Direct = 1,
751    Estimated = 2,
752    Unknown = 3,
753}
754impl LatencySource {
755    pub fn as_str_name(&self) -> &'static str {
756        match self {
757            Self::Unspecified => "LATENCY_SOURCE_UNSPECIFIED",
758            Self::Direct => "DIRECT",
759            Self::Estimated => "ESTIMATED",
760            Self::Unknown => "UNKNOWN",
761        }
762    }
763    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
764        match value {
765            "LATENCY_SOURCE_UNSPECIFIED" => Some(Self::Unspecified),
766            "DIRECT" => Some(Self::Direct),
767            "ESTIMATED" => Some(Self::Estimated),
768            "UNKNOWN" => Some(Self::Unknown),
769            _ => None,
770        }
771    }
772}
773#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
774#[repr(i32)]
775pub enum GpuAssignment {
776    Unspecified = 0,
777    Auto = 1,
778    Pinned = 2,
779}
780impl GpuAssignment {
781    /// String value of the enum field names used in the ProtoBuf definition.
782    ///
783    /// The values are not transformed in any way and thus are considered stable
784    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
785    pub fn as_str_name(&self) -> &'static str {
786        match self {
787            Self::Unspecified => "GPU_ASSIGNMENT_UNSPECIFIED",
788            Self::Auto => "GPU_ASSIGNMENT_AUTO",
789            Self::Pinned => "GPU_ASSIGNMENT_PINNED",
790        }
791    }
792    /// Creates an enum from field names used in the ProtoBuf definition.
793    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
794        match value {
795            "GPU_ASSIGNMENT_UNSPECIFIED" => Some(Self::Unspecified),
796            "GPU_ASSIGNMENT_AUTO" => Some(Self::Auto),
797            "GPU_ASSIGNMENT_PINNED" => Some(Self::Pinned),
798            _ => None,
799        }
800    }
801}
802#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
803#[repr(i32)]
804pub enum ConfigApplyMode {
805    Unspecified = 0,
806    Staged = 1,
807    Live = 2,
808    Noop = 3,
809}
810impl ConfigApplyMode {
811    /// String value of the enum field names used in the ProtoBuf definition.
812    ///
813    /// The values are not transformed in any way and thus are considered stable
814    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
815    pub fn as_str_name(&self) -> &'static str {
816        match self {
817            Self::Unspecified => "CONFIG_APPLY_MODE_UNSPECIFIED",
818            Self::Staged => "CONFIG_APPLY_MODE_STAGED",
819            Self::Live => "CONFIG_APPLY_MODE_LIVE",
820            Self::Noop => "CONFIG_APPLY_MODE_NOOP",
821        }
822    }
823    /// Creates an enum from field names used in the ProtoBuf definition.
824    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
825        match value {
826            "CONFIG_APPLY_MODE_UNSPECIFIED" => Some(Self::Unspecified),
827            "CONFIG_APPLY_MODE_STAGED" => Some(Self::Staged),
828            "CONFIG_APPLY_MODE_LIVE" => Some(Self::Live),
829            "CONFIG_APPLY_MODE_NOOP" => Some(Self::Noop),
830            _ => None,
831        }
832    }
833}
834#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
835#[repr(i32)]
836pub enum OwnerControlErrorCode {
837    Unspecified = 0,
838    BadRequest = 1,
839    Unauthorized = 2,
840    RevisionConflict = 3,
841    ControlUnsupported = 4,
842    ControlEndpointRequired = 5,
843    ControlUnavailable = 6,
844    UnknownCommand = 7,
845    LegacyJsonUnsupported = 8,
846    InvalidHandshake = 9,
847    TargetNodeMismatch = 10,
848}
849impl OwnerControlErrorCode {
850    pub fn as_str_name(&self) -> &'static str {
851        match self {
852            Self::Unspecified => "OWNER_CONTROL_ERROR_CODE_UNSPECIFIED",
853            Self::BadRequest => "OWNER_CONTROL_ERROR_CODE_BAD_REQUEST",
854            Self::Unauthorized => "OWNER_CONTROL_ERROR_CODE_UNAUTHORIZED",
855            Self::RevisionConflict => "OWNER_CONTROL_ERROR_CODE_REVISION_CONFLICT",
856            Self::ControlUnsupported => "OWNER_CONTROL_ERROR_CODE_CONTROL_UNSUPPORTED",
857            Self::ControlEndpointRequired => "OWNER_CONTROL_ERROR_CODE_CONTROL_ENDPOINT_REQUIRED",
858            Self::ControlUnavailable => "OWNER_CONTROL_ERROR_CODE_CONTROL_UNAVAILABLE",
859            Self::UnknownCommand => "OWNER_CONTROL_ERROR_CODE_UNKNOWN_COMMAND",
860            Self::LegacyJsonUnsupported => "OWNER_CONTROL_ERROR_CODE_LEGACY_JSON_UNSUPPORTED",
861            Self::InvalidHandshake => "OWNER_CONTROL_ERROR_CODE_INVALID_HANDSHAKE",
862            Self::TargetNodeMismatch => "OWNER_CONTROL_ERROR_CODE_TARGET_NODE_MISMATCH",
863        }
864    }
865    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
866        match value {
867            "OWNER_CONTROL_ERROR_CODE_UNSPECIFIED" => Some(Self::Unspecified),
868            "OWNER_CONTROL_ERROR_CODE_BAD_REQUEST" => Some(Self::BadRequest),
869            "OWNER_CONTROL_ERROR_CODE_UNAUTHORIZED" => Some(Self::Unauthorized),
870            "OWNER_CONTROL_ERROR_CODE_REVISION_CONFLICT" => Some(Self::RevisionConflict),
871            "OWNER_CONTROL_ERROR_CODE_CONTROL_UNSUPPORTED" => Some(Self::ControlUnsupported),
872            "OWNER_CONTROL_ERROR_CODE_CONTROL_ENDPOINT_REQUIRED" => {
873                Some(Self::ControlEndpointRequired)
874            }
875            "OWNER_CONTROL_ERROR_CODE_CONTROL_UNAVAILABLE" => Some(Self::ControlUnavailable),
876            "OWNER_CONTROL_ERROR_CODE_UNKNOWN_COMMAND" => Some(Self::UnknownCommand),
877            "OWNER_CONTROL_ERROR_CODE_LEGACY_JSON_UNSUPPORTED" => Some(Self::LegacyJsonUnsupported),
878            "OWNER_CONTROL_ERROR_CODE_INVALID_HANDSHAKE" => Some(Self::InvalidHandshake),
879            "OWNER_CONTROL_ERROR_CODE_TARGET_NODE_MISMATCH" => Some(Self::TargetNodeMismatch),
880            _ => None,
881        }
882    }
883}