org.llm4s.spring

Members list

Type members

Classlikes

Sizing of the executor behind LLM4STemplate's completeAsync (llm4s.async.*).

Sizing of the executor behind LLM4STemplate's completeAsync (llm4s.async.*).

Attributes

Supertypes
class Object
trait Matchable
class Any

Health indicator settings (llm4s.health.*).

Health indicator settings (llm4s.health.*).

Attributes

Supertypes
class Object
trait Matchable
class Any
final case class HealthSettings(provider: String, model: String, probe: Boolean, ttl: Duration, timeout: Duration, secrets: Seq[String])

What the indicator reports about and how it probes; the secrets are only used to redact messages.

What the indicator reports about and how it probes; the secrets are only used to redact messages.

Attributes

Companion
object
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all

Attributes

Companion
class
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
final class LLM4STemplate(client: JLlmClient, executor: ExecutorService)

Spring-friendly entry point to an LLM.

Spring-friendly entry point to an LLM.

complete and tryComplete block the calling thread. completeAsync never does: the blocking call runs on executor (the llm4sTaskExecutor bean) and the returned future completes from there. Cancelling the future with cancel(true) interrupts the provider call, which is how llm4s cancels work; a failure completes the future exceptionally with the LlmException.

Attributes

Supertypes
class Object
trait Matchable
class Any

Attributes

Companion
class
Supertypes
class Object
trait Matchable
class Any
Self type
@AutoConfiguration(value = _, before = _, beforeName = _, after = _, afterName = _) @Configuration(value = _, proxyBeanMethods = _, enforceUniqueMethods = _) @ConditionalOnClass(value = _, name = scala.Array.apply[java.lang.String]("org.llm4s.javaapi.Llm4s$")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String]))) @ConditionalOnProperty(value = _, prefix = "llm4s", name = scala.Array.apply[java.lang.String]("enabled")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String])), havingValue = "true", matchIfMissing = true) @EnableConfigurationProperties(value = scala.Array.apply[java.lang.Class[_ >: scala.Nothing <: . ]](scala.Predef.classOf[org.llm4s.spring.Llm4sProperties])(scala.reflect.ClassTag.apply[java.lang.Class[_ >: scala.Nothing <: . ]](classOf[java.lang.Class])))

Attributes

Companion
object
Supertypes
class Object
trait Matchable
class Any

Name of the executor bean behind completeAsync and the health probe; define a bean of this name to replace it.

Name of the executor bean behind completeAsync and the health probe; define a bean of this name to replace it.

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
@ConfigurationProperties(value = _, prefix = "llm4s", ignoreInvalidFields = _, ignoreUnknownFields = _)

Attributes

Supertypes
class Object
trait Matchable
class Any
@AutoConfiguration(value = _, before = _, beforeName = _, after = scala.Array.apply[java.lang.Class[_ >: scala.Nothing <: . ]](scala.Predef.classOf[org.llm4s.spring.Llm4sAutoConfiguration])(scala.reflect.ClassTag.apply[java.lang.Class[_ >: scala.Nothing <: . ]](classOf[java.lang.Class])), afterName = _) @Configuration(value = _, proxyBeanMethods = _, enforceUniqueMethods = _) @ConditionalOnClass(value = _, name = scala.Array.apply[java.lang.String]("org.springframework.boot.actuate.health.HealthIndicator")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String]))) @ConditionalOnBean(value = scala.Array.apply[java.lang.Class[_ >: scala.Nothing <: . ]](scala.Predef.classOf[org.llm4s.javaapi.JLlmClient])(scala.reflect.ClassTag.apply[java.lang.Class[_ >: scala.Nothing <: . ]](classOf[java.lang.Class])), type = _, annotation = _, name = _, search = _, parameterizedContainer = _) @ConditionalOnProperty(value = _, prefix = "llm4s", name = scala.Array.apply[java.lang.String]("enabled")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String])), havingValue = "true", matchIfMissing = true)

Attributes

