Packages
Unofficial Elixir SDK for the OpenRouter API: chat, anthropic messages, embeddings, speech, transcription, OAuth PKCE, and a versioned model/provider catalog. Not affiliated with or endorsed by the OpenRouter team. Maintained by the San Francisco Voice Company.
Current section
Files
Jump to
Current section
Files
lib/openrouter_sdk.ex
defmodule OpenrouterSdk do
@moduledoc """
thin facade for the most common operations.
full module list:
* `OpenrouterSdk.Api.Chat` — `/chat/completions`
* `OpenrouterSdk.Api.Messages` — `/messages` (anthropic format)
* `OpenrouterSdk.Api.Embeddings` — `/embeddings`
* `OpenrouterSdk.Api.Speech` — `/audio/speech` (only works against a
fixed allowlist of slugs not exposed via `/models` — prefer
`OpenrouterSdk.speak/2`)
* `OpenrouterSdk.Api.Transcription` — `/audio/transcriptions` (broken
on openrouter today — prefer `OpenrouterSdk.transcribe/2`)
* `OpenrouterSdk.Audio` — high-level transcribe + speak via
`/chat/completions`. works against any catalog-listed audio model
* `OpenrouterSdk.Api.Models` — live `/models`
* `OpenrouterSdk.Catalog.Models` — embedded snapshot
* `OpenrouterSdk.Catalog.Providers` — embedded snapshot
* `OpenrouterSdk.OAuth` — pkce primitives
* `OpenrouterSdk.Middleware` — extension behaviour
* `OpenrouterSdk.Config`, `OpenrouterSdk.Error`
the package ships zero retry / rotation policy on purpose. compose
your own via the `Middleware` behaviour.
"""
alias OpenrouterSdk.Api
defdelegate chat(payload, opts \\ []), to: Api.Chat, as: :completions
defdelegate chat_stream(payload, opts \\ []), to: Api.Chat, as: :completions_stream
defdelegate messages(payload, opts \\ []), to: Api.Messages, as: :create
defdelegate messages_stream(payload, opts \\ []), to: Api.Messages, as: :create_stream
defdelegate embeddings(payload, opts \\ []), to: Api.Embeddings, as: :create
defdelegate speech(payload, opts \\ []), to: Api.Speech, as: :create
defdelegate transcription(payload, opts \\ []), to: Api.Transcription, as: :create
# higher-level audio helpers that go through /chat/completions and
# work against any catalog-listed audio model. prefer these over
# `speech/2` and `transcription/2` — see `OpenrouterSdk.Audio`.
defdelegate transcribe(payload, opts \\ []), to: OpenrouterSdk.Audio
defdelegate speak(payload, opts \\ []), to: OpenrouterSdk.Audio
defdelegate models(opts \\ []), to: Api.Models, as: :list
end