# `InstructorLite.Adapters.ResponsesCompatible`
[🔗](https://github.com/martosaur/instructor_lite/blob/v1.3.0/lib/instructor_lite/adapters/responses_compatible.ex#L1)

Adapter for Responses-compatible API endpoints, such as
[OpenAI](https://developers.openai.com/api/reference/resources/responses),
[Grok](https://docs.x.ai/developers/rest-api-reference/inference/chat#create-new-response).

This adapter uses [structured
outputs](https://platform.openai.com/docs/guides/structured-outputs/structured-outputs).

## Params
`params` argument should be shaped as a [Create model response request
body](https://platform.openai.com/docs/api-reference/responses/create).
 
## Example

```
InstructorLite.instruct(%{
    input: [%{role: "user", content: "John is 25yo"}],
    model: "gpt-5.6-luna",
    service_tier: "default"
  },
  response_model: %{name: :string, age: :integer},
  adapter: InstructorLite.Adapters.ResponsesCompatible,
  adapter_context: [
    api_key: Application.fetch_env!(:instructor_lite, :openai_key),
    url: "https://api.openai.com/v1/responses"
  ]
)
{:ok, %{name: "John", age: 25}}
```

# `find_output`

Parse API response in search of plain text output.

Can return:
  * `{:ok, text_output}` on success.
  * `{:error, :refusal, reason}` on [refusal](https://platform.openai.com/docs/guides/structured-outputs/refusals).
  * `{:error, :unexpected_response, response}` if response is of unexpected shape.

# `initial_prompt`

Updates `params` with prompt based on `json_schema` and `notes`.

It uses `instructions` parameter for system prompt.

Also specifies default `gpt-4o-mini` model if not provided by a user. 

# `parse_response`

Parse endpoint response.

Can return:
  * `{:ok, parsed_json}` on success.
  * `{:error, :refusal, reason}` on [refusal](https://platform.openai.com/docs/guides/structured-outputs/refusals).
  * `{:error, :unexpected_response, response}` if response is of unexpected shape.

# `retry_prompt`

Updates `params` with prompt for retrying a request.

If the initial request was made with conversation state (enabled by
default), it will drop previous chat messages from the request and specify
`previous_response_id` instead. If conversation state is disabled, it will
append new messages to the previous `input` the same way chat completions-based
adapters do.

# `send_request`

Make request to API.
  
## Options

* `:api_key` (`t:String.t/0`) - Required. API key

* `:http_client` (`t:atom/0`) - Any module that follows `Req.post/2` interface The default value is `Req`.

* `:http_options` (`t:keyword/0`) - Options passed to `http_client.post/2` The default value is `[receive_timeout: 60000]`.

* `:url` (`t:String.t/0`) - API endpoint to use for sending requests The default value is `"https://api.openai.com/v1/responses"`.

---

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