-
Notifications
You must be signed in to change notification settings - Fork 2.6k
API provider: Choose specific provider when using OpenRouter #1376
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
5659e45
df5d1b5
ed436a7
7901b20
3f87e85
d828f09
9fbbbf6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| "roo-cline": minor | ||
| --- | ||
|
|
||
| API provider: Choose specific provider when using OpenRouter |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,6 +5,7 @@ node_modules | |
| coverage/ | ||
|
|
||
| .DS_Store | ||
| .history/ | ||
|
|
||
| # Builds | ||
| bin/ | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| import axios from "axios" | ||
| import { ModelInfo } from "../../../src/shared/api" | ||
| import { parseApiPrice } from "../../../src/utils/cost" | ||
|
|
||
| export const OPENROUTER_DEFAULT_PROVIDER_NAME = "[default]" | ||
| export async function getOpenRouterProvidersForModel(modelId: string) { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think we can DRY things up a here a bit with the
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. At first I wanted to include the |
||
| const models: Record<string, ModelInfo> = {} | ||
|
|
||
| try { | ||
| const response = await axios.get(`https://openrouter.ai/api/v1/models/${modelId}/endpoints`) | ||
| const rawEndpoints = response.data.data | ||
|
|
||
| for (const rawEndpoint of rawEndpoints.endpoints) { | ||
| const modelInfo: ModelInfo = { | ||
| maxTokens: rawEndpoint.max_completion_tokens, | ||
| contextWindow: rawEndpoint.context_length, | ||
| supportsImages: rawEndpoints.architecture?.modality?.includes("image"), | ||
PhunkyBob marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| supportsPromptCache: false, | ||
| inputPrice: parseApiPrice(rawEndpoint.pricing?.prompt), | ||
| outputPrice: parseApiPrice(rawEndpoint.pricing?.completion), | ||
| description: rawEndpoints.description, | ||
| thinking: modelId === "anthropic/claude-3.7-sonnet:thinking", | ||
| } | ||
|
|
||
| // Set additional properties based on model type | ||
| switch (true) { | ||
| case modelId.startsWith("anthropic/claude-3.7-sonnet"): | ||
| modelInfo.supportsComputerUse = true | ||
| modelInfo.supportsPromptCache = true | ||
| modelInfo.cacheWritesPrice = 3.75 | ||
| modelInfo.cacheReadsPrice = 0.3 | ||
| modelInfo.maxTokens = rawEndpoint.id === "anthropic/claude-3.7-sonnet:thinking" ? 64_000 : 16_384 | ||
| break | ||
| case modelId.startsWith("anthropic/claude-3.5-sonnet-20240620"): | ||
| modelInfo.supportsPromptCache = true | ||
| modelInfo.cacheWritesPrice = 3.75 | ||
| modelInfo.cacheReadsPrice = 0.3 | ||
| modelInfo.maxTokens = 8192 | ||
| break | ||
| // Add other cases as needed | ||
| default: | ||
| modelInfo.supportsPromptCache = true | ||
| modelInfo.cacheWritesPrice = 0.3 | ||
| modelInfo.cacheReadsPrice = 0.03 | ||
| break | ||
| } | ||
|
|
||
| const providerName = rawEndpoint.name.split("|")[0].trim() | ||
| models[providerName] = modelInfo | ||
| } | ||
| } catch (error) { | ||
| console.error(`Error fetching OpenRouter providers:`, error) | ||
PhunkyBob marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| return models | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.