feat: add azure openai provider
This commit is contained in:
parent
68d57ba238
commit
302d7511dc
@ -343,6 +343,20 @@ export const SYSTEM_MODELS: Record<string, Model[]> = {
|
||||
group: 'o1'
|
||||
}
|
||||
],
|
||||
'azure-openai': [
|
||||
{
|
||||
id: 'gpt-4o',
|
||||
provider: 'openai',
|
||||
name: ' GPT-4o',
|
||||
group: 'GPT 4o'
|
||||
},
|
||||
{
|
||||
id: 'gpt-4o-mini',
|
||||
provider: 'openai',
|
||||
name: ' GPT-4o-mini',
|
||||
group: 'GPT 4o'
|
||||
}
|
||||
],
|
||||
gemini: [
|
||||
{
|
||||
id: 'gemini-1.5-flash',
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import ZhinaoProviderLogo from '@renderer/assets/images/models/360.png'
|
||||
import AzureProviderLogo from '@renderer/assets/images/models/microsoft.png'
|
||||
import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg'
|
||||
import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png'
|
||||
import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png'
|
||||
@ -73,7 +74,8 @@ export function getProviderLogo(providerId: string) {
|
||||
return ZhinaoProviderLogo
|
||||
case 'nvidia':
|
||||
return NvidiaProviderLogo
|
||||
|
||||
case 'azure-openai':
|
||||
return AzureProviderLogo
|
||||
default:
|
||||
return undefined
|
||||
}
|
||||
@ -336,5 +338,16 @@ export const PROVIDER_CONFIG = {
|
||||
docs: 'https://docs.api.nvidia.com/nim/reference/llm-apis',
|
||||
models: 'https://build.nvidia.com/nim'
|
||||
}
|
||||
},
|
||||
'azure-openai': {
|
||||
api: {
|
||||
url: ''
|
||||
},
|
||||
websites: {
|
||||
official: 'https://azure.microsoft.com/en-us/products/ai-services/openai-service',
|
||||
apiKey: 'https://portal.azure.com/#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI',
|
||||
docs: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/',
|
||||
models: 'https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -175,7 +175,8 @@
|
||||
"minimax": "MiniMax",
|
||||
"graphrag-kylin-mountain": "GraphRAG",
|
||||
"github": "GitHub Models",
|
||||
"ocoolai": "ocoolAI"
|
||||
"ocoolai": "ocoolAI",
|
||||
"azure-openai": "Azure OpenAI"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
@ -220,6 +221,7 @@
|
||||
"provider.check": "Check",
|
||||
"provider.get_api_key": "Get API Key",
|
||||
"provider.api_host": "API Host",
|
||||
"provider.api_version": "API Version",
|
||||
"provider.docs_check": "Check",
|
||||
"provider.docs_more_details": "for more details",
|
||||
"provider.search_placeholder": "Search model id or name",
|
||||
|
||||
@ -175,7 +175,8 @@
|
||||
"minimax": "MiniMax",
|
||||
"graphrag-kylin-mountain": "GraphRAG",
|
||||
"github": "GitHub Models",
|
||||
"ocoolai": "ocoolAI"
|
||||
"ocoolai": "ocoolAI",
|
||||
"azure-openai": "Azure OpenAI"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
@ -220,6 +221,7 @@
|
||||
"provider.check": "检查",
|
||||
"provider.get_api_key": "点击这里获取密钥",
|
||||
"provider.api_host": "API 地址",
|
||||
"provider.api_version": "API 版本",
|
||||
"provider.docs_check": "查看",
|
||||
"provider.docs_more_details": "获取更多详情",
|
||||
"provider.search_placeholder": "搜索模型 ID 或名称",
|
||||
|
||||
@ -175,7 +175,8 @@
|
||||
"minimax": "MiniMax",
|
||||
"graphrag-kylin-mountain": "GraphRAG",
|
||||
"github": "GitHub Models",
|
||||
"ocoolai": "ocoolAI"
|
||||
"ocoolai": "ocoolAI",
|
||||
"azure-openai": "Azure OpenAI"
|
||||
},
|
||||
"settings": {
|
||||
"title": "設定",
|
||||
@ -220,6 +221,7 @@
|
||||
"provider.check": "檢查",
|
||||
"provider.get_api_key": "獲取 API 密鑰",
|
||||
"provider.api_host": "API 主機地址",
|
||||
"provider.api_version": "API 版本",
|
||||
"provider.docs_check": "檢查",
|
||||
"provider.docs_more_details": "查看更多細節",
|
||||
"provider.search_placeholder": "搜尋模型 ID 或名稱",
|
||||
|
||||
@ -41,6 +41,7 @@ const ProviderSetting: FC<Props> = ({ provider: _provider }) => {
|
||||
const { provider } = useProvider(_provider.id)
|
||||
const [apiKey, setApiKey] = useState(provider.apiKey)
|
||||
const [apiHost, setApiHost] = useState(provider.apiHost)
|
||||
const [apiVersion, setApiVersion] = useState(provider.apiVersion)
|
||||
const [apiValid, setApiValid] = useState(false)
|
||||
const [apiChecking, setApiChecking] = useState(false)
|
||||
const { updateProvider, models, removeModel } = useProvider(provider.id)
|
||||
@ -56,6 +57,7 @@ const ProviderSetting: FC<Props> = ({ provider: _provider }) => {
|
||||
|
||||
const onUpdateApiKey = () => updateProvider({ ...provider, apiKey })
|
||||
const onUpdateApiHost = () => updateProvider({ ...provider, apiHost })
|
||||
const onUpdateApiVersion = () => updateProvider({ ...provider, apiVersion })
|
||||
const onManageModel = () => EditModelsPopup.show({ provider })
|
||||
const onAddModel = () => AddModelPopup.show({ title: t('settings.models.add.add_model'), provider })
|
||||
|
||||
@ -136,6 +138,19 @@ const ProviderSetting: FC<Props> = ({ provider: _provider }) => {
|
||||
<Button onClick={onReset}>{t('settings.provider.api.url.reset')}</Button>
|
||||
)}
|
||||
</Space.Compact>
|
||||
{provider.id === 'azure-openai' && (
|
||||
<>
|
||||
<SettingSubtitle>{t('settings.provider.api_version')}</SettingSubtitle>
|
||||
<Space.Compact style={{ width: '100%', marginTop: 5 }}>
|
||||
<Input
|
||||
value={apiVersion}
|
||||
placeholder="2024-xx-xx-preview"
|
||||
onChange={(e) => setApiVersion(e.target.value)}
|
||||
onBlur={onUpdateApiVersion}
|
||||
/>
|
||||
</Space.Compact>
|
||||
</>
|
||||
)}
|
||||
{provider.id === 'ollama' && <OllamSettings />}
|
||||
{provider.id === 'graphrag-kylin-mountain' && provider.models.length > 0 && (
|
||||
<GraphRAGSettings provider={provider} />
|
||||
|
||||
@ -6,7 +6,7 @@ import { filterContextMessages } from '@renderer/services/messages'
|
||||
import { Assistant, FileTypes, Message, Model, Provider, Suggestion } from '@renderer/types'
|
||||
import { removeQuotes } from '@renderer/utils'
|
||||
import { first, takeRight } from 'lodash'
|
||||
import OpenAI from 'openai'
|
||||
import OpenAI, { AzureOpenAI } from 'openai'
|
||||
import {
|
||||
ChatCompletionContentPart,
|
||||
ChatCompletionCreateParamsNonStreaming,
|
||||
@ -20,6 +20,16 @@ export default class OpenAIProvider extends BaseProvider {
|
||||
|
||||
constructor(provider: Provider) {
|
||||
super(provider)
|
||||
if (provider.id === 'azure-openai') {
|
||||
this.sdk = new AzureOpenAI({
|
||||
dangerouslyAllowBrowser: true,
|
||||
apiKey: provider.apiKey,
|
||||
apiVersion: provider.apiVersion,
|
||||
endpoint: provider.apiHost
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
this.sdk = new OpenAI({
|
||||
dangerouslyAllowBrowser: true,
|
||||
apiKey: provider.apiKey,
|
||||
|
||||
@ -22,7 +22,7 @@ const persistedReducer = persistReducer(
|
||||
{
|
||||
key: 'cherry-studio',
|
||||
storage,
|
||||
version: 29,
|
||||
version: 30,
|
||||
blacklist: ['runtime'],
|
||||
migrate
|
||||
},
|
||||
|
||||
@ -59,6 +59,16 @@ const initialState: LlmState = {
|
||||
isSystem: true,
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
id: 'azure-openai',
|
||||
name: 'Azure OpenAI',
|
||||
apiKey: '',
|
||||
apiHost: '',
|
||||
apiVersion: '',
|
||||
models: SYSTEM_MODELS['azure-openai'],
|
||||
isSystem: true,
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
id: 'gemini',
|
||||
name: 'Gemini',
|
||||
|
||||
@ -504,6 +504,27 @@ const migrateConfig = {
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
'30': (state: RootState) => {
|
||||
return {
|
||||
...state,
|
||||
llm: {
|
||||
...state.llm,
|
||||
providers: [
|
||||
...state.llm.providers,
|
||||
{
|
||||
id: 'azure-openai',
|
||||
name: 'Azure OpenAI',
|
||||
apiKey: '',
|
||||
apiHost: '',
|
||||
apiVersion: '',
|
||||
models: SYSTEM_MODELS['azure-openai'],
|
||||
isSystem: true,
|
||||
enabled: false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -55,6 +55,7 @@ export type Provider = {
|
||||
name: string
|
||||
apiKey: string
|
||||
apiHost: string
|
||||
apiVersion?: string
|
||||
models: Model[]
|
||||
enabled?: boolean
|
||||
isSystem?: boolean
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user