ferrum_engine/modality_stubs.rs
1//! Shared boilerplate for modality-only engines (embedding / transcription / TTS).
2//!
3//! These engines wrap a per-modality executor and expose its functionality
4//! through the `InferenceEngine` trait. They do NOT do text generation,
5//! so `infer / infer_stream` return Err and the orchestration accessors
6//! (status / metrics / health / shutdown) return inert defaults.
7//!
8//! Each modality engine called these with copy-pasted bodies (~80 lines
9//! of identical boilerplate per engine). This module hosts the canonical
10//! versions so the 3 fake engines can shrink.
11
12use ferrum_types::{EngineMetrics, EngineStatus, HealthStatus, MemoryUsage};
13
14/// Inert engine status — modality engines aren't request-driven, so most
15/// fields are zeroed. `is_ready: true` because the executor is loaded.
16pub fn inert_status() -> EngineStatus {
17 EngineStatus {
18 is_ready: true,
19 loaded_models: vec![],
20 active_requests: 0,
21 queued_requests: 0,
22 memory_usage: MemoryUsage {
23 total_bytes: 0,
24 used_bytes: 0,
25 free_bytes: 0,
26 gpu_memory_bytes: None,
27 cpu_memory_bytes: None,
28 cache_memory_bytes: 0,
29 utilization_percent: 0.0,
30 },
31 uptime_seconds: 0,
32 last_heartbeat: chrono::Utc::now(),
33 version: env!("CARGO_PKG_VERSION").to_string(),
34 }
35}
36
37/// Inert engine metrics — all zeros, defaults on nested types.
38pub fn inert_metrics() -> EngineMetrics {
39 EngineMetrics {
40 total_requests: 0,
41 successful_requests: 0,
42 failed_requests: 0,
43 avg_request_latency_ms: 0.0,
44 p95_request_latency_ms: 0.0,
45 p99_request_latency_ms: 0.0,
46 throughput_rps: 0.0,
47 tokens_per_second: 0.0,
48 queue_metrics: Default::default(),
49 resource_utilization: Default::default(),
50 error_stats: Default::default(),
51 performance_breakdown: Default::default(),
52 }
53}
54
55/// Health: always healthy if executor loaded.
56pub fn inert_health() -> HealthStatus {
57 HealthStatus::healthy()
58}