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

Adapter for Chat Completions-compatible API endpoints, such as
[OpenAI](https://platform.openai.com/docs/api-reference/chat),
[Grok](https://docs.x.ai/docs/api-reference#chat-completions) or
[Gemini](https://ai.google.dev/gemini-api/docs/openai).

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

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

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

# `find_output`

Parse chat completion endpoint 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`.

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

# `parse_response`

Parse chat completion 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.

# `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/chat/completions"`.

---

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