Class LlmProviderSniffer

java.lang.Object
org.mockserver.llm.client.LlmProviderSniffer

public final class LlmProviderSniffer extends Object
Maps a forwarded request's target host/URL to an LLM Provider, enabling GenAI observability on the proxy/forward path. Pure function of its inputs (request host/path, configuration) — no shared mutable state.

Detection order:

  1. Well-known provider hosts (exact or wildcard match)
  2. Configured mockserver.llmBaseUrl Ollama host match
  3. Fallback to configured mockserver.llmProvider — only when the request path looks like an LLM endpoint (contains any of /chat/completions, /messages, /completions, /responses, /embeddings, /v1/, :generatecontent, /api/generate, /api/chat)
Returns Optional.empty() when the request is not LLM traffic.
  • Method Details

    • sniff

      public static Optional<Provider> sniff(HttpRequest forwardedRequest)
      Sniff the LLM provider from a forwarded request's target host.
      Parameters:
      forwardedRequest - the request that was forwarded to the upstream
      Returns:
      the detected provider, or empty if this is not LLM traffic
    • sniffByHost

      public static Optional<Provider> sniffByHost(String host)
      Sniff the LLM provider from an explicit host string (for unit testing or callers that already have the host extracted). Equivalent to sniffByHostAndPath(host, null) — the configured-provider fallback is only applied when the path looks like an LLM endpoint, so with a null path the fallback is skipped.
    • sniffByHostAndPath

      public static Optional<Provider> sniffByHostAndPath(String host, String path)
      Sniff the LLM provider from an explicit host and path.
      Parameters:
      host - the target host (may be null)
      path - the request path (may be null) — used only for the configured-provider fallback gate
    • extractModelFromResponse

      public static String extractModelFromResponse(HttpResponse response)
      Extract the model name from the forwarded response body. Providers typically include a "model" field in their JSON response (OpenAI, Anthropic, Gemini use this pattern). Returns null if extraction fails.
    • extractModelFromRequest

      public static String extractModelFromRequest(HttpRequest request)
      Extract the model name from the forwarded request body. Providers typically include a "model" field in their JSON request body. Returns null if extraction fails.