Skip to content

Commit 707a91f

Browse files
committed
feat: add default host configuration for AI providers
- Introduced default host constants for Groq, MiniMax, Ollama, OpenAI, OpenRouter, and SiliconFlow providers. - Implemented GetDefaultHost methods for each provider to return their respective default host. - Updated New*Provider functions to utilize the new default host constants. - Enhanced AIProviderInfo structure to include DefaultHost field. - Modified UI components to support new default host functionality and validation for provider settings. - Updated language files to reflect changes in provider configuration tooltips.
1 parent d582d87 commit 707a91f

19 files changed

+233
-39
lines changed

wox.core/ai/provider.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var providerFactories = map[common.ProviderName]func(ctx context.Context, provid
1313

1414
type Provider interface {
1515
GetIcon() common.WoxImage
16+
GetDefaultHost() string
1617
ChatStream(ctx context.Context, model common.Model, conversations []common.Conversation, options common.ChatOptions) (ChatStream, error)
1718
Models(ctx context.Context) ([]common.Model, error)
1819
Ping(ctx context.Context) error
@@ -35,7 +36,11 @@ func GetAllProviders() []common.AIProviderInfo {
3536
providers := []common.AIProviderInfo{}
3637
for name, factory := range providerFactories {
3738
provider := factory(context.Background(), setting.AIProvider{Name: name})
38-
providers = append(providers, common.AIProviderInfo{Name: name, Icon: provider.GetIcon()})
39+
providers = append(providers, common.AIProviderInfo{
40+
Name: name,
41+
Icon: provider.GetIcon(),
42+
DefaultHost: provider.GetDefaultHost(),
43+
})
3944
}
4045
return providers
4146
}

wox.core/ai/provider_google.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type GoogleProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const googleDefaultHost = "https://generativelanguage.googleapis.com/v1beta/openai/"
18+
1719
func (p *GoogleProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 128 128"><path fill="#fff" d="M44.59 4.21a63.28 63.28 0 0 0 4.33 120.9a67.6 67.6 0 0 0 32.36.35a57.13 57.13 0 0 0 25.9-13.46a57.44 57.44 0 0 0 16-26.26a74.3 74.3 0 0 0 1.61-33.58H65.27v24.69h34.47a29.72 29.72 0 0 1-12.66 19.52a36.2 36.2 0 0 1-13.93 5.5a41.3 41.3 0 0 1-15.1 0A37.2 37.2 0 0 1 44 95.74a39.3 39.3 0 0 1-14.5-19.42a38.3 38.3 0 0 1 0-24.63a39.25 39.25 0 0 1 9.18-14.91A37.17 37.17 0 0 1 76.13 27a34.3 34.3 0 0 1 13.64 8q5.83-5.8 11.64-11.63c2-2.09 4.18-4.08 6.15-6.22A61.2 61.2 0 0 0 87.2 4.59a64 64 0 0 0-42.61-.38"/><path fill="#e33629" d="M44.59 4.21a64 64 0 0 1 42.61.37a61.2 61.2 0 0 1 20.35 12.62c-2 2.14-4.11 4.14-6.15 6.22Q95.58 29.23 89.77 35a34.3 34.3 0 0 0-13.64-8a37.17 37.17 0 0 0-37.46 9.74a39.25 39.25 0 0 0-9.18 14.91L8.76 35.6A63.53 63.53 0 0 1 44.59 4.21"/><path fill="#f8bd00" d="M3.26 51.5a63 63 0 0 1 5.5-15.9l20.73 16.09a38.3 38.3 0 0 0 0 24.63q-10.36 8-20.73 16.08a63.33 63.33 0 0 1-5.5-40.9"/><path fill="#587dbd" d="M65.27 52.15h59.52a74.3 74.3 0 0 1-1.61 33.58a57.44 57.44 0 0 1-16 26.26c-6.69-5.22-13.41-10.4-20.1-15.62a29.72 29.72 0 0 0 12.66-19.54H65.27c-.01-8.22 0-16.45 0-24.68"/><path fill="#319f43" d="M8.75 92.4q10.37-8 20.73-16.08A39.3 39.3 0 0 0 44 95.74a37.2 37.2 0 0 0 14.08 6.08a41.3 41.3 0 0 0 15.1 0a36.2 36.2 0 0 0 13.93-5.5c6.69 5.22 13.41 10.4 20.1 15.62a57.13 57.13 0 0 1-25.9 13.47a67.6 67.6 0 0 1-32.36-.35a63 63 0 0 1-23-11.59A63.7 63.7 0 0 1 8.75 92.4"/></svg>`)
1921
}
2022

23+
func (p *GoogleProvider) GetDefaultHost() string {
24+
return googleDefaultHost
25+
}
26+
2127
func NewGoogleProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "https://generativelanguage.googleapis.com/v1beta/openai/"
29+
connectContext.Host = googleDefaultHost
2430
}
2531

2632
return &GoogleProvider{

wox.core/ai/provider_groq.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type GroqProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const groqDefaultHost = "https://api.groq.com/openai/v1"
18+
1719
func (p *GroqProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Groq</title><path d="M12.036 2c-3.853-.035-7 3-7.036 6.781-.035 3.782 3.055 6.872 6.908 6.907h2.42v-2.566h-2.292c-2.407.028-4.38-1.866-4.408-4.23-.029-2.362 1.901-4.298 4.308-4.326h.1c2.407 0 4.358 1.915 4.365 4.278v6.305c0 2.342-1.944 4.25-4.323 4.279a4.375 4.375 0 01-3.033-1.252l-1.851 1.818A7 7 0 0012.029 22h.092c3.803-.056 6.858-3.083 6.879-6.816v-6.5C18.907 4.963 15.817 2 12.036 2z"></path></svg>`)
1921
}
2022

23+
func (p *GroqProvider) GetDefaultHost() string {
24+
return groqDefaultHost
25+
}
26+
2127
func NewGroqProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "https://api.groq.com/openai/v1"
29+
connectContext.Host = groqDefaultHost
2430
}
2531

2632
return &GroqProvider{

wox.core/ai/provider_minimax.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,16 @@ type MiniMaxProvider struct {
2222
*OpenAIBaseProvider
2323
}
2424

25+
const miniMaxDefaultHost = "https://api.minimaxi.com/v1"
26+
2527
func (p *MiniMaxProvider) GetIcon() common.WoxImage {
2628
return common.NewWoxImageSvg(`<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Minimax</title><defs><linearGradient id="lobe-icons-minimax-fill" x1="0%" x2="100.182%" y1="50.057%" y2="50.057%"><stop offset="0%" stop-color="#E2167E"></stop><stop offset="100%" stop-color="#FE603C"></stop></linearGradient></defs><path d="M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z" fill="url(#lobe-icons-minimax-fill)" fill-rule="nonzero"></path></svg>`)
2729
}
2830

31+
func (p *MiniMaxProvider) GetDefaultHost() string {
32+
return miniMaxDefaultHost
33+
}
34+
2935
func (p *MiniMaxProvider) Models(ctx context.Context) ([]common.Model, error) {
3036
models := make([]common.Model, 0, len(miniMaxModels))
3137
for _, modelName := range miniMaxModels {
@@ -54,7 +60,7 @@ func (p *MiniMaxProvider) Ping(ctx context.Context) error {
5460

5561
func NewMiniMaxProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
5662
if connectContext.Host == "" {
57-
connectContext.Host = "https://api.minimaxi.com/v1"
63+
connectContext.Host = miniMaxDefaultHost
5864
}
5965

6066
return &MiniMaxProvider{

wox.core/ai/provider_ollama.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type OllamaProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const ollamaDefaultHost = "http://localhost:11434/v1"
18+
1719
func (p *OllamaProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Ollama</title><path d="M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z"></path></svg>`)
1921
}
2022

23+
func (p *OllamaProvider) GetDefaultHost() string {
24+
return ollamaDefaultHost
25+
}
26+
2127
func NewOllamaProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "http://localhost:11434/v1"
29+
connectContext.Host = ollamaDefaultHost
2430
}
2531

