MetricsCollector

org.llm4s.metrics.MetricsCollector
See theMetricsCollector companion object

Minimal algebra for collecting metrics about LLM operations.

Implementations should be safe: failures must not propagate to callers. All methods should catch and log errors internally without throwing.

Example usage:

val startNanos = System.nanoTime()
client.complete(conversation) match {
 case Right(completion) =>
   val duration = FiniteDuration(System.nanoTime() - startNanos, NANOSECONDS)
   metrics.observeRequest(provider, model, Outcome.Success, duration)
   completion.usage.foreach { u =>
     metrics.addTokens(provider, model, u.promptTokens, u.completionTokens)
   }
 case Left(error) =>
   val duration = FiniteDuration(System.nanoTime() - startNanos, NANOSECONDS)
   val errorKind = ErrorKind.fromLLMError(error)
   metrics.observeRequest(provider, model, Outcome.Error(errorKind), duration)
}

Attributes

Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes

Members list

Value members

Abstract methods

def addTokens(provider: String, model: String, inputTokens: Long, outputTokens: Long): Unit

Record token usage.

Record token usage.

Value parameters

inputTokens

Number of input/prompt tokens

model

Model name

outputTokens

Number of output/completion tokens

provider

Provider name

Attributes

def observeRequest(provider: String, model: String, outcome: Outcome, duration: FiniteDuration): Unit

Record an LLM request with its outcome and duration.

Record an LLM request with its outcome and duration.

Value parameters

duration

Request duration

model

Model name (e.g., "gpt-4o", "claude-3-5-sonnet-latest")

outcome

Success or Error with error kind

provider

Provider name (e.g., "openai", "anthropic", "ollama")

Attributes

def recordCost(provider: String, model: String, costUsd: Double): Unit

Record estimated cost in USD.

Record estimated cost in USD.

Value parameters

costUsd

Estimated cost in USD

model

Model name

provider

Provider name

Attributes