feat: new providers logos
BIN
src/renderer/src/assets/images/apps/doubao.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/renderer/src/assets/images/apps/gemini.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
src/renderer/src/assets/images/apps/wanzhi.jpg
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
BIN
src/renderer/src/assets/images/providers/anthropic.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/renderer/src/assets/images/providers/bytedance.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 8.5 KiB |
BIN
src/renderer/src/assets/images/providers/github.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
@ -1,3 +0,0 @@
|
|||||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 0C7.16 0 0 7.16 0 16C0 23.08 4.58 29.06 10.94 31.18C11.74 31.32 12.04 30.84 12.04 30.42C12.04 30.04 12.02 28.78 12.02 27.44C8 28.18 6.96 26.46 6.64 25.56C6.46 25.1 5.68 23.68 5 23.3C4.44 23 3.64 22.26 4.98 22.24C6.24 22.22 7.14 23.4 7.44 23.88C8.88 26.3 11.18 25.62 12.1 25.2C12.24 24.16 12.66 23.46 13.12 23.06C9.56 22.66 5.84 21.28 5.84 15.16C5.84 13.42 6.46 11.98 7.48 10.86C7.32 10.46 6.76 8.82 7.64 6.62C7.64 6.62 8.98 6.2 12.04 8.26C13.32 7.9 14.68 7.72 16.04 7.72C17.4 7.72 18.76 7.9 20.04 8.26C23.1 6.18 24.44 6.62 24.44 6.62C25.32 8.82 24.76 10.46 24.6 10.86C25.62 11.98 26.24 13.4 26.24 15.16C26.24 21.3 22.5 22.66 18.94 23.06C19.52 23.56 20.02 24.52 20.02 26.02C20.02 28.16 20 29.88 20 30.42C20 30.84 20.3 31.34 21.1 31.18C27.42 29.06 32 23.06 32 16C32 7.16 24.84 0 16 0V0Z" fill="#24292E"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 959 B |
BIN
src/renderer/src/assets/images/providers/google.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 10 KiB |
BIN
src/renderer/src/assets/images/providers/ocoolai.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 5.0 KiB |
BIN
src/renderer/src/assets/images/providers/perplexity.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 7.7 KiB |
BIN
src/renderer/src/assets/images/providers/step.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
BIN
src/renderer/src/assets/images/providers/together.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
src/renderer/src/assets/images/providers/zero-one.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
@ -99,11 +99,11 @@ const Container = styled.div`
|
|||||||
`
|
`
|
||||||
|
|
||||||
const AvatarImg = styled(Avatar)`
|
const AvatarImg = styled(Avatar)`
|
||||||
width: 32px;
|
width: 31px;
|
||||||
height: 32px;
|
height: 31px;
|
||||||
background-color: var(--color-background-soft);
|
background-color: var(--color-background-soft);
|
||||||
margin-bottom: ${isMac ? '12px' : '12px'};
|
margin-bottom: ${isMac ? '12px' : '12px'};
|
||||||
margin-top: ${isMac ? '-5px' : '2px'};
|
margin-top: ${isMac ? '0px' : '2px'};
|
||||||
border: none;
|
border: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
`
|
`
|
||||||
|
|||||||
@ -1,103 +0,0 @@
|
|||||||
import AiAssistantAppLogo from '@renderer/assets/images/apps/360-ai.png'
|
|
||||||
import AiSearchAppLogo from '@renderer/assets/images/apps/ai-search.png'
|
|
||||||
import BaiduAiAppLogo from '@renderer/assets/images/apps/baidu-ai.png'
|
|
||||||
import DevvAppLogo from '@renderer/assets/images/apps/devv.png'
|
|
||||||
import MetasoAppLogo from '@renderer/assets/images/apps/metaso.webp'
|
|
||||||
import PerplexityAppLogo from '@renderer/assets/images/apps/perplexity.webp'
|
|
||||||
import PoeAppLogo from '@renderer/assets/images/apps/poe.webp'
|
|
||||||
import SensetimeAppLogo from '@renderer/assets/images/apps/sensetime.png'
|
|
||||||
import SparkDeskAppLogo from '@renderer/assets/images/apps/sparkdesk.png'
|
|
||||||
import TiangongAiLogo from '@renderer/assets/images/apps/tiangong.png'
|
|
||||||
import TencentYuanbaoAppLogo from '@renderer/assets/images/apps/yuanbao.png'
|
|
||||||
import ZhihuAppLogo from '@renderer/assets/images/apps/zhihu.png'
|
|
||||||
import MinApp from '@renderer/components/MinApp'
|
|
||||||
import { PROVIDER_CONFIG } from '@renderer/config/provider'
|
|
||||||
import { MinAppType } from '@renderer/types'
|
|
||||||
|
|
||||||
const _apps: MinAppType[] = [
|
|
||||||
{
|
|
||||||
id: '360-ai-so',
|
|
||||||
name: '360AI搜索',
|
|
||||||
logo: AiSearchAppLogo,
|
|
||||||
url: 'https://so.360.com/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '360-ai-bot',
|
|
||||||
name: 'AI 助手',
|
|
||||||
logo: AiAssistantAppLogo,
|
|
||||||
url: 'https://bot.360.com/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'baidu-ai-chat',
|
|
||||||
name: '文心一言',
|
|
||||||
logo: BaiduAiAppLogo,
|
|
||||||
url: 'https://yiyan.baidu.com/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'tencent-yuanbao',
|
|
||||||
name: '腾讯元宝',
|
|
||||||
logo: TencentYuanbaoAppLogo,
|
|
||||||
url: 'https://yuanbao.tencent.com/chat'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'sensetime-chat',
|
|
||||||
name: '商量',
|
|
||||||
logo: SensetimeAppLogo,
|
|
||||||
url: 'https://chat.sensetime.com/wb/chat'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'spark-desk',
|
|
||||||
name: 'SparkDesk',
|
|
||||||
logo: SparkDeskAppLogo,
|
|
||||||
url: 'https://xinghuo.xfyun.cn/desk'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'metaso',
|
|
||||||
name: '秘塔AI搜索',
|
|
||||||
logo: MetasoAppLogo,
|
|
||||||
url: 'https://metaso.cn/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'poe',
|
|
||||||
name: 'Poe',
|
|
||||||
logo: PoeAppLogo,
|
|
||||||
url: 'https://poe.com'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'perplexity',
|
|
||||||
name: 'perplexity',
|
|
||||||
logo: PerplexityAppLogo,
|
|
||||||
url: 'https://www.perplexity.ai/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'devv',
|
|
||||||
name: 'DEVV_',
|
|
||||||
logo: DevvAppLogo,
|
|
||||||
url: 'https://devv.ai/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'tiangong-ai',
|
|
||||||
name: '天工AI',
|
|
||||||
logo: TiangongAiLogo,
|
|
||||||
url: 'https://www.tiangong.cn/'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 'zhihu-zhiada',
|
|
||||||
name: '知乎直答',
|
|
||||||
logo: ZhihuAppLogo,
|
|
||||||
url: 'https://zhida.zhihu.com/'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
export function getAllMinApps() {
|
|
||||||
const list: MinAppType[] = (Object.entries(PROVIDER_CONFIG) as any[])
|
|
||||||
.filter(([, config]) => config.app)
|
|
||||||
.map(([key, config]) => ({ id: key, ...config.app }))
|
|
||||||
.concat(_apps)
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
export function startMinAppById(id: string) {
|
|
||||||
const app = getAllMinApps().find((app) => app?.id === id)
|
|
||||||
app && MinApp.start(app)
|
|
||||||
}
|
|
||||||
204
src/renderer/src/config/minapps.ts
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
import AiAssistantAppLogo from '@renderer/assets/images/apps/360-ai.png'
|
||||||
|
import AiSearchAppLogo from '@renderer/assets/images/apps/ai-search.png'
|
||||||
|
import BaiduAiAppLogo from '@renderer/assets/images/apps/baidu-ai.png'
|
||||||
|
import BaicuanAppLogo from '@renderer/assets/images/apps/baixiaoying.webp'
|
||||||
|
import DevvAppLogo from '@renderer/assets/images/apps/devv.png'
|
||||||
|
import DoubaoAppLogo from '@renderer/assets/images/apps/doubao.png'
|
||||||
|
import GeminiAppLogo from '@renderer/assets/images/apps/gemini.png'
|
||||||
|
import KimiAppLogo from '@renderer/assets/images/apps/kimi.jpg'
|
||||||
|
import MetasoAppLogo from '@renderer/assets/images/apps/metaso.webp'
|
||||||
|
import PerplexityAppLogo from '@renderer/assets/images/apps/perplexity.webp'
|
||||||
|
import PoeAppLogo from '@renderer/assets/images/apps/poe.webp'
|
||||||
|
import SensetimeAppLogo from '@renderer/assets/images/apps/sensetime.png'
|
||||||
|
import SparkDeskAppLogo from '@renderer/assets/images/apps/sparkdesk.png'
|
||||||
|
import TiangongAiLogo from '@renderer/assets/images/apps/tiangong.png'
|
||||||
|
import WanZhiAppLogo from '@renderer/assets/images/apps/wanzhi.jpg'
|
||||||
|
import TencentYuanbaoAppLogo from '@renderer/assets/images/apps/yuanbao.png'
|
||||||
|
import YuewenAppLogo from '@renderer/assets/images/apps/yuewen.png'
|
||||||
|
import ZhihuAppLogo from '@renderer/assets/images/apps/zhihu.png'
|
||||||
|
import ClaudeAppLogo from '@renderer/assets/images/models/claude.png'
|
||||||
|
import HailuoModelLogo from '@renderer/assets/images/models/hailuo.png'
|
||||||
|
import QwenModelLogo from '@renderer/assets/images/models/qwen.png'
|
||||||
|
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
|
||||||
|
import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
|
||||||
|
import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png'
|
||||||
|
import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png'
|
||||||
|
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||||
|
import MinApp from '@renderer/components/MinApp'
|
||||||
|
import { MinAppType } from '@renderer/types'
|
||||||
|
|
||||||
|
const _apps: MinAppType[] = [
|
||||||
|
{
|
||||||
|
id: 'openai',
|
||||||
|
name: 'ChatGPT',
|
||||||
|
url: 'https://chatgpt.com/',
|
||||||
|
logo: OpenAiProviderLogo,
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'gemini',
|
||||||
|
name: 'Gemini',
|
||||||
|
url: 'https://gemini.google.com/',
|
||||||
|
logo: GeminiAppLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'silicon',
|
||||||
|
name: 'SiliconFlow',
|
||||||
|
url: 'https://cloud.siliconflow.cn/playground/chat',
|
||||||
|
logo: SiliconFlowProviderLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'deepseek',
|
||||||
|
name: 'DeepSeek',
|
||||||
|
url: 'https://chat.deepseek.com/',
|
||||||
|
logo: DeepSeekProviderLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'yi',
|
||||||
|
name: '万知',
|
||||||
|
url: 'https://www.wanzhi.com/',
|
||||||
|
logo: WanZhiAppLogo,
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'zhipu',
|
||||||
|
name: '智谱',
|
||||||
|
url: 'https://chatglm.cn/main/alltoolsdetail',
|
||||||
|
logo: ZhipuProviderLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'moonshot',
|
||||||
|
name: 'Kimi',
|
||||||
|
url: 'https://kimi.moonshot.cn/',
|
||||||
|
logo: KimiAppLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'baichuan',
|
||||||
|
name: '百小应',
|
||||||
|
url: 'https://ying.baichuan-ai.com/chat',
|
||||||
|
logo: BaicuanAppLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'dashscope',
|
||||||
|
name: '通义千问',
|
||||||
|
url: 'https://tongyi.aliyun.com/qianwen/',
|
||||||
|
logo: QwenModelLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'stepfun',
|
||||||
|
name: '跃问',
|
||||||
|
url: 'https://yuewen.cn/chats/new',
|
||||||
|
logo: YuewenAppLogo,
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'doubao',
|
||||||
|
name: '豆包',
|
||||||
|
url: 'https://www.doubao.com/chat/',
|
||||||
|
logo: DoubaoAppLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'minimax',
|
||||||
|
name: '海螺',
|
||||||
|
url: 'https://hailuoai.com/',
|
||||||
|
logo: HailuoModelLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'groq',
|
||||||
|
name: 'Groq',
|
||||||
|
url: 'https://chat.groq.com/',
|
||||||
|
logo: GroqProviderLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'anthropic',
|
||||||
|
name: 'Claude',
|
||||||
|
url: 'https://claude.ai/',
|
||||||
|
logo: ClaudeAppLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '360-ai-so',
|
||||||
|
name: '360AI搜索',
|
||||||
|
logo: AiSearchAppLogo,
|
||||||
|
url: 'https://so.360.com/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '360-ai-bot',
|
||||||
|
name: 'AI 助手',
|
||||||
|
logo: AiAssistantAppLogo,
|
||||||
|
url: 'https://bot.360.com/',
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'baidu-ai-chat',
|
||||||
|
name: '文心一言',
|
||||||
|
logo: BaiduAiAppLogo,
|
||||||
|
url: 'https://yiyan.baidu.com/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'tencent-yuanbao',
|
||||||
|
name: '腾讯元宝',
|
||||||
|
logo: TencentYuanbaoAppLogo,
|
||||||
|
url: 'https://yuanbao.tencent.com/chat',
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'sensetime-chat',
|
||||||
|
name: '商量',
|
||||||
|
logo: SensetimeAppLogo,
|
||||||
|
url: 'https://chat.sensetime.com/wb/chat',
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'spark-desk',
|
||||||
|
name: 'SparkDesk',
|
||||||
|
logo: SparkDeskAppLogo,
|
||||||
|
url: 'https://xinghuo.xfyun.cn/desk'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'metaso',
|
||||||
|
name: '秘塔AI搜索',
|
||||||
|
logo: MetasoAppLogo,
|
||||||
|
url: 'https://metaso.cn/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'poe',
|
||||||
|
name: 'Poe',
|
||||||
|
logo: PoeAppLogo,
|
||||||
|
url: 'https://poe.com'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'perplexity',
|
||||||
|
name: 'perplexity',
|
||||||
|
logo: PerplexityAppLogo,
|
||||||
|
url: 'https://www.perplexity.ai/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'devv',
|
||||||
|
name: 'DEVV_',
|
||||||
|
logo: DevvAppLogo,
|
||||||
|
url: 'https://devv.ai/'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'tiangong-ai',
|
||||||
|
name: '天工AI',
|
||||||
|
logo: TiangongAiLogo,
|
||||||
|
url: 'https://www.tiangong.cn/',
|
||||||
|
bodered: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'zhihu-zhiada',
|
||||||
|
name: '知乎直答',
|
||||||
|
logo: ZhihuAppLogo,
|
||||||
|
url: 'https://zhida.zhihu.com/',
|
||||||
|
bodered: true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
export function getAllMinApps() {
|
||||||
|
return _apps as MinAppType[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function startMinAppById(id: string) {
|
||||||
|
const app = getAllMinApps().find((app) => app?.id === id)
|
||||||
|
app && MinApp.start(app)
|
||||||
|
}
|
||||||
@ -1,16 +1,11 @@
|
|||||||
import BaicuanAppLogo from '@renderer/assets/images/apps/baixiaoying.webp'
|
|
||||||
import KimiAppLogo from '@renderer/assets/images/apps/kimi.jpg'
|
|
||||||
import YuewenAppLogo from '@renderer/assets/images/apps/yuewen.png'
|
|
||||||
import HailuoModelLogo from '@renderer/assets/images/models/hailuo.png'
|
|
||||||
import QwenModelLogo from '@renderer/assets/images/models/qwen.png'
|
|
||||||
import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg'
|
import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.jpg'
|
||||||
import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.jpeg'
|
import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png'
|
||||||
import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png'
|
import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png'
|
||||||
|
import BytedanceProviderLogo from '@renderer/assets/images/providers/bytedance.png'
|
||||||
import DashScopeProviderLogo from '@renderer/assets/images/providers/dashscope.png'
|
import DashScopeProviderLogo from '@renderer/assets/images/providers/dashscope.png'
|
||||||
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
|
import DeepSeekProviderLogo from '@renderer/assets/images/providers/deepseek.png'
|
||||||
import DoubaoProviderLogo from '@renderer/assets/images/providers/doubao.png'
|
import GithubProviderLogo from '@renderer/assets/images/providers/github.png'
|
||||||
import GeminiProviderLogo from '@renderer/assets/images/providers/gemini.png'
|
import GoogleProviderLogo from '@renderer/assets/images/providers/google.png'
|
||||||
import GithubProviderLogo from '@renderer/assets/images/providers/github.svg'
|
|
||||||
import GraphRagProviderLogo from '@renderer/assets/images/providers/graph-rag.png'
|
import GraphRagProviderLogo from '@renderer/assets/images/providers/graph-rag.png'
|
||||||
import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
|
import GroqProviderLogo from '@renderer/assets/images/providers/groq.png'
|
||||||
import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png'
|
import MinimaxProviderLogo from '@renderer/assets/images/providers/minimax.png'
|
||||||
@ -20,8 +15,8 @@ import OllamaProviderLogo from '@renderer/assets/images/providers/ollama.png'
|
|||||||
import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png'
|
import OpenAiProviderLogo from '@renderer/assets/images/providers/openai.png'
|
||||||
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png'
|
import OpenRouterProviderLogo from '@renderer/assets/images/providers/openrouter.png'
|
||||||
import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png'
|
import SiliconFlowProviderLogo from '@renderer/assets/images/providers/silicon.png'
|
||||||
import StepFunProviderLogo from '@renderer/assets/images/providers/stepfun.png'
|
import StepProviderLogo from '@renderer/assets/images/providers/step.png'
|
||||||
import YiProviderLogo from '@renderer/assets/images/providers/yi.png'
|
import ZeroOneProviderLogo from '@renderer/assets/images/providers/zero-one.png'
|
||||||
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
import ZhipuProviderLogo from '@renderer/assets/images/providers/zhipu.png'
|
||||||
|
|
||||||
export function getProviderLogo(providerId: string) {
|
export function getProviderLogo(providerId: string) {
|
||||||
@ -33,7 +28,7 @@ export function getProviderLogo(providerId: string) {
|
|||||||
case 'deepseek':
|
case 'deepseek':
|
||||||
return DeepSeekProviderLogo
|
return DeepSeekProviderLogo
|
||||||
case 'yi':
|
case 'yi':
|
||||||
return YiProviderLogo
|
return ZeroOneProviderLogo
|
||||||
case 'groq':
|
case 'groq':
|
||||||
return GroqProviderLogo
|
return GroqProviderLogo
|
||||||
case 'zhipu':
|
case 'zhipu':
|
||||||
@ -53,11 +48,11 @@ export function getProviderLogo(providerId: string) {
|
|||||||
case 'aihubmix':
|
case 'aihubmix':
|
||||||
return AiHubMixProviderLogo
|
return AiHubMixProviderLogo
|
||||||
case 'gemini':
|
case 'gemini':
|
||||||
return GeminiProviderLogo
|
return GoogleProviderLogo
|
||||||
case 'stepfun':
|
case 'stepfun':
|
||||||
return StepFunProviderLogo
|
return StepProviderLogo
|
||||||
case 'doubao':
|
case 'doubao':
|
||||||
return DoubaoProviderLogo
|
return BytedanceProviderLogo
|
||||||
case 'graphrag-kylin-mountain':
|
case 'graphrag-kylin-mountain':
|
||||||
return GraphRagProviderLogo
|
return GraphRagProviderLogo
|
||||||
case 'minimax':
|
case 'minimax':
|
||||||
@ -81,12 +76,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.openai.com/api-keys',
|
apiKey: 'https://platform.openai.com/api-keys',
|
||||||
docs: 'https://platform.openai.com/docs',
|
docs: 'https://platform.openai.com/docs',
|
||||||
models: 'https://platform.openai.com/docs/models'
|
models: 'https://platform.openai.com/docs/models'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'openai',
|
|
||||||
name: 'ChatGPT',
|
|
||||||
url: 'https://chatgpt.com/',
|
|
||||||
logo: OpenAiProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
gemini: {
|
gemini: {
|
||||||
@ -98,12 +87,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://aistudio.google.com/app/apikey',
|
apiKey: 'https://aistudio.google.com/app/apikey',
|
||||||
docs: 'https://ai.google.dev/gemini-api/docs',
|
docs: 'https://ai.google.dev/gemini-api/docs',
|
||||||
models: 'https://ai.google.dev/gemini-api/docs/models/gemini'
|
models: 'https://ai.google.dev/gemini-api/docs/models/gemini'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'gemini',
|
|
||||||
name: 'Gemini',
|
|
||||||
url: 'https://gemini.google.com/',
|
|
||||||
logo: GeminiProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
silicon: {
|
silicon: {
|
||||||
@ -115,12 +98,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://cloud.siliconflow.cn/account/ak?referrer=clxty1xuy0014lvqwh5z50i88',
|
apiKey: 'https://cloud.siliconflow.cn/account/ak?referrer=clxty1xuy0014lvqwh5z50i88',
|
||||||
docs: 'https://docs.siliconflow.cn/',
|
docs: 'https://docs.siliconflow.cn/',
|
||||||
models: 'https://docs.siliconflow.cn/docs/model-names'
|
models: 'https://docs.siliconflow.cn/docs/model-names'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'silicon',
|
|
||||||
name: 'SiliconFlow',
|
|
||||||
url: 'https://cloud.siliconflow.cn/playground/chat',
|
|
||||||
logo: SiliconFlowProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deepseek: {
|
deepseek: {
|
||||||
@ -132,12 +109,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.deepseek.com/api_keys',
|
apiKey: 'https://platform.deepseek.com/api_keys',
|
||||||
docs: 'https://platform.deepseek.com/api-docs/',
|
docs: 'https://platform.deepseek.com/api-docs/',
|
||||||
models: 'https://platform.deepseek.com/api-docs/'
|
models: 'https://platform.deepseek.com/api-docs/'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'deepseek',
|
|
||||||
name: 'DeepSeek',
|
|
||||||
url: 'https://chat.deepseek.com/',
|
|
||||||
logo: DeepSeekProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ocoolai: {
|
ocoolai: {
|
||||||
@ -171,12 +142,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.lingyiwanwu.com/apikeys',
|
apiKey: 'https://platform.lingyiwanwu.com/apikeys',
|
||||||
docs: 'https://platform.lingyiwanwu.com/docs',
|
docs: 'https://platform.lingyiwanwu.com/docs',
|
||||||
models: 'https://platform.lingyiwanwu.com/docs#%E6%A8%A1%E5%9E%8B'
|
models: 'https://platform.lingyiwanwu.com/docs#%E6%A8%A1%E5%9E%8B'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'yi',
|
|
||||||
name: 'Yi',
|
|
||||||
url: 'https://www.wanzhi.com/',
|
|
||||||
logo: YiProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
zhipu: {
|
zhipu: {
|
||||||
@ -188,12 +153,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://open.bigmodel.cn/usercenter/apikeys',
|
apiKey: 'https://open.bigmodel.cn/usercenter/apikeys',
|
||||||
docs: 'https://open.bigmodel.cn/dev/howuse/introduction',
|
docs: 'https://open.bigmodel.cn/dev/howuse/introduction',
|
||||||
models: 'https://open.bigmodel.cn/modelcenter/square'
|
models: 'https://open.bigmodel.cn/modelcenter/square'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'zhipu',
|
|
||||||
name: '智谱',
|
|
||||||
url: 'https://chatglm.cn/main/alltoolsdetail',
|
|
||||||
logo: ZhipuProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
moonshot: {
|
moonshot: {
|
||||||
@ -205,12 +164,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.moonshot.cn/console/api-keys',
|
apiKey: 'https://platform.moonshot.cn/console/api-keys',
|
||||||
docs: 'https://platform.moonshot.cn/docs/',
|
docs: 'https://platform.moonshot.cn/docs/',
|
||||||
models: 'https://platform.moonshot.cn/docs/intro#%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8'
|
models: 'https://platform.moonshot.cn/docs/intro#%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'moonshot',
|
|
||||||
name: 'Kimi',
|
|
||||||
url: 'https://kimi.moonshot.cn/',
|
|
||||||
logo: KimiAppLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
baichuan: {
|
baichuan: {
|
||||||
@ -222,12 +175,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.baichuan-ai.com/console/apikey',
|
apiKey: 'https://platform.baichuan-ai.com/console/apikey',
|
||||||
docs: 'https://platform.baichuan-ai.com/docs',
|
docs: 'https://platform.baichuan-ai.com/docs',
|
||||||
models: 'https://platform.baichuan-ai.com/price'
|
models: 'https://platform.baichuan-ai.com/price'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'baichuan',
|
|
||||||
name: '百小应',
|
|
||||||
url: 'https://ying.baichuan-ai.com/chat',
|
|
||||||
logo: BaicuanAppLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dashscope: {
|
dashscope: {
|
||||||
@ -239,12 +186,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key',
|
apiKey: 'https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key',
|
||||||
docs: 'https://help.aliyun.com/zh/dashscope/',
|
docs: 'https://help.aliyun.com/zh/dashscope/',
|
||||||
models: 'https://dashscope.console.aliyun.com/model'
|
models: 'https://dashscope.console.aliyun.com/model'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'dashscope',
|
|
||||||
name: '通义千问',
|
|
||||||
url: 'https://tongyi.aliyun.com/qianwen/',
|
|
||||||
logo: QwenModelLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
stepfun: {
|
stepfun: {
|
||||||
@ -256,12 +197,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.stepfun.com/interface-key',
|
apiKey: 'https://platform.stepfun.com/interface-key',
|
||||||
docs: 'https://platform.stepfun.com/docs/overview/concept',
|
docs: 'https://platform.stepfun.com/docs/overview/concept',
|
||||||
models: 'https://platform.stepfun.com/docs/llm/text'
|
models: 'https://platform.stepfun.com/docs/llm/text'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'stepfun',
|
|
||||||
name: '跃问',
|
|
||||||
url: 'https://yuewen.cn/chats/new',
|
|
||||||
logo: YuewenAppLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
doubao: {
|
doubao: {
|
||||||
@ -273,12 +208,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey',
|
apiKey: 'https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey',
|
||||||
docs: 'https://www.volcengine.com/docs/82379/1182403',
|
docs: 'https://www.volcengine.com/docs/82379/1182403',
|
||||||
models: 'https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint'
|
models: 'https://console.volcengine.com/ark/region:ark+cn-beijing/endpoint'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'doubao',
|
|
||||||
name: '豆包',
|
|
||||||
url: 'https://www.doubao.com/chat/',
|
|
||||||
logo: DoubaoProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
minimax: {
|
minimax: {
|
||||||
@ -290,12 +219,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://platform.minimaxi.com/user-center/basic-information/interface-key',
|
apiKey: 'https://platform.minimaxi.com/user-center/basic-information/interface-key',
|
||||||
docs: 'https://platform.minimaxi.com/document/Announcement',
|
docs: 'https://platform.minimaxi.com/document/Announcement',
|
||||||
models: 'https://platform.minimaxi.com/document/Models'
|
models: 'https://platform.minimaxi.com/document/Models'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'minimax',
|
|
||||||
name: '海螺',
|
|
||||||
url: 'https://hailuoai.com/',
|
|
||||||
logo: HailuoModelLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'graphrag-kylin-mountain': {
|
'graphrag-kylin-mountain': {
|
||||||
@ -323,12 +246,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://console.groq.com/keys',
|
apiKey: 'https://console.groq.com/keys',
|
||||||
docs: 'https://console.groq.com/docs/quickstart',
|
docs: 'https://console.groq.com/docs/quickstart',
|
||||||
models: 'https://console.groq.com/docs/models'
|
models: 'https://console.groq.com/docs/models'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'groq',
|
|
||||||
name: 'Groq',
|
|
||||||
url: 'https://chat.groq.com/',
|
|
||||||
logo: GroqProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ollama: {
|
ollama: {
|
||||||
@ -350,12 +267,6 @@ export const PROVIDER_CONFIG = {
|
|||||||
apiKey: 'https://console.anthropic.com/settings/keys',
|
apiKey: 'https://console.anthropic.com/settings/keys',
|
||||||
docs: 'https://docs.anthropic.com/en/docs',
|
docs: 'https://docs.anthropic.com/en/docs',
|
||||||
models: 'https://docs.anthropic.com/en/docs/about-claude/models'
|
models: 'https://docs.anthropic.com/en/docs/about-claude/models'
|
||||||
},
|
|
||||||
app: {
|
|
||||||
id: 'anthropic',
|
|
||||||
name: 'Claude',
|
|
||||||
url: 'https://claude.ai/',
|
|
||||||
logo: AnthropicProviderLogo
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
aihubmix: {
|
aihubmix: {
|
||||||
@ -1,5 +1,4 @@
|
|||||||
import MinApp from '@renderer/components/MinApp'
|
import MinApp from '@renderer/components/MinApp'
|
||||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
|
||||||
import { MinAppType } from '@renderer/types'
|
import { MinAppType } from '@renderer/types'
|
||||||
import { FC } from 'react'
|
import { FC } from 'react'
|
||||||
import styled from 'styled-components'
|
import styled from 'styled-components'
|
||||||
@ -9,15 +8,13 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const App: FC<Props> = ({ app }) => {
|
const App: FC<Props> = ({ app }) => {
|
||||||
const { theme } = useTheme()
|
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
MinApp.start(app)
|
MinApp.start(app)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container onClick={onClick}>
|
<Container onClick={onClick}>
|
||||||
<AppIcon src={app.logo} style={{ border: theme === 'dark' ? 'none' : '0.5px solid var(--color-border' }} />
|
<AppIcon src={app.logo} style={{ border: app.bodered ? '0.5px solid var(--color-border)' : 'none' }} />
|
||||||
<AppTitle>{app.name}</AppTitle>
|
<AppTitle>{app.name}</AppTitle>
|
||||||
</Container>
|
</Container>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { SearchOutlined } from '@ant-design/icons'
|
import { SearchOutlined } from '@ant-design/icons'
|
||||||
import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
|
import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar'
|
||||||
import { Center } from '@renderer/components/Layout'
|
import { Center } from '@renderer/components/Layout'
|
||||||
import { getAllMinApps } from '@renderer/config/minapp'
|
import { getAllMinApps } from '@renderer/config/minapps'
|
||||||
import { Empty, Input } from 'antd'
|
import { Empty, Input } from 'antd'
|
||||||
import { isEmpty } from 'lodash'
|
import { isEmpty } from 'lodash'
|
||||||
import { FC, useMemo, useState } from 'react'
|
import { FC, useMemo, useState } from 'react'
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { SyncOutlined } from '@ant-design/icons'
|
|||||||
import UserPopup from '@renderer/components/Popups/UserPopup'
|
import UserPopup from '@renderer/components/Popups/UserPopup'
|
||||||
import { FONT_FAMILY } from '@renderer/config/constant'
|
import { FONT_FAMILY } from '@renderer/config/constant'
|
||||||
import { APP_NAME, AppLogo, isLocalAi } from '@renderer/config/env'
|
import { APP_NAME, AppLogo, isLocalAi } from '@renderer/config/env'
|
||||||
import { startMinAppById } from '@renderer/config/minapp'
|
import { startMinAppById } from '@renderer/config/minapps'
|
||||||
import { getModelLogo } from '@renderer/config/models'
|
import { getModelLogo } from '@renderer/config/models'
|
||||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
import { useTheme } from '@renderer/context/ThemeProvider'
|
||||||
import { useAssistant } from '@renderer/hooks/useAssistant'
|
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||||
@ -56,6 +56,7 @@ const MessageItem: FC<Props> = ({ message, index, onDeleteMessage }) => {
|
|||||||
const avatarSource = useMemo(() => {
|
const avatarSource = useMemo(() => {
|
||||||
if (isLocalAi) return AppLogo
|
if (isLocalAi) return AppLogo
|
||||||
return message.modelId ? getModelLogo(message.modelId) : undefined
|
return message.modelId ? getModelLogo(message.modelId) : undefined
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [message.modelId, theme])
|
}, [message.modelId, theme])
|
||||||
|
|
||||||
const avatarName = useMemo(() => firstLetter(assistant?.name).toUpperCase(), [assistant?.name])
|
const avatarName = useMemo(() => firstLetter(assistant?.name).toUpperCase(), [assistant?.name])
|
||||||
|
|||||||
@ -8,7 +8,7 @@ import {
|
|||||||
} from '@ant-design/icons'
|
} from '@ant-design/icons'
|
||||||
import VisionIcon from '@renderer/components/Icons/VisionIcon'
|
import VisionIcon from '@renderer/components/Icons/VisionIcon'
|
||||||
import { getModelLogo, isVisionModel } from '@renderer/config/models'
|
import { getModelLogo, isVisionModel } from '@renderer/config/models'
|
||||||
import { PROVIDER_CONFIG } from '@renderer/config/provider'
|
import { PROVIDER_CONFIG } from '@renderer/config/providers'
|
||||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
import { useTheme } from '@renderer/context/ThemeProvider'
|
||||||
import { useProvider } from '@renderer/hooks/useProvider'
|
import { useProvider } from '@renderer/hooks/useProvider'
|
||||||
import { checkApi } from '@renderer/services/api'
|
import { checkApi } from '@renderer/services/api'
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons'
|
import { DeleteOutlined, EditOutlined, PlusOutlined } from '@ant-design/icons'
|
||||||
import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd'
|
import { DragDropContext, Draggable, Droppable, DropResult } from '@hello-pangea/dnd'
|
||||||
import { getProviderLogo } from '@renderer/config/provider'
|
import { getProviderLogo } from '@renderer/config/providers'
|
||||||
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
import { useAllProviders, useProviders } from '@renderer/hooks/useProvider'
|
||||||
import { Provider } from '@renderer/types'
|
import { Provider } from '@renderer/types'
|
||||||
import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils'
|
import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils'
|
||||||
@ -106,15 +106,15 @@ const ProvidersList: FC = () => {
|
|||||||
className={provider.id === selectedProvider?.id ? 'active' : ''}
|
className={provider.id === selectedProvider?.id ? 'active' : ''}
|
||||||
onClick={() => setSelectedProvider(provider)}>
|
onClick={() => setSelectedProvider(provider)}>
|
||||||
{provider.isSystem && (
|
{provider.isSystem && (
|
||||||
<Avatar shape="square" src={getProviderLogo(provider.id)} size={25} />
|
<ProviderLogo shape="square" src={getProviderLogo(provider.id)} size={25} />
|
||||||
)}
|
)}
|
||||||
{!provider.isSystem && (
|
{!provider.isSystem && (
|
||||||
<Avatar
|
<ProviderLogo
|
||||||
size={25}
|
size={25}
|
||||||
shape="square"
|
shape="square"
|
||||||
style={{ backgroundColor: generateColorFromChar(provider.name), minWidth: 25 }}>
|
style={{ backgroundColor: generateColorFromChar(provider.name), minWidth: 25 }}>
|
||||||
{getFirstCharacter(provider.name)}
|
{getFirstCharacter(provider.name)}
|
||||||
</Avatar>
|
</ProviderLogo>
|
||||||
)}
|
)}
|
||||||
<ProviderItemName>
|
<ProviderItemName>
|
||||||
{provider.isSystem ? t(`provider.${provider.id}`) : provider.name}
|
{provider.isSystem ? t(`provider.${provider.id}`) : provider.name}
|
||||||
@ -190,6 +190,10 @@ const ProviderListItem = styled.div`
|
|||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const ProviderLogo = styled(Avatar)`
|
||||||
|
border: 0.5px solid var(--color-border);
|
||||||
|
`
|
||||||
|
|
||||||
const ProviderItemName = styled.div`
|
const ProviderItemName = styled.div`
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|||||||
@ -85,6 +85,7 @@ export type MinAppType = {
|
|||||||
name: string
|
name: string
|
||||||
logo: string
|
logo: string
|
||||||
url: string
|
url: string
|
||||||
|
bodered?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface FileType {
|
export interface FileType {
|
||||||
|
|||||||