{"version":3,"sources":["../src/lib/utils.ts","../src/lib/agent.ts","../src/lib/error-adapter.ts","../src/lib/http-client.ts","../src/lib/stream-handler.ts","../src/lib/client.ts","../src/models.ts"],"names":["normalizeMarker","marker","Agent","EventEmitter","client","options","defaultMarkers","markers","messages","lastMessage","finalAnswerMarker","thinkingMarker","actionMarker","observationMarker","query","iterations","finalAnswer","assistantMessage","regex","match","toolCall","name","args","parsedArgs","tool","t","result","error","safeArgs","string","eventEmitter","isDone","forceExtraIteration","processedToolCallIds","processIteration","hasFinalAnswer","stream","accumulatedContent","currentToolCalls","lastMarkerType","markerContent","content","type","normalizedMarker","open","close","markerIndex","markerStartIndex","markerEndIndex","toolCalls","id","hasToolMessages","msg","OpenRouterErrorAdapter","status","data","code","message","metadata","baseMessage","HttpClient","baseURL","headers","axios","url","config","StreamHandler","buffer","chunk","lines","line","parsed","choice","role","tool_calls","OpenRouterClient","apiKey","defaultConfig","httpClient","streamHandler","response","generationId","toolCallingModels"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Normalizes a marker to ensure it has open and close properties\n * @param marker String marker or object with open/close properties\n * @returns Object with open and close properties\n */\nexport const normalizeMarker = (\n  marker: string | { open: string; close: string } | undefined,\n): { open: string; close: string } | null => {\n  if (!marker) return null;\n\n  if (typeof marker === \"string\") {\n    return { open: marker, close: marker };\n  }\n\n  return marker;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any -- Allow any type for tool calls */\nimport { EventEmitter } from \"events\";\nimport { OpenRouterClient } from \"./client\";\nimport { AgentMarkers, AgentOptions, Message } from \"../types\";\nimport { RouterModel } from \"../models\";\nimport { normalizeMarker } from \"./utils\";\n\n/**\n * Agent class for performing chain-of-thought reasoning with LLMs\n */\nexport class Agent extends EventEmitter {\n  private client: OpenRouterClient;\n  private options: Required<AgentOptions>;\n  private messages: Message[] = [];\n  private normalizedMarkers: {\n    thinking: { open: string; close: string } | null;\n    action: { open: string; close: string } | null;\n    observation: { open: string; close: string } | null;\n    finalAnswer: { open: string; close: string } | null;\n  };\n\n  constructor(client: OpenRouterClient, options: AgentOptions = {}) {\n    super();\n    this.client = client;\n\n    // Default markers for UI rendering\n    const defaultMarkers: AgentMarkers = {\n      thinking: \"<thinking>\",\n      action: \"<action>\",\n      observation: \"<observation>\",\n      finalAnswer: \"<answer>\",\n    };\n\n    const markers = options.markers ?? defaultMarkers;\n\n    // Normalize markers for easier handling\n    this.normalizedMarkers = {\n      thinking: normalizeMarker(markers.thinking),\n      action: normalizeMarker(markers.action),\n      observation: normalizeMarker(markers.observation),\n      finalAnswer: normalizeMarker(markers.finalAnswer),\n    };\n\n    this.options = {\n      maxIterations: options.maxIterations ?? 5,\n      model: options.model ?? (\"anthropic/claude-3.7-sonnet\" as RouterModel),\n      prependDefaultPrompt: options.prependDefaultPrompt ?? false,\n      systemPrompt: options.prependDefaultPrompt\n        ? this.getDefaultSystemPrompt(markers) + \"\\n\\n\" + options.systemPrompt\n        : (options.systemPrompt ?? this.getDefaultSystemPrompt(markers)),\n      tools: options.tools ?? [],\n      verbose: options.verbose ?? false,\n      markers: markers,\n      stopCondition:\n        options.stopCondition ?? this.defaultStopCondition.bind(this),\n    };\n\n    // Initialize with system message\n    this.messages.push({\n      role: \"system\",\n      content: this.options.systemPrompt,\n    });\n  }\n\n  /**\n   * Default stop condition - checks if the message contains the final answer marker\n   */\n  private defaultStopCondition(messages: Message[]): boolean {\n    const lastMessage = messages[messages.length - 1];\n    const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n\n    if (!finalAnswerMarker) return false;\n\n    return (\n      lastMessage.role === \"assistant\" &&\n      typeof lastMessage.content === \"string\" &&\n      lastMessage.content.includes(finalAnswerMarker.open)\n    );\n  }\n\n  /**\n   * Gets the default system prompt with markers\n   */\n  private getDefaultSystemPrompt(markers: AgentMarkers): string {\n    const thinkingMarker = normalizeMarker(markers.thinking);\n    const actionMarker = normalizeMarker(markers.action);\n    const observationMarker = normalizeMarker(markers.observation);\n    const finalAnswerMarker = normalizeMarker(markers.finalAnswer);\n\n    return `You are a helpful assistant that solves tasks step by step.\n\n${\n  thinkingMarker\n    ? `When you're analyzing a problem or thinking about it, wrap your thoughts in ${thinkingMarker.open} and ${thinkingMarker.close} tags.\nExample: ${thinkingMarker.open}I need to break this problem into parts: first calculate X, then Y${thinkingMarker.close}`\n    : \"\"\n}\n\n${\n  actionMarker\n    ? `When you decide to use a tool, wrap your reasoning in ${actionMarker.open} and ${actionMarker.close} tags.\nExample: ${actionMarker.open}I'll search for information about climate change${actionMarker.close}`\n    : \"\"\n}\n\n${\n  observationMarker\n    ? `After getting information, wrap your observations in ${observationMarker.open} and ${observationMarker.close} tags.\nExample: ${observationMarker.open}The search revealed that global temperatures have risen by 1.1°C${observationMarker.close}`\n    : \"\"\n}\n\n${\n  finalAnswerMarker\n    ? `When you have a final answer, wrap it in ${finalAnswerMarker.open} and ${finalAnswerMarker.close} tags.\nExample: ${finalAnswerMarker.open}Based on my analysis, the answer is 42${finalAnswerMarker.close}`\n    : \"\"\n}\n\nUse ONLY these markers for structuring your responses. Only use ${finalAnswerMarker?.open} when you're completely done with the task.`;\n  }\n\n  /**\n   * Run the agent on a query (non-streaming)\n   */\n  async run(query: string): Promise<string> {\n    // Add the user query\n    this.messages.push({ role: \"user\", content: query });\n\n    let iterations = 0;\n    let finalAnswer: string | null = null;\n\n    while (iterations < this.options.maxIterations && finalAnswer === null) {\n      iterations++;\n\n      if (this.options.verbose) {\n        this.emit(\"iteration\", {\n          iteration: iterations,\n          messages: this.messages,\n        });\n      }\n\n      // Think: Ask the LLM\n      const response = await this.client.chatCompletion({\n        messages: this.messages,\n        model: this.options.model,\n        tools: this.formatTools(),\n      });\n\n      // Get the assistant's response\n      const assistantMessage = response.choices[0].message as Message & {\n        tool_calls?: any[];\n      };\n      this.messages.push(assistantMessage as Message);\n\n      // Emit the response\n      this.emit(\"response\", assistantMessage);\n\n      // Check if the stop condition is met\n      if (this.options.stopCondition(this.messages)) {\n        const lastMessage = this.messages[this.messages.length - 1];\n        if (typeof lastMessage.content === \"string\") {\n          // Extract the final answer from within the markers\n          const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n\n          if (finalAnswerMarker) {\n            const regex = new RegExp(\n              `${this.escapeRegExp(finalAnswerMarker.open)}(.*?)${this.escapeRegExp(finalAnswerMarker.close)}`,\n              \"s\",\n            );\n            const match = lastMessage.content.match(regex);\n\n            finalAnswer = match ? match[1].trim() : lastMessage.content;\n            this.emit(\"final_answer\", finalAnswer);\n          } else {\n            finalAnswer = lastMessage.content;\n          }\n        } else {\n          finalAnswer = \"RECEIVED_NON_STRING_FINAL_ANSWER\";\n        }\n\n        break;\n      }\n\n      // Check if there are tool calls\n      if (\n        assistantMessage.tool_calls &&\n        assistantMessage.tool_calls.length > 0\n      ) {\n        for (const toolCall of assistantMessage.tool_calls) {\n          if (toolCall.type === \"function\") {\n            const { name, arguments: args } = toolCall.function;\n            const parsedArgs = args && args.trim() ? JSON.parse(args) : {};\n\n            // Find the tool\n            const tool = this.options.tools.find((t) => t.name === name);\n\n            if (tool) {\n              try {\n                // Emit tool call event\n                this.emit(\"tool_call\", { name, args: parsedArgs });\n\n                // Act: Execute the tool\n                const result = await tool.execute(parsedArgs);\n\n                // Observe: Add the result back to messages\n                this.messages.push({\n                  role: \"tool\",\n                  tool_call_id: toolCall.id,\n                  content: JSON.stringify(result),\n                });\n\n                this.emit(\"tool_result\", {\n                  tool: name,\n                  args: parsedArgs,\n                  result,\n                });\n              } catch (error) {\n                // Handle tool execution error\n                this.messages.push({\n                  role: \"tool\",\n                  tool_call_id: toolCall.id,\n                  content: JSON.stringify({ error: String(error) }),\n                });\n\n                // Safely parse args or use empty object if parsing fails\n                let safeArgs = {};\n                try {\n                  if (args && args.trim()) {\n                    safeArgs = JSON.parse(args);\n                  }\n                } catch {\n                  // If JSON parsing fails, keep empty object\n                }\n\n                this.emit(\"tool_error\", {\n                  tool: name,\n                  args: safeArgs,\n                  error,\n                });\n              }\n            }\n          }\n        }\n      }\n    }\n\n    if (finalAnswer === null) {\n      finalAnswer = \"MAX_ITERATIONS_REACHED_WITHOUT_FINAL_ANSWER\";\n    }\n\n    // Check if the last message was from a tool and no final answer was given\n    const lastMessage = this.messages[this.messages.length - 1];\n    const isLastMessageTool = lastMessage?.role === \"tool\";\n\n    if (\n      isLastMessageTool &&\n      finalAnswer === \"MAX_ITERATIONS_REACHED_WITHOUT_FINAL_ANSWER\"\n    ) {\n      finalAnswer = \"ANSWER_AFTER_TOOL_NOT_GIVEN\";\n    }\n\n    this.emit(\"complete\");\n    return finalAnswer;\n  }\n\n  /**\n   * Helper method to escape special regex characters\n   */\n  private escapeRegExp(string: string): string {\n    return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  }\n\n  /**\n   * Run the agent on a query with streaming support\n   */\n  async runStream(query: string): Promise<EventEmitter> {\n    const eventEmitter = new EventEmitter();\n\n    // Add the user query\n    this.messages.push({ role: \"user\", content: query });\n\n    let iterations = 0;\n    let isDone = false;\n    let forceExtraIteration = false;\n    // Track processed tool calls to avoid duplicates\n    const processedToolCallIds = new Set<string>();\n\n    const processIteration = async () => {\n      if (iterations >= this.options.maxIterations || isDone) {\n        if (iterations >= this.options.maxIterations && !isDone) {\n          // We reached max iterations without a final answer\n          const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n          let hasFinalAnswer = false;\n\n          // Check if we have already emitted a final answer\n          if (\n            finalAnswerMarker &&\n            this.messages.length > 0 &&\n            typeof this.messages[this.messages.length - 1].content === \"string\"\n          ) {\n            const lastContent = this.messages[this.messages.length - 1]\n              .content as string;\n            hasFinalAnswer = lastContent.includes(finalAnswerMarker.open);\n          }\n\n          if (!hasFinalAnswer) {\n            eventEmitter.emit(\n              \"final_answer\",\n              \"MAX_ITERATIONS_REACHED_WITHOUT_FINAL_ANSWER\",\n            );\n          }\n        }\n\n        eventEmitter.emit(\"complete\");\n        return;\n      }\n\n      iterations++;\n\n      if (this.options.verbose) {\n        eventEmitter.emit(\"iteration\", {\n          iteration: iterations,\n          messages: this.messages,\n        });\n      }\n\n      try {\n        // Think: Ask the LLM with streaming enabled\n        const stream = await this.client.chatCompletion({\n          messages: this.messages,\n          model: this.options.model,\n          tools: this.formatTools(),\n          stream: true,\n        });\n\n        let accumulatedContent = \"\";\n        let currentToolCalls: any[] = [];\n        let lastMarkerType: string | null = null;\n        let markerContent = \"\";\n\n        // Handle streaming tokens\n        stream.on(\"content\", (content: string) => {\n          accumulatedContent += content;\n          eventEmitter.emit(\"token\", content);\n\n          // Look for markers in the accumulated content\n          for (const [type, normalizedMarker] of Object.entries(\n            this.normalizedMarkers,\n          )) {\n            if (!normalizedMarker) continue;\n            const { open, close } = normalizedMarker;\n\n            // Check for opening marker\n            if (accumulatedContent.includes(open) && !lastMarkerType) {\n              const markerIndex = accumulatedContent.lastIndexOf(open);\n              if (\n                markerIndex !== -1 &&\n                markerIndex + open.length <= accumulatedContent.length\n              ) {\n                lastMarkerType = type;\n                markerContent = \"\";\n\n                // Emit marker start event\n                eventEmitter.emit(\"marker\", {\n                  type,\n                  content: \"\",\n                });\n              }\n            }\n\n            // Check for closing marker (only if we're in a marker section)\n            if (lastMarkerType === type && accumulatedContent.includes(close)) {\n              const markerStartIndex = accumulatedContent.indexOf(open);\n              const markerEndIndex = accumulatedContent.lastIndexOf(close);\n\n              // If we have both opening and closing markers\n              if (\n                markerStartIndex !== -1 &&\n                markerEndIndex > markerStartIndex\n              ) {\n                // Extract the content between markers\n                markerContent = accumulatedContent.substring(\n                  markerStartIndex + open.length,\n                  markerEndIndex,\n                );\n\n                // Emit the complete marker content\n                eventEmitter.emit(\"marker\", {\n                  type,\n                  content: markerContent,\n                });\n\n                lastMarkerType = null;\n                markerContent = \"\";\n              }\n            }\n          }\n        });\n\n        // Handle tool calls from streaming\n        stream.on(\"tool_calls\", (toolCalls: any) => {\n          currentToolCalls = currentToolCalls.concat(toolCalls);\n          // Emit the stream_tool_calls event for UI updates\n          eventEmitter.emit(\"stream_tool_calls\", toolCalls);\n        });\n\n        // Handle errors during streaming\n        stream.on(\"error\", (error: Error) => {\n          eventEmitter.emit(\"error\", error);\n\n          // Emit a synthetic final answer when an error occurs\n          if (!isDone) {\n            const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n            let hasFinalAnswer = false;\n\n            // Check if we have already emitted a final answer\n            if (\n              finalAnswerMarker &&\n              this.messages.length > 0 &&\n              typeof this.messages[this.messages.length - 1].content ===\n                \"string\"\n            ) {\n              const lastContent = this.messages[this.messages.length - 1]\n                .content as string;\n              hasFinalAnswer = lastContent.includes(finalAnswerMarker.open);\n            }\n\n            if (!hasFinalAnswer) {\n              eventEmitter.emit(\n                \"final_answer\",\n                \"Encountered an error while processing the request.\",\n              );\n            }\n\n            eventEmitter.emit(\"complete\");\n          }\n\n          isDone = true;\n        });\n\n        // When streaming is complete\n        stream.on(\"done\", async () => {\n          // Create the assistant message\n          const assistantMessage: Message = {\n            role: \"assistant\",\n            content: accumulatedContent,\n          };\n\n          // If we have tool calls, add them to the message\n          if (currentToolCalls.length > 0) {\n            (assistantMessage as any).tool_calls = currentToolCalls;\n          }\n\n          this.messages.push(assistantMessage);\n          eventEmitter.emit(\"response\", assistantMessage);\n\n          // Check if the stop condition is met\n          if (this.options.stopCondition(this.messages)) {\n            isDone = true;\n\n            // Extract final answer if present\n            const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n            if (\n              finalAnswerMarker &&\n              typeof assistantMessage.content === \"string\"\n            ) {\n              const regex = new RegExp(\n                `${this.escapeRegExp(finalAnswerMarker.open)}(.*?)${this.escapeRegExp(finalAnswerMarker.close)}`,\n                \"s\",\n              );\n              const match = assistantMessage.content.match(regex);\n\n              const finalAnswer = match\n                ? match[1].trim()\n                : assistantMessage.content;\n              eventEmitter.emit(\"final_answer\", finalAnswer);\n            }\n\n            eventEmitter.emit(\"complete\");\n            return;\n          }\n\n          // Process tool calls if any\n          if (currentToolCalls.length > 0) {\n            for (const toolCall of currentToolCalls) {\n              if (toolCall.type === \"function\") {\n                const {\n                  id,\n                  function: { name, arguments: args },\n                } = toolCall;\n\n                // Skip if we've already processed this tool call\n                if (processedToolCallIds.has(id)) continue;\n                processedToolCallIds.add(id);\n\n                try {\n                  const parsedArgs =\n                    args && args.trim() ? JSON.parse(args) : {};\n\n                  // Find the tool\n                  const tool = this.options.tools.find((t) => t.name === name);\n\n                  if (tool) {\n                    // Emit tool_call event for each executed tool\n                    eventEmitter.emit(\"tool_call\", { name, args: parsedArgs });\n\n                    // Act: Execute the tool\n                    const result = await tool.execute(parsedArgs);\n\n                    // Observe: Add the result back to messages\n                    this.messages.push({\n                      role: \"tool\",\n                      tool_call_id: id,\n                      content: JSON.stringify(result),\n                    });\n\n                    eventEmitter.emit(\"tool_result\", {\n                      tool: name,\n                      args: parsedArgs,\n                      result,\n                    });\n                  }\n                } catch (error) {\n                  // Handle tool execution error\n                  this.messages.push({\n                    role: \"tool\",\n                    tool_call_id: id,\n                    content: JSON.stringify({ error: String(error) }),\n                  });\n\n                  // Safely parse args or use empty object if parsing fails\n                  let safeArgs = {};\n                  try {\n                    if (args && args.trim()) {\n                      safeArgs = JSON.parse(args);\n                    }\n                  } catch {\n                    // If JSON parsing fails, keep empty object\n                  }\n\n                  eventEmitter.emit(\"tool_error\", {\n                    tool: name,\n                    args: safeArgs,\n                    error,\n                  });\n\n                  // Set the force extra iteration flag to ensure one more pass\n                  // even when a tool errors out\n                  forceExtraIteration = true;\n                }\n              }\n            }\n\n            // Reset for next iteration\n            currentToolCalls = [];\n\n            forceExtraIteration = true; // Always do one more iteration after tool calls\n            // Continue with next iteration\n            setTimeout(processIteration, 0);\n          } else {\n            // No tool calls, check if we need to continue\n            if (!isDone && forceExtraIteration) {\n              forceExtraIteration = false;\n              setTimeout(processIteration, 0);\n            } else if (!isDone) {\n              // Before we complete, check if we've emitted a final answer\n              let hasFinalAnswer = false;\n\n              // Check last message for final answer marker\n              const finalAnswerMarker = this.normalizedMarkers.finalAnswer;\n              if (\n                finalAnswerMarker &&\n                this.messages.length > 0 &&\n                typeof this.messages[this.messages.length - 1].content ===\n                  \"string\"\n              ) {\n                const lastContent = this.messages[this.messages.length - 1]\n                  .content as string;\n                hasFinalAnswer = lastContent.includes(finalAnswerMarker.open);\n              }\n\n              // Check if any tool calls were made during the conversation\n              const hasToolMessages = this.messages.some(\n                (msg) => msg.role === \"tool\",\n              );\n\n              // If no final answer found after last iteration, emit a synthetic one\n              if (!hasFinalAnswer && !isDone) {\n                if (hasToolMessages) {\n                  // Only emit this specific message if tools were actually used\n                  eventEmitter.emit(\n                    \"final_answer\",\n                    \"ANSWER_AFTER_TOOL_NOT_GIVEN\",\n                  );\n                } else {\n                  // Otherwise emit a more generic message\n                  eventEmitter.emit(\n                    \"final_answer\",\n                    \"MAX_ITERATIONS_REACHED_WITHOUT_FINAL_ANSWER\",\n                  );\n                }\n              }\n\n              isDone = true;\n              eventEmitter.emit(\"complete\");\n            }\n          }\n        });\n      } catch (error) {\n        eventEmitter.emit(\"error\", error);\n        isDone = true;\n      }\n    };\n\n    // Start the first iteration\n    processIteration();\n\n    return eventEmitter;\n  }\n\n  /**\n   * Format tools for the LLM API\n   */\n  private formatTools(): any[] {\n    return this.options.tools.map((tool) => ({\n      type: \"function\",\n      function: {\n        name: tool.name,\n        description: tool.description,\n        parameters: tool.parameters,\n      },\n    }));\n  }\n}\n","import { AxiosError } from \"axios\";\n\nexport interface ErrorResponse {\n  error: {\n    code: number;\n    message: string;\n    metadata?: ModerationErrorMetadata | ProviderErrorMetadata;\n  };\n}\n\ninterface ModerationErrorMetadata {\n  reasons: string[];\n  flagged_input: string;\n  provider_name: string;\n  model_slug: string;\n}\n\ninterface ProviderErrorMetadata {\n  provider_name: string;\n  raw: unknown;\n}\n\nexport class OpenRouterErrorAdapter {\n  private static readonly ERROR_MESSAGES = {\n    400: \"Bad Request: Invalid or missing parameters, or CORS issue\",\n    401: \"Invalid credentials: OAuth session expired or disabled/invalid API key\",\n    402: \"Insufficient credits: Add more credits and retry the request\",\n    403: \"Content moderation: Your input was flagged\",\n    408: \"Request timeout: Your request took too long to process\",\n    429: \"Rate limited: You are sending too many requests\",\n    502: \"Provider error: Model is down or invalid response received\",\n    503: \"No provider: No available model provider meets your routing requirements\",\n  } as const;\n\n  static handleError(error: unknown): never {\n    if (this.isAxiosError(error)) {\n      throw this.handleAxiosError(error);\n    }\n\n    throw new Error(\n      `Unexpected error: ${error instanceof Error ? error.message : String(error)}`,\n    );\n  }\n\n  private static isAxiosError(\n    error: unknown,\n  ): error is AxiosError<ErrorResponse> {\n    return error instanceof Error && \"isAxiosError\" in error;\n  }\n\n  private static handleAxiosError(error: AxiosError<ErrorResponse>): Error {\n    if (error.response) {\n      const { status, data } = error.response;\n\n      if (this.isOpenRouterError(data)) {\n        return this.createDetailedError(data.error);\n      }\n\n      return new Error(\n        `HTTP ${status}: ${this.ERROR_MESSAGES[status as keyof typeof this.ERROR_MESSAGES] || \"Unknown error\"}`,\n      );\n    }\n\n    if (error.request) {\n      return new Error(\"No response received from OpenRouter API\");\n    }\n\n    return new Error(`Failed to make request: ${error.message}`);\n  }\n\n  private static isOpenRouterError(data: unknown): data is ErrorResponse {\n    return (\n      typeof data === \"object\" &&\n      data !== null &&\n      \"error\" in data &&\n      typeof (data as ErrorResponse).error.code === \"number\" &&\n      typeof (data as ErrorResponse).error.message === \"string\"\n    );\n  }\n\n  private static createDetailedError({\n    code,\n    message,\n    metadata,\n  }: ErrorResponse[\"error\"]): Error {\n    const baseMessage = `${this.ERROR_MESSAGES[code as keyof typeof this.ERROR_MESSAGES] || \"Unknown error\"}: ${message}`;\n\n    if (!metadata) {\n      return new Error(baseMessage);\n    }\n\n    if (this.isModerationError(metadata)) {\n      return new Error(\n        `${baseMessage}\\nFlagged by ${metadata.provider_name} for: ${metadata.reasons.join(\", \")}\\n` +\n          `Flagged content: \"${metadata.flagged_input}\"`,\n      );\n    }\n\n    if (this.isProviderError(metadata)) {\n      return new Error(\n        `${baseMessage}\\nProvider ${metadata.provider_name} error: ${JSON.stringify(metadata.raw)}`,\n      );\n    }\n\n    return new Error(baseMessage);\n  }\n\n  private static isModerationError(\n    metadata: unknown,\n  ): metadata is ModerationErrorMetadata {\n    return (\n      typeof metadata === \"object\" &&\n      metadata !== null &&\n      \"reasons\" in metadata &&\n      \"flagged_input\" in metadata &&\n      \"provider_name\" in metadata &&\n      \"model_slug\" in metadata\n    );\n  }\n\n  private static isProviderError(\n    metadata: unknown,\n  ): metadata is ProviderErrorMetadata {\n    return (\n      typeof metadata === \"object\" &&\n      metadata !== null &&\n      \"provider_name\" in metadata &&\n      \"raw\" in metadata\n    );\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios, { AxiosInstance } from \"axios\";\nimport { IHttpClient } from \"../types\";\n\nexport class HttpClient implements IHttpClient {\n  private client: AxiosInstance;\n\n  constructor(baseURL: string, headers: Record<string, string>) {\n    this.client = axios.create({\n      baseURL,\n      headers,\n    });\n  }\n\n  async post(url: string, data: any, config?: any) {\n    return this.client.post(url, data, config);\n  }\n\n  async get(url: string) {\n    return this.client.get(url);\n  }\n}\n","import { EventEmitter } from \"events\";\nimport type * as Event from \"events\";\nimport { IStreamHandler } from \"../types\";\nimport { OpenRouterErrorAdapter } from \"./error-adapter\";\n\nexport class StreamHandler implements IStreamHandler {\n  handleStream(stream: Event): EventEmitter {\n    const eventEmitter = new EventEmitter();\n    let buffer = \"\";\n\n    stream.on(\"data\", (chunk: Buffer) => {\n      buffer += chunk.toString();\n      const lines = buffer.split(\"\\n\");\n      buffer = lines.pop() || \"\";\n\n      for (const line of lines) {\n        if (line.trim() === \"\" || line.startsWith(\":\")) {\n          // Handle SSE comments (OpenRouter processing messages)\n          if (line.includes(\"OPENROUTER PROCESSING\")) {\n            eventEmitter.emit(\"processing\");\n          }\n          continue;\n        }\n\n        try {\n          const message = line.replace(/^data: /, \"\");\n          if (message === \"[DONE]\") {\n            eventEmitter.emit(\"done\");\n            continue;\n          }\n\n          const parsed = JSON.parse(message);\n\n          // Emit the full chunk for raw access\n          eventEmitter.emit(\"chunk\", parsed);\n\n          // Handle the standardized response format\n          if (parsed.choices?.[0]) {\n            const choice = parsed.choices[0];\n\n            // For streaming responses, we'll get delta updates\n            if (choice.delta) {\n              // Extract the delta components\n              const { content, role, tool_calls } = choice.delta;\n\n              // Emit specific events for different delta types\n              if (content) {\n                // Emit both for backwards compatibility\n                eventEmitter.emit(\"token\", content);\n                eventEmitter.emit(\"content\", content);\n              }\n              if (role) {\n                eventEmitter.emit(\"role\", role);\n              }\n              if (tool_calls) {\n                eventEmitter.emit(\"tool_calls\", tool_calls);\n              }\n            }\n\n            // Handle finish reason if present\n            if (choice.finish_reason) {\n              eventEmitter.emit(\"finish\", choice.finish_reason);\n            }\n          }\n\n          // Handle usage statistics in the final message\n          if (parsed.usage) {\n            eventEmitter.emit(\"usage\", parsed.usage);\n          }\n        } catch (error) {\n          eventEmitter.emit(\"error\", OpenRouterErrorAdapter.handleError(error));\n        }\n      }\n    });\n\n    stream.on(\"end\", () => eventEmitter.emit(\"done\"));\n    stream.on(\"error\", (error: Error) => {\n      eventEmitter.emit(\"error\", OpenRouterErrorAdapter.handleError(error));\n    });\n\n    return eventEmitter;\n  }\n}\n","import { RouterModel } from \"../models\";\nimport {\n  ChatCompletionResult,\n  GenerationStats,\n  IHttpClient,\n  IStreamHandler,\n  Message,\n  QueryResponseModel,\n  Request,\n} from \"../types\";\nimport { OpenRouterErrorAdapter } from \"./error-adapter\";\nimport { HttpClient } from \"./http-client\";\nimport { StreamHandler } from \"./stream-handler\";\n\ntype BaseRequest = Omit<Request, \"messages\" | \"prompt\">;\n\ntype MessagesRequest = BaseRequest & {\n  messages: Message[];\n  prompt?: never;\n};\n\ntype PromptRequest = BaseRequest & {\n  prompt: string;\n  messages?: never;\n};\n\ntype CompletionRequest = MessagesRequest | PromptRequest;\n\nexport class OpenRouterClient {\n  private readonly baseURL = \"https://openrouter.ai/api/v1\";\n  private httpClient: IHttpClient;\n  private streamHandler: IStreamHandler;\n\n  constructor(\n    private readonly apiKey: string,\n    private readonly defaultConfig: {\n      siteUrl?: string;\n      siteName?: string;\n      model?: RouterModel;\n    } = {\n      model: \"anthropic/claude-3.7-sonnet\",\n    },\n    httpClient?: IHttpClient,\n    streamHandler?: IStreamHandler,\n  ) {\n    this.httpClient =\n      httpClient || new HttpClient(this.baseURL, this.getDefaultHeaders());\n    this.streamHandler = streamHandler || new StreamHandler();\n  }\n\n  private getDefaultHeaders() {\n    const headers: Record<string, string> = {\n      Authorization: `Bearer ${this.apiKey}`,\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (this.defaultConfig.siteUrl) {\n      headers[\"HTTP-Referer\"] = this.defaultConfig.siteUrl;\n    }\n    if (this.defaultConfig.siteName) {\n      headers[\"X-Title\"] = this.defaultConfig.siteName;\n    }\n\n    return headers;\n  }\n\n  async chatCompletion<\n    TStreaming extends boolean = false,\n    TRequest extends CompletionRequest = CompletionRequest,\n  >(\n    options: TRequest & { stream?: TStreaming },\n  ): Promise<ChatCompletionResult<TStreaming, TRequest>> {\n    try {\n      const data = {\n        ...options,\n        model: options.model || this.defaultConfig.model,\n        stream: options.stream,\n      };\n\n      if (options.stream) {\n        const response = await this.httpClient.post(\"/chat/completions\", data, {\n          responseType: \"stream\",\n          signal: options.signal,\n        });\n        // We know it's an EventEmitter if streaming is true\n        return this.streamHandler.handleStream(\n          response.data,\n        ) as ChatCompletionResult<TStreaming, TRequest>;\n      }\n\n      const response = await this.httpClient.post(\"/chat/completions\", data);\n      // TypeScript will infer the correct type based on the request shape\n      return response.data as ChatCompletionResult<TStreaming, TRequest>;\n    } catch (error) {\n      throw OpenRouterErrorAdapter.handleError(error);\n    }\n  }\n\n  async getGenerationStats(generationId: string): Promise<GenerationStats> {\n    try {\n      const response = await this.httpClient.get(\n        `/generation?id=${generationId}`,\n      );\n      return response.data.data; // i shit you not\n    } catch (error) {\n      throw OpenRouterErrorAdapter.handleError(error);\n    }\n  }\n\n  async getModels(): Promise<QueryResponseModel[]> {\n    try {\n      const response = await this.httpClient.get(\"/models\");\n      return response.data.data; // yep\n    } catch (error) {\n      throw OpenRouterErrorAdapter.handleError(error);\n    }\n  }\n}\n","// ! Generated file, do not modify by hand. See packages/openrouter/scripts/generate-models.ts\n\nexport type RouterModel =\n  /** Anthropic: Claude Sonnet 4.5\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4.5\n  */\n  | \"anthropic/claude-sonnet-4.5\"\n  /** DeepSeek: DeepSeek V3.2 Exp\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3.2-exp\n  */\n  | \"deepseek/deepseek-v3.2-exp\"\n  /** TheDrummer: Cydonia 24B V4.1\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/thedrummer/cydonia-24b-v4.1\n  */\n  | \"thedrummer/cydonia-24b-v4.1\"\n  /** Relace: Relace Apply 3\n  @capabilities max_tokens, seed, stop\n  @context_length 256000\n  @url https://openrouter.ai/relace/relace-apply-3\n  */\n  | \"relace/relace-apply-3\"\n  /** Google: Gemini 2.5 Flash Preview 09-2025\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-09-2025\n  */\n  | \"google/gemini-2.5-flash-preview-09-2025\"\n  /** Google: Gemini 2.5 Flash Lite Preview 09-2025\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite-preview-09-2025\n  */\n  | \"google/gemini-2.5-flash-lite-preview-09-2025\"\n  /** Qwen: Qwen3 VL 235B A22B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-vl-235b-a22b-thinking\n  */\n  | \"qwen/qwen3-vl-235b-a22b-thinking\"\n  /** Qwen: Qwen3 VL 235B A22B Instruct\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-vl-235b-a22b-instruct\n  */\n  | \"qwen/qwen3-vl-235b-a22b-instruct\"\n  /** Qwen: Qwen3 Max\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/qwen/qwen3-max\n  */\n  | \"qwen/qwen3-max\"\n  /** Qwen: Qwen3 Coder Plus\n  @capabilities max_tokens, presence_penalty, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-coder-plus\n  */\n  | \"qwen/qwen3-coder-plus\"\n  /** OpenAI: GPT-5 Codex\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-codex\n  */\n  | \"openai/gpt-5-codex\"\n  /** DeepSeek: DeepSeek V3.1 Terminus\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3.1-terminus\n  */\n  | \"deepseek/deepseek-v3.1-terminus\"\n  /** xAI: Grok 4 Fast (free)\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 2000000\n  @url https://openrouter.ai/x-ai/grok-4-fast:free\n  */\n  | \"x-ai/grok-4-fast:free\"\n  /** xAI: Grok 4 Fast\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 2000000\n  @url https://openrouter.ai/x-ai/grok-4-fast\n  */\n  | \"x-ai/grok-4-fast\"\n  /** Tongyi DeepResearch 30B A3B\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/alibaba/tongyi-deepresearch-30b-a3b\n  */\n  | \"alibaba/tongyi-deepresearch-30b-a3b\"\n  /** Qwen: Qwen3 Coder Flash\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-coder-flash\n  */\n  | \"qwen/qwen3-coder-flash\"\n  /** Arcee AI: AFM 4.5B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/arcee-ai/afm-4.5b\n  */\n  | \"arcee-ai/afm-4.5b\"\n  /** OpenGVLab: InternVL3 78B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/opengvlab/internvl3-78b\n  */\n  | \"opengvlab/internvl3-78b\"\n  /** Qwen: Qwen3 Next 80B A3B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-next-80b-a3b-thinking\n  */\n  | \"qwen/qwen3-next-80b-a3b-thinking\"\n  /** Qwen: Qwen3 Next 80B A3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-next-80b-a3b-instruct\n  */\n  | \"qwen/qwen3-next-80b-a3b-instruct\"\n  /** Meituan: LongCat Flash Chat\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meituan/longcat-flash-chat\n  */\n  | \"meituan/longcat-flash-chat\"\n  /** Qwen: Qwen Plus 0728\n  @capabilities max_tokens, presence_penalty, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-plus-2025-07-28\n  */\n  | \"qwen/qwen-plus-2025-07-28\"\n  /** Qwen: Qwen Plus 0728 (thinking)\n  @capabilities include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-plus-2025-07-28:thinking\n  */\n  | \"qwen/qwen-plus-2025-07-28:thinking\"\n  /** NVIDIA: Nemotron Nano 9B V2 (free)\n  @capabilities include_reasoning, reasoning, response_format, structured_outputs, tool_choice, tools\n  @context_length 128000\n  @url https://openrouter.ai/nvidia/nemotron-nano-9b-v2:free\n  */\n  | \"nvidia/nemotron-nano-9b-v2:free\"\n  /** NVIDIA: Nemotron Nano 9B V2\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/nemotron-nano-9b-v2\n  */\n  | \"nvidia/nemotron-nano-9b-v2\"\n  /** MoonshotAI: Kimi K2 0905\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/moonshotai/kimi-k2-0905\n  */\n  | \"moonshotai/kimi-k2-0905\"\n  /** ByteDance: Seed OSS 36B Instruct\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/bytedance/seed-oss-36b-instruct\n  */\n  | \"bytedance/seed-oss-36b-instruct\"\n  /** Cogito V2 Preview Llama 109B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32767\n  @url https://openrouter.ai/deepcogito/cogito-v2-preview-llama-109b-moe\n  */\n  | \"deepcogito/cogito-v2-preview-llama-109b-moe\"\n  /** Deep Cogito: Cogito V2 Preview Deepseek 671B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepcogito/cogito-v2-preview-deepseek-671b\n  */\n  | \"deepcogito/cogito-v2-preview-deepseek-671b\"\n  /** StepFun: Step3\n  @capabilities frequency_penalty, include_reasoning, reasoning, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/stepfun-ai/step3\n  */\n  | \"stepfun-ai/step3\"\n  /** Qwen: Qwen3 30B A3B Thinking 2507\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b-thinking-2507\n  */\n  | \"qwen/qwen3-30b-a3b-thinking-2507\"\n  /** xAI: Grok Code Fast 1\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 256000\n  @url https://openrouter.ai/x-ai/grok-code-fast-1\n  */\n  | \"x-ai/grok-code-fast-1\"\n  /** Nous: Hermes 4 70B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-4-70b\n  */\n  | \"nousresearch/hermes-4-70b\"\n  /** Nous: Hermes 4 405B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-4-405b\n  */\n  | \"nousresearch/hermes-4-405b\"\n  /** Gemini 2.5 Flash Image (Nano Banana)\n  @capabilities max_tokens, response_format, seed, structured_outputs, temperature, top_p\n  @context_length 32768\n  @url https://openrouter.ai/google/gemini-2.5-flash-image-preview\n  */\n  | \"google/gemini-2.5-flash-image-preview\"\n  /** DeepSeek: DeepSeek V3.1 (free)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 163800\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3.1:free\n  */\n  | \"deepseek/deepseek-chat-v3.1:free\"\n  /** DeepSeek: DeepSeek V3.1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3.1\n  */\n  | \"deepseek/deepseek-chat-v3.1\"\n  /** DeepSeek: DeepSeek V3.1 Base\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3.1-base\n  */\n  | \"deepseek/deepseek-v3.1-base\"\n  /** OpenAI: GPT-4o Audio\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-audio-preview\n  */\n  | \"openai/gpt-4o-audio-preview\"\n  /** Mistral: Mistral Medium 3.1\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-medium-3.1\n  */\n  | \"mistralai/mistral-medium-3.1\"\n  /** Baidu: ERNIE 4.5 21B A3B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 120000\n  @url https://openrouter.ai/baidu/ernie-4.5-21b-a3b\n  */\n  | \"baidu/ernie-4.5-21b-a3b\"\n  /** Baidu: ERNIE 4.5 VL 28B A3B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 30000\n  @url https://openrouter.ai/baidu/ernie-4.5-vl-28b-a3b\n  */\n  | \"baidu/ernie-4.5-vl-28b-a3b\"\n  /** Z.AI: GLM 4.5V\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/z-ai/glm-4.5v\n  */\n  | \"z-ai/glm-4.5v\"\n  /** AI21: Jamba Mini 1.7\n  @capabilities max_tokens, response_format, stop, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-mini-1.7\n  */\n  | \"ai21/jamba-mini-1.7\"\n  /** AI21: Jamba Large 1.7\n  @capabilities max_tokens, response_format, stop, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-large-1.7\n  */\n  | \"ai21/jamba-large-1.7\"\n  /** OpenAI: GPT-5 Chat\n  @capabilities max_tokens, response_format, seed, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-5-chat\n  */\n  | \"openai/gpt-5-chat\"\n  /** OpenAI: GPT-5\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5\n  */\n  | \"openai/gpt-5\"\n  /** OpenAI: GPT-5 Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-mini\n  */\n  | \"openai/gpt-5-mini\"\n  /** OpenAI: GPT-5 Nano\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-nano\n  */\n  | \"openai/gpt-5-nano\"\n  /** OpenAI: gpt-oss-120b (free)\n  @capabilities include_reasoning, max_tokens, reasoning, seed, stop, temperature\n  @context_length 32768\n  @url https://openrouter.ai/openai/gpt-oss-120b:free\n  */\n  | \"openai/gpt-oss-120b:free\"\n  /** OpenAI: gpt-oss-120b\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/openai/gpt-oss-120b\n  */\n  | \"openai/gpt-oss-120b\"\n  /** OpenAI: gpt-oss-20b (free)\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, structured_outputs, temperature, top_p\n  @context_length 131072\n  @url https://openrouter.ai/openai/gpt-oss-20b:free\n  */\n  | \"openai/gpt-oss-20b:free\"\n  /** OpenAI: gpt-oss-20b\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/openai/gpt-oss-20b\n  */\n  | \"openai/gpt-oss-20b\"\n  /** Anthropic: Claude Opus 4.1\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-opus-4.1\n  */\n  | \"anthropic/claude-opus-4.1\"\n  /** Mistral: Codestral 2508\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/mistralai/codestral-2508\n  */\n  | \"mistralai/codestral-2508\"\n  /** Qwen: Qwen3 Coder 30B A3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder-30b-a3b-instruct\n  */\n  | \"qwen/qwen3-coder-30b-a3b-instruct\"\n  /** Qwen: Qwen3 30B A3B Instruct 2507\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b-instruct-2507\n  */\n  | \"qwen/qwen3-30b-a3b-instruct-2507\"\n  /** Z.AI: GLM 4.5\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_a, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5\n  */\n  | \"z-ai/glm-4.5\"\n  /** Z.AI: GLM 4.5 Air (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5-air:free\n  */\n  | \"z-ai/glm-4.5-air:free\"\n  /** Z.AI: GLM 4.5 Air\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5-air\n  */\n  | \"z-ai/glm-4.5-air\"\n  /** Qwen: Qwen3 235B A22B Thinking 2507\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b-thinking-2507\n  */\n  | \"qwen/qwen3-235b-a22b-thinking-2507\"\n  /** Z.AI: GLM 4 32B \n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/z-ai/glm-4-32b\n  */\n  | \"z-ai/glm-4-32b\"\n  /** Qwen: Qwen3 Coder 480B A35B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder:free\n  */\n  | \"qwen/qwen3-coder:free\"\n  /** Qwen: Qwen3 Coder 480B A35B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder\n  */\n  | \"qwen/qwen3-coder\"\n  /** ByteDance: UI-TARS 7B \n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/bytedance/ui-tars-1.5-7b\n  */\n  | \"bytedance/ui-tars-1.5-7b\"\n  /** Google: Gemini 2.5 Flash Lite\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite\n  */\n  | \"google/gemini-2.5-flash-lite\"\n  /** Qwen: Qwen3 235B A22B Instruct 2507\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b-2507\n  */\n  | \"qwen/qwen3-235b-a22b-2507\"\n  /** Switchpoint Router\n  @capabilities include_reasoning, max_tokens, reasoning, seed, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/switchpoint/router\n  */\n  | \"switchpoint/router\"\n  /** MoonshotAI: Kimi K2 0711 (free)\n  @capabilities max_tokens, seed, stop, temperature\n  @context_length 32768\n  @url https://openrouter.ai/moonshotai/kimi-k2:free\n  */\n  | \"moonshotai/kimi-k2:free\"\n  /** MoonshotAI: Kimi K2 0711\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 63000\n  @url https://openrouter.ai/moonshotai/kimi-k2\n  */\n  | \"moonshotai/kimi-k2\"\n  /** THUDM: GLM 4.1V 9B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/thudm/glm-4.1v-9b-thinking\n  */\n  | \"thudm/glm-4.1v-9b-thinking\"\n  /** Mistral: Devstral Medium\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-medium\n  */\n  | \"mistralai/devstral-medium\"\n  /** Mistral: Devstral Small 1.1\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/devstral-small\n  */\n  | \"mistralai/devstral-small\"\n  /** Venice: Uncensored (free)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin-mistral-24b-venice-edition:free\n  */\n  | \"cognitivecomputations/dolphin-mistral-24b-venice-edition:free\"\n  /** xAI: Grok 4\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 256000\n  @url https://openrouter.ai/x-ai/grok-4\n  */\n  | \"x-ai/grok-4\"\n  /** Google: Gemma 3n 2B (free)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, temperature, top_p\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-3n-e2b-it:free\n  */\n  | \"google/gemma-3n-e2b-it:free\"\n  /** Tencent: Hunyuan A13B Instruct (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/tencent/hunyuan-a13b-instruct:free\n  */\n  | \"tencent/hunyuan-a13b-instruct:free\"\n  /** Tencent: Hunyuan A13B Instruct\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/tencent/hunyuan-a13b-instruct\n  */\n  | \"tencent/hunyuan-a13b-instruct\"\n  /** TNG: DeepSeek R1T2 Chimera (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/tngtech/deepseek-r1t2-chimera:free\n  */\n  | \"tngtech/deepseek-r1t2-chimera:free\"\n  /** Morph: Morph V3 Large\n  @capabilities max_tokens, stop, temperature\n  @context_length 81920\n  @url https://openrouter.ai/morph/morph-v3-large\n  */\n  | \"morph/morph-v3-large\"\n  /** Morph: Morph V3 Fast\n  @capabilities max_tokens, stop, temperature\n  @context_length 81920\n  @url https://openrouter.ai/morph/morph-v3-fast\n  */\n  | \"morph/morph-v3-fast\"\n  /** Baidu: ERNIE 4.5 VL 424B A47B \n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 123000\n  @url https://openrouter.ai/baidu/ernie-4.5-vl-424b-a47b\n  */\n  | \"baidu/ernie-4.5-vl-424b-a47b\"\n  /** Baidu: ERNIE 4.5 300B A47B \n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 123000\n  @url https://openrouter.ai/baidu/ernie-4.5-300b-a47b\n  */\n  | \"baidu/ernie-4.5-300b-a47b\"\n  /** TheDrummer: Anubis 70B V1.1\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/thedrummer/anubis-70b-v1.1\n  */\n  | \"thedrummer/anubis-70b-v1.1\"\n  /** Inception: Mercury\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/inception/mercury\n  */\n  | \"inception/mercury\"\n  /** Mistral: Mistral Small 3.2 24B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.2-24b-instruct:free\n  */\n  | \"mistralai/mistral-small-3.2-24b-instruct:free\"\n  /** Mistral: Mistral Small 3.2 24B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.2-24b-instruct\n  */\n  | \"mistralai/mistral-small-3.2-24b-instruct\"\n  /** MiniMax: MiniMax M1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/minimax/minimax-m1\n  */\n  | \"minimax/minimax-m1\"\n  /** Google: Gemini 2.5 Flash Lite Preview 06-17\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite-preview-06-17\n  */\n  | \"google/gemini-2.5-flash-lite-preview-06-17\"\n  /** Google: Gemini 2.5 Flash\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash\n  */\n  | \"google/gemini-2.5-flash\"\n  /** Google: Gemini 2.5 Pro\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro\n  */\n  | \"google/gemini-2.5-pro\"\n  /** MoonshotAI: Kimi Dev 72B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/moonshotai/kimi-dev-72b:free\n  */\n  | \"moonshotai/kimi-dev-72b:free\"\n  /** MoonshotAI: Kimi Dev 72B\n  @capabilities frequency_penalty, include_reasoning, reasoning, response_format, structured_outputs, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/moonshotai/kimi-dev-72b\n  */\n  | \"moonshotai/kimi-dev-72b\"\n  /** OpenAI: o3 Pro\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-pro\n  */\n  | \"openai/o3-pro\"\n  /** xAI: Grok 3 Mini\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-mini\n  */\n  | \"x-ai/grok-3-mini\"\n  /** xAI: Grok 3\n  @capabilities frequency_penalty, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3\n  */\n  | \"x-ai/grok-3\"\n  /** Mistral: Magistral Small 2506\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40000\n  @url https://openrouter.ai/mistralai/magistral-small-2506\n  */\n  | \"mistralai/magistral-small-2506\"\n  /** Mistral: Magistral Medium 2506\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40960\n  @url https://openrouter.ai/mistralai/magistral-medium-2506\n  */\n  | \"mistralai/magistral-medium-2506\"\n  /** Mistral: Magistral Medium 2506 (thinking)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40960\n  @url https://openrouter.ai/mistralai/magistral-medium-2506:thinking\n  */\n  | \"mistralai/magistral-medium-2506:thinking\"\n  /** Google: Gemini 2.5 Pro Preview 06-05\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview\n  */\n  | \"google/gemini-2.5-pro-preview\"\n  /** DeepSeek: Deepseek R1 0528 Qwen3 8B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-0528-qwen3-8b:free\n  */\n  | \"deepseek/deepseek-r1-0528-qwen3-8b:free\"\n  /** DeepSeek: Deepseek R1 0528 Qwen3 8B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-0528-qwen3-8b\n  */\n  | \"deepseek/deepseek-r1-0528-qwen3-8b\"\n  /** DeepSeek: R1 0528 (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1-0528:free\n  */\n  | \"deepseek/deepseek-r1-0528:free\"\n  /** DeepSeek: R1 0528\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1-0528\n  */\n  | \"deepseek/deepseek-r1-0528\"\n  /** Anthropic: Claude Opus 4\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-opus-4\n  */\n  | \"anthropic/claude-opus-4\"\n  /** Anthropic: Claude Sonnet 4\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4\n  */\n  | \"anthropic/claude-sonnet-4\"\n  /** Mistral: Devstral Small 2505 (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/devstral-small-2505:free\n  */\n  | \"mistralai/devstral-small-2505:free\"\n  /** Mistral: Devstral Small 2505\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-small-2505\n  */\n  | \"mistralai/devstral-small-2505\"\n  /** Google: Gemma 3n 4B (free)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, temperature, top_p\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-3n-e4b-it:free\n  */\n  | \"google/gemma-3n-e4b-it:free\"\n  /** Google: Gemma 3n 4B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/google/gemma-3n-e4b-it\n  */\n  | \"google/gemma-3n-e4b-it\"\n  /** OpenAI: Codex Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/codex-mini\n  */\n  | \"openai/codex-mini\"\n  /** Meta: Llama 3.3 8B Instruct (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-3.3-8b-instruct:free\n  */\n  | \"meta-llama/llama-3.3-8b-instruct:free\"\n  /** Nous: DeepHermes 3 Mistral 24B Preview\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/nousresearch/deephermes-3-mistral-24b-preview\n  */\n  | \"nousresearch/deephermes-3-mistral-24b-preview\"\n  /** Mistral: Mistral Medium 3\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-medium-3\n  */\n  | \"mistralai/mistral-medium-3\"\n  /** Google: Gemini 2.5 Pro Preview 05-06\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview-05-06\n  */\n  | \"google/gemini-2.5-pro-preview-05-06\"\n  /** Arcee AI: Spotlight\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/spotlight\n  */\n  | \"arcee-ai/spotlight\"\n  /** Arcee AI: Maestro Reasoning\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/maestro-reasoning\n  */\n  | \"arcee-ai/maestro-reasoning\"\n  /** Arcee AI: Virtuoso Large\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/virtuoso-large\n  */\n  | \"arcee-ai/virtuoso-large\"\n  /** Arcee AI: Coder Large\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/arcee-ai/coder-large\n  */\n  | \"arcee-ai/coder-large\"\n  /** Microsoft: Phi 4 Reasoning Plus\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/microsoft/phi-4-reasoning-plus\n  */\n  | \"microsoft/phi-4-reasoning-plus\"\n  /** Inception: Mercury Coder\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/inception/mercury-coder\n  */\n  | \"inception/mercury-coder\"\n  /** Qwen: Qwen3 4B (free)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-4b:free\n  */\n  | \"qwen/qwen3-4b:free\"\n  /** DeepSeek: DeepSeek Prover V2\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-prover-v2\n  */\n  | \"deepseek/deepseek-prover-v2\"\n  /** Meta: Llama Guard 4 12B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 163840\n  @url https://openrouter.ai/meta-llama/llama-guard-4-12b\n  */\n  | \"meta-llama/llama-guard-4-12b\"\n  /** Qwen: Qwen3 30B A3B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b:free\n  */\n  | \"qwen/qwen3-30b-a3b:free\"\n  /** Qwen: Qwen3 30B A3B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b\n  */\n  | \"qwen/qwen3-30b-a3b\"\n  /** Qwen: Qwen3 8B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-8b:free\n  */\n  | \"qwen/qwen3-8b:free\"\n  /** Qwen: Qwen3 8B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-8b\n  */\n  | \"qwen/qwen3-8b\"\n  /** Qwen: Qwen3 14B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-14b:free\n  */\n  | \"qwen/qwen3-14b:free\"\n  /** Qwen: Qwen3 14B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-14b\n  */\n  | \"qwen/qwen3-14b\"\n  /** Qwen: Qwen3 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-32b\n  */\n  | \"qwen/qwen3-32b\"\n  /** Qwen: Qwen3 235B A22B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b:free\n  */\n  | \"qwen/qwen3-235b-a22b:free\"\n  /** Qwen: Qwen3 235B A22B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b\n  */\n  | \"qwen/qwen3-235b-a22b\"\n  /** TNG: DeepSeek R1T Chimera (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/tngtech/deepseek-r1t-chimera:free\n  */\n  | \"tngtech/deepseek-r1t-chimera:free\"\n  /** TNG: DeepSeek R1T Chimera\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/tngtech/deepseek-r1t-chimera\n  */\n  | \"tngtech/deepseek-r1t-chimera\"\n  /** Microsoft: MAI DS R1 (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/microsoft/mai-ds-r1:free\n  */\n  | \"microsoft/mai-ds-r1:free\"\n  /** Microsoft: MAI DS R1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/microsoft/mai-ds-r1\n  */\n  | \"microsoft/mai-ds-r1\"\n  /** THUDM: GLM Z1 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thudm/glm-z1-32b\n  */\n  | \"thudm/glm-z1-32b\"\n  /** OpenAI: o4 Mini High\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini-high\n  */\n  | \"openai/o4-mini-high\"\n  /** OpenAI: o3\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3\n  */\n  | \"openai/o3\"\n  /** OpenAI: o4 Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini\n  */\n  | \"openai/o4-mini\"\n  /** Shisa AI: Shisa V2 Llama 3.3 70B  (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/shisa-ai/shisa-v2-llama3.3-70b:free\n  */\n  | \"shisa-ai/shisa-v2-llama3.3-70b:free\"\n  /** Shisa AI: Shisa V2 Llama 3.3 70B \n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/shisa-ai/shisa-v2-llama3.3-70b\n  */\n  | \"shisa-ai/shisa-v2-llama3.3-70b\"\n  /** OpenAI: GPT-4.1\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1\n  */\n  | \"openai/gpt-4.1\"\n  /** OpenAI: GPT-4.1 Mini\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1-mini\n  */\n  | \"openai/gpt-4.1-mini\"\n  /** OpenAI: GPT-4.1 Nano\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1-nano\n  */\n  | \"openai/gpt-4.1-nano\"\n  /** EleutherAI: Llemma 7b\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/eleutherai/llemma_7b\n  */\n  | \"eleutherai/llemma_7b\"\n  /** AlfredPros: CodeLLaMa 7B Instruct Solidity\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/alfredpros/codellama-7b-instruct-solidity\n  */\n  | \"alfredpros/codellama-7b-instruct-solidity\"\n  /** ArliAI: QwQ 32B RpR v1 (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/arliai/qwq-32b-arliai-rpr-v1:free\n  */\n  | \"arliai/qwq-32b-arliai-rpr-v1:free\"\n  /** ArliAI: QwQ 32B RpR v1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/arliai/qwq-32b-arliai-rpr-v1\n  */\n  | \"arliai/qwq-32b-arliai-rpr-v1\"\n  /** Agentica: Deepcoder 14B Preview (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 96000\n  @url https://openrouter.ai/agentica-org/deepcoder-14b-preview:free\n  */\n  | \"agentica-org/deepcoder-14b-preview:free\"\n  /** Agentica: Deepcoder 14B Preview\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 96000\n  @url https://openrouter.ai/agentica-org/deepcoder-14b-preview\n  */\n  | \"agentica-org/deepcoder-14b-preview\"\n  /** MoonshotAI: Kimi VL A3B Thinking (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/moonshotai/kimi-vl-a3b-thinking:free\n  */\n  | \"moonshotai/kimi-vl-a3b-thinking:free\"\n  /** MoonshotAI: Kimi VL A3B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/moonshotai/kimi-vl-a3b-thinking\n  */\n  | \"moonshotai/kimi-vl-a3b-thinking\"\n  /** xAI: Grok 3 Mini Beta\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-mini-beta\n  */\n  | \"x-ai/grok-3-mini-beta\"\n  /** xAI: Grok 3 Beta\n  @capabilities frequency_penalty, logprobs, max_tokens, presence_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-beta\n  */\n  | \"x-ai/grok-3-beta\"\n  /** NVIDIA: Llama 3.1 Nemotron Ultra 253B v1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, presence_penalty, reasoning, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.1-nemotron-ultra-253b-v1\n  */\n  | \"nvidia/llama-3.1-nemotron-ultra-253b-v1\"\n  /** Meta: Llama 4 Maverick (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-4-maverick:free\n  */\n  | \"meta-llama/llama-4-maverick:free\"\n  /** Meta: Llama 4 Maverick\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/meta-llama/llama-4-maverick\n  */\n  | \"meta-llama/llama-4-maverick\"\n  /** Meta: Llama 4 Scout (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-4-scout:free\n  */\n  | \"meta-llama/llama-4-scout:free\"\n  /** Meta: Llama 4 Scout\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 327680\n  @url https://openrouter.ai/meta-llama/llama-4-scout\n  */\n  | \"meta-llama/llama-4-scout\"\n  /** AllenAI: Molmo 7B D\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/allenai/molmo-7b-d\n  */\n  | \"allenai/molmo-7b-d\"\n  /** Qwen: Qwen2.5 VL 32B Instruct (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/qwen/qwen2.5-vl-32b-instruct:free\n  */\n  | \"qwen/qwen2.5-vl-32b-instruct:free\"\n  /** Qwen: Qwen2.5 VL 32B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 16384\n  @url https://openrouter.ai/qwen/qwen2.5-vl-32b-instruct\n  */\n  | \"qwen/qwen2.5-vl-32b-instruct\"\n  /** DeepSeek: DeepSeek V3 0324 (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3-0324:free\n  */\n  | \"deepseek/deepseek-chat-v3-0324:free\"\n  /** DeepSeek: DeepSeek V3 0324\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3-0324\n  */\n  | \"deepseek/deepseek-chat-v3-0324\"\n  /** OpenAI: o1-pro\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o1-pro\n  */\n  | \"openai/o1-pro\"\n  /** Mistral: Mistral Small 3.1 24B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-small-3.1-24b-instruct:free\n  */\n  | \"mistralai/mistral-small-3.1-24b-instruct:free\"\n  /** Mistral: Mistral Small 3.1 24B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.1-24b-instruct\n  */\n  | \"mistralai/mistral-small-3.1-24b-instruct\"\n  /** AllenAI: Olmo 2 32B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/allenai/olmo-2-0325-32b-instruct\n  */\n  | \"allenai/olmo-2-0325-32b-instruct\"\n  /** Google: Gemma 3 4B (free)\n  @capabilities max_tokens, response_format, seed, structured_outputs, temperature, top_p\n  @context_length 32768\n  @url https://openrouter.ai/google/gemma-3-4b-it:free\n  */\n  | \"google/gemma-3-4b-it:free\"\n  /** Google: Gemma 3 4B\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/google/gemma-3-4b-it\n  */\n  | \"google/gemma-3-4b-it\"\n  /** Google: Gemma 3 12B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/google/gemma-3-12b-it:free\n  */\n  | \"google/gemma-3-12b-it:free\"\n  /** Google: Gemma 3 12B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 96000\n  @url https://openrouter.ai/google/gemma-3-12b-it\n  */\n  | \"google/gemma-3-12b-it\"\n  /** Cohere: Command A\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 256000\n  @url https://openrouter.ai/cohere/command-a\n  */\n  | \"cohere/command-a\"\n  /** OpenAI: GPT-4o-mini Search Preview\n  @capabilities max_tokens, response_format, structured_outputs, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini-search-preview\n  */\n  | \"openai/gpt-4o-mini-search-preview\"\n  /** OpenAI: GPT-4o Search Preview\n  @capabilities max_tokens, response_format, structured_outputs, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-search-preview\n  */\n  | \"openai/gpt-4o-search-preview\"\n  /** Google: Gemma 3 27B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 96000\n  @url https://openrouter.ai/google/gemma-3-27b-it:free\n  */\n  | \"google/gemma-3-27b-it:free\"\n  /** Google: Gemma 3 27B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 96000\n  @url https://openrouter.ai/google/gemma-3-27b-it\n  */\n  | \"google/gemma-3-27b-it\"\n  /** TheDrummer: Skyfall 36B V2\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/skyfall-36b-v2\n  */\n  | \"thedrummer/skyfall-36b-v2\"\n  /** Microsoft: Phi 4 Multimodal Instruct\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/microsoft/phi-4-multimodal-instruct\n  */\n  | \"microsoft/phi-4-multimodal-instruct\"\n  /** Perplexity: Sonar Reasoning Pro\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, temperature, top_k, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/perplexity/sonar-reasoning-pro\n  */\n  | \"perplexity/sonar-reasoning-pro\"\n  /** Perplexity: Sonar Pro\n  @capabilities frequency_penalty, max_tokens, presence_penalty, temperature, top_k, top_p, web_search_options\n  @context_length 200000\n  @url https://openrouter.ai/perplexity/sonar-pro\n  */\n  | \"perplexity/sonar-pro\"\n  /** Perplexity: Sonar Deep Research\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, temperature, top_k, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/perplexity/sonar-deep-research\n  */\n  | \"perplexity/sonar-deep-research\"\n  /** Qwen: QwQ 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwq-32b\n  */\n  | \"qwen/qwq-32b\"\n  /** Nous: DeepHermes 3 Llama 3 8B Preview (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/deephermes-3-llama-3-8b-preview:free\n  */\n  | \"nousresearch/deephermes-3-llama-3-8b-preview:free\"\n  /** Nous: DeepHermes 3 Llama 3 8B Preview\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/deephermes-3-llama-3-8b-preview\n  */\n  | \"nousresearch/deephermes-3-llama-3-8b-preview\"\n  /** Google: Gemini 2.0 Flash Lite\n  @capabilities max_tokens, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-lite-001\n  */\n  | \"google/gemini-2.0-flash-lite-001\"\n  /** Anthropic: Claude 3.7 Sonnet\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet\n  */\n  | \"anthropic/claude-3.7-sonnet\"\n  /** Anthropic: Claude 3.7 Sonnet (thinking)\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:thinking\n  */\n  | \"anthropic/claude-3.7-sonnet:thinking\"\n  /** Perplexity: R1 1776\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, temperature, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/perplexity/r1-1776\n  */\n  | \"perplexity/r1-1776\"\n  /** Mistral: Saba\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-saba\n  */\n  | \"mistralai/mistral-saba\"\n  /** Dolphin3.0 R1 Mistral 24B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin3.0-r1-mistral-24b:free\n  */\n  | \"cognitivecomputations/dolphin3.0-r1-mistral-24b:free\"\n  /** Dolphin3.0 R1 Mistral 24B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin3.0-r1-mistral-24b\n  */\n  | \"cognitivecomputations/dolphin3.0-r1-mistral-24b\"\n  /** Dolphin3.0 Mistral 24B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin3.0-mistral-24b:free\n  */\n  | \"cognitivecomputations/dolphin3.0-mistral-24b:free\"\n  /** Dolphin3.0 Mistral 24B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin3.0-mistral-24b\n  */\n  | \"cognitivecomputations/dolphin3.0-mistral-24b\"\n  /** Llama Guard 3 8B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-guard-3-8b\n  */\n  | \"meta-llama/llama-guard-3-8b\"\n  /** OpenAI: o3 Mini High\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini-high\n  */\n  | \"openai/o3-mini-high\"\n  /** DeepSeek: R1 Distill Llama 8B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 32000\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-llama-8b\n  */\n  | \"deepseek/deepseek-r1-distill-llama-8b\"\n  /** Google: Gemini 2.0 Flash\n  @capabilities max_tokens, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-001\n  */\n  | \"google/gemini-2.0-flash-001\"\n  /** Qwen: Qwen VL Plus\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, top_p\n  @context_length 7500\n  @url https://openrouter.ai/qwen/qwen-vl-plus\n  */\n  | \"qwen/qwen-vl-plus\"\n  /** AionLabs: Aion-1.0\n  @capabilities include_reasoning, max_tokens, reasoning, temperature, top_p\n  @context_length 131072\n  @url https://openrouter.ai/aion-labs/aion-1.0\n  */\n  | \"aion-labs/aion-1.0\"\n  /** AionLabs: Aion-1.0-Mini\n  @capabilities include_reasoning, max_tokens, reasoning, temperature, top_p\n  @context_length 131072\n  @url https://openrouter.ai/aion-labs/aion-1.0-mini\n  */\n  | \"aion-labs/aion-1.0-mini\"\n  /** AionLabs: Aion-RP 1.0 (8B)\n  @capabilities max_tokens, temperature, top_p\n  @context_length 32768\n  @url https://openrouter.ai/aion-labs/aion-rp-llama-3.1-8b\n  */\n  | \"aion-labs/aion-rp-llama-3.1-8b\"\n  /** Qwen: Qwen VL Max\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, top_p\n  @context_length 7500\n  @url https://openrouter.ai/qwen/qwen-vl-max\n  */\n  | \"qwen/qwen-vl-max\"\n  /** Qwen: Qwen-Turbo\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-turbo\n  */\n  | \"qwen/qwen-turbo\"\n  /** Qwen: Qwen2.5 VL 72B Instruct (free)\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen2.5-vl-72b-instruct:free\n  */\n  | \"qwen/qwen2.5-vl-72b-instruct:free\"\n  /** Qwen: Qwen2.5 VL 72B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen2.5-vl-72b-instruct\n  */\n  | \"qwen/qwen2.5-vl-72b-instruct\"\n  /** Qwen: Qwen-Plus\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen-plus\n  */\n  | \"qwen/qwen-plus\"\n  /** Qwen: Qwen-Max \n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-max\n  */\n  | \"qwen/qwen-max\"\n  /** OpenAI: o3 Mini\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini\n  */\n  | \"openai/o3-mini\"\n  /** Mistral: Mistral Small 3 (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small-24b-instruct-2501:free\n  */\n  | \"mistralai/mistral-small-24b-instruct-2501:free\"\n  /** Mistral: Mistral Small 3\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small-24b-instruct-2501\n  */\n  | \"mistralai/mistral-small-24b-instruct-2501\"\n  /** DeepSeek: R1 Distill Qwen 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-qwen-32b\n  */\n  | \"deepseek/deepseek-r1-distill-qwen-32b\"\n  /** DeepSeek: R1 Distill Qwen 14B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-qwen-14b\n  */\n  | \"deepseek/deepseek-r1-distill-qwen-14b\"\n  /** Perplexity: Sonar Reasoning\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, temperature, top_k, top_p, web_search_options\n  @context_length 127000\n  @url https://openrouter.ai/perplexity/sonar-reasoning\n  */\n  | \"perplexity/sonar-reasoning\"\n  /** Perplexity: Sonar\n  @capabilities frequency_penalty, max_tokens, presence_penalty, temperature, top_k, top_p, web_search_options\n  @context_length 127072\n  @url https://openrouter.ai/perplexity/sonar\n  */\n  | \"perplexity/sonar\"\n  /** Liquid: LFM 7B\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/liquid/lfm-7b\n  */\n  | \"liquid/lfm-7b\"\n  /** Liquid: LFM 3B\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/liquid/lfm-3b\n  */\n  | \"liquid/lfm-3b\"\n  /** DeepSeek: R1 Distill Llama 70B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-llama-70b:free\n  */\n  | \"deepseek/deepseek-r1-distill-llama-70b:free\"\n  /** DeepSeek: R1 Distill Llama 70B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-llama-70b\n  */\n  | \"deepseek/deepseek-r1-distill-llama-70b\"\n  /** DeepSeek: R1 (free)\n  @capabilities include_reasoning, max_tokens, reasoning, temperature\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1:free\n  */\n  | \"deepseek/deepseek-r1:free\"\n  /** DeepSeek: R1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1\n  */\n  | \"deepseek/deepseek-r1\"\n  /** MiniMax: MiniMax-01\n  @capabilities max_tokens, temperature, top_p\n  @context_length 1000192\n  @url https://openrouter.ai/minimax/minimax-01\n  */\n  | \"minimax/minimax-01\"\n  /** Mistral: Codestral 2501\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-2501\n  */\n  | \"mistralai/codestral-2501\"\n  /** Microsoft: Phi 4\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 16384\n  @url https://openrouter.ai/microsoft/phi-4\n  */\n  | \"microsoft/phi-4\"\n  /** DeepSeek: DeepSeek V3\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat\n  */\n  | \"deepseek/deepseek-chat\"\n  /** Sao10K: Llama 3.3 Euryale 70B\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/sao10k/l3.3-euryale-70b\n  */\n  | \"sao10k/l3.3-euryale-70b\"\n  /** OpenAI: o1\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o1\n  */\n  | \"openai/o1\"\n  /** Cohere: Command R7B (12-2024)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r7b-12-2024\n  */\n  | \"cohere/command-r7b-12-2024\"\n  /** Google: Gemini 2.0 Flash Experimental (free)\n  @capabilities max_tokens, response_format, seed, stop, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-exp:free\n  */\n  | \"google/gemini-2.0-flash-exp:free\"\n  /** Meta: Llama 3.3 70B Instruct (free)\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free\n  */\n  | \"meta-llama/llama-3.3-70b-instruct:free\"\n  /** Meta: Llama 3.3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.3-70b-instruct\n  */\n  | \"meta-llama/llama-3.3-70b-instruct\"\n  /** Amazon: Nova Lite 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 300000\n  @url https://openrouter.ai/amazon/nova-lite-v1\n  */\n  | \"amazon/nova-lite-v1\"\n  /** Amazon: Nova Micro 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/amazon/nova-micro-v1\n  */\n  | \"amazon/nova-micro-v1\"\n  /** Amazon: Nova Pro 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 300000\n  @url https://openrouter.ai/amazon/nova-pro-v1\n  */\n  | \"amazon/nova-pro-v1\"\n  /** OpenAI: GPT-4o (2024-11-20)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-11-20\n  */\n  | \"openai/gpt-4o-2024-11-20\"\n  /** Mistral Large 2411\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-large-2411\n  */\n  | \"mistralai/mistral-large-2411\"\n  /** Mistral Large 2407\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-large-2407\n  */\n  | \"mistralai/mistral-large-2407\"\n  /** Mistral: Pixtral Large 2411\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/pixtral-large-2411\n  */\n  | \"mistralai/pixtral-large-2411\"\n  /** Qwen2.5 Coder 32B Instruct (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-coder-32b-instruct:free\n  */\n  | \"qwen/qwen-2.5-coder-32b-instruct:free\"\n  /** Qwen2.5 Coder 32B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-coder-32b-instruct\n  */\n  | \"qwen/qwen-2.5-coder-32b-instruct\"\n  /** SorcererLM 8x22B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 16000\n  @url https://openrouter.ai/raifle/sorcererlm-8x22b\n  */\n  | \"raifle/sorcererlm-8x22b\"\n  /** TheDrummer: UnslopNemo 12B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/unslopnemo-12b\n  */\n  | \"thedrummer/unslopnemo-12b\"\n  /** Anthropic: Claude 3.5 Haiku (2024-10-22)\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku-20241022\n  */\n  | \"anthropic/claude-3.5-haiku-20241022\"\n  /** Anthropic: Claude 3.5 Haiku\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku\n  */\n  | \"anthropic/claude-3.5-haiku\"\n  /** Magnum v4 72B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 16384\n  @url https://openrouter.ai/anthracite-org/magnum-v4-72b\n  */\n  | \"anthracite-org/magnum-v4-72b\"\n  /** Anthropic: Claude 3.5 Sonnet\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet\n  */\n  | \"anthropic/claude-3.5-sonnet\"\n  /** Mistral: Ministral 3B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/ministral-3b\n  */\n  | \"mistralai/ministral-3b\"\n  /** Mistral: Ministral 8B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/ministral-8b\n  */\n  | \"mistralai/ministral-8b\"\n  /** Qwen2.5 7B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/qwen/qwen-2.5-7b-instruct\n  */\n  | \"qwen/qwen-2.5-7b-instruct\"\n  /** NVIDIA: Llama 3.1 Nemotron 70B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.1-nemotron-70b-instruct\n  */\n  | \"nvidia/llama-3.1-nemotron-70b-instruct\"\n  /** Inflection: Inflection 3 Productivity\n  @capabilities max_tokens, stop, temperature, top_p\n  @context_length 8000\n  @url https://openrouter.ai/inflection/inflection-3-productivity\n  */\n  | \"inflection/inflection-3-productivity\"\n  /** Inflection: Inflection 3 Pi\n  @capabilities max_tokens, stop, temperature, top_p\n  @context_length 8000\n  @url https://openrouter.ai/inflection/inflection-3-pi\n  */\n  | \"inflection/inflection-3-pi\"\n  /** TheDrummer: Rocinante 12B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/rocinante-12b\n  */\n  | \"thedrummer/rocinante-12b\"\n  /** Magnum v2 72B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/anthracite-org/magnum-v2-72b\n  */\n  | \"anthracite-org/magnum-v2-72b\"\n  /** Meta: Llama 3.2 1B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-1b-instruct\n  */\n  | \"meta-llama/llama-3.2-1b-instruct\"\n  /** Meta: Llama 3.2 90B Vision Instruct\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/meta-llama/llama-3.2-90b-vision-instruct\n  */\n  | \"meta-llama/llama-3.2-90b-vision-instruct\"\n  /** Meta: Llama 3.2 11B Vision Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-11b-vision-instruct\n  */\n  | \"meta-llama/llama-3.2-11b-vision-instruct\"\n  /** Meta: Llama 3.2 3B Instruct (free)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, stop, temperature, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-3b-instruct:free\n  */\n  | \"meta-llama/llama-3.2-3b-instruct:free\"\n  /** Meta: Llama 3.2 3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 16384\n  @url https://openrouter.ai/meta-llama/llama-3.2-3b-instruct\n  */\n  | \"meta-llama/llama-3.2-3b-instruct\"\n  /** Qwen2.5 72B Instruct (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-72b-instruct:free\n  */\n  | \"qwen/qwen-2.5-72b-instruct:free\"\n  /** Qwen2.5 72B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-72b-instruct\n  */\n  | \"qwen/qwen-2.5-72b-instruct\"\n  /** NeverSleep: Lumimaid v0.2 8B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/neversleep/llama-3.1-lumimaid-8b\n  */\n  | \"neversleep/llama-3.1-lumimaid-8b\"\n  /** OpenAI: o1-mini (2024-09-12)\n  @capabilities max_tokens, seed\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-mini-2024-09-12\n  */\n  | \"openai/o1-mini-2024-09-12\"\n  /** OpenAI: o1-mini\n  @capabilities max_tokens, seed\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-mini\n  */\n  | \"openai/o1-mini\"\n  /** Mistral: Pixtral 12B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/pixtral-12b\n  */\n  | \"mistralai/pixtral-12b\"\n  /** Cohere: Command R (08-2024)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-08-2024\n  */\n  | \"cohere/command-r-08-2024\"\n  /** Cohere: Command R+ (08-2024)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-08-2024\n  */\n  | \"cohere/command-r-plus-08-2024\"\n  /** Qwen: Qwen2.5-VL 7B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-vl-7b-instruct\n  */\n  | \"qwen/qwen-2.5-vl-7b-instruct\"\n  /** Sao10K: Llama 3.1 Euryale 70B v2.2\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/sao10k/l3.1-euryale-70b\n  */\n  | \"sao10k/l3.1-euryale-70b\"\n  /** Microsoft: Phi-3.5 Mini 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3.5-mini-128k-instruct\n  */\n  | \"microsoft/phi-3.5-mini-128k-instruct\"\n  /** Nous: Hermes 3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 65000\n  @url https://openrouter.ai/nousresearch/hermes-3-llama-3.1-70b\n  */\n  | \"nousresearch/hermes-3-llama-3.1-70b\"\n  /** Nous: Hermes 3 405B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-3-llama-3.1-405b\n  */\n  | \"nousresearch/hermes-3-llama-3.1-405b\"\n  /** OpenAI: ChatGPT-4o\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/chatgpt-4o-latest\n  */\n  | \"openai/chatgpt-4o-latest\"\n  /** Sao10K: Llama 3 8B Lunaris\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/sao10k/l3-lunaris-8b\n  */\n  | \"sao10k/l3-lunaris-8b\"\n  /** OpenAI: GPT-4o (2024-08-06)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-08-06\n  */\n  | \"openai/gpt-4o-2024-08-06\"\n  /** Meta: Llama 3.1 405B (base)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/meta-llama/llama-3.1-405b\n  */\n  | \"meta-llama/llama-3.1-405b\"\n  /** Meta: Llama 3.1 405B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/meta-llama/llama-3.1-405b-instruct\n  */\n  | \"meta-llama/llama-3.1-405b-instruct\"\n  /** Meta: Llama 3.1 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.1-70b-instruct\n  */\n  | \"meta-llama/llama-3.1-70b-instruct\"\n  /** Meta: Llama 3.1 8B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 16384\n  @url https://openrouter.ai/meta-llama/llama-3.1-8b-instruct\n  */\n  | \"meta-llama/llama-3.1-8b-instruct\"\n  /** Mistral: Mistral Nemo (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-nemo:free\n  */\n  | \"mistralai/mistral-nemo:free\"\n  /** Mistral: Mistral Nemo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-nemo\n  */\n  | \"mistralai/mistral-nemo\"\n  /** OpenAI: GPT-4o-mini (2024-07-18)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini-2024-07-18\n  */\n  | \"openai/gpt-4o-mini-2024-07-18\"\n  /** OpenAI: GPT-4o-mini\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini\n  */\n  | \"openai/gpt-4o-mini\"\n  /** Google: Gemma 2 27B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, top_p\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-2-27b-it\n  */\n  | \"google/gemma-2-27b-it\"\n  /** Google: Gemma 2 9B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-2-9b-it:free\n  */\n  | \"google/gemma-2-9b-it:free\"\n  /** Google: Gemma 2 9B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-2-9b-it\n  */\n  | \"google/gemma-2-9b-it\"\n  /** Anthropic: Claude 3.5 Sonnet (2024-06-20)\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet-20240620\n  */\n  | \"anthropic/claude-3.5-sonnet-20240620\"\n  /** Sao10k: Llama 3 Euryale 70B v2.1\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/sao10k/l3-euryale-70b\n  */\n  | \"sao10k/l3-euryale-70b\"\n  /** Mistral: Mistral 7B Instruct (free)\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct:free\n  */\n  | \"mistralai/mistral-7b-instruct:free\"\n  /** Mistral: Mistral 7B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct\n  */\n  | \"mistralai/mistral-7b-instruct\"\n  /** Mistral: Mistral 7B Instruct v0.3\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.3\n  */\n  | \"mistralai/mistral-7b-instruct-v0.3\"\n  /** NousResearch: Hermes 2 Pro - Llama-3 8B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/nousresearch/hermes-2-pro-llama-3-8b\n  */\n  | \"nousresearch/hermes-2-pro-llama-3-8b\"\n  /** Microsoft: Phi-3 Mini 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3-mini-128k-instruct\n  */\n  | \"microsoft/phi-3-mini-128k-instruct\"\n  /** Microsoft: Phi-3 Medium 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3-medium-128k-instruct\n  */\n  | \"microsoft/phi-3-medium-128k-instruct\"\n  /** NeverSleep: Llama 3 Lumimaid 70B\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/neversleep/llama-3-lumimaid-70b\n  */\n  | \"neversleep/llama-3-lumimaid-70b\"\n  /** OpenAI: GPT-4o\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o\n  */\n  | \"openai/gpt-4o\"\n  /** OpenAI: GPT-4o (extended)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o:extended\n  */\n  | \"openai/gpt-4o:extended\"\n  /** OpenAI: GPT-4o (2024-05-13)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-05-13\n  */\n  | \"openai/gpt-4o-2024-05-13\"\n  /** Meta: LlamaGuard 2 8B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-guard-2-8b\n  */\n  | \"meta-llama/llama-guard-2-8b\"\n  /** Meta: Llama 3 8B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-3-8b-instruct\n  */\n  | \"meta-llama/llama-3-8b-instruct\"\n  /** Meta: Llama 3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-3-70b-instruct\n  */\n  | \"meta-llama/llama-3-70b-instruct\"\n  /** Mistral: Mixtral 8x22B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 65536\n  @url https://openrouter.ai/mistralai/mixtral-8x22b-instruct\n  */\n  | \"mistralai/mixtral-8x22b-instruct\"\n  /** WizardLM-2 8x22B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/microsoft/wizardlm-2-8x22b\n  */\n  | \"microsoft/wizardlm-2-8x22b\"\n  /** OpenAI: GPT-4 Turbo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo\n  */\n  | \"openai/gpt-4-turbo\"\n  /** Anthropic: Claude 3 Haiku\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku\n  */\n  | \"anthropic/claude-3-haiku\"\n  /** Anthropic: Claude 3 Opus\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus\n  */\n  | \"anthropic/claude-3-opus\"\n  /** Mistral Large\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-large\n  */\n  | \"mistralai/mistral-large\"\n  /** OpenAI: GPT-4 Turbo Preview\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo-preview\n  */\n  | \"openai/gpt-4-turbo-preview\"\n  /** OpenAI: GPT-3.5 Turbo (older v0613)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 4095\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0613\n  */\n  | \"openai/gpt-3.5-turbo-0613\"\n  /** Mistral Small\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small\n  */\n  | \"mistralai/mistral-small\"\n  /** Mistral Tiny\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-tiny\n  */\n  | \"mistralai/mistral-tiny\"\n  /** Mistral: Mixtral 8x7B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mixtral-8x7b-instruct\n  */\n  | \"mistralai/mixtral-8x7b-instruct\"\n  /** Noromaid 20B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/neversleep/noromaid-20b\n  */\n  | \"neversleep/noromaid-20b\"\n  /** Goliath 120B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 6144\n  @url https://openrouter.ai/alpindale/goliath-120b\n  */\n  | \"alpindale/goliath-120b\"\n  /** Auto Router\n  @capabilities \n  @context_length 2000000\n  @url https://openrouter.ai/openrouter/auto\n  */\n  | \"openrouter/auto\"\n  /** OpenAI: GPT-4 Turbo (older v1106)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-1106-preview\n  */\n  | \"openai/gpt-4-1106-preview\"\n  /** OpenAI: GPT-3.5 Turbo Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, top_logprobs, top_p\n  @context_length 4095\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-instruct\n  */\n  | \"openai/gpt-3.5-turbo-instruct\"\n  /** Mistral: Mistral 7B Instruct v0.1\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 2824\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.1\n  */\n  | \"mistralai/mistral-7b-instruct-v0.1\"\n  /** OpenAI: GPT-3.5 Turbo 16k\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-16k\n  */\n  | \"openai/gpt-3.5-turbo-16k\"\n  /** Mancer: Weaver (alpha)\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 8000\n  @url https://openrouter.ai/mancer/weaver\n  */\n  | \"mancer/weaver\"\n  /** ReMM SLERP 13B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 6144\n  @url https://openrouter.ai/undi95/remm-slerp-l2-13b\n  */\n  | \"undi95/remm-slerp-l2-13b\"\n  /** MythoMax 13B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, top_a, top_k, top_p\n  @context_length 4096\n  @url https://openrouter.ai/gryphe/mythomax-l2-13b\n  */\n  | \"gryphe/mythomax-l2-13b\"\n  /** OpenAI: GPT-4\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4\n  */\n  | \"openai/gpt-4\"\n  /** OpenAI: GPT-3.5 Turbo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo\n  */\n  | \"openai/gpt-3.5-turbo\"\n  /** OpenAI: GPT-4 (older v0314)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4-0314\n  */\n  | \"openai/gpt-4-0314\"\n  | (string & {});\n\nexport const toolCallingModels = [\n  /** Anthropic: Claude Sonnet 4.5\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4.5\n  */\n  \"anthropic/claude-sonnet-4.5\",\n  /** DeepSeek: DeepSeek V3.2 Exp\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3.2-exp\n  */\n  \"deepseek/deepseek-v3.2-exp\",\n  /** Google: Gemini 2.5 Flash Preview 09-2025\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-09-2025\n  */\n  \"google/gemini-2.5-flash-preview-09-2025\",\n  /** Google: Gemini 2.5 Flash Lite Preview 09-2025\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite-preview-09-2025\n  */\n  \"google/gemini-2.5-flash-lite-preview-09-2025\",\n  /** Qwen: Qwen3 VL 235B A22B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-vl-235b-a22b-thinking\n  */\n  \"qwen/qwen3-vl-235b-a22b-thinking\",\n  /** Qwen: Qwen3 VL 235B A22B Instruct\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-vl-235b-a22b-instruct\n  */\n  \"qwen/qwen3-vl-235b-a22b-instruct\",\n  /** Qwen: Qwen3 Max\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/qwen/qwen3-max\n  */\n  \"qwen/qwen3-max\",\n  /** Qwen: Qwen3 Coder Plus\n  @capabilities max_tokens, presence_penalty, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-coder-plus\n  */\n  \"qwen/qwen3-coder-plus\",\n  /** OpenAI: GPT-5 Codex\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-codex\n  */\n  \"openai/gpt-5-codex\",\n  /** DeepSeek: DeepSeek V3.1 Terminus\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3.1-terminus\n  */\n  \"deepseek/deepseek-v3.1-terminus\",\n  /** xAI: Grok 4 Fast (free)\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 2000000\n  @url https://openrouter.ai/x-ai/grok-4-fast:free\n  */\n  \"x-ai/grok-4-fast:free\",\n  /** xAI: Grok 4 Fast\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 2000000\n  @url https://openrouter.ai/x-ai/grok-4-fast\n  */\n  \"x-ai/grok-4-fast\",\n  /** Tongyi DeepResearch 30B A3B\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/alibaba/tongyi-deepresearch-30b-a3b\n  */\n  \"alibaba/tongyi-deepresearch-30b-a3b\",\n  /** Qwen: Qwen3 Coder Flash\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-coder-flash\n  */\n  \"qwen/qwen3-coder-flash\",\n  /** Qwen: Qwen3 Next 80B A3B Thinking\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-next-80b-a3b-thinking\n  */\n  \"qwen/qwen3-next-80b-a3b-thinking\",\n  /** Qwen: Qwen3 Next 80B A3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-next-80b-a3b-instruct\n  */\n  \"qwen/qwen3-next-80b-a3b-instruct\",\n  /** Meituan: LongCat Flash Chat\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meituan/longcat-flash-chat\n  */\n  \"meituan/longcat-flash-chat\",\n  /** Qwen: Qwen Plus 0728\n  @capabilities max_tokens, presence_penalty, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-plus-2025-07-28\n  */\n  \"qwen/qwen-plus-2025-07-28\",\n  /** Qwen: Qwen Plus 0728 (thinking)\n  @capabilities include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-plus-2025-07-28:thinking\n  */\n  \"qwen/qwen-plus-2025-07-28:thinking\",\n  /** NVIDIA: Nemotron Nano 9B V2 (free)\n  @capabilities include_reasoning, reasoning, response_format, structured_outputs, tool_choice, tools\n  @context_length 128000\n  @url https://openrouter.ai/nvidia/nemotron-nano-9b-v2:free\n  */\n  \"nvidia/nemotron-nano-9b-v2:free\",\n  /** NVIDIA: Nemotron Nano 9B V2\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/nemotron-nano-9b-v2\n  */\n  \"nvidia/nemotron-nano-9b-v2\",\n  /** MoonshotAI: Kimi K2 0905\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/moonshotai/kimi-k2-0905\n  */\n  \"moonshotai/kimi-k2-0905\",\n  /** Cogito V2 Preview Llama 109B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32767\n  @url https://openrouter.ai/deepcogito/cogito-v2-preview-llama-109b-moe\n  */\n  \"deepcogito/cogito-v2-preview-llama-109b-moe\",\n  /** StepFun: Step3\n  @capabilities frequency_penalty, include_reasoning, reasoning, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/stepfun-ai/step3\n  */\n  \"stepfun-ai/step3\",\n  /** Qwen: Qwen3 30B A3B Thinking 2507\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b-thinking-2507\n  */\n  \"qwen/qwen3-30b-a3b-thinking-2507\",\n  /** xAI: Grok Code Fast 1\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 256000\n  @url https://openrouter.ai/x-ai/grok-code-fast-1\n  */\n  \"x-ai/grok-code-fast-1\",\n  /** Nous: Hermes 4 70B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-4-70b\n  */\n  \"nousresearch/hermes-4-70b\",\n  /** Nous: Hermes 4 405B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-4-405b\n  */\n  \"nousresearch/hermes-4-405b\",\n  /** DeepSeek: DeepSeek V3.1 (free)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 163800\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3.1:free\n  */\n  \"deepseek/deepseek-chat-v3.1:free\",\n  /** DeepSeek: DeepSeek V3.1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3.1\n  */\n  \"deepseek/deepseek-chat-v3.1\",\n  /** OpenAI: GPT-4o Audio\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-audio-preview\n  */\n  \"openai/gpt-4o-audio-preview\",\n  /** Mistral: Mistral Medium 3.1\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-medium-3.1\n  */\n  \"mistralai/mistral-medium-3.1\",\n  /** Z.AI: GLM 4.5V\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/z-ai/glm-4.5v\n  */\n  \"z-ai/glm-4.5v\",\n  /** AI21: Jamba Mini 1.7\n  @capabilities max_tokens, response_format, stop, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-mini-1.7\n  */\n  \"ai21/jamba-mini-1.7\",\n  /** AI21: Jamba Large 1.7\n  @capabilities max_tokens, response_format, stop, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-large-1.7\n  */\n  \"ai21/jamba-large-1.7\",\n  /** OpenAI: GPT-5\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5\n  */\n  \"openai/gpt-5\",\n  /** OpenAI: GPT-5 Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-mini\n  */\n  \"openai/gpt-5-mini\",\n  /** OpenAI: GPT-5 Nano\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 400000\n  @url https://openrouter.ai/openai/gpt-5-nano\n  */\n  \"openai/gpt-5-nano\",\n  /** OpenAI: gpt-oss-120b\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/openai/gpt-oss-120b\n  */\n  \"openai/gpt-oss-120b\",\n  /** OpenAI: gpt-oss-20b\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/openai/gpt-oss-20b\n  */\n  \"openai/gpt-oss-20b\",\n  /** Anthropic: Claude Opus 4.1\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-opus-4.1\n  */\n  \"anthropic/claude-opus-4.1\",\n  /** Mistral: Codestral 2508\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 256000\n  @url https://openrouter.ai/mistralai/codestral-2508\n  */\n  \"mistralai/codestral-2508\",\n  /** Qwen: Qwen3 Coder 30B A3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder-30b-a3b-instruct\n  */\n  \"qwen/qwen3-coder-30b-a3b-instruct\",\n  /** Qwen: Qwen3 30B A3B Instruct 2507\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b-instruct-2507\n  */\n  \"qwen/qwen3-30b-a3b-instruct-2507\",\n  /** Z.AI: GLM 4.5\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_a, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5\n  */\n  \"z-ai/glm-4.5\",\n  /** Z.AI: GLM 4.5 Air (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5-air:free\n  */\n  \"z-ai/glm-4.5-air:free\",\n  /** Z.AI: GLM 4.5 Air\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/z-ai/glm-4.5-air\n  */\n  \"z-ai/glm-4.5-air\",\n  /** Qwen: Qwen3 235B A22B Thinking 2507\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b-thinking-2507\n  */\n  \"qwen/qwen3-235b-a22b-thinking-2507\",\n  /** Z.AI: GLM 4 32B \n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/z-ai/glm-4-32b\n  */\n  \"z-ai/glm-4-32b\",\n  /** Qwen: Qwen3 Coder 480B A35B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder:free\n  */\n  \"qwen/qwen3-coder:free\",\n  /** Qwen: Qwen3 Coder 480B A35B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-coder\n  */\n  \"qwen/qwen3-coder\",\n  /** Google: Gemini 2.5 Flash Lite\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite\n  */\n  \"google/gemini-2.5-flash-lite\",\n  /** Qwen: Qwen3 235B A22B Instruct 2507\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 262144\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b-2507\n  */\n  \"qwen/qwen3-235b-a22b-2507\",\n  /** MoonshotAI: Kimi K2 0711\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 63000\n  @url https://openrouter.ai/moonshotai/kimi-k2\n  */\n  \"moonshotai/kimi-k2\",\n  /** Mistral: Devstral Medium\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-medium\n  */\n  \"mistralai/devstral-medium\",\n  /** Mistral: Devstral Small 1.1\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/devstral-small\n  */\n  \"mistralai/devstral-small\",\n  /** xAI: Grok 4\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 256000\n  @url https://openrouter.ai/x-ai/grok-4\n  */\n  \"x-ai/grok-4\",\n  /** Inception: Mercury\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/inception/mercury\n  */\n  \"inception/mercury\",\n  /** Mistral: Mistral Small 3.2 24B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.2-24b-instruct:free\n  */\n  \"mistralai/mistral-small-3.2-24b-instruct:free\",\n  /** Mistral: Mistral Small 3.2 24B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.2-24b-instruct\n  */\n  \"mistralai/mistral-small-3.2-24b-instruct\",\n  /** MiniMax: MiniMax M1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/minimax/minimax-m1\n  */\n  \"minimax/minimax-m1\",\n  /** Google: Gemini 2.5 Flash Lite Preview 06-17\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-lite-preview-06-17\n  */\n  \"google/gemini-2.5-flash-lite-preview-06-17\",\n  /** Google: Gemini 2.5 Flash\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash\n  */\n  \"google/gemini-2.5-flash\",\n  /** Google: Gemini 2.5 Pro\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro\n  */\n  \"google/gemini-2.5-pro\",\n  /** OpenAI: o3 Pro\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-pro\n  */\n  \"openai/o3-pro\",\n  /** xAI: Grok 3 Mini\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-mini\n  */\n  \"x-ai/grok-3-mini\",\n  /** xAI: Grok 3\n  @capabilities frequency_penalty, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3\n  */\n  \"x-ai/grok-3\",\n  /** Mistral: Magistral Small 2506\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40000\n  @url https://openrouter.ai/mistralai/magistral-small-2506\n  */\n  \"mistralai/magistral-small-2506\",\n  /** Mistral: Magistral Medium 2506\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40960\n  @url https://openrouter.ai/mistralai/magistral-medium-2506\n  */\n  \"mistralai/magistral-medium-2506\",\n  /** Mistral: Magistral Medium 2506 (thinking)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 40960\n  @url https://openrouter.ai/mistralai/magistral-medium-2506:thinking\n  */\n  \"mistralai/magistral-medium-2506:thinking\",\n  /** Google: Gemini 2.5 Pro Preview 06-05\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview\n  */\n  \"google/gemini-2.5-pro-preview\",\n  /** DeepSeek: R1 0528\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1-0528\n  */\n  \"deepseek/deepseek-r1-0528\",\n  /** Anthropic: Claude Opus 4\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-opus-4\n  */\n  \"anthropic/claude-opus-4\",\n  /** Anthropic: Claude Sonnet 4\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4\n  */\n  \"anthropic/claude-sonnet-4\",\n  /** Mistral: Devstral Small 2505 (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/devstral-small-2505:free\n  */\n  \"mistralai/devstral-small-2505:free\",\n  /** Mistral: Devstral Small 2505\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-small-2505\n  */\n  \"mistralai/devstral-small-2505\",\n  /** OpenAI: Codex Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/codex-mini\n  */\n  \"openai/codex-mini\",\n  /** Meta: Llama 3.3 8B Instruct (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-3.3-8b-instruct:free\n  */\n  \"meta-llama/llama-3.3-8b-instruct:free\",\n  /** Mistral: Mistral Medium 3\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-medium-3\n  */\n  \"mistralai/mistral-medium-3\",\n  /** Google: Gemini 2.5 Pro Preview 05-06\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview-05-06\n  */\n  \"google/gemini-2.5-pro-preview-05-06\",\n  /** Arcee AI: Virtuoso Large\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/virtuoso-large\n  */\n  \"arcee-ai/virtuoso-large\",\n  /** Inception: Mercury Coder\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/inception/mercury-coder\n  */\n  \"inception/mercury-coder\",\n  /** Qwen: Qwen3 4B (free)\n  @capabilities frequency_penalty, include_reasoning, max_tokens, presence_penalty, reasoning, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-4b:free\n  */\n  \"qwen/qwen3-4b:free\",\n  /** Qwen: Qwen3 30B A3B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-30b-a3b\n  */\n  \"qwen/qwen3-30b-a3b\",\n  /** Qwen: Qwen3 14B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-14b\n  */\n  \"qwen/qwen3-14b\",\n  /** Qwen: Qwen3 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-32b\n  */\n  \"qwen/qwen3-32b\",\n  /** Qwen: Qwen3 235B A22B (free)\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b:free\n  */\n  \"qwen/qwen3-235b-a22b:free\",\n  /** Qwen: Qwen3 235B A22B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b\n  */\n  \"qwen/qwen3-235b-a22b\",\n  /** OpenAI: o4 Mini High\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini-high\n  */\n  \"openai/o4-mini-high\",\n  /** OpenAI: o3\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3\n  */\n  \"openai/o3\",\n  /** OpenAI: o4 Mini\n  @capabilities include_reasoning, max_tokens, reasoning, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini\n  */\n  \"openai/o4-mini\",\n  /** OpenAI: GPT-4.1\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1\n  */\n  \"openai/gpt-4.1\",\n  /** OpenAI: GPT-4.1 Mini\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1-mini\n  */\n  \"openai/gpt-4.1-mini\",\n  /** OpenAI: GPT-4.1 Nano\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 1047576\n  @url https://openrouter.ai/openai/gpt-4.1-nano\n  */\n  \"openai/gpt-4.1-nano\",\n  /** xAI: Grok 3 Mini Beta\n  @capabilities include_reasoning, logprobs, max_tokens, reasoning, response_format, seed, stop, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-mini-beta\n  */\n  \"x-ai/grok-3-mini-beta\",\n  /** xAI: Grok 3 Beta\n  @capabilities frequency_penalty, logprobs, max_tokens, presence_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-3-beta\n  */\n  \"x-ai/grok-3-beta\",\n  /** Meta: Llama 4 Maverick (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-4-maverick:free\n  */\n  \"meta-llama/llama-4-maverick:free\",\n  /** Meta: Llama 4 Maverick\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/meta-llama/llama-4-maverick\n  */\n  \"meta-llama/llama-4-maverick\",\n  /** Meta: Llama 4 Scout (free)\n  @capabilities max_tokens, repetition_penalty, response_format, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/meta-llama/llama-4-scout:free\n  */\n  \"meta-llama/llama-4-scout:free\",\n  /** Meta: Llama 4 Scout\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 327680\n  @url https://openrouter.ai/meta-llama/llama-4-scout\n  */\n  \"meta-llama/llama-4-scout\",\n  /** DeepSeek: DeepSeek V3 0324 (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3-0324:free\n  */\n  \"deepseek/deepseek-chat-v3-0324:free\",\n  /** DeepSeek: DeepSeek V3 0324\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3-0324\n  */\n  \"deepseek/deepseek-chat-v3-0324\",\n  /** Mistral: Mistral Small 3.1 24B (free)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-small-3.1-24b-instruct:free\n  */\n  \"mistralai/mistral-small-3.1-24b-instruct:free\",\n  /** Mistral: Mistral Small 3.1 24B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-small-3.1-24b-instruct\n  */\n  \"mistralai/mistral-small-3.1-24b-instruct\",\n  /** Microsoft: Phi 4 Multimodal Instruct\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/microsoft/phi-4-multimodal-instruct\n  */\n  \"microsoft/phi-4-multimodal-instruct\",\n  /** Qwen: QwQ 32B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwq-32b\n  */\n  \"qwen/qwq-32b\",\n  /** Google: Gemini 2.0 Flash Lite\n  @capabilities max_tokens, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-lite-001\n  */\n  \"google/gemini-2.0-flash-lite-001\",\n  /** Anthropic: Claude 3.7 Sonnet\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet\n  */\n  \"anthropic/claude-3.7-sonnet\",\n  /** Anthropic: Claude 3.7 Sonnet (thinking)\n  @capabilities include_reasoning, max_tokens, reasoning, stop, temperature, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:thinking\n  */\n  \"anthropic/claude-3.7-sonnet:thinking\",\n  /** Mistral: Saba\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-saba\n  */\n  \"mistralai/mistral-saba\",\n  /** OpenAI: o3 Mini High\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini-high\n  */\n  \"openai/o3-mini-high\",\n  /** Google: Gemini 2.0 Flash\n  @capabilities max_tokens, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-001\n  */\n  \"google/gemini-2.0-flash-001\",\n  /** Qwen: Qwen-Turbo\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-turbo\n  */\n  \"qwen/qwen-turbo\",\n  /** Qwen: Qwen-Plus\n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen-plus\n  */\n  \"qwen/qwen-plus\",\n  /** Qwen: Qwen-Max \n  @capabilities max_tokens, presence_penalty, response_format, seed, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-max\n  */\n  \"qwen/qwen-max\",\n  /** OpenAI: o3 Mini\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini\n  */\n  \"openai/o3-mini\",\n  /** Mistral: Mistral Small 3\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small-24b-instruct-2501\n  */\n  \"mistralai/mistral-small-24b-instruct-2501\",\n  /** DeepSeek: R1 Distill Llama 70B\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-llama-70b\n  */\n  \"deepseek/deepseek-r1-distill-llama-70b\",\n  /** DeepSeek: R1\n  @capabilities frequency_penalty, include_reasoning, logit_bias, logprobs, max_tokens, min_p, presence_penalty, reasoning, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1\n  */\n  \"deepseek/deepseek-r1\",\n  /** Mistral: Codestral 2501\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-2501\n  */\n  \"mistralai/codestral-2501\",\n  /** DeepSeek: DeepSeek V3\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat\n  */\n  \"deepseek/deepseek-chat\",\n  /** OpenAI: o1\n  @capabilities max_tokens, response_format, seed, structured_outputs, tool_choice, tools\n  @context_length 200000\n  @url https://openrouter.ai/openai/o1\n  */\n  \"openai/o1\",\n  /** Google: Gemini 2.0 Flash Experimental (free)\n  @capabilities max_tokens, response_format, seed, stop, temperature, tool_choice, tools, top_p\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.0-flash-exp:free\n  */\n  \"google/gemini-2.0-flash-exp:free\",\n  /** Meta: Llama 3.3 70B Instruct (free)\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 65536\n  @url https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free\n  */\n  \"meta-llama/llama-3.3-70b-instruct:free\",\n  /** Meta: Llama 3.3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.3-70b-instruct\n  */\n  \"meta-llama/llama-3.3-70b-instruct\",\n  /** Amazon: Nova Lite 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 300000\n  @url https://openrouter.ai/amazon/nova-lite-v1\n  */\n  \"amazon/nova-lite-v1\",\n  /** Amazon: Nova Micro 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/amazon/nova-micro-v1\n  */\n  \"amazon/nova-micro-v1\",\n  /** Amazon: Nova Pro 1.0\n  @capabilities max_tokens, stop, temperature, tools, top_k, top_p\n  @context_length 300000\n  @url https://openrouter.ai/amazon/nova-pro-v1\n  */\n  \"amazon/nova-pro-v1\",\n  /** OpenAI: GPT-4o (2024-11-20)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-11-20\n  */\n  \"openai/gpt-4o-2024-11-20\",\n  /** Mistral Large 2411\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-large-2411\n  */\n  \"mistralai/mistral-large-2411\",\n  /** Mistral Large 2407\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-large-2407\n  */\n  \"mistralai/mistral-large-2407\",\n  /** Mistral: Pixtral Large 2411\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/pixtral-large-2411\n  */\n  \"mistralai/pixtral-large-2411\",\n  /** TheDrummer: UnslopNemo 12B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/unslopnemo-12b\n  */\n  \"thedrummer/unslopnemo-12b\",\n  /** Anthropic: Claude 3.5 Haiku (2024-10-22)\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku-20241022\n  */\n  \"anthropic/claude-3.5-haiku-20241022\",\n  /** Anthropic: Claude 3.5 Haiku\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku\n  */\n  \"anthropic/claude-3.5-haiku\",\n  /** Anthropic: Claude 3.5 Sonnet\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet\n  */\n  \"anthropic/claude-3.5-sonnet\",\n  /** Mistral: Ministral 8B\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/ministral-8b\n  */\n  \"mistralai/ministral-8b\",\n  /** NVIDIA: Llama 3.1 Nemotron 70B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.1-nemotron-70b-instruct\n  */\n  \"nvidia/llama-3.1-nemotron-70b-instruct\",\n  /** TheDrummer: Rocinante 12B\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/rocinante-12b\n  */\n  \"thedrummer/rocinante-12b\",\n  /** Meta: Llama 3.2 3B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 16384\n  @url https://openrouter.ai/meta-llama/llama-3.2-3b-instruct\n  */\n  \"meta-llama/llama-3.2-3b-instruct\",\n  /** Qwen2.5 72B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-72b-instruct\n  */\n  \"qwen/qwen-2.5-72b-instruct\",\n  /** Mistral: Pixtral 12B\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/pixtral-12b\n  */\n  \"mistralai/pixtral-12b\",\n  /** Cohere: Command R (08-2024)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-08-2024\n  */\n  \"cohere/command-r-08-2024\",\n  /** Cohere: Command R+ (08-2024)\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tools, top_k, top_p\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-08-2024\n  */\n  \"cohere/command-r-plus-08-2024\",\n  /** Microsoft: Phi-3.5 Mini 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3.5-mini-128k-instruct\n  */\n  \"microsoft/phi-3.5-mini-128k-instruct\",\n  /** Nous: Hermes 3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 65000\n  @url https://openrouter.ai/nousresearch/hermes-3-llama-3.1-70b\n  */\n  \"nousresearch/hermes-3-llama-3.1-70b\",\n  /** OpenAI: GPT-4o (2024-08-06)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-08-06\n  */\n  \"openai/gpt-4o-2024-08-06\",\n  /** Meta: Llama 3.1 405B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 32768\n  @url https://openrouter.ai/meta-llama/llama-3.1-405b-instruct\n  */\n  \"meta-llama/llama-3.1-405b-instruct\",\n  /** Meta: Llama 3.1 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.1-70b-instruct\n  */\n  \"meta-llama/llama-3.1-70b-instruct\",\n  /** Meta: Llama 3.1 8B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 16384\n  @url https://openrouter.ai/meta-llama/llama-3.1-8b-instruct\n  */\n  \"meta-llama/llama-3.1-8b-instruct\",\n  /** Mistral: Mistral Nemo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-nemo\n  */\n  \"mistralai/mistral-nemo\",\n  /** OpenAI: GPT-4o-mini (2024-07-18)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini-2024-07-18\n  */\n  \"openai/gpt-4o-mini-2024-07-18\",\n  /** OpenAI: GPT-4o-mini\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini\n  */\n  \"openai/gpt-4o-mini\",\n  /** Anthropic: Claude 3.5 Sonnet (2024-06-20)\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet-20240620\n  */\n  \"anthropic/claude-3.5-sonnet-20240620\",\n  /** Mistral: Mistral 7B Instruct (free)\n  @capabilities frequency_penalty, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct:free\n  */\n  \"mistralai/mistral-7b-instruct:free\",\n  /** Mistral: Mistral 7B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct\n  */\n  \"mistralai/mistral-7b-instruct\",\n  /** Mistral: Mistral 7B Instruct v0.3\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.3\n  */\n  \"mistralai/mistral-7b-instruct-v0.3\",\n  /** Microsoft: Phi-3 Mini 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3-mini-128k-instruct\n  */\n  \"microsoft/phi-3-mini-128k-instruct\",\n  /** Microsoft: Phi-3 Medium 128K Instruct\n  @capabilities max_tokens, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/microsoft/phi-3-medium-128k-instruct\n  */\n  \"microsoft/phi-3-medium-128k-instruct\",\n  /** OpenAI: GPT-4o\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o\n  */\n  \"openai/gpt-4o\",\n  /** OpenAI: GPT-4o (extended)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o:extended\n  */\n  \"openai/gpt-4o:extended\",\n  /** OpenAI: GPT-4o (2024-05-13)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p, web_search_options\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-05-13\n  */\n  \"openai/gpt-4o-2024-05-13\",\n  /** Meta: Llama 3 8B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-3-8b-instruct\n  */\n  \"meta-llama/llama-3-8b-instruct\",\n  /** Meta: Llama 3 70B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-3-70b-instruct\n  */\n  \"meta-llama/llama-3-70b-instruct\",\n  /** Mistral: Mixtral 8x22B Instruct\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, repetition_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_k, top_logprobs, top_p\n  @context_length 65536\n  @url https://openrouter.ai/mistralai/mixtral-8x22b-instruct\n  */\n  \"mistralai/mixtral-8x22b-instruct\",\n  /** OpenAI: GPT-4 Turbo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo\n  */\n  \"openai/gpt-4-turbo\",\n  /** Anthropic: Claude 3 Haiku\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku\n  */\n  \"anthropic/claude-3-haiku\",\n  /** Anthropic: Claude 3 Opus\n  @capabilities max_tokens, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus\n  */\n  \"anthropic/claude-3-opus\",\n  /** Mistral Large\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-large\n  */\n  \"mistralai/mistral-large\",\n  /** OpenAI: GPT-4 Turbo Preview\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo-preview\n  */\n  \"openai/gpt-4-turbo-preview\",\n  /** OpenAI: GPT-3.5 Turbo (older v0613)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 4095\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0613\n  */\n  \"openai/gpt-3.5-turbo-0613\",\n  /** Mistral Small\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small\n  */\n  \"mistralai/mistral-small\",\n  /** Mistral Tiny\n  @capabilities frequency_penalty, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-tiny\n  */\n  \"mistralai/mistral-tiny\",\n  /** Mistral: Mixtral 8x7B Instruct\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, response_format, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mixtral-8x7b-instruct\n  */\n  \"mistralai/mixtral-8x7b-instruct\",\n  /** OpenAI: GPT-4 Turbo (older v1106)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-1106-preview\n  */\n  \"openai/gpt-4-1106-preview\",\n  /** Mistral: Mistral 7B Instruct v0.1\n  @capabilities frequency_penalty, logit_bias, max_tokens, min_p, presence_penalty, repetition_penalty, seed, stop, temperature, tool_choice, tools, top_k, top_p\n  @context_length 2824\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.1\n  */\n  \"mistralai/mistral-7b-instruct-v0.1\",\n  /** OpenAI: GPT-3.5 Turbo 16k\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-16k\n  */\n  \"openai/gpt-3.5-turbo-16k\",\n  /** OpenAI: GPT-4\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4\n  */\n  \"openai/gpt-4\",\n  /** OpenAI: GPT-3.5 Turbo\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo\n  */\n  \"openai/gpt-3.5-turbo\",\n  /** OpenAI: GPT-4 (older v0314)\n  @capabilities frequency_penalty, logit_bias, logprobs, max_tokens, presence_penalty, response_format, seed, stop, structured_outputs, temperature, tool_choice, tools, top_logprobs, top_p\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4-0314\n  */\n  \"openai/gpt-4-0314\",\n] as const;\n\nexport type ToolCallingModel =\n  | (typeof toolCallingModels)[number]\n  | (string & {});\n"]}