Packages
nous
0.16.2
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
lib/nous/providers/mistral.ex
defmodule Nous.Providers.Mistral do
@moduledoc """
Mistral AI provider implementation.
Uses the OpenAI-compatible API with Mistral-specific extensions:
- `reasoning_mode` - Enable reasoning mode for complex tasks
- `prediction_mode` - Enable prediction mode
- `safe_prompt` - Enable safe prompt filtering
## Configuration
Set your API key via environment variable:
export MISTRAL_API_KEY="your-mistral-api-key-here"
Or in config:
config :nous, :mistral,
api_key: "your-mistral-api-key-here"
## Usage
# Via Model.parse
model = Nous.Model.parse("mistral:mistral-large-latest")
# Direct provider usage
{:ok, response} = Nous.Providers.Mistral.chat(%{
"model" => "mistral-large-latest",
"messages" => [%{"role" => "user", "content" => "Hello"}]
})
# With reasoning mode
{:ok, response} = Nous.Providers.Mistral.chat(%{
"model" => "mistral-large-latest",
"messages" => messages,
"reasoning_mode" => true
})
"""
use Nous.Provider,
id: :mistral,
default_base_url: "https://api.mistral.ai/v1",
default_env_key: "MISTRAL_API_KEY"
alias Nous.Providers.HTTP
@default_timeout 180_000
@streaming_timeout 300_000
@impl Nous.Provider
def chat(params, opts \\ []) do
url = "#{base_url(opts)}/chat/completions"
headers = build_headers(api_key(opts))
timeout = Keyword.get(opts, :timeout, @default_timeout)
HTTP.post(url, params, headers, timeout: timeout)
end
@impl Nous.Provider
def chat_stream(params, opts \\ []) do
url = "#{base_url(opts)}/chat/completions"
headers = build_headers(api_key(opts))
timeout = Keyword.get(opts, :timeout, @streaming_timeout)
finch_name = Keyword.get(opts, :finch_name, Nous.Finch)
params = Map.put(params, "stream", true)
HTTP.stream(url, params, headers, timeout: timeout, finch_name: finch_name)
end
defp build_headers(api_key) do
HTTP.json_headers() ++ HTTP.bearer_auth_header(api_key)
end
end