mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-01 09:49:03 +08:00
feat: enable web search for zhipu ai provider #657
This commit is contained in:
parent
7cadb0017c
commit
20ade3003e
@ -123,8 +123,11 @@ import YiModelLogo from '@renderer/assets/images/models/yi.png'
|
|||||||
import YiModelLogoDark from '@renderer/assets/images/models/yi_dark.png'
|
import YiModelLogoDark from '@renderer/assets/images/models/yi_dark.png'
|
||||||
import { getProviderByModel } from '@renderer/services/AssistantService'
|
import { getProviderByModel } from '@renderer/services/AssistantService'
|
||||||
import { Model } from '@renderer/types'
|
import { Model } from '@renderer/types'
|
||||||
|
import { isEmpty } from 'lodash'
|
||||||
import OpenAI from 'openai'
|
import OpenAI from 'openai'
|
||||||
|
|
||||||
|
import { getWebSearchTools } from './tools'
|
||||||
|
|
||||||
const visionAllowedModels = [
|
const visionAllowedModels = [
|
||||||
'llava',
|
'llava',
|
||||||
'moondream',
|
'moondream',
|
||||||
@ -559,9 +562,21 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
|
|||||||
],
|
],
|
||||||
zhipu: [
|
zhipu: [
|
||||||
{
|
{
|
||||||
id: 'glm-4',
|
id: 'glm-zero-preview',
|
||||||
provider: 'zhipu',
|
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'
|
group: 'GLM-4'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -605,6 +620,12 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
|
|||||||
provider: 'zhipu',
|
provider: 'zhipu',
|
||||||
name: 'GLM-4-AllTools',
|
name: 'GLM-4-AllTools',
|
||||||
group: 'GLM-4-AllTools'
|
group: 'GLM-4-AllTools'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'embedding-3',
|
||||||
|
provider: 'zhipu',
|
||||||
|
name: 'Embedding-3',
|
||||||
|
group: 'Embedding'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
moonshot: [
|
moonshot: [
|
||||||
@ -1045,5 +1066,27 @@ export function isWebSearchModel(model: Model): boolean {
|
|||||||
return model?.id === 'gemini-2.0-flash-exp-search'
|
return model?.id === 'gemini-2.0-flash-exp-search'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (provider.id === 'zhipu') {
|
||||||
|
return model?.id?.startsWith('glm-4-')
|
||||||
|
}
|
||||||
|
|
||||||
return false
|
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 {}
|
||||||
|
}
|
||||||
|
|||||||
29
src/renderer/src/config/tools.ts
Normal file
29
src/renderer/src/config/tools.ts
Normal 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 []
|
||||||
|
}
|
||||||
@ -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 { getStoreSetting } from '@renderer/hooks/useSettings'
|
||||||
import i18n from '@renderer/i18n'
|
import i18n from '@renderer/i18n'
|
||||||
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
|
import { getAssistantSettings, getDefaultModel, getTopNamingModel } from '@renderer/services/AssistantService'
|
||||||
@ -149,7 +149,7 @@ export default class OpenAIProvider extends BaseProvider {
|
|||||||
max_tokens: maxTokens,
|
max_tokens: maxTokens,
|
||||||
keep_alive: this.keepAliveTime,
|
keep_alive: this.keepAliveTime,
|
||||||
stream: isSupportStreamOutput,
|
stream: isSupportStreamOutput,
|
||||||
...(isWebSearchModel(model) ? { enable_enhancement: true } : {}),
|
...(assistant.enableWebSearch ? getWebSearchParams(model) : {}),
|
||||||
...this.getCustomParameters(assistant)
|
...this.getCustomParameters(assistant)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
2
src/renderer/src/providers/index.d.ts
vendored
2
src/renderer/src/providers/index.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
import { Metrics } from "@renderer/types"
|
import type { Assistant, Metrics } from '@renderer/types'
|
||||||
|
|
||||||
interface ChunkCallbackData {
|
interface ChunkCallbackData {
|
||||||
text?: string
|
text?: string
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user