feat: enable web search for zhipu ai provider #657
This commit is contained in:
parent
4896db93fd
commit
a70e69caf9
@ -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 {}
|
||||
}
|
||||
|
||||
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 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)
|
||||
})
|
||||
|
||||
|
||||
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 {
|
||||
text?: string
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user