2632
return &OllamaProvider{

wox.core/ai/provider_openai.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type OpenAIProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const openAIDefaultHost = "https://api.openai.com/v1"
18+
1719
func (p *OpenAIProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>`)
1921
}
2022

23+
func (p *OpenAIProvider) GetDefaultHost() string {
24+
return openAIDefaultHost
25+
}
26+
2127
func NewOpenAIClient(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "https://api.openai.com/v1"
29+
connectContext.Host = openAIDefaultHost
2430
}
2531

2632
return &OpenAIProvider{

wox.core/ai/provider_openrouter.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type OpenRouterProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const openRouterDefaultHost = "https://openrouter.ai/api/v1"
18+
1719
func (p *OpenRouterProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenRouter</title><path d="M16.804 1.957l7.22 4.105v.087L16.73 10.21l.017-2.117-.821-.03c-1.059-.028-1.611.002-2.268.11-1.064.175-2.038.577-3.147 1.352L8.345 11.03c-.284.195-.495.336-.68.455l-.515.322-.397.234.385.23.53.338c.476.314 1.17.796 2.701 1.866 1.11.775 2.083 1.177 3.147 1.352l.3.045c.694.091 1.375.094 2.825.033l.022-2.159 7.22 4.105v.087L16.589 22l.014-1.862-.635.022c-1.386.042-2.137.002-3.138-.162-1.694-.28-3.26-.926-4.881-2.059l-2.158-1.5a21.997 21.997 0 00-.755-.498l-.467-.28a55.927 55.927 0 00-.76-.43C2.908 14.73.563 14.116 0 14.116V9.888l.14.004c.564-.007 2.91-.622 3.809-1.124l1.016-.58.438-.274c.428-.28 1.072-.726 2.686-1.853 1.621-1.133 3.186-1.78 4.881-2.059 1.152-.19 1.974-.213 3.814-.138l.02-1.907z"></path></svg>`)
1921
}
2022

