ExLLM.Testing.TestResponseInterceptor (ex_llm v0.8.1)

View Source

Automatically intercept and cache responses during tests.

This module hooks into the HTTPClient request/response cycle to provide automatic cache key generation, rich metadata capture, and streaming response reassembly for the test caching system.

Summary

Functions

Build comprehensive metadata for cached responses.

Generate cache key from request parameters and test context.

Generate a unique signature for the request to differentiate similar requests.

Handle streaming response caching.

Intercept a request and check for cached response.

Record cache hit for statistics.

Record cache miss for statistics.

Check if request should be intercepted for caching.

Types

intercept_result()

@type intercept_result() :: {:cached, any()} | {:proceed, map()} | {:error, term()}

Functions

build_response_metadata(request_metadata, response_data, response_info)

@spec build_response_metadata(map(), any(), map()) :: map()

Build comprehensive metadata for cached responses.

generate_cache_key(url, body, headers)

@spec generate_cache_key(String.t(), map(), list()) :: String.t()

Generate cache key from request parameters and test context.

generate_request_signature(body, headers)

@spec generate_request_signature(map(), list()) :: String.t()

Generate a unique signature for the request to differentiate similar requests.

handle_streaming_response(request_metadata, stream_pid)

@spec handle_streaming_response(map(), pid()) :: {:ok, pid()} | {:error, term()}

Handle streaming response caching.

intercept_request(url, body, headers, opts)

@spec intercept_request(String.t(), map(), list(), keyword()) :: intercept_result()

Intercept a request and check for cached response.

record_cache_hit(cache_key, metadata)

@spec record_cache_hit(String.t(), map()) :: :ok

Record cache hit for statistics.

record_cache_miss(cache_key, metadata)

@spec record_cache_miss(String.t(), map()) :: :ok

Record cache miss for statistics.

save_response(request_metadata, response_data, response_info \\ %{})

@spec save_response(map(), any(), map()) :: :ok | {:error, term()}

Save response after successful request.

should_intercept_request?()

@spec should_intercept_request?() :: boolean()

Check if request should be intercepted for caching.