From 7e8687decdcd97bd057e5b61478d47dcc4076775 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Wed, 11 Sep 2024 19:08:40 +0800 Subject: [PATCH] feat: Added GitHub provider support and models. - Added a new SVG logo for the GitHub provider. - Added a new social media platform provider to the SYSTEM_MODELS configuration. - Added support for Github provider in the application configuration. - Added two new translation keys: 'github' with 'GitHub Models' and updated the existing key 'graphrag-kylin-mountain'. - Added width parameter to EditModelsPopup configuration. - Added GitHub-specific model handling to OpenAIProvider class. - Incremented the application version to 25. - Added support for a new LLM model type. - Added a new migration step to configure and enable a GitHub LLM provider. --- .../src/assets/images/providers/github.svg | 3 +++ src/renderer/src/config/models.ts | 8 ++++++++ src/renderer/src/config/provider.ts | 19 ++++++++++++++++++ src/renderer/src/i18n/index.ts | 6 ++++-- .../ProviderSettings/EditModelsPopup.tsx | 3 ++- src/renderer/src/providers/OpenAIProvider.ts | 11 ++++++++++ src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/llm.ts | 9 +++++++++ src/renderer/src/store/migrate.ts | 20 +++++++++++++++++++ 9 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 src/renderer/src/assets/images/providers/github.svg diff --git a/src/renderer/src/assets/images/providers/github.svg b/src/renderer/src/assets/images/providers/github.svg new file mode 100644 index 00000000..bf1081a0 --- /dev/null +++ b/src/renderer/src/assets/images/providers/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index e63f131d..ff170921 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -117,6 +117,14 @@ export const SYSTEM_MODELS: Record = { group: 'DeepSeek Coder' } ], + github: [ + { + id: 'gpt-4o', + provider: 'github', + name: 'OpenAI GPT-4o', + group: 'OpenAI' + } + ], yi: [ { id: 'yi-large', diff --git a/src/renderer/src/config/provider.ts b/src/renderer/src/config/provider.ts index cf909b53..fdd15b9b 100644 --- a/src/renderer/src/config/provider.ts +++ b/src/renderer/src/config/provider.ts @@ -25,6 +25,7 @@ import DashScopeProviderLogo from '@renderer/assets/images/providers/dashscope.p import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png' import DoubaoProviderLogo from '@renderer/assets/images/providers/doubao.png' import GeminiProviderLogo from '@renderer/assets/images/providers/gemini.png' +import GithubProviderLogo from '@renderer/assets/images/providers/github.svg' import GraphRagProviderLogo from '@renderer/assets/images/providers/graph-rag.png' import GroqProviderLogo from '@renderer/assets/images/providers/groq.png' import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png' @@ -76,6 +77,8 @@ export function getProviderLogo(providerId: string) { return GraphRagProviderLogo case 'minimax': return MinimaxProviderLogo + case 'github': + return GithubProviderLogo default: return undefined } @@ -183,6 +186,22 @@ export const PROVIDER_CONFIG = { logo: DeepSeekProviderLogo } }, + github: { + api: { + url: 'https://models.inference.ai.azure.com/' + }, + websites: { + official: 'https://github.com/marketplace/models', + apiKey: 'https://github.com/settings/tokens', + docs: 'https://docs.github.com/en/github-models', + models: 'https://github.com/marketplace/models' + }, + app: { + name: 'Github Models', + url: 'https://github.com/marketplace/models/azure-openai/gpt-4o/playground', + logo: GithubProviderLogo + } + }, yi: { api: { url: 'https://api.lingyiwanwu.com' diff --git a/src/renderer/src/i18n/index.ts b/src/renderer/src/i18n/index.ts index 2a73a7f9..a3933d6c 100644 --- a/src/renderer/src/i18n/index.ts +++ b/src/renderer/src/i18n/index.ts @@ -136,7 +136,8 @@ const resources = { stepfun: 'StepFun', doubao: 'Doubao', minimax: 'MiniMax', - 'graphrag-kylin-mountain': 'GraphRAG' + 'graphrag-kylin-mountain': 'GraphRAG', + github: 'GitHub Models' }, settings: { title: 'Settings', @@ -391,7 +392,8 @@ const resources = { stepfun: '阶跃星辰', doubao: '豆包', minimax: 'MiniMax', - 'graphrag-kylin-mountain': 'GraphRAG' + 'graphrag-kylin-mountain': 'GraphRAG', + github: 'GitHub Models' }, settings: { title: '设置', diff --git a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx index 2f1a2f34..f1ce4dc4 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/EditModelsPopup.tsx @@ -155,7 +155,8 @@ const onShowModelInfo = (model: Model) => { title: model.name, content: model?.description, icon: null, - maskClosable: true + maskClosable: true, + width: 600 }) } diff --git a/src/renderer/src/providers/OpenAIProvider.ts b/src/renderer/src/providers/OpenAIProvider.ts index 315686a8..a97b32fd 100644 --- a/src/renderer/src/providers/OpenAIProvider.ts +++ b/src/renderer/src/providers/OpenAIProvider.ts @@ -178,6 +178,17 @@ export default class OpenAIProvider extends BaseProvider { public async models(): Promise { try { const response = await this.sdk.models.list() + + if (this.provider.id === 'github') { + // @ts-ignore key is not typed + return response.body.map((model) => ({ + id: model.name, + description: model.summary, + object: 'model', + owned_by: model.publisher + })) + } + return response.data } catch (error) { return [] diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index 08a35402..75d64117 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -22,7 +22,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 24, + version: 25, blacklist: ['runtime'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 81fe0d41..5db48e41 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -77,6 +77,15 @@ const initialState: LlmState = { isSystem: true, enabled: false }, + { + id: 'github', + name: 'Github Models', + apiKey: '', + apiHost: 'https://models.inference.ai.azure.com/', + models: SYSTEM_MODELS.github, + isSystem: true, + enabled: false + }, { id: 'yi', name: 'Yi', diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index f29f1de8..340f4caf 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -399,6 +399,26 @@ const migrateConfig = { topicPosition: 'right' } } + }, + '25': (state: RootState) => { + return { + ...state, + llm: { + ...state.llm, + providers: [ + ...state.llm.providers, + { + id: 'github', + name: 'Github Models', + apiKey: '', + apiHost: 'https://models.inference.ai.azure.com/', + models: SYSTEM_MODELS.github, + isSystem: true, + enabled: false + } + ] + } + } } }