Supertypes
class Object
trait Matchable
class Any
final class LlmHealthIndicator(client: JLlmClient, settings: HealthSettings, executor: ExecutorService, nanoClock: () => Long) extends HealthIndicator

Reports what was actually checked. By default (llm4s.health.probe=false) it makes no provider call: it is UP with probe=disabled and the provider and model names, meaning "configured", not "reachable". With llm4s.health.probe=true it sends a one-token completion on executor, waits at most llm4s.health.probe-timeout, and caches the outcome for llm4s.health.probe-ttl. A failed or timed-out probe is DOWN with a redacted message.

Reports what was actually checked. By default (llm4s.health.probe=false) it makes no provider call: it is UP with probe=disabled and the provider and model names, meaning "configured", not "reachable". With llm4s.health.probe=true it sends a one-token completion on executor, waits at most llm4s.health.probe-timeout, and caches the outcome for llm4s.health.probe-ttl. A failed or timed-out probe is DOWN with a redacted message.

health() never throws InterruptedException: a thread interrupted while it waits for the probe gets DOWN with probe=cancelled, its interrupt flag set again, and the probe call is cancelled. That outcome is not cached: it is about the interrupted thread, not the provider, so the next check probes again.

Attributes

Supertypes
trait HealthIndicator
trait HealthContributor
class Object
trait Matchable
class Any
@AutoConfiguration(value = _, before = scala.Array.apply[java.lang.Class[_ >: scala.Nothing <: . ]](scala.Predef.classOf[org.llm4s.spring.Llm4sAutoConfiguration])(scala.reflect.ClassTag.apply[java.lang.Class[_ >: scala.Nothing <: . ]](classOf[java.lang.Class])), beforeName = _, after = _, afterName = scala.Array.apply[java.lang.String]("org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration", "org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration", "org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration", "org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration", "org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration", "org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String]))) @Configuration(value = _, proxyBeanMethods = _, enforceUniqueMethods = _) @ConditionalOnClass(value = _, name = scala.Array.apply[java.lang.String]("io.micrometer.core.instrument.MeterRegistry", "org.llm4s.metrics.MicrometerMetrics")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String]))) @ConditionalOnBean(value = _, type = scala.Array.apply[java.lang.String]("io.micrometer.core.instrument.MeterRegistry")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String])), annotation = _, name = _, search = _, parameterizedContainer = _) @ConditionalOnProperty(value = _, prefix = "llm4s", name = scala.Array.apply[java.lang.String]("enabled")(scala.reflect.ClassTag.apply[java.lang.String](classOf[java.lang.String])), havingValue = "true", matchIfMissing = true)

Records llm4s request, token, cost and error metrics in the application's Micrometer MeterRegistry, so they appear on /actuator/metrics (and in whatever the registry exports to) with no wiring.

Records llm4s request, token, cost and error metrics in the application's Micrometer MeterRegistry, so they appear on /actuator/metrics (and in whatever the registry exports to) with no wiring.

Active when llm4s-observability-micrometer is on the classpath and the context has a MeterRegistry bean, as Spring Boot Actuator provides. The starter declares that module provided, like Actuator itself, so an application opts in by adding the dependency. A MetricsCollector bean of the application's own replaces this one; the client bean reports to every MetricsCollector bean there is.

It runs after the auto-configurations that create the MeterRegistry, so @ConditionalOnBean sees it. They are named as strings, because Actuator is optional, and Spring Boot 4 moved them from org.springframework.boot.actuate.autoconfigure.metrics (spring-boot-actuator-autoconfigure) to org.springframework.boot.micrometer.metrics.autoconfigure (spring-boot-micrometer-metrics), so both names are listed; Spring ignores a name that is not on the classpath. LlmMetricsAutoConfigurationOrderingSpec fails if a Boot 3 name stops resolving on the Boot version the starter is tested against, or if the Boot 4 names are dropped.

Attributes

Supertypes
class Object
trait Matchable
class Any

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type