# `Puck.Backends.Mock`
[🔗](https://github.com/bradleygolden/puck/blob/v0.2.25/lib/puck/backends/mock.ex#L1)

Mock backend for testing.

Supports two modes: static (single response) and queue-based (multiple sequential responses).

## Static Mode Options

- `:response` - Response content (default: "Mock response")
- `:stream_chunks` - List of chunks for streaming
- `:error` - Return this error instead of response
- `:finish_reason` - Finish reason (default: `:stop`)
- `:delay` - Delay in milliseconds
- `:model` - Model name for introspection (default: "mock")

## Queue Mode Options

- `:queue_pid` - PID of an Agent holding a list of responses (enables queue mode)
- `:default` - Response when queue is exhausted (default: `{:error, :mock_responses_exhausted}`)
- `:finish_reason` - Finish reason (default: `:stop`)
- `:delay` - Delay in milliseconds
- `:model` - Model name for introspection (default: "mock")

## Response Types (Queue Mode)

In queue mode, each response can be:
- Any term (returned as response content)
- `{:error, reason}` (simulates LLM error)
- `fn messages -> response end` (dynamic, receives conversation history)

## Examples

    # Static mode
    client = Puck.Client.new({Puck.Backends.Mock, response: "Hello!"})
    client = Puck.Client.new({Puck.Backends.Mock, error: :rate_limited})

    # Queue mode (prefer using Puck.Test.mock_client/2)
    {:ok, queue} = Agent.start_link(fn -> ["First", "Second", "Third"] end)
    client = Puck.Client.new({Puck.Backends.Mock, queue_pid: queue})

See `Puck.Test.mock_client/2` for the preferred way to create queue-based mock clients.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
