pub struct InferenceMetrics {Show 16 fields
pub tokens_generated_total: Counter,
pub requests_total: Counter,
pub errors_total: Counter,
pub prompt_tokens_total: Counter,
pub prefill_duration_seconds: Histogram,
pub decode_token_duration_seconds: Histogram,
pub request_duration_seconds: Histogram,
pub tokens_per_second: Histogram,
pub active_requests: Gauge,
pub kv_cache_utilization: Gauge,
pub model_memory_bytes: Gauge,
pub request_tokens_per_second: Gauge,
pub inter_token_latency_p50_seconds: Gauge,
pub inter_token_latency_p95_seconds: Gauge,
pub queue_wait_seconds: Gauge,
pub kv_cache_compression_level: Gauge,
}Expand description
All Pictor inference metrics collected in one place.
Thread-safe — can be shared via Arc<InferenceMetrics> across
handlers and the inference engine.
§Example
use pictor_runtime::metrics::InferenceMetrics;
let metrics = InferenceMetrics::new();
metrics.requests_total.inc_by(5);
metrics.tokens_generated_total.inc_by(100);
metrics.active_requests.set(2.0);
metrics.request_duration_seconds.observe(0.42);
assert_eq!(metrics.requests_total.get(), 5);
assert_eq!(metrics.tokens_generated_total.get(), 100);
let prom = metrics.render_prometheus();
assert!(prom.contains("pictor_requests_total 5"));Fields§
§tokens_generated_total: CounterTotal number of tokens generated across all requests.
requests_total: CounterTotal number of requests received.
errors_total: CounterTotal number of errors.
prompt_tokens_total: CounterTotal number of prompt tokens processed.
prefill_duration_seconds: HistogramDuration of the prefill (prompt processing) phase.
decode_token_duration_seconds: HistogramDuration of each individual decode step.
request_duration_seconds: HistogramTotal end-to-end request duration.
tokens_per_second: HistogramObserved tokens-per-second rate.
active_requests: GaugeNumber of currently active (in-flight) requests.
kv_cache_utilization: GaugeKV cache utilization ratio (0.0 – 1.0).
model_memory_bytes: GaugeTotal model memory usage in bytes.
request_tokens_per_second: GaugeSmoothed average tokens-per-second across recent requests.
inter_token_latency_p50_seconds: Gaugep50 inter-token latency across recent requests, in seconds.
inter_token_latency_p95_seconds: Gaugep95 inter-token latency across recent requests, in seconds.
queue_wait_seconds: GaugeMean queue-wait time (admission → first token) in seconds.
kv_cache_compression_level: GaugeEffective tier of the runtime KV-cache compression policy: 0 = FP16, 1 = Q8, 2 = Q4.
Implementations§
Source§impl InferenceMetrics
impl InferenceMetrics
Sourcepub fn update_memory_from_rss(&self)
pub fn update_memory_from_rss(&self)
Update the model_memory_bytes gauge from the current process RSS.
This is a best-effort call: on platforms where RSS is unavailable it
records 0.0, which is still a valid (though unhelpful) gauge value.
Sourcepub fn update_request_rate(&self, snap: &AggregateRateSnapshot)
pub fn update_request_rate(&self, snap: &AggregateRateSnapshot)
Update the per-request rate gauges from a crate::request_metrics::AggregateRateSnapshot.
Sourcepub fn update_kv_cache_level(&self, level: KvCacheLevel)
pub fn update_kv_cache_level(&self, level: KvCacheLevel)
Update the KV-cache compression-level gauge from a crate::kv_cache_policy::KvCacheLevel.
Sourcepub fn render_prometheus(&self) -> String
pub fn render_prometheus(&self) -> String
Render all metrics in Prometheus text exposition format.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for InferenceMetrics
impl RefUnwindSafe for InferenceMetrics
impl Send for InferenceMetrics
impl Sync for InferenceMetrics
impl Unpin for InferenceMetrics
impl UnsafeUnpin for InferenceMetrics
impl UnwindSafe for InferenceMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more