Module: Ask::LLM::Sources::OpenRouter

Defined in:
lib/ask/llm/sources/openrouter.rb

Constant Summary collapse

API_URL =
"https://openrouter.ai/api/v1/models"
MODELS_DIR =
File.expand_path("../models", __dir__)
PROVIDER_MAP =
{
  "openai"      => "openai",
  "anthropic"   => "anthropic",
  "google"      => "gemini",
  "deepseek"    => "deepseek",
  "mistralai"   => "mistral",
  "meta-llama"  => "meta",
  "x-ai"        => "xai",
  "perplexity"  => "perplexity",
  "amazon"      => "bedrock",
  "groq"        => "groq",
  "together"    => "together",
  "fireworks"   => "fireworks",
  "cerebras"    => "cerebras",
  "moonshotai"  => "moonshot",
  "nvidia"      => "nvidia_nim",
  "cohere"      => nil,
  "qwen"        => nil,
  "minimax"     => nil,
  "z-ai"        => nil,
  "replicate"   => nil,
  "nousresearch" => nil
}.freeze
REGISTERED_SLUGS =

All provider slugs we support (canonical + OpenAI-compatible).

%w[
  openai anthropic gemini bedrock ollama mistral cloudflare
  aiml ai21 anyscale cerebras deepinfra deepseek
  featherless fireworks friendli github groq hyperbolic
  meta mimo moonshot nebius novita nscale nvidia_nim
  opencode opencode_go openrouter perplexity sambanova
  together xai
].to_set.freeze

Class Method Summary collapse

Class Method Details

.update!Object



50
51
52
53
54
55
56
57
58
# File 'lib/ask/llm/sources/openrouter.rb', line 50

def update!
  models = fetch
  entries = parse(models)
  write_provider_files(entries)
  total = entries.length
  providers = entries.group_by { |e| e[:provider] }.size
  puts "OpenRouter: #{total} models across #{providers} providers."
  total
end