23+
func (p *OpenRouterProvider) GetDefaultHost() string {
24+
return openRouterDefaultHost
25+
}
26+
2127
func NewOpenRouterProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "https://openrouter.ai/api/v1"
29+
connectContext.Host = openRouterDefaultHost
2430
}
2531

2632
return &OpenRouterProvider{

wox.core/ai/provider_siliconflow.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,19 @@ type SiliconFlowProvider struct {
1414
*OpenAIBaseProvider
1515
}
1616

17+
const siliconFlowDefaultHost = "https://api.siliconflow.cn/v1"
18+
1719
func (p *SiliconFlowProvider) GetIcon() common.WoxImage {
1820
return common.NewWoxImageSvg(`<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>SiliconCloud</title><path clip-rule="evenodd" d="M22.956 6.521H12.522c-.577 0-1.044.468-1.044 1.044v3.13c0 .577-.466 1.044-1.043 1.044H1.044c-.577 0-1.044.467-1.044 1.044v4.174C0 17.533.467 18 1.044 18h10.434c.577 0 1.044-.467 1.044-1.043v-3.13c0-.578.466-1.044 1.043-1.044h9.391c.577 0 1.044-.467 1.044-1.044V7.565c0-.576-.467-1.044-1.044-1.044z" fill="#6E29F6" fill-rule="evenodd"></path></svg>`)
1921
}
2022

23+
func (p *SiliconFlowProvider) GetDefaultHost() string {
24+
return siliconFlowDefaultHost
25+
}
26+
2127
func NewSiliconFlowProvider(ctx context.Context, connectContext setting.AIProvider) Provider {
2228
if connectContext.Host == "" {
23-
connectContext.Host = "https://api.siliconflow.cn/v1"
29+
connectContext.Host = siliconFlowDefaultHost
2430
}
2531

2632
return &SiliconFlowProvider{

wox.core/common/ai.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ type Conversation struct {
117117
}
118118

119119
type AIProviderInfo struct {
120-
Name ProviderName
121-
Icon WoxImage
120+
Name ProviderName
121+
Icon WoxImage
122+
DefaultHost string
122123
}
123124

124125
type Model struct {

wox.core/resource/lang/en_US.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@
141141
"ui_tray_queries_width": "Width",
142142
"ui_tray_queries_width_tooltip": "Optional. Window width in pixels for this tray query. Empty means app width / 2.",
143143
"ui_ai_providers_name": "Provider Name",
144-
"ui_ai_providers_name_tooltip": "The name of the AI provider.",
144+
"ui_ai_providers_name_tooltip": "The AI provider name. If your provider is not listed, choose openai and configure it with an alias and custom API host. Many providers are compatible with the OpenAI host format.",
145145
"ui_ai_providers_alias": "Alias",
146146
"ui_ai_providers_alias_tooltip": "Optional. Used to distinguish multiple configs for the same provider.",
147147
"ui_ai_providers_api_key": "API Key",

0 commit comments

Comments
 (0)