The Browse OpenRouter Models section fetches the live model catalog from OpenRouter:
Each model shows context length, pricing, and release date to help you choose.
Each model is defined by a JSON configuration with NO outer braces. Example:
"endpoint": "https://openrouter.ai/api/v1/responses", "model_id": "anthropic/claude-3.5-sonnet", "api_key_id": "123456", "system_prompt": "", "max_output_tokens": null, "temperature": 1.0
You can use any model from OpenRouter that supports the Responses API. Popular options include:
anthropic/claude-3.5-sonnet - Claude 3.5 Sonnetopenai/gpt-4o - GPT-4ogoogle/gemini-pro - Google Gemini Prometa-llama/llama-3-70b-instruct - Llama 3 70BSet "system_prompt": "Your prompt here" in each model's config to give it a unique personality.
Use the "Active System Prompt" dropdown in the model picker to temporarily override all models' prompts.
You can set the number of iterations (1-100) to control how many times models reply:
In multi-model conversations (Serial, Rotating, Autonomous), all participants are treated equally with no hierarchy:
Mode-Specific Behavior:
Multiple Instances: You can select multiple instances of the same model by using the number input next to each model in the picker. The model name is simply a chat identifier to distinguish between different instances - multiple instances of the same underlying model can participate with different names (e.g., "GPT-4 Debater 1" and "GPT-4 Debater 2").
This app uses OpenRouter's Responses API, providing access to 100+ AI models through a modern streaming API:
Visit openrouter.ai to get your API key and browse available models.
Click "Edit" button below any AI response to manually modify it before continuing the conversation.
Click "Regenerate" to have the same model create a different response.
Click "Continue" on any AI response to have the model extend/finish that response. Useful when a response was cut off or you want more detail.
Click "Prefill" to start typing the beginning of an AI response. The model will continue from where you left off. Great for guiding the model's response style or format.
Click on any participant name (user or model) in the chat to edit it. This lets you customize how participants are identified in the conversation.
Click "→ User" or "→ Assistant" buttons next to any message to convert it between user and assistant roles. This is useful for restructuring conversations or creating custom dialogue flows.
Click "Edit" button on your own messages to revise and branch the conversation from that point.
Click the "Attach" button to attach files. Supported file types:
Files are kept in context and will be included when you "Edit & Resend" messages.
The application supports receiving images from image generation models:
Customize your model behavior with these parameters (set to null to use defaults):
temperature (0.0-2.0): Randomness/creativity level. Lower = more deterministic, higher = more creative.max_output_tokens: Maximum tokens in response. Set based on expected response length.top_p (0.0-1.0): Nucleus sampling - limits choices to tokens whose probabilities sum to P.top_k: Limits choices to top K most likely tokens. Value of 1 = always pick most likely.frequency_penalty (-2.0 to 2.0): Reduce word repetition based on frequency in text.presence_penalty (-2.0 to 2.0): Encourage topic diversity by penalizing tokens already present.seed: Integer for deterministic/reproducible outputs (not guaranteed for all models).stop: Array of sequences that will stop generation (e.g., ["END", "\n\n"]).tools: Array of function definitions the model can call. Each tool has type, name, description, and parameters.tool_choice: Control tool usage - "auto" (model decides), "none" (disabled), "required" (must use), or specific tool object.parallel_tool_calls: Boolean to allow/disallow simultaneous tool invocations.text: Configure output format. Options:
{"format": {"type": "text"}} - Default text output{"format": {"type": "json_object"}} - JSON mode{"format": {"type": "json_schema", "name": "...", "schema": {...}}} - Structured output{"verbosity": "low"|"medium"|"high"} - Control response lengthreasoning: Configure extended thinking for supported models (O1, Claude, etc.):
effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh"summary: "auto" | "concise" | "detailed"max_tokens: Limit reasoning tokensenabled: Boolean to enable/disableprovider: Control which providers handle your request:
allow_fallbacks: Boolean (default: true) - Allow fallback to other providersrequire_parameters: Boolean - Only route to providers supporting all paramsdata_collection: "allow" | "deny" - Control data collectionzdr: Boolean - Restrict to Zero Data Retention endpointsorder: Array of provider slugs for preference orderonly: Array of provider slugs to exclusively useignore: Array of provider slugs to avoidquantizations: Array of acceptable quantizations ("int4", "int8", "fp8", "fp16", etc.)sort: "price" | "throughput" | "latency" - How to rank providersmax_price: {prompt, completion, image, request} - Price limits per million tokensplugins: Array of optional plugins:
{"id": "web"} - Web search plugin with options: enabled, max_results, search_prompt, engine ("native"|"exa"){"id": "moderation"} - Content moderation plugin{"id": "file-parser"} - File parsing with pdf engine options ("mistral-ocr"|"pdf-text"|"native"){"id": "response-healing"} - Auto-fix malformed responsesuser: End-user identifier (max 128 chars) for abuse tracking.session_id: Unique ID (max 128 chars) for grouping related requests.store: Boolean - Store conversation server-side for future reference.metadata: Object with custom key-value string pairs for your tracking.timeout: Request timeout in milliseconds (default: 120000 = 2 minutes). Increase for reasoning models.All data is stored locally in your browser using IndexedDB:
Settings → Export Data creates a JSON file with all your models, API keys, prompts, and current conversation.
Settings → Import Data loads a previously exported JSON file.
History → Clear All History removes all saved conversations.
Messages not sending: Check browser console (F12) for errors, verify API key is correct
Images not working: Ensure you're using a vision-capable model (Claude 3+, GPT-4V, Gemini Pro Vision). Images are always sent with the most recent message.
Mode not updating: Hard refresh (Ctrl+Shift+R or Cmd+Shift+R)
Model deleted: Can't regenerate old messages from deleted models
Multiple images on mobile: IndexedDB storage allows unlimited images even on mobile devices like iPhone
This application is open source and available on GitHub:
https://github.com/mbbrinkman/ResponsesAPIChat
License: CC0 (Public Domain)
You are free to use, modify, distribute, and do basically whatever you want with this code. No attribution required.
Customize how you're identified in multi-model conversations (default: "Human")
Get your API key from openrouter.ai/keys
Fetch and search available models from OpenRouter