{"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  /** TheDrummer: Valkyrie 49B V1\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, presence_penalty, frequency_penalty, repetition_penalty, top_k\n  @context_length 131072\n  @url https://openrouter.ai/thedrummer/valkyrie-49b-v1\n  */\n  | \"thedrummer/valkyrie-49b-v1\"\n  /** Anthropic: Claude Opus 4\n  @capabilities max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice, top_p, top_k\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 max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice, top_p, top_k\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4\n  */\n  | \"anthropic/claude-sonnet-4\"\n  /** Mistral: Devstral Small (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-small:free\n  */\n  | \"mistralai/devstral-small:free\"\n  /** Mistral: Devstral Small\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, repetition_penalty, top_k\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-small\n  */\n  | \"mistralai/devstral-small\"\n  /** Google: Gemma 3n 4B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format\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: Gemini 2.5 Flash Preview 05-20\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-05-20\n  */\n  | \"google/gemini-2.5-flash-preview-05-20\"\n  /** Google: Gemini 2.5 Flash Preview 05-20 (thinking)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-05-20:thinking\n  */\n  | \"google/gemini-2.5-flash-preview-05-20:thinking\"\n  /** OpenAI: Codex Mini\n  @capabilities tools, tool_choice, max_tokens, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs\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 tools, tool_choice, max_tokens, temperature, top_p, structured_outputs, response_format, repetition_penalty, top_k\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 (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/nousresearch/deephermes-3-mistral-24b-preview:free\n  */\n  | \"nousresearch/deephermes-3-mistral-24b-preview:free\"\n  /** Mistral: Mistral Medium 3\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, seed, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview\n  */\n  | \"google/gemini-2.5-pro-preview\"\n  /** Arcee AI: Caller Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/arcee-ai/caller-large\n  */\n  | \"arcee-ai/caller-large\"\n  /** Arcee AI: Spotlight\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/spotlight\n  */\n  | \"arcee-ai/spotlight\"\n  /** Arcee AI: Maestro Reasoning\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/arcee-ai/coder-large\n  */\n  | \"arcee-ai/coder-large\"\n  /** Arcee AI: Virtuoso Medium V2\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 131072\n  @url https://openrouter.ai/arcee-ai/virtuoso-medium-v2\n  */\n  | \"arcee-ai/virtuoso-medium-v2\"\n  /** Arcee AI: Arcee Blitz\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/arcee-ai/arcee-blitz\n  */\n  | \"arcee-ai/arcee-blitz\"\n  /** Microsoft: Phi 4 Reasoning Plus (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/microsoft/phi-4-reasoning-plus:free\n  */\n  | \"microsoft/phi-4-reasoning-plus:free\"\n  /** Microsoft: Phi 4 Reasoning Plus\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p\n  @context_length 32768\n  @url https://openrouter.ai/microsoft/phi-4-reasoning-plus\n  */\n  | \"microsoft/phi-4-reasoning-plus\"\n  /** Microsoft: Phi 4 Reasoning (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/microsoft/phi-4-reasoning:free\n  */\n  | \"microsoft/phi-4-reasoning:free\"\n  /** Inception: Mercury Coder Small Beta\n  @capabilities max_tokens, frequency_penalty, presence_penalty, stop\n  @context_length 32000\n  @url https://openrouter.ai/inception/mercury-coder-small-beta\n  */\n  | \"inception/mercury-coder-small-beta\"\n  /** OpenGVLab: InternVL3 14B (free)\n  @capabilities max_tokens, temperature, top_p\n  @context_length 32000\n  @url https://openrouter.ai/opengvlab/internvl3-14b:free\n  */\n  | \"opengvlab/internvl3-14b:free\"\n  /** OpenGVLab: InternVL3 2B (free)\n  @capabilities max_tokens, temperature, top_p\n  @context_length 32000\n  @url https://openrouter.ai/opengvlab/internvl3-2b:free\n  */\n  | \"opengvlab/internvl3-2b:free\"\n  /** DeepSeek: DeepSeek Prover V2 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-prover-v2:free\n  */\n  | \"deepseek/deepseek-prover-v2:free\"\n  /** DeepSeek: DeepSeek Prover V2\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-prover-v2\n  */\n  | \"deepseek/deepseek-prover-v2\"\n  /** Meta: Llama Guard 4 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, top_logprobs, logprobs\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 128000\n  @url https://openrouter.ai/qwen/qwen3-8b\n  */\n  | \"qwen/qwen3-8b\"\n  /** Qwen: Qwen3 14B (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias, logprobs, top_logprobs\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-14b\n  */\n  | \"qwen/qwen3-14b\"\n  /** Qwen: Qwen3 32B (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-32b:free\n  */\n  | \"qwen/qwen3-32b:free\"\n  /** Qwen: Qwen3 32B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, structured_outputs, logprobs, top_logprobs, logit_bias\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b:free\n  */\n  | \"qwen/qwen3-235b-a22b:free\"\n  /** Qwen: Qwen3 235B A22B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, presence_penalty, frequency_penalty, repetition_penalty, top_k, tools, tool_choice, stop, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 163840\n  @url https://openrouter.ai/tngtech/deepseek-r1t-chimera:free\n  */\n  | \"tngtech/deepseek-r1t-chimera:free\"\n  /** THUDM: GLM Z1 Rumination 32B \n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 32000\n  @url https://openrouter.ai/thudm/glm-z1-rumination-32b\n  */\n  | \"thudm/glm-z1-rumination-32b\"\n  /** Microsoft: MAI DS R1 (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 163840\n  @url https://openrouter.ai/microsoft/mai-ds-r1:free\n  */\n  | \"microsoft/mai-ds-r1:free\"\n  /** THUDM: GLM Z1 32B (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/thudm/glm-z1-32b:free\n  */\n  | \"thudm/glm-z1-32b:free\"\n  /** THUDM: GLM Z1 32B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 32000\n  @url https://openrouter.ai/thudm/glm-z1-32b\n  */\n  | \"thudm/glm-z1-32b\"\n  /** THUDM: GLM 4 32B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/thudm/glm-4-32b:free\n  */\n  | \"thudm/glm-4-32b:free\"\n  /** THUDM: GLM 4 32B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 32000\n  @url https://openrouter.ai/thudm/glm-4-32b\n  */\n  | \"thudm/glm-4-32b\"\n  /** Google: Gemini 2.5 Flash Preview 04-17\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview\n  */\n  | \"google/gemini-2.5-flash-preview\"\n  /** Google: Gemini 2.5 Flash Preview 04-17 (thinking)\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview:thinking\n  */\n  | \"google/gemini-2.5-flash-preview:thinking\"\n  /** OpenAI: o4 Mini High\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini-high\n  */\n  | \"openai/o4-mini-high\"\n  /** OpenAI: o3\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3\n  */\n  | \"openai/o3\"\n  /** OpenAI: o4 Mini\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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  /** Qwen: Qwen2.5 Coder 7B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen2.5-coder-7b-instruct\n  */\n  | \"qwen/qwen2.5-coder-7b-instruct\"\n  /** OpenAI: GPT-4.1\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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  /** Agentica: Deepcoder 14B Preview (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 96000\n  @url https://openrouter.ai/agentica-org/deepcoder-14b-preview:free\n  */\n  | \"agentica-org/deepcoder-14b-preview:free\"\n  /** Moonshot AI: Kimi VL A3B Thinking (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/moonshotai/kimi-vl-a3b-thinking:free\n  */\n  | \"moonshotai/kimi-vl-a3b-thinking:free\"\n  /** xAI: Grok 3 Mini Beta\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, seed, logprobs, top_logprobs, response_format\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\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.3 Nemotron Super 49B v1 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.3-nemotron-super-49b-v1:free\n  */\n  | \"nvidia/llama-3.3-nemotron-super-49b-v1:free\"\n  /** NVIDIA: Llama 3.3 Nemotron Super 49B v1\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.3-nemotron-super-49b-v1\n  */\n  | \"nvidia/llama-3.3-nemotron-super-49b-v1\"\n  /** NVIDIA: Llama 3.1 Nemotron Ultra 253B v1 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/nvidia/llama-3.1-nemotron-ultra-253b-v1:free\n  */\n  | \"nvidia/llama-3.1-nemotron-ultra-253b-v1:free\"\n  /** Meta: Llama 4 Maverick (free)\n  @capabilities max_tokens, temperature, top_p, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, tools, tool_choice\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, logprobs, top_logprobs, tools, tool_choice, structured_outputs, response_format\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, temperature, top_p, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, tools, tool_choice\n  @context_length 200000\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, tools, tool_choice, structured_outputs, repetition_penalty, top_k, top_logprobs, logprobs, logit_bias, min_p\n  @context_length 1048576\n  @url https://openrouter.ai/meta-llama/llama-4-scout\n  */\n  | \"meta-llama/llama-4-scout\"\n  /** OpenHands LM 32B V0.1\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/all-hands/openhands-lm-32b-v0.1\n  */\n  | \"all-hands/openhands-lm-32b-v0.1\"\n  /** DeepSeek: DeepSeek V3 Base (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-v3-base:free\n  */\n  | \"deepseek/deepseek-v3-base:free\"\n  /** Typhoon2 8B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 8192\n  @url https://openrouter.ai/scb10x/llama3.1-typhoon2-8b-instruct\n  */\n  | \"scb10x/llama3.1-typhoon2-8b-instruct\"\n  /** Typhoon2 70B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 8192\n  @url https://openrouter.ai/scb10x/llama3.1-typhoon2-70b-instruct\n  */\n  | \"scb10x/llama3.1-typhoon2-70b-instruct\"\n  /** Qwen: Qwen2.5 VL 3B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 64000\n  @url https://openrouter.ai/qwen/qwen2.5-vl-3b-instruct:free\n  */\n  | \"qwen/qwen2.5-vl-3b-instruct:free\"\n  /** Google: Gemini 2.5 Pro Experimental\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, seed, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-exp-03-25\n  */\n  | \"google/gemini-2.5-pro-exp-03-25\"\n  /** Qwen: Qwen2.5 VL 32B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, seed, response_format, presence_penalty, stop, frequency_penalty, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs\n  @context_length 128000\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, top_a\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 max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, stop, tools, tool_choice, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_p\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat-v3-0324\n  */\n  | \"deepseek/deepseek-chat-v3-0324\"\n  /** Qwerky 72B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 32768\n  @url https://openrouter.ai/featherless/qwerky-72b:free\n  */\n  | \"featherless/qwerky-72b:free\"\n  /** OpenAI: o1-pro\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 96000\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 max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, tools, tool_choice, stop, response_format, structured_outputs, seed, logit_bias, logprobs, top_logprobs\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  /** OlympicCoder 32B (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/open-r1/olympiccoder-32b:free\n  */\n  | \"open-r1/olympiccoder-32b:free\"\n  /** Google: Gemma 3 1B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/google/gemma-3-1b-it:free\n  */\n  | \"google/gemma-3-1b-it:free\"\n  /** Google: Gemma 3 4B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, response_format, structured_outputs\n  @context_length 96000\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p\n  @context_length 131072\n  @url https://openrouter.ai/google/gemma-3-4b-it\n  */\n  | \"google/gemma-3-4b-it\"\n  /** AI21: Jamba 1.6 Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-1.6-large\n  */\n  | \"ai21/jamba-1.6-large\"\n  /** AI21: Jamba Mini 1.6\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-1.6-mini\n  */\n  | \"ai21/jamba-1.6-mini\"\n  /** Google: Gemma 3 12B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, response_format, structured_outputs\n  @context_length 96000\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p\n  @context_length 131072\n  @url https://openrouter.ai/google/gemma-3-12b-it\n  */\n  | \"google/gemma-3-12b-it\"\n  /** Cohere: Command A\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\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 web_search_options, max_tokens, response_format, structured_outputs\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 web_search_options, max_tokens, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-search-preview\n  */\n  | \"openai/gpt-4o-search-preview\"\n  /** Reka: Flash 3 (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/rekaai/reka-flash-3:free\n  */\n  | \"rekaai/reka-flash-3:free\"\n  /** Google: Gemma 3 27B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, response_format, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias, top_logprobs, logprobs\n  @context_length 131072\n  @url https://openrouter.ai/google/gemma-3-27b-it\n  */\n  | \"google/gemma-3-27b-it\"\n  /** TheDrummer: Anubis Pro 105B V1\n  @capabilities max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k\n  @context_length 131072\n  @url https://openrouter.ai/thedrummer/anubis-pro-105b-v1\n  */\n  | \"thedrummer/anubis-pro-105b-v1\"\n  /** TheDrummer: Skyfall 36B V2\n  @capabilities max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_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 max_tokens, temperature, top_p, reasoning, include_reasoning, web_search_options, top_k, frequency_penalty, presence_penalty\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 max_tokens, temperature, top_p, web_search_options, top_k, frequency_penalty, presence_penalty\n  @context_length 200000\n  @url https://openrouter.ai/perplexity/sonar-pro\n  */\n  | \"perplexity/sonar-pro\"\n  /** Perplexity: Sonar Deep Research\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, frequency_penalty, presence_penalty\n  @context_length 128000\n  @url https://openrouter.ai/perplexity/sonar-deep-research\n  */\n  | \"perplexity/sonar-deep-research\"\n  /** DeepSeek: DeepSeek R1 Zero (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 128000\n  @url https://openrouter.ai/deepseek/deepseek-r1-zero:free\n  */\n  | \"deepseek/deepseek-r1-zero:free\"\n  /** Qwen: QwQ 32B (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 40000\n  @url https://openrouter.ai/qwen/qwq-32b:free\n  */\n  | \"qwen/qwq-32b:free\"\n  /** Qwen: QwQ 32B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, logprobs, top_logprobs, seed, tools, tool_choice, structured_outputs\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwq-32b\n  */\n  | \"qwen/qwq-32b\"\n  /** Moonshot AI: Moonlight 16B A3B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 8192\n  @url https://openrouter.ai/moonshotai/moonlight-16b-a3b-instruct:free\n  */\n  | \"moonshotai/moonlight-16b-a3b-instruct:free\"\n  /** Nous: DeepHermes 3 Llama 3 8B Preview (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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  /** OpenAI: GPT-4.5 (Preview)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4.5-preview\n  */\n  | \"openai/gpt-4.5-preview\"\n  /** Google: Gemini 2.0 Flash Lite\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:thinking\n  */\n  | \"anthropic/claude-3.7-sonnet:thinking\"\n  /** Anthropic: Claude 3.7 Sonnet (self-moderated)\n  @capabilities max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:beta\n  */\n  | \"anthropic/claude-3.7-sonnet:beta\"\n  /** Perplexity: R1 1776\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, frequency_penalty, presence_penalty, stop, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 128000\n  @url https://openrouter.ai/perplexity/r1-1776\n  */\n  | \"perplexity/r1-1776\"\n  /** Mistral: Saba\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, top_logprobs, logprobs, logit_bias\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 Mistral 24B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/cognitivecomputations/dolphin3.0-mistral-24b:free\n  */\n  | \"cognitivecomputations/dolphin3.0-mistral-24b:free\"\n  /** Llama Guard 3 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, top_logprobs, logprobs, seed\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 tools, tool_choice, seed, max_tokens, response_format, structured_outputs\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, structured_outputs\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, temperature, top_p, seed, response_format, presence_penalty\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 max_tokens, temperature, top_p, reasoning, include_reasoning\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 max_tokens, temperature, top_p, reasoning, include_reasoning\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, temperature, top_p, seed, response_format, presence_penalty\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 tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\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, temperature, top_p, seed, response_format, presence_penalty, stop, frequency_penalty, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs\n  @context_length 32000\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 tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen-plus\n  */\n  | \"qwen/qwen-plus\"\n  /** Qwen: Qwen-Max \n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-max\n  */\n  | \"qwen/qwen-max\"\n  /** OpenAI: o3 Mini\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini\n  */\n  | \"openai/o3-mini\"\n  /** DeepSeek: R1 Distill Qwen 1.5B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 131072\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-qwen-1.5b\n  */\n  | \"deepseek/deepseek-r1-distill-qwen-1.5b\"\n  /** Mistral: Mistral Small 3 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, tools, tool_choice, structured_outputs, logit_bias, logprobs\n  @context_length 28000\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 (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning\n  @context_length 16000\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-qwen-32b:free\n  */\n  | \"deepseek/deepseek-r1-distill-qwen-32b:free\"\n  /** DeepSeek: R1 Distill Qwen 32B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias\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 (free)\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 64000\n  @url https://openrouter.ai/deepseek/deepseek-r1-distill-qwen-14b:free\n  */\n  | \"deepseek/deepseek-r1-distill-qwen-14b:free\"\n  /** DeepSeek: R1 Distill Qwen 14B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed\n  @context_length 64000\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 max_tokens, temperature, top_p, reasoning, include_reasoning, web_search_options, top_k, frequency_penalty, presence_penalty\n  @context_length 127000\n  @url https://openrouter.ai/perplexity/sonar-reasoning\n  */\n  | \"perplexity/sonar-reasoning\"\n  /** Perplexity: Sonar\n  @capabilities max_tokens, temperature, top_p, web_search_options, top_k, frequency_penalty, presence_penalty\n  @context_length 127072\n  @url https://openrouter.ai/perplexity/sonar\n  */\n  | \"perplexity/sonar\"\n  /** Liquid: LFM 7B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 32768\n  @url https://openrouter.ai/liquid/lfm-7b\n  */\n  | \"liquid/lfm-7b\"\n  /** Liquid: LFM 3B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs\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 max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, min_p, repetition_penalty, tools, tool_choice, response_format, structured_outputs\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 max_tokens, reasoning, include_reasoning, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, top_a, logprobs\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1:free\n  */\n  | \"deepseek/deepseek-r1:free\"\n  /** DeepSeek: R1\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs, repetition_penalty, response_format, structured_outputs, min_p, tools, tool_choice\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-2501\n  */\n  | \"mistralai/codestral-2501\"\n  /** Microsoft: Phi 4\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs, repetition_penalty, response_format, min_p\n  @context_length 16384\n  @url https://openrouter.ai/microsoft/phi-4\n  */\n  | \"microsoft/phi-4\"\n  /** DeepSeek: DeepSeek V3 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, top_a\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat:free\n  */\n  | \"deepseek/deepseek-chat:free\"\n  /** DeepSeek: DeepSeek V3\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias, logprobs, top_logprobs, tools, tool_choice, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias\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 tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o1\n  */\n  | \"openai/o1\"\n  /** EVA Llama 3.33 70B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/eva-unit-01/eva-llama-3.33-70b\n  */\n  | \"eva-unit-01/eva-llama-3.33-70b\"\n  /** xAI: Grok 2 Vision 1212\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 32768\n  @url https://openrouter.ai/x-ai/grok-2-vision-1212\n  */\n  | \"x-ai/grok-2-vision-1212\"\n  /** xAI: Grok 2 1212\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-2-1212\n  */\n  | \"x-ai/grok-2-1212\"\n  /** Cohere: Command R7B (12-2024)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\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, temperature, top_p, stop\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, tools, tool_choice, repetition_penalty, top_k, logit_bias, min_p, response_format\n  @context_length 131072\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty, structured_outputs\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 tools, max_tokens, temperature, top_p, top_k, stop\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 tools, max_tokens, temperature, top_p, top_k, stop\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 tools, max_tokens, temperature, top_p, top_k, stop\n  @context_length 300000\n  @url https://openrouter.ai/amazon/nova-pro-v1\n  */\n  | \"amazon/nova-pro-v1\"\n  /** Qwen: QwQ 32B Preview\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, logprobs, top_logprobs, seed, logit_bias, top_k, min_p, repetition_penalty\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwq-32b-preview\n  */\n  | \"qwen/qwq-32b-preview\"\n  /** EVA Qwen2.5 72B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/eva-unit-01/eva-qwen-2.5-72b\n  */\n  | \"eva-unit-01/eva-qwen-2.5-72b\"\n  /** OpenAI: GPT-4o (2024-11-20)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/pixtral-large-2411\n  */\n  | \"mistralai/pixtral-large-2411\"\n  /** xAI: Grok Vision Beta\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 8192\n  @url https://openrouter.ai/x-ai/grok-vision-beta\n  */\n  | \"x-ai/grok-vision-beta\"\n  /** Infermatic: Mistral Nemo Inferor 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/infermatic/mn-inferor-12b\n  */\n  | \"infermatic/mn-inferor-12b\"\n  /** Qwen2.5 Coder 32B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs, top_a\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed\n  @context_length 16000\n  @url https://openrouter.ai/raifle/sorcererlm-8x22b\n  */\n  | \"raifle/sorcererlm-8x22b\"\n  /** EVA Qwen2.5 32B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/eva-unit-01/eva-qwen-2.5-32b\n  */\n  | \"eva-unit-01/eva-qwen-2.5-32b\"\n  /** Unslopnemo 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, logprobs\n  @context_length 32000\n  @url https://openrouter.ai/thedrummer/unslopnemo-12b\n  */\n  | \"thedrummer/unslopnemo-12b\"\n  /** Anthropic: Claude 3.5 Haiku (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku:beta\n  */\n  | \"anthropic/claude-3.5-haiku:beta\"\n  /** Anthropic: Claude 3.5 Haiku\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\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 Haiku (2024-10-22) (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku-20241022:beta\n  */\n  | \"anthropic/claude-3.5-haiku-20241022:beta\"\n  /** Anthropic: Claude 3.5 Haiku (2024-10-22)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku-20241022\n  */\n  | \"anthropic/claude-3.5-haiku-20241022\"\n  /** NeverSleep: Lumimaid v0.2 70B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\n  @context_length 16384\n  @url https://openrouter.ai/neversleep/llama-3.1-lumimaid-70b\n  */\n  | \"neversleep/llama-3.1-lumimaid-70b\"\n  /** Magnum v4 72B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed, logit_bias, top_a\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 (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet:beta\n  */\n  | \"anthropic/claude-3.5-sonnet:beta\"\n  /** Anthropic: Claude 3.5 Sonnet\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet\n  */\n  | \"anthropic/claude-3.5-sonnet\"\n  /** xAI: Grok Beta\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-beta\n  */\n  | \"x-ai/grok-beta\"\n  /** Mistral: Ministral 8B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/ministral-8b\n  */\n  | \"mistralai/ministral-8b\"\n  /** Mistral: Ministral 3B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/ministral-3b\n  */\n  | \"mistralai/ministral-3b\"\n  /** Qwen2.5 7B Instruct (free)\n  @capabilities max_tokens, temperature, top_p\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-7b-instruct:free\n  */\n  | \"qwen/qwen-2.5-7b-instruct:free\"\n  /** Qwen2.5 7B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, structured_outputs, seed\n  @context_length 32768\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, repetition_penalty, min_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, temperature, top_p, stop\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, temperature, top_p, stop\n  @context_length 8000\n  @url https://openrouter.ai/inflection/inflection-3-pi\n  */\n  | \"inflection/inflection-3-pi\"\n  /** Google: Gemini 1.5 Flash 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 1000000\n  @url https://openrouter.ai/google/gemini-flash-1.5-8b\n  */\n  | \"google/gemini-flash-1.5-8b\"\n  /** Rocinante 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed, logit_bias\n  @context_length 32768\n  @url https://openrouter.ai/thedrummer/rocinante-12b\n  */\n  | \"thedrummer/rocinante-12b\"\n  /** Magnum v2 72B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed\n  @context_length 32768\n  @url https://openrouter.ai/anthracite-org/magnum-v2-72b\n  */\n  | \"anthracite-org/magnum-v2-72b\"\n  /** Liquid: LFM 40B MoE\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 32768\n  @url https://openrouter.ai/liquid/lfm-40b\n  */\n  | \"liquid/lfm-40b\"\n  /** Meta: Llama 3.2 3B Instruct (free)\n  @capabilities max_tokens, temperature, top_p\n  @context_length 20000\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-3b-instruct\n  */\n  | \"meta-llama/llama-3.2-3b-instruct\"\n  /** Meta: Llama 3.2 1B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-1b-instruct:free\n  */\n  | \"meta-llama/llama-3.2-1b-instruct:free\"\n  /** Meta: Llama 3.2 1B Instruct\n  @capabilities max_tokens, temperature, top_p, top_k, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, seed, min_p, logit_bias, top_logprobs, logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed\n  @context_length 131072\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 (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-11b-vision-instruct:free\n  */\n  | \"meta-llama/llama-3.2-11b-vision-instruct:free\"\n  /** Meta: Llama 3.2 11B Vision Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format, top_logprobs, tools, tool_choice, logprobs\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  /** Qwen2.5 72B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed, logit_bias, top_a\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-preview\n  @capabilities seed, max_tokens\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-preview\n  */\n  | \"openai/o1-preview\"\n  /** OpenAI: o1-preview (2024-09-12)\n  @capabilities seed, max_tokens\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-preview-2024-09-12\n  */\n  | \"openai/o1-preview-2024-09-12\"\n  /** OpenAI: o1-mini\n  @capabilities seed, max_tokens\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-mini\n  */\n  | \"openai/o1-mini\"\n  /** OpenAI: o1-mini (2024-09-12)\n  @capabilities seed, max_tokens\n  @context_length 128000\n  @url https://openrouter.ai/openai/o1-mini-2024-09-12\n  */\n  | \"openai/o1-mini-2024-09-12\"\n  /** Mistral: Pixtral 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, logprobs, top_logprobs, seed, logit_bias, top_k, min_p, repetition_penalty, tools, tool_choice, response_format, structured_outputs\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 tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-08-2024\n  */\n  | \"cohere/command-r-plus-08-2024\"\n  /** Cohere: Command R (08-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-08-2024\n  */\n  | \"cohere/command-r-08-2024\"\n  /** Qwen: Qwen2.5-VL 7B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2.5-vl-7b-instruct:free\n  */\n  | \"qwen/qwen-2.5-vl-7b-instruct:free\"\n  /** Qwen: Qwen2.5-VL 7B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, logprobs, top_logprobs, min_p, seed\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format\n  @context_length 131072\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 131072\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty, tools, tool_choice\n  @context_length 131072\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, repetition_penalty, min_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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format\n  @context_length 8192\n  @url https://openrouter.ai/sao10k/l3-lunaris-8b\n  */\n  | \"sao10k/l3-lunaris-8b\"\n  /** Aetherwiing: Starcannon 12B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/aetherwiing/mn-starcannon-12b\n  */\n  | \"aetherwiing/mn-starcannon-12b\"\n  /** OpenAI: GPT-4o (2024-08-06)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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) (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 64000\n  @url https://openrouter.ai/meta-llama/llama-3.1-405b:free\n  */\n  | \"meta-llama/llama-3.1-405b:free\"\n  /** Meta: Llama 3.1 405B (base)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, logprobs, top_logprobs, seed, logit_bias, top_k, min_p, repetition_penalty\n  @context_length 32768\n  @url https://openrouter.ai/meta-llama/llama-3.1-405b\n  */\n  | \"meta-llama/llama-3.1-405b\"\n  /** Mistral Nemo 12B Celeste\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/nothingiisreal/mn-celeste-12b\n  */\n  | \"nothingiisreal/mn-celeste-12b\"\n  /** Perplexity: Llama 3.1 Sonar 8B Online\n  @capabilities max_tokens, temperature, top_p, top_k, frequency_penalty, presence_penalty\n  @context_length 127072\n  @url https://openrouter.ai/perplexity/llama-3.1-sonar-small-128k-online\n  */\n  | \"perplexity/llama-3.1-sonar-small-128k-online\"\n  /** Perplexity: Llama 3.1 Sonar 70B Online\n  @capabilities max_tokens, temperature, top_p, top_k, frequency_penalty, presence_penalty\n  @context_length 127072\n  @url https://openrouter.ai/perplexity/llama-3.1-sonar-large-128k-online\n  */\n  | \"perplexity/llama-3.1-sonar-large-128k-online\"\n  /** Meta: Llama 3.1 8B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.1-8b-instruct:free\n  */\n  | \"meta-llama/llama-3.1-8b-instruct:free\"\n  /** Meta: Llama 3.1 8B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, repetition_penalty, structured_outputs, min_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  /** Meta: Llama 3.1 405B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, min_p, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs, structured_outputs\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  /** Mistral: Codestral Mamba\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, seed\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-mamba\n  */\n  | \"mistralai/codestral-mamba\"\n  /** Mistral: Mistral Nemo (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs, tools, tool_choice, response_format, structured_outputs, repetition_penalty, min_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-nemo\n  */\n  | \"mistralai/mistral-nemo\"\n  /** OpenAI: GPT-4o-mini\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs, tools, tool_choice\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini\n  */\n  | \"openai/gpt-4o-mini\"\n  /** OpenAI: GPT-4o-mini (2024-07-18)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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  /** Google: Gemma 2 27B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-2-27b-it\n  */\n  | \"google/gemma-2-27b-it\"\n  /** Magnum 72B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/alpindale/magnum-72b\n  */\n  | \"alpindale/magnum-72b\"\n  /** Google: Gemma 2 9B (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format, top_logprobs, logprobs\n  @context_length 8192\n  @url https://openrouter.ai/google/gemma-2-9b-it\n  */\n  | \"google/gemma-2-9b-it\"\n  /** 01.AI: Yi Large\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/01-ai/yi-large\n  */\n  | \"01-ai/yi-large\"\n  /** Anthropic: Claude 3.5 Sonnet (2024-06-20) (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet-20240620:beta\n  */\n  | \"anthropic/claude-3.5-sonnet-20240620:beta\"\n  /** Anthropic: Claude 3.5 Sonnet (2024-06-20)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 8192\n  @url https://openrouter.ai/sao10k/l3-euryale-70b\n  */\n  | \"sao10k/l3-euryale-70b\"\n  /** Dolphin 2.9.2 Mixtral 8x22B 🐬\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 16000\n  @url https://openrouter.ai/cognitivecomputations/dolphin-mixtral-8x22b\n  */\n  | \"cognitivecomputations/dolphin-mixtral-8x22b\"\n  /** Qwen 2 72B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-2-72b-instruct\n  */\n  | \"qwen/qwen-2-72b-instruct\"\n  /** Mistral: Mistral 7B Instruct (free)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, tools, tool_choice, structured_outputs\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct\n  */\n  | \"mistralai/mistral-7b-instruct\"\n  /** NousResearch: Hermes 2 Pro - Llama-3 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty\n  @context_length 131072\n  @url https://openrouter.ai/nousresearch/hermes-2-pro-llama-3-8b\n  */\n  | \"nousresearch/hermes-2-pro-llama-3-8b\"\n  /** Mistral: Mistral 7B Instruct v0.3\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, tools, tool_choice, logprobs, structured_outputs\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 tools, tool_choice, max_tokens, temperature, 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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 131072\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 8192\n  @url https://openrouter.ai/neversleep/llama-3-lumimaid-70b\n  */\n  | \"neversleep/llama-3-lumimaid-70b\"\n  /** DeepSeek-Coder-V2\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 128000\n  @url https://openrouter.ai/deepseek/deepseek-coder\n  */\n  | \"deepseek/deepseek-coder\"\n  /** Google: Gemini 1.5 Flash \n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 1000000\n  @url https://openrouter.ai/google/gemini-flash-1.5\n  */\n  | \"google/gemini-flash-1.5\"\n  /** OpenAI: GPT-4o\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o\n  */\n  | \"openai/gpt-4o\"\n  /** OpenAI: GPT-4o (extended)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o:extended\n  */\n  | \"openai/gpt-4o:extended\"\n  /** Meta: LlamaGuard 2 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 8192\n  @url https://openrouter.ai/meta-llama/llama-guard-2-8b\n  */\n  | \"meta-llama/llama-guard-2-8b\"\n  /** OpenAI: GPT-4o (2024-05-13)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-2024-05-13\n  */\n  | \"openai/gpt-4o-2024-05-13\"\n  /** OLMo 7B Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 2048\n  @url https://openrouter.ai/allenai/olmo-7b-instruct\n  */\n  | \"allenai/olmo-7b-instruct\"\n  /** NeverSleep: Llama 3 Lumimaid 8B (extended)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\n  @context_length 24576\n  @url https://openrouter.ai/neversleep/llama-3-lumimaid-8b:extended\n  */\n  | \"neversleep/llama-3-lumimaid-8b:extended\"\n  /** NeverSleep: Llama 3 Lumimaid 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed, logit_bias, top_a\n  @context_length 24576\n  @url https://openrouter.ai/neversleep/llama-3-lumimaid-8b\n  */\n  | \"neversleep/llama-3-lumimaid-8b\"\n  /** Fimbulvetr 11B v2\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 4096\n  @url https://openrouter.ai/sao10k/fimbulvetr-11b-v2\n  */\n  | \"sao10k/fimbulvetr-11b-v2\"\n  /** Meta: Llama 3 8B Instruct\n  @capabilities max_tokens, temperature, top_p, top_k, seed, repetition_penalty, frequency_penalty, presence_penalty, stop, min_p, logit_bias, tools, tool_choice, response_format, top_logprobs, logprobs, top_a\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, top_logprobs, logprobs, seed, tools, tool_choice\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, top_k, repetition_penalty, logit_bias, logprobs, top_logprobs\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 max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, stop, seed, min_p, logit_bias, response_format\n  @context_length 65536\n  @url https://openrouter.ai/microsoft/wizardlm-2-8x22b\n  */\n  | \"microsoft/wizardlm-2-8x22b\"\n  /** Google: Gemini 1.5 Pro\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 2000000\n  @url https://openrouter.ai/google/gemini-pro-1.5\n  */\n  | \"google/gemini-pro-1.5\"\n  /** OpenAI: GPT-4 Turbo\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo\n  */\n  | \"openai/gpt-4-turbo\"\n  /** Cohere: Command R+\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus\n  */\n  | \"cohere/command-r-plus\"\n  /** Cohere: Command R+ (04-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-04-2024\n  */\n  | \"cohere/command-r-plus-04-2024\"\n  /** Midnight Rose 70B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias\n  @context_length 4096\n  @url https://openrouter.ai/sophosympatheia/midnight-rose-70b\n  */\n  | \"sophosympatheia/midnight-rose-70b\"\n  /** Cohere: Command\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 4096\n  @url https://openrouter.ai/cohere/command\n  */\n  | \"cohere/command\"\n  /** Cohere: Command R\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r\n  */\n  | \"cohere/command-r\"\n  /** Anthropic: Claude 3 Haiku (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku:beta\n  */\n  | \"anthropic/claude-3-haiku:beta\"\n  /** Anthropic: Claude 3 Haiku\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku\n  */\n  | \"anthropic/claude-3-haiku\"\n  /** Anthropic: Claude 3 Opus (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus:beta\n  */\n  | \"anthropic/claude-3-opus:beta\"\n  /** Anthropic: Claude 3 Opus\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus\n  */\n  | \"anthropic/claude-3-opus\"\n  /** Anthropic: Claude 3 Sonnet (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-sonnet:beta\n  */\n  | \"anthropic/claude-3-sonnet:beta\"\n  /** Anthropic: Claude 3 Sonnet\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-sonnet\n  */\n  | \"anthropic/claude-3-sonnet\"\n  /** Cohere: Command R (03-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-03-2024\n  */\n  | \"cohere/command-r-03-2024\"\n  /** Mistral Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, response_format, stop, seed, frequency_penalty, presence_penalty, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-large\n  */\n  | \"mistralai/mistral-large\"\n  /** OpenAI: GPT-3.5 Turbo (older v0613)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 4095\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0613\n  */\n  | \"openai/gpt-3.5-turbo-0613\"\n  /** OpenAI: GPT-4 Turbo Preview\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo-preview\n  */\n  | \"openai/gpt-4-turbo-preview\"\n  /** Nous: Hermes 2 Mixtral 8x7B DPO\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/nousresearch/nous-hermes-2-mixtral-8x7b-dpo\n  */\n  | \"nousresearch/nous-hermes-2-mixtral-8x7b-dpo\"\n  /** Mistral Medium\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-medium\n  */\n  | \"mistralai/mistral-medium\"\n  /** Mistral Small\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small\n  */\n  | \"mistralai/mistral-small\"\n  /** Mistral Tiny\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-tiny\n  */\n  | \"mistralai/mistral-tiny\"\n  /** Mistral: Mistral 7B Instruct v0.2\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.2\n  */\n  | \"mistralai/mistral-7b-instruct-v0.2\"\n  /** Mistral: Mixtral 8x7B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mixtral-8x7b-instruct\n  */\n  | \"mistralai/mixtral-8x7b-instruct\"\n  /** Noromaid 20B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\n  @context_length 8192\n  @url https://openrouter.ai/neversleep/noromaid-20b\n  */\n  | \"neversleep/noromaid-20b\"\n  /** Anthropic: Claude v2.1 (self-moderated)\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-2.1:beta\n  */\n  | \"anthropic/claude-2.1:beta\"\n  /** Anthropic: Claude v2.1\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-2.1\n  */\n  | \"anthropic/claude-2.1\"\n  /** Anthropic: Claude v2 (self-moderated)\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-2:beta\n  */\n  | \"anthropic/claude-2:beta\"\n  /** Anthropic: Claude v2\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-2\n  */\n  | \"anthropic/claude-2\"\n  /** Toppy M 7B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 4096\n  @url https://openrouter.ai/undi95/toppy-m-7b\n  */\n  | \"undi95/toppy-m-7b\"\n  /** Goliath 120B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\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-3.5 Turbo 16k (older v1106)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-1106\n  */\n  | \"openai/gpt-3.5-turbo-1106\"\n  /** OpenAI: GPT-4 Turbo (older v1106)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed\n  @context_length 2824\n  @url https://openrouter.ai/mistralai/mistral-7b-instruct-v0.1\n  */\n  | \"mistralai/mistral-7b-instruct-v0.1\"\n  /** Pygmalion: Mythalion 13B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\n  @context_length 4096\n  @url https://openrouter.ai/pygmalionai/mythalion-13b\n  */\n  | \"pygmalionai/mythalion-13b\"\n  /** OpenAI: GPT-3.5 Turbo 16k\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\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 32k\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 32767\n  @url https://openrouter.ai/openai/gpt-4-32k\n  */\n  | \"openai/gpt-4-32k\"\n  /** OpenAI: GPT-4 32k (older v0314)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 32767\n  @url https://openrouter.ai/openai/gpt-4-32k-0314\n  */\n  | \"openai/gpt-4-32k-0314\"\n  /** Mancer: Weaver (alpha)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, logit_bias, top_k, min_p, seed, top_a\n  @context_length 8000\n  @url https://openrouter.ai/mancer/weaver\n  */\n  | \"mancer/weaver\"\n  /** Anthropic: Claude v2.0 (self-moderated)\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 100000\n  @url https://openrouter.ai/anthropic/claude-2.0:beta\n  */\n  | \"anthropic/claude-2.0:beta\"\n  /** Anthropic: Claude v2.0\n  @capabilities max_tokens, temperature, top_p, top_k, stop\n  @context_length 100000\n  @url https://openrouter.ai/anthropic/claude-2.0\n  */\n  | \"anthropic/claude-2.0\"\n  /** ReMM SLERP 13B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed, logit_bias, top_a\n  @context_length 4096\n  @url https://openrouter.ai/undi95/remm-slerp-l2-13b\n  */\n  | \"undi95/remm-slerp-l2-13b\"\n  /** MythoMax 13B\n  @capabilities max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, stop, seed, min_p, logit_bias, response_format, top_a\n  @context_length 4096\n  @url https://openrouter.ai/gryphe/mythomax-l2-13b\n  */\n  | \"gryphe/mythomax-l2-13b\"\n  /** Meta: Llama 2 70B Chat\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 4096\n  @url https://openrouter.ai/meta-llama/llama-2-70b-chat\n  */\n  | \"meta-llama/llama-2-70b-chat\"\n  /** OpenAI: GPT-3.5 Turbo\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo\n  */\n  | \"openai/gpt-3.5-turbo\"\n  /** OpenAI: GPT-3.5 Turbo 16k\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0125\n  */\n  | \"openai/gpt-3.5-turbo-0125\"\n  /** OpenAI: GPT-4\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4\n  */\n  | \"openai/gpt-4\"\n  /** OpenAI: GPT-4 (older v0314)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 Opus 4\n  @capabilities max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice, top_p, top_k\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 max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice, top_p, top_k\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-sonnet-4\n  */\n  \"anthropic/claude-sonnet-4\",\n  /** Mistral: Devstral Small\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, repetition_penalty, top_k\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/devstral-small\n  */\n  \"mistralai/devstral-small\",\n  /** Google: Gemini 2.5 Flash Preview 05-20\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-05-20\n  */\n  \"google/gemini-2.5-flash-preview-05-20\",\n  /** Google: Gemini 2.5 Flash Preview 05-20 (thinking)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview-05-20:thinking\n  */\n  \"google/gemini-2.5-flash-preview-05-20:thinking\",\n  /** OpenAI: Codex Mini\n  @capabilities tools, tool_choice, max_tokens, reasoning, include_reasoning, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs\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 tools, tool_choice, max_tokens, temperature, top_p, structured_outputs, response_format, repetition_penalty, top_k\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, seed, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-preview\n  */\n  \"google/gemini-2.5-pro-preview\",\n  /** Arcee AI: Caller Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format\n  @context_length 32768\n  @url https://openrouter.ai/arcee-ai/caller-large\n  */\n  \"arcee-ai/caller-large\",\n  /** Qwen: Qwen3 30B A3B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias, logprobs, top_logprobs\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-14b\n  */\n  \"qwen/qwen3-14b\",\n  /** Qwen: Qwen3 32B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, structured_outputs, logprobs, top_logprobs, logit_bias\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-32b\n  */\n  \"qwen/qwen3-32b\",\n  /** Qwen: Qwen3 235B A22B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, presence_penalty, frequency_penalty, repetition_penalty, top_k, tools, tool_choice, stop, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_p\n  @context_length 40960\n  @url https://openrouter.ai/qwen/qwen3-235b-a22b\n  */\n  \"qwen/qwen3-235b-a22b\",\n  /** Google: Gemini 2.5 Flash Preview 04-17\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview\n  */\n  \"google/gemini-2.5-flash-preview\",\n  /** Google: Gemini 2.5 Flash Preview 04-17 (thinking)\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-flash-preview:thinking\n  */\n  \"google/gemini-2.5-flash-preview:thinking\",\n  /** OpenAI: o4 Mini High\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini-high\n  */\n  \"openai/o4-mini-high\",\n  /** OpenAI: o3\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3\n  */\n  \"openai/o3\",\n  /** OpenAI: o4 Mini\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o4-mini\n  */\n  \"openai/o4-mini\",\n  /** OpenAI: GPT-4.1\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, stop, seed, logprobs, top_logprobs, response_format\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\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, temperature, top_p, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, tools, tool_choice\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, logprobs, top_logprobs, tools, tool_choice, structured_outputs, response_format\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, temperature, top_p, structured_outputs, response_format, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs, tools, tool_choice\n  @context_length 200000\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, tools, tool_choice, structured_outputs, repetition_penalty, top_k, top_logprobs, logprobs, logit_bias, min_p\n  @context_length 1048576\n  @url https://openrouter.ai/meta-llama/llama-4-scout\n  */\n  \"meta-llama/llama-4-scout\",\n  /** OpenHands LM 32B V0.1\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, top_k, min_p, seed\n  @context_length 16384\n  @url https://openrouter.ai/all-hands/openhands-lm-32b-v0.1\n  */\n  \"all-hands/openhands-lm-32b-v0.1\",\n  /** Google: Gemini 2.5 Pro Experimental\n  @capabilities max_tokens, temperature, top_p, tools, tool_choice, stop, seed, response_format, structured_outputs\n  @context_length 1048576\n  @url https://openrouter.ai/google/gemini-2.5-pro-exp-03-25\n  */\n  \"google/gemini-2.5-pro-exp-03-25\",\n  /** DeepSeek: DeepSeek V3 0324\n  @capabilities max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, stop, tools, tool_choice, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logprobs, logit_bias, top_logprobs\n  @context_length 96000\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 max_tokens, temperature, top_p, presence_penalty, frequency_penalty, repetition_penalty, top_k, tools, tool_choice, stop, response_format, structured_outputs, seed, logit_bias, logprobs, top_logprobs\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  /** AI21: Jamba 1.6 Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-1.6-large\n  */\n  \"ai21/jamba-1.6-large\",\n  /** AI21: Jamba Mini 1.6\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop\n  @context_length 256000\n  @url https://openrouter.ai/ai21/jamba-1.6-mini\n  */\n  \"ai21/jamba-1.6-mini\",\n  /** Qwen: QwQ 32B\n  @capabilities max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, logprobs, top_logprobs, seed, tools, tool_choice, structured_outputs\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwq-32b\n  */\n  \"qwen/qwq-32b\",\n  /** OpenAI: GPT-4.5 (Preview)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4.5-preview\n  */\n  \"openai/gpt-4.5-preview\",\n  /** Google: Gemini 2.0 Flash Lite\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop\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 tools, tool_choice, max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:thinking\n  */\n  \"anthropic/claude-3.7-sonnet:thinking\",\n  /** Anthropic: Claude 3.7 Sonnet (self-moderated)\n  @capabilities max_tokens, temperature, stop, reasoning, include_reasoning, tools, tool_choice\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.7-sonnet:beta\n  */\n  \"anthropic/claude-3.7-sonnet:beta\",\n  /** Mistral: Saba\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, top_logprobs, logprobs, logit_bias\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-saba\n  */\n  \"mistralai/mistral-saba\",\n  /** OpenAI: o3 Mini High\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\n  @context_length 1000000\n  @url https://openrouter.ai/qwen/qwen-turbo\n  */\n  \"qwen/qwen-turbo\",\n  /** Qwen: Qwen-Plus\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\n  @context_length 131072\n  @url https://openrouter.ai/qwen/qwen-plus\n  */\n  \"qwen/qwen-plus\",\n  /** Qwen: Qwen-Max \n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, seed, response_format, presence_penalty\n  @context_length 32768\n  @url https://openrouter.ai/qwen/qwen-max\n  */\n  \"qwen/qwen-max\",\n  /** OpenAI: o3 Mini\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o3-mini\n  */\n  \"openai/o3-mini\",\n  /** Mistral: Mistral Small 3\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, tools, tool_choice, structured_outputs, logit_bias, logprobs\n  @context_length 28000\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 max_tokens, temperature, top_p, reasoning, include_reasoning, top_k, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, min_p, repetition_penalty, tools, tool_choice, response_format, structured_outputs\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 max_tokens, temperature, top_p, reasoning, include_reasoning, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs, repetition_penalty, response_format, structured_outputs, min_p, tools, tool_choice\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-r1\n  */\n  \"deepseek/deepseek-r1\",\n  /** Mistral: Codestral 2501\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-2501\n  */\n  \"mistralai/codestral-2501\",\n  /** DeepSeek: DeepSeek V3\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_p, logit_bias, logprobs, top_logprobs, tools, tool_choice, structured_outputs\n  @context_length 163840\n  @url https://openrouter.ai/deepseek/deepseek-chat\n  */\n  \"deepseek/deepseek-chat\",\n  /** OpenAI: o1\n  @capabilities tools, tool_choice, seed, max_tokens, response_format, structured_outputs\n  @context_length 200000\n  @url https://openrouter.ai/openai/o1\n  */\n  \"openai/o1\",\n  /** xAI: Grok 2 1212\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-2-1212\n  */\n  \"x-ai/grok-2-1212\",\n  /** Meta: Llama 3.3 70B Instruct (free)\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, tools, tool_choice, repetition_penalty, top_k, logit_bias, min_p, response_format\n  @context_length 131072\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty, structured_outputs\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 tools, max_tokens, temperature, top_p, top_k, stop\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 tools, max_tokens, temperature, top_p, top_k, stop\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 tools, max_tokens, temperature, top_p, top_k, stop\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/pixtral-large-2411\n  */\n  \"mistralai/pixtral-large-2411\",\n  /** Anthropic: Claude 3.5 Haiku (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku:beta\n  */\n  \"anthropic/claude-3.5-haiku:beta\",\n  /** Anthropic: Claude 3.5 Haiku\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\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 Haiku (2024-10-22) (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-haiku-20241022:beta\n  */\n  \"anthropic/claude-3.5-haiku-20241022:beta\",\n  /** Anthropic: Claude 3.5 Haiku (2024-10-22)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\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 Sonnet (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet:beta\n  */\n  \"anthropic/claude-3.5-sonnet:beta\",\n  /** Anthropic: Claude 3.5 Sonnet\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet\n  */\n  \"anthropic/claude-3.5-sonnet\",\n  /** xAI: Grok Beta\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logprobs, top_logprobs, response_format\n  @context_length 131072\n  @url https://openrouter.ai/x-ai/grok-beta\n  */\n  \"x-ai/grok-beta\",\n  /** Mistral: Ministral 8B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/ministral-8b\n  */\n  \"mistralai/ministral-8b\",\n  /** Mistral: Ministral 3B\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/ministral-3b\n  */\n  \"mistralai/ministral-3b\",\n  /** NVIDIA: Llama 3.1 Nemotron 70B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, repetition_penalty, min_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  /** Google: Gemini 1.5 Flash 8B\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 1000000\n  @url https://openrouter.ai/google/gemini-flash-1.5-8b\n  */\n  \"google/gemini-flash-1.5-8b\",\n  /** Meta: Llama 3.2 3B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty\n  @context_length 131072\n  @url https://openrouter.ai/meta-llama/llama-3.2-3b-instruct\n  */\n  \"meta-llama/llama-3.2-3b-instruct\",\n  /** Meta: Llama 3.2 11B Vision Instruct\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, min_p, repetition_penalty, logit_bias, response_format, top_logprobs, tools, tool_choice, logprobs\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  /** Qwen2.5 72B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, seed, min_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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, logprobs, top_logprobs, seed, logit_bias, top_k, min_p, repetition_penalty, tools, tool_choice, response_format, structured_outputs\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 tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-08-2024\n  */\n  \"cohere/command-r-plus-08-2024\",\n  /** Cohere: Command R (08-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-08-2024\n  */\n  \"cohere/command-r-08-2024\",\n  /** Microsoft: Phi-3.5 Mini 128K Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 131072\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, min_p, repetition_penalty, tools, tool_choice\n  @context_length 131072\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 8B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, top_k, repetition_penalty, structured_outputs, min_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  /** Meta: Llama 3.1 405B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, response_format, structured_outputs, logit_bias, logprobs, top_logprobs, min_p, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs, structured_outputs\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  /** Mistral: Codestral Mamba\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, seed\n  @context_length 262144\n  @url https://openrouter.ai/mistralai/codestral-mamba\n  */\n  \"mistralai/codestral-mamba\",\n  /** Mistral: Mistral Nemo\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs, tools, tool_choice, response_format, structured_outputs, repetition_penalty, min_p\n  @context_length 131072\n  @url https://openrouter.ai/mistralai/mistral-nemo\n  */\n  \"mistralai/mistral-nemo\",\n  /** OpenAI: GPT-4o-mini\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs, tools, tool_choice\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o-mini\n  */\n  \"openai/gpt-4o-mini\",\n  /** OpenAI: GPT-4o-mini (2024-07-18)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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  /** Anthropic: Claude 3.5 Sonnet (2024-06-20) (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3.5-sonnet-20240620:beta\n  */\n  \"anthropic/claude-3.5-sonnet-20240620:beta\",\n  /** Anthropic: Claude 3.5 Sonnet (2024-06-20)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, repetition_penalty, response_format, top_k, seed, min_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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, tools, tool_choice, structured_outputs\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, tools, tool_choice, logprobs, structured_outputs\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 tools, tool_choice, max_tokens, temperature, 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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, top_k, logit_bias, logprobs, top_logprobs\n  @context_length 131072\n  @url https://openrouter.ai/microsoft/phi-3-medium-128k-instruct\n  */\n  \"microsoft/phi-3-medium-128k-instruct\",\n  /** Google: Gemini 1.5 Flash \n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 1000000\n  @url https://openrouter.ai/google/gemini-flash-1.5\n  */\n  \"google/gemini-flash-1.5\",\n  /** OpenAI: GPT-4o\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4o\n  */\n  \"openai/gpt-4o\",\n  /** OpenAI: GPT-4o (extended)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, web_search_options, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 max_tokens, temperature, top_p, top_k, seed, repetition_penalty, frequency_penalty, presence_penalty, stop, min_p, logit_bias, tools, tool_choice, response_format, top_logprobs, logprobs, top_a\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 max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, top_logprobs, logprobs, seed, tools, tool_choice\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed, top_k, repetition_penalty, logit_bias, logprobs, top_logprobs\n  @context_length 65536\n  @url https://openrouter.ai/mistralai/mixtral-8x22b-instruct\n  */\n  \"mistralai/mixtral-8x22b-instruct\",\n  /** Google: Gemini 1.5 Pro\n  @capabilities max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, tools, tool_choice, seed, response_format, structured_outputs\n  @context_length 2000000\n  @url https://openrouter.ai/google/gemini-pro-1.5\n  */\n  \"google/gemini-pro-1.5\",\n  /** OpenAI: GPT-4 Turbo\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo\n  */\n  \"openai/gpt-4-turbo\",\n  /** Cohere: Command R+\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus\n  */\n  \"cohere/command-r-plus\",\n  /** Cohere: Command R+ (04-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-plus-04-2024\n  */\n  \"cohere/command-r-plus-04-2024\",\n  /** Cohere: Command R\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r\n  */\n  \"cohere/command-r\",\n  /** Anthropic: Claude 3 Haiku (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku:beta\n  */\n  \"anthropic/claude-3-haiku:beta\",\n  /** Anthropic: Claude 3 Haiku\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-haiku\n  */\n  \"anthropic/claude-3-haiku\",\n  /** Anthropic: Claude 3 Opus (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus:beta\n  */\n  \"anthropic/claude-3-opus:beta\",\n  /** Anthropic: Claude 3 Opus\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-opus\n  */\n  \"anthropic/claude-3-opus\",\n  /** Anthropic: Claude 3 Sonnet (self-moderated)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-sonnet:beta\n  */\n  \"anthropic/claude-3-sonnet:beta\",\n  /** Anthropic: Claude 3 Sonnet\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, top_k, stop\n  @context_length 200000\n  @url https://openrouter.ai/anthropic/claude-3-sonnet\n  */\n  \"anthropic/claude-3-sonnet\",\n  /** Cohere: Command R (03-2024)\n  @capabilities tools, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, seed, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/cohere/command-r-03-2024\n  */\n  \"cohere/command-r-03-2024\",\n  /** Mistral Large\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, response_format, stop, seed, frequency_penalty, presence_penalty, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/mistralai/mistral-large\n  */\n  \"mistralai/mistral-large\",\n  /** OpenAI: GPT-3.5 Turbo (older v0613)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 4095\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0613\n  */\n  \"openai/gpt-3.5-turbo-0613\",\n  /** OpenAI: GPT-4 Turbo Preview\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 128000\n  @url https://openrouter.ai/openai/gpt-4-turbo-preview\n  */\n  \"openai/gpt-4-turbo-preview\",\n  /** Mistral Medium\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-medium\n  */\n  \"mistralai/mistral-medium\",\n  /** Mistral Small\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-small\n  */\n  \"mistralai/mistral-small\",\n  /** Mistral Tiny\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, response_format, structured_outputs, seed\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mistral-tiny\n  */\n  \"mistralai/mistral-tiny\",\n  /** Mistral: Mixtral 8x7B Instruct\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed, logprobs, top_logprobs\n  @context_length 32768\n  @url https://openrouter.ai/mistralai/mixtral-8x7b-instruct\n  */\n  \"mistralai/mixtral-8x7b-instruct\",\n  /** OpenAI: GPT-3.5 Turbo 16k (older v1106)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-1106\n  */\n  \"openai/gpt-3.5-turbo-1106\",\n  /** OpenAI: GPT-4 Turbo (older v1106)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, top_k, repetition_penalty, logit_bias, min_p, response_format, seed\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 tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\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 32k\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 32767\n  @url https://openrouter.ai/openai/gpt-4-32k\n  */\n  \"openai/gpt-4-32k\",\n  /** OpenAI: GPT-4 32k (older v0314)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\n  @context_length 32767\n  @url https://openrouter.ai/openai/gpt-4-32k-0314\n  */\n  \"openai/gpt-4-32k-0314\",\n  /** OpenAI: GPT-3.5 Turbo\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo\n  */\n  \"openai/gpt-3.5-turbo\",\n  /** OpenAI: GPT-3.5 Turbo 16k\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 16385\n  @url https://openrouter.ai/openai/gpt-3.5-turbo-0125\n  */\n  \"openai/gpt-3.5-turbo-0125\",\n  /** OpenAI: GPT-4\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format\n  @context_length 8191\n  @url https://openrouter.ai/openai/gpt-4\n  */\n  \"openai/gpt-4\",\n  /** OpenAI: GPT-4 (older v0314)\n  @capabilities tools, tool_choice, max_tokens, temperature, top_p, stop, frequency_penalty, presence_penalty, seed, logit_bias, logprobs, top_logprobs, response_format, structured_outputs\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"]}