mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-08-17 19:47:10 +08:00
87 lines
3.4 KiB
Go
87 lines
3.4 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"cursor/internal/modelchannel"
|
|
legacyruntime "cursor/internal/runtime"
|
|
)
|
|
|
|
const (
|
|
defaultChannelTimeoutMS = int((2 * 60 * 60) * 1000)
|
|
defaultChannelContextWindowTokens = 200_000
|
|
defaultChannelMaxTokens = 65_536
|
|
defaultChannelThinkingBudget = 4_096
|
|
defaultChannelAnthropicEffort = "xhigh"
|
|
)
|
|
|
|
func (manager *Manager) SelectChannelForModel(_ context.Context, modelID string) (*legacyruntime.ResolvedChannel, error) {
|
|
if manager == nil {
|
|
return nil, legacyruntime.ErrChannelNotAvailable
|
|
}
|
|
adapters, err := NormalizeModelAdapterConfigs(manager.Current().ModelAdapters)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return resolveModelAdapterChannel(adapters, modelID)
|
|
}
|
|
|
|
func resolveModelAdapterChannel(adapters []ModelAdapterConfig, requestedModel string) (*legacyruntime.ResolvedChannel, error) {
|
|
matchIndex, ok := modelchannel.ResolveAdapterIndex(
|
|
adapters,
|
|
requestedModel,
|
|
func(adapter ModelAdapterConfig) string { return adapter.ID },
|
|
func(adapter ModelAdapterConfig) string { return adapter.ModelID },
|
|
func(adapter ModelAdapterConfig) string {
|
|
return modelchannel.BuildLegacyChannelID(adapter.BaseURL, adapter.ModelID, adapter.APIKey, adapter.DisplayName)
|
|
},
|
|
)
|
|
if !ok {
|
|
return nil, legacyruntime.ErrChannelNotAvailable
|
|
}
|
|
matched := adapters[matchIndex]
|
|
|
|
resolved := &legacyruntime.ResolvedChannel{
|
|
ID: strings.TrimSpace(matched.ID),
|
|
Name: strings.TrimSpace(matched.DisplayName),
|
|
GroupName: "local",
|
|
Code: strings.TrimSpace(matched.ID),
|
|
Provider: strings.TrimSpace(matched.Type),
|
|
BaseURL: strings.TrimSpace(matched.BaseURL),
|
|
APIKey: strings.TrimSpace(matched.APIKey),
|
|
Model: strings.TrimSpace(matched.ModelID),
|
|
OpenAIEndpoint: strings.TrimSpace(matched.OpenAIEndpoint),
|
|
OpenAIExtraParamsEnabled: matched.OpenAIExtraParamsEnabled,
|
|
OpenAIExtraParamsJSON: strings.TrimSpace(matched.OpenAIExtraParamsJSON),
|
|
CustomHeadersEnabled: matched.CustomHeadersEnabled,
|
|
CustomHeadersJSON: strings.TrimSpace(matched.CustomHeadersJSON),
|
|
AnthropicExtraParamsEnabled: matched.AnthropicExtraParamsEnabled,
|
|
AnthropicExtraParamsJSON: strings.TrimSpace(matched.AnthropicExtraParamsJSON),
|
|
TimeoutMS: defaultChannelTimeoutMS,
|
|
ContextWindowTokens: defaultChannelContextWindowTokens,
|
|
MaxTokens: defaultChannelMaxTokens,
|
|
ReasoningEffort: strings.TrimSpace(matched.ReasoningEffort),
|
|
AnthropicMaxTokens: defaultChannelMaxTokens,
|
|
AnthropicThinkingEffort: defaultChannelAnthropicEffort,
|
|
ThinkingEnabled: true,
|
|
ThinkingBudgetTokens: defaultChannelThinkingBudget,
|
|
}
|
|
if matched.ContextWindowTokens > 0 {
|
|
resolved.ContextWindowTokens = matched.ContextWindowTokens
|
|
}
|
|
if matched.MaxCompletionTokens > 0 {
|
|
resolved.MaxTokens = matched.MaxCompletionTokens
|
|
}
|
|
if matched.AnthropicMaxTokens > 0 {
|
|
resolved.AnthropicMaxTokens = matched.AnthropicMaxTokens
|
|
}
|
|
if matched.ThinkingBudgetTokens > 0 {
|
|
resolved.ThinkingBudgetTokens = matched.ThinkingBudgetTokens
|
|
}
|
|
if strings.TrimSpace(matched.AnthropicThinkingEffort) != "" {
|
|
resolved.AnthropicThinkingEffort = strings.TrimSpace(matched.AnthropicThinkingEffort)
|
|
}
|
|
return resolved, nil
|
|
}
|