Rehydrate Fixture

Minimal native OpenAI Responses pipeline that stores a first turn, rehydrates a stored previous_response_id into the outbound input history, and proxies to a native /v1/responses backend

Category: Test fixture
Task: Minimal native OpenAI Responses pipeline that stores a first turn, rehydrates a stored previous_response_id into the outbound input history, and proxies to a native /v1/responses backend

Prerequisites: The matching test or replay fixture; this is not a standalone deployment configuration.

This configuration comes from the selected release. The example has not been run here; external services are not bundled.

Download the source file.

# Rehydrate Fixture (native Responses continuation)
# Requires `--features store-sqlite` because these filters are opt-in.
#
# Minimal native OpenAI Responses pipeline that stores a first turn,
# rehydrates a stored `previous_response_id` into the outbound `input`
# history, and proxies to a native /v1/responses backend. Purpose-built
# for offline inference-fixture replay (no external callout filters and no
# iterative_request_router), so the replay harness can exercise the full
# store -> rehydrate -> proxy path deterministically.
#
# Pipeline ordering:
#   1. openai_responses_request  — parses the create body once, promotes
#      classification metadata, enriches it, and generates IDs
#   2. openai_response_store     — initializes store, registers in ctx
#   3. openai_responses_rehydrate — resolves previous_response_id into
#      the message history and, on the response path, restores the
#      caller's previous_response_id into the client body — both native
#      JSON responses and streaming SSE lifecycle frames (issue #932)
#   5. openai_responses_proxy    — rebuilds the outbound body from the
#      resolved history and strips previous_response_id upstream
#
# The response_store filter must appear before openai_responses_rehydrate
# so its store backend is registered in `ctx.response_stores` during
# `on_request`.
#
# Build:
#   cargo build -p praxis-ai-proxy --features store-sqlite

listeners:
  - name: ai-gateway
    address: "127.0.0.1:8080"
    filter_chains: [responses-rehydrate-fixture]

filter_chains:
  - name: responses-rehydrate-fixture
    filters:
      - filter: openai_responses_request
        on_invalid: reject

      - filter: state_owner
        mode: single_tenant
        tenant_id: default

      - filter: openai_response_store
        backend: sqlite
        database_url: "sqlite://responses.db?mode=rwc"
        responses_table: openai_responses
        conversations_table: openai_conversations

      - filter: openai_responses_rehydrate

      - filter: openai_responses_proxy
        name: inference

      - filter: router
        routes:
          - path_prefix: "/v1/responses"
            cluster: "inference-backend"

      - filter: load_balancer
        clusters:
          - name: "inference-backend"
            endpoints:
              - "127.0.0.1:3001"

insecure_options:
  allow_private_endpoints: true # example proxies to local backends