Policy
Include a model id when all of the following hold:
- It appears in the OpenRouter models API (
resourceabove).[^openrouter-models] pricing.promptandpricing.completionare both numeric 0 (not missing).- It is chat-oriented — same idea as
isChatModel()in the app: drop ids whose lowercase form contains non-chat patterns such asembed,tts,transcribe,realtime,moderation,ocr,guard,safety,reward,whisper,lyria,imagen,image,veo, and similar.
Prefer :free suffix ids and known routers such as openrouter/free.
Store ids lowercase. Free-ness applies only to the OpenRouter service instance, never as global model metadata.
Current set
Snapshot mirrored into FreeTierModels.openRouterFree (runtime). Replace this list only via the refresh playbook.
cohere/north-mini-code:freegoogle/gemma-4-26b-a4b-it:freegoogle/gemma-4-31b-it:freeinclusionai/ling-3.0-tiny:freenvidia/nemotron-3-nano-30b-a3b:freenvidia/nemotron-3-nano-omni-30b-a3b-reasoning:freenvidia/nemotron-3-super-120b-a12b:freenvidia/nemotron-3-ultra-550b-a55b:freenvidia/nemotron-3.5-lightning:freenvidia/nemotron-nano-12b-v2-vl:freenvidia/nemotron-nano-9b-v2:freeopenai/gpt-oss-20b:freeopenrouter/freepoolside/laguna-s-2.1:freepoolside/laguna-xs-2.1:free
Notes
- Runtime lookup is exact string match on the lowercase model id (no alias normalization for OpenRouter).
- When unsure, leave the id out (conservative).
[^openrouter-models]: OpenRouter models API