feat: enable web search for zhipu ai provider #657

This commit is contained in:
kangfenmao 2025-01-07 10:53:34 +08:00
parent 4896db93fd
commit a70e69caf9
4 changed files with 77 additions and 5 deletions

View File

@ -123,8 +123,11 @@ import YiModelLogo from '@renderer/assets/images/models/yi.png'
import YiModelLogoDark from '@renderer/assets/images/models/yi_dark.png'
import { getProviderByModel } from '@renderer/services/AssistantService'
import { Model } from '@renderer/types'
import { isEmpty } from 'lodash'
import OpenAI from 'openai'
import { getWebSearchTools } from './tools'
const visionAllowedModels = [
'llava',
'moondream',
@ -559,9 +562,21 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
],
zhipu: [
{
id: 'glm-4',
id: 'glm-zero-preview',
provider: 'zhipu',
name: 'GLM-4',
name: 'GLM-Zero-Preview',
group: 'GLM-Zero'
},
{
id: 'glm-4-0520',
provider: 'zhipu',
name: 'GLM-4-0520',
group: 'GLM-4'
},
{
id: 'glm-4-long',
provider: 'zhipu',
name: 'GLM-4-Long',
group: 'GLM-4'
},
{
@ -605,6 +620,12 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
provider: 'zhipu',
name: 'GLM-4-AllTools',
group: 'GLM-4-AllTools'
},
{
id: 'embedding-3',
provider: 'zhipu',
name: 'Embedding-3',
group: 'Embedding'
}
],
moonshot: [
@ -1045,5 +1066,27 @@ export function isWebSearchModel(model: Model): boolean {
return model?.id === 'gemini-2.0-flash-exp-search'
}
if (provider.id === 'zhipu') {
return model?.id?.startsWith('glm-4-')
}
return false
}
export function getWebSearchParams(model: Model): Record<string, any> {
if (isWebSearchModel(model)) {
if (model.provider === 'hunyuan') {
return { enable_enhancement: true }
}
if (model.provider === 'zhipu') {
const webSearchTools = getWebSearchTools(model)
return isEmpty(webSearchTools)
? {}
: {
tools: webSearchTools
}
}
}
return {}
}

View File

@ -0,0 +1,29 @@
import { Model } from '@renderer/types'
import { ChatCompletionTool } from 'openai/resources'
import { isWebSearchModel } from './models'
export function getWebSearchTools(model: Model): ChatCompletionTool[] {
if (model && model.provider === 'zhipu') {
if (isWebSearchModel(model)) {
if (model.id === 'glm-4-alltools') {
return [
{
type: 'web_browser'
} as unknown as ChatCompletionTool
]
}
return [
{
type: 'web_search',
web_search: {
enable: true,
search_result: true
}
} as unknown as ChatCompletionTool
]
}
}
return []
}

View File

@ -1,4 +1,4 @@
import { isEmbeddingModel, isSupportedModel, isVisionModel, isWebSearchModel } from '@renderer/config/models'
import { getWebSearchParams, isEmbeddingModel, isSupportedModel, isVisionModel } from '@renderer/config/models'
import { getStoreSetting } from '@renderer/hooks/useSettings'
import i18n from '@renderer/i18n'
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
@ -149,7 +149,7 @@ export default class OpenAIProvider extends BaseProvider {
max_tokens: maxTokens,
keep_alive: this.keepAliveTime,
stream: isSupportStreamOutput,
...(isWebSearchModel(model) ? { enable_enhancement: true } : {}),
...(assistant.enableWebSearch ? getWebSearchParams(model) : {}),
...this.getCustomParameters(assistant)
})

View File

@ -1,4 +1,4 @@
import { Metrics } from "@renderer/types"
import type { Assistant, Metrics } from '@renderer/types'
interface ChunkCallbackData {
text?: string