fix: 模型选择优化

This commit is contained in:
Gsh
2026-01-11 19:07:47 +08:00
parent 5de968f6c7
commit 3a19c75ca1
3 changed files with 776 additions and 159 deletions

View File

@@ -1,6 +1,6 @@
// 查询用户模型列表返回的数据结构
export interface GetSessionListVO {
id?: number;
id?: number | string;
category?: string;
modelName?: string;
modelDescribe?: string;
@@ -15,6 +15,8 @@ export interface GetSessionListVO {
isFree?: boolean; // 是否为免费模型
isPremiumPackage?: boolean; // 是否为尊享套餐模型
modelApiType?: string; // API 格式类型: Completions | Messages | Responses | GenerateContent
providerName?: string;
iconUrl?: string;
}
// 模型类型枚举

View File

@@ -1,28 +1,40 @@
<!-- 切换模型 -->
<script setup lang="ts">
import type { GetSessionListVO } from '@/api/model/types';
import { Lock } from '@element-plus/icons-vue';
import Popover from '@/components/Popover/index.vue';
import { Check, Lock, Right } from '@element-plus/icons-vue';
import SvgIcon from '@/components/SvgIcon/index.vue';
import { useResponsive } from '@/hooks/useResponsive';
import { useModelStore } from '@/stores/modules/model';
import { showProductPackage } from '@/utils/product-package.ts';
import { isUserVip } from '@/utils/user';
import { modelList as localModelList } from './modelData';
const modelStore = useModelStore();
const { isMobile } = useResponsive();
const dialogVisible = ref(false);
const activeTab = ref('provider'); // 'provider' | 'api'
const scrollbarRef = ref();
// 检查模型是否可用
function isModelAvailable(item: GetSessionListVO) {
return isUserVip() || item.isFree;
}
onMounted(async () => {
await modelStore.requestModelList();
// 虽然使用了本地数据用于展示但可能仍需请求后端以保持某些状态同步或者直接使用本地数据初始化store
// 这里我们优先使用本地数据来填充store或者仅在UI上使用本地数据
// 为了兼容现有逻辑,我们尽量保持 modelStore 的使用,但列表展示主要依赖 localModelList
// 如果后端返回列表为空,可以用本地列表兜底
if (modelStore.modelList.length === 0) {
modelStore.modelList = localModelList;
}
// 设置默认模型
if (
modelStore.modelList.length > 0
&& (!modelStore.currentModelInfo || !modelStore.currentModelInfo.modelId)
(!modelStore.currentModelInfo || !modelStore.currentModelInfo.modelId)
&& localModelList.length > 0
) {
modelStore.setCurrentModelInfo(modelStore.modelList[0]);
modelStore.setCurrentModelInfo(localModelList[0]);
}
});
@@ -38,42 +50,65 @@ const apiTypeNameMap: Record<string, string> = {
GenerateContent: 'Google Gemini API',
};
// 按 API 类型分组的模型列表
const groupedModelList = computed(() => {
// 按 API 类型分组
const groupedByApiType = computed(() => {
const groups: Record<string, GetSessionListVO[]> = {};
modelStore.modelList.forEach((model) => {
localModelList.forEach((model) => {
const apiType = model.modelApiType || 'Completions';
if (!groups[apiType]) {
groups[apiType] = [];
}
groups[apiType].push(model);
});
return groups;
});
console.log('groupedModelList---', groupedModelList.value);
/* 弹出面板 开始 */
const popoverStyle = ref({
width: '200px',
padding: '4px',
height: 'fit-content',
background: 'var(--el-bg-color, #fff)',
border: '1px solid var(--el-border-color-light)',
borderRadius: '8px',
boxShadow: '0 2px 12px 0 rgba(0, 0, 0, 0.1)',
// 按 厂商 (Provider) 分组
const groupedByProvider = computed(() => {
const groups: Record<string, GetSessionListVO[]> = {};
localModelList.forEach((model) => {
const provider = model.providerName || 'Other';
if (!groups[provider]) {
groups[provider] = [];
}
groups[provider].push(model);
});
return groups;
});
const popoverRef = ref();
// 显示
async function showPopover() {
// 获取最新的模型列表
return await modelStore.requestModelList();
// 打开弹窗
function openDialog() {
dialogVisible.value = true;
// 打开时定位到当前模型
nextTick(() => {
scrollToCurrentModel();
});
}
// 监听 tab 切换,自动定位
watch(activeTab, () => {
nextTick(() => {
scrollToCurrentModel();
});
});
// 定位到当前模型
function scrollToCurrentModel() {
const currentId = modelStore.currentModelInfo?.modelId;
if (!currentId)
return;
// 根据当前 tab 构建对应的 ID
const elementId = activeTab.value === 'provider'
? `provider-model-${currentId}`
: `api-model-${currentId}`;
const element = document.getElementById(elementId);
if (element) {
element.scrollIntoView({ block: 'center', behavior: 'smooth' });
}
}
// 点击
// 处理模型点击
function handleModelClick(item: GetSessionListVO) {
if (!isModelAvailable(item)) {
@@ -111,24 +146,24 @@ function handleModelClick(item: GetSessionListVO) {
.catch(() => {
// 点击右上角关闭或“关闭”按钮,不执行任何操作
});
return;
}
modelStore.setCurrentModelInfo(item);
popoverRef.value?.hide?.();
dialogVisible.value = false;
}
function goToModelLibrary() {
window.location.href = '/model-library';
}
/* -------------------------------
模型样式规则
规则1普通灰色免费模型
规则2金色光泽VIP/付费)
规则3彩色流光尊享/高级)
-------------------------------- */
function getModelStyleClass(mode: any) {
if (!mode) {
if (!mode)
return;
}
// isPremiumPackage
const name = mode.modelName.toLowerCase();
const isPremiumPackage = mode.isPremiumPackage;
// 规则3彩色流光
@@ -151,99 +186,166 @@ function getModelStyleClass(mode: any) {
before:content-[''] before:absolute before:-inset-2 before:-z-10
before:animate-goldShine
`;
// 金色背景
// before:bg-[linear-gradient(135deg,#BF953F,#FCF6BA,#B38728,#FBF5B7,#AA771C)]
}
/* -------------------------------
外层卡片样式(选中态 + hover 动效)
-------------------------------- */
function getWrapperClass(item: GetSessionListVO) {
const isSelected = item.modelName === currentModelName.value;
const isSelected = item.modelId === modelStore.currentModelInfo?.modelId;
const available = isModelAvailable(item);
return [
'p-2 rounded-md text-sm transition-all duration-300 relative select-none flex items-center justify-between',
'p-3 rounded-lg text-sm transition-all duration-300 relative select-none flex items-center justify-between cursor-pointer mb-2',
available
? 'hover:scale-[1.03] hover:shadow-[0_0_8px_rgba(0,0,0,0.1)] hover:border-gray-300'
: 'opacity-60 cursor-not-allowed',
? 'hover:bg-gray-50 hover:shadow-sm'
: 'opacity-60 cursor-not-allowed bg-gray-50',
isSelected
? 'border-2 border-blue-700 shadow-[0_0_10px_rgba(29,78,216,1)]'
: 'border border-transparent cursor-pointer',
? 'border-2 border-primary bg-primary-light-9 shadow-md'
: 'border border-gray-200',
];
}
</script>
<template>
<div class="model-select" data-tour="model-select">
<Popover
ref="popoverRef"
placement="top-start"
:offset="[4, 0]"
popover-class="popover-content"
:popover-style="popoverStyle"
trigger="clickTarget"
@show="showPopover"
<!-- 触发按钮 -->
<div
class="model-select-box select-none flex items-center gap-4px p-10px rounded-10px cursor-pointer font-size-12px border-[rgba()] leading-snug"
@click="openDialog"
>
<!-- 触发元素插槽 -->
<template #trigger>
<div
class="model-select-box select-none flex items-center gap-4px p-10px rounded-10px cursor-pointer font-size-12px border-[rgba()] leading-snug"
>
<div class="model-select-box-icon">
<SvgIcon name="models" size="12" />
</div>
<div :class="getModelStyleClass(modelStore.currentModelInfo)" class="model-select-box-text font-size-12px">
{{ currentModelName }}
</div>
</div>
</template>
<div class="popover-content-box">
<!-- API 类型分组展示 -->
<template v-for="(models, apiType) in groupedModelList" :key="apiType">
<!-- 分组标题 -->
<div class="group-title">
{{ apiTypeNameMap[apiType] || apiType }}
</div>
<!-- 该分组下的模型列表 -->
<div
v-for="item in models"
:key="item.id"
:class="getWrapperClass(item)"
@click="handleModelClick(item)"
>
<Popover
trigger-class="popover-trigger-item-text"
popover-class="rounded-tooltip"
placement="right"
trigger="hover"
:offset="[12, 0]"
>
<template #trigger>
<span :class="getModelStyleClass(item)">
{{ item.modelName }}
</span>
</template>
<div
class="popover-content-box-item-text text-wrap max-w-200px rounded-lg p-8px font-size-12px line-height-tight"
>
{{ item.remark }}
</div>
</Popover>
<!-- VIP锁定图标 -->
<el-icon
v-if="!isModelAvailable(item)"
class="absolute right-1 top-1/2 transform -translate-y-1/2"
>
<Lock />
</el-icon>
</div>
</template>
<div class="model-select-box-icon">
<SvgIcon name="models" size="12" />
</div>
</Popover>
<div :class="getModelStyleClass(modelStore.currentModelInfo)" class="model-select-box-text font-size-12px">
{{ currentModelName || '选择模型' }}
</div>
</div>
<!-- 模型选择弹窗 -->
<el-dialog
v-model="dialogVisible"
title="切换模型"
:width="isMobile ? '95%' : '600px'"
class="model-select-dialog"
append-to-body
destroy-on-close
align-center
>
<div class="model-list-container relative">
<!-- 右上角前往模型库按钮 -->
<div class="absolute right-0 top-0 z-10">
<el-button type="primary" link size="small" @click="goToModelLibrary">
前往模型库
<el-icon class="ml-1">
<Right />
</el-icon>
</el-button>
</div>
<el-tabs v-model="activeTab" class="model-tabs">
<!-- 厂商分类 Tab -->
<el-tab-pane label="厂商类型" name="provider">
<el-scrollbar ref="scrollbarRef" height="400px">
<div class="px-2">
<template v-for="(models, provider) in groupedByProvider" :key="provider">
<div class="group-title text-gray-500 text-xs font-bold mb-2 mt-4 px-1">
{{ provider }}
</div>
<div
v-for="item in models"
:id="`provider-model-${item.modelId}`"
:key="item.id"
:class="getWrapperClass(item)"
@click="handleModelClick(item)"
>
<div class="flex items-center gap-3 flex-1 min-w-0">
<!-- 模型 Logo -->
<div class="w-8 h-8 flex-shrink-0 rounded-full bg-white border border-gray-100 flex items-center justify-center overflow-hidden p-1">
<img v-if="item.iconUrl" :src="item.iconUrl" class="w-full h-full object-contain" alt="icon">
<SvgIcon v-else name="models" size="16" />
</div>
<!-- 模型信息 -->
<div class="flex flex-col gap-0.5 flex-1 min-w-0">
<div class="flex items-center gap-2">
<span :class="getModelStyleClass(item)" class="font-medium truncate">
{{ item.modelName }}
</span>
<span v-if="item.isFree" class="text-[10px] px-1.5 py-0.5 bg-green-100 text-green-600 rounded-full">免费</span>
<span v-if="item.isPremiumPackage" class="text-[10px] px-1.5 py-0.5 bg-orange-100 text-orange-600 rounded-full">VIP</span>
</div>
<div class="text-xs text-gray-400 truncate" :title="item.modelDescribe">
{{ item.modelDescribe }}
</div>
</div>
</div>
<!-- 选中/锁定图标 -->
<div class="flex items-center">
<el-icon v-if="item.modelId === modelStore.currentModelInfo?.modelId" class="text-primary mr-2" :size="18">
<Check />
</el-icon>
<el-icon v-if="!isModelAvailable(item)" class="text-gray-400">
<Lock />
</el-icon>
</div>
</div>
</template>
</div>
</el-scrollbar>
</el-tab-pane>
<!-- API类型分类 Tab -->
<el-tab-pane label="API类型" name="api">
<el-scrollbar height="400px">
<div class="px-2">
<template v-for="(models, apiType) in groupedByApiType" :key="apiType">
<div class="group-title text-gray-500 text-xs font-bold mb-2 mt-4 px-1">
{{ apiTypeNameMap[apiType] || apiType }}
</div>
<div
v-for="item in models"
:id="`api-model-${item.modelId}`"
:key="item.id"
:class="getWrapperClass(item)"
@click="handleModelClick(item)"
>
<div class="flex items-center gap-3 flex-1 min-w-0">
<div class="w-8 h-8 flex-shrink-0 rounded-full bg-white border border-gray-100 flex items-center justify-center overflow-hidden p-1">
<img v-if="item.iconUrl" :src="item.iconUrl" class="w-full h-full object-contain" alt="icon">
<SvgIcon v-else name="models" size="16" />
</div>
<div class="flex flex-col gap-0.5 flex-1 min-w-0">
<div class="flex items-center gap-2">
<span :class="getModelStyleClass(item)" class="font-medium truncate">
{{ item.modelName }}
</span>
<span v-if="item.isFree" class="text-[10px] px-1.5 py-0.5 bg-green-100 text-green-600 rounded-full">免费</span>
<span v-if="item.isPremiumPackage" class="text-[10px] px-1.5 py-0.5 bg-orange-100 text-orange-600 rounded-full">VIP</span>
</div>
<div class="text-xs text-gray-400 truncate" :title="item.modelDescribe">
{{ item.modelDescribe }}
</div>
</div>
</div>
<!-- 选中/锁定图标 -->
<div class="flex items-center">
<el-icon v-if="item.modelId === modelStore.currentModelInfo?.modelId" class="text-primary mr-2" :size="18">
<Check />
</el-icon>
<el-icon v-if="!isModelAvailable(item)" class="text-gray-400">
<Lock />
</el-icon>
</div>
</div>
</template>
</div>
</el-scrollbar>
</el-tab-pane>
</el-tabs>
</div>
</el-dialog>
</div>
</template>
@@ -255,46 +357,15 @@ function getWrapperClass(item: GetSessionListVO) {
border-radius: 10px;
}
.popover-content-box {
display: flex;
flex-direction: column;
gap: 4px;
height: 300px;
overflow: hidden auto;
/* 移动端适配 */
@media (max-width: 768px) {
:deep(.model-select-dialog) {
max-width: 100% !important;
margin-top: 10vh !important;
// 分组标题样式
.group-title {
font-size: 12px;
font-weight: 600;
color: #409eff;
padding: 8px 8px 4px 8px;
margin-top: 4px;
border-bottom: 1px solid #e4e7ed;
position: sticky;
top: 0;
background: var(--el-bg-color, #fff);
z-index: 1;
}
:deep(.popover-trigger-item-text) {
width: 100%;
}
.popover-content-box-item-text {
color: white;
background-color: black;
}
// 滚动条样式
&::-webkit-scrollbar {
width: 4px;
}
&::-webkit-scrollbar-track {
background: #f5f5f5;
}
&::-webkit-scrollbar-thumb {
background: #cccccc;
border-radius: 4px;
.el-dialog__body {
padding: 10px;
}
}
}
@@ -310,19 +381,21 @@ function getWrapperClass(item: GetSessionListVO) {
100% { transform: translateX(100%) translateY(100%); }
}
/* 柔光 hover 动效 */
@keyframes glowPulse {
0%, 100% { box-shadow: 0 0 6px rgba(37,99,235,0.2); }
50% { box-shadow: 0 0 10px rgba(37,99,235,0.5); }
}
.animate-gradientFlow {
animation: gradientFlow 3s ease infinite;
}
.animate-goldShine {
animation: goldShine 4s linear infinite;
}
.animate-glowPulse {
animation: glowPulse 2s ease-in-out infinite;
/* 定义一些颜色变量辅助类,如果项目没有定义的话 */
.text-primary {
color: var(--el-color-primary, #409eff);
}
.bg-primary-light-9 {
background-color: var(--el-color-primary-light-9, #ecf5ff);
}
.border-primary {
border-color: var(--el-color-primary, #409eff);
}
</style>

View File

@@ -0,0 +1,542 @@
export const modelList = [
{
id: '077be103-1456-a4bb-409c-3a15f041aa11',
modelId: 'gpt-5.2-chat',
modelName: 'gpt-5.2-chat',
modelDescribe: 'OpenAI最新模型chat日常版本相对gpt5.1大幅进步,声称是目前最强模型,是真还是噱头?',
remark: 'OpenAI最新模型chat日常版本相对gpt5.1大幅进步,声称是目前最强模型,是真还是噱头?',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ab7',
modelId: 'DeepSeek-V3-0324',
modelName: 'DeepSeek-V3',
modelDescribe: '国产开源,简单聊天模式,对于中文文章语义体验较好,但响应速度一般',
remark: '国产开源,简单聊天模式,对于中文文章语义体验较好,但响应速度一般',
isPremiumPackage: false,
isFree: true,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/deepseek.svg',
providerName: '深度思索',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ee1',
modelId: 'DeepSeek-V3.1',
modelName: 'DeepSeek-V3.1',
modelDescribe: '国产开源,具备混合推理架构:一个模型同时支持思考模式与非思考模式,更高的思考效率',
remark: '国产开源,具备混合推理架构:一个模型同时支持思考模式与非思考模式,更高的思考效率',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/deepseek.svg',
providerName: '深度思索',
},
{
id: '077be103-1456-a4bb-409c-3a15f04eaaf1',
modelId: 'gpt-5.1-chat',
modelName: 'gpt-5.1-chat',
modelDescribe: 'OpenAI 迄今为止最最强的旗舰模型chat日常版本与Gpt5相比更人性化更讨好用户并且速度大幅起飞~,但逻辑能力提升不大',
remark: 'OpenAI 迄今为止最最强的旗舰模型chat日常版本与Gpt5相比更人性化更讨好用户并且速度大幅起飞~,但逻辑能力提升不大',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1af1',
modelId: 'gpt-5-chat',
modelName: 'gpt-5',
modelDescribe: 'OpenAI 迄今为止最强的旗舰模型!-更深入',
remark: 'OpenAI 迄今为止最强的旗舰模型!-更深入',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1af2',
modelId: 'gpt-5-mini',
modelName: 'gpt-5-mini',
modelDescribe: 'OpenAI 迄今为止最强的旗舰模型!-更快',
remark: 'OpenAI 迄今为止最强的旗舰模型!-更快',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1af3',
modelId: 'gpt-5-nano',
modelName: 'gpt-5-nano',
modelDescribe: 'OpenAI 迄今为止最强的旗舰模型!-最快',
remark: 'OpenAI 迄今为止最强的旗舰模型!-最快',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1cc1',
modelId: 'Kimi-K2-Thinking',
modelName: 'Kimi-K2-Thinking',
modelDescribe: '国产月之暗面开源模型,优点是上下文极长,在长文本处理、技术创新和多语言支持等方面具有显著优势',
remark: '国产月之暗面开源模型,优点是上下文极长,在长文本处理、技术创新和多语言支持等方面具有显著优势',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/moonshotai.svg',
providerName: '月之暗面',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1a55',
modelId: 'gpt-4o-mini',
modelName: 'gpt-4o-mini',
modelDescribe: 'OpenAI GPT-4o 深度思考的轻量版本,功能丰富性价比高',
remark: 'OpenAI GPT-4o 深度思考的轻量版本,功能丰富性价比高',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff3',
modelId: 'codex-mini',
modelName: 'codex-mini',
modelDescribe: 'OpenAi 推出的专门写代码的模型Codex的mini版本',
remark: 'OpenAi 推出的专门写代码的模型Codex的mini版本',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff2',
modelId: 'grok-4-fast-non-reasoning',
modelName: 'grok-4-fast-non-reasoning',
modelDescribe: '由马克斯xAI推出是Grok4的快速版本并且自带深度思考适合复杂逻辑场景思考时间较短',
remark: '由马克斯xAI推出是Grok4的快速版本并且自带深度思考适合复杂逻辑场景思考时间较短',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/grok.svg',
providerName: 'X',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff1',
modelId: 'grok-4-fast-reasoning',
modelName: 'grok-4-fast-reasoning',
modelDescribe: '由马克斯xAI推出是Grok4的快速版本并且不带深度思考速度很快',
remark: '由马克斯xAI推出是Grok4的快速版本并且不带深度思考速度很快',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/grok.svg',
providerName: 'X',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad2',
modelId: 'o3-mini',
modelName: 'o3-mini',
modelDescribe: 'OpenAI o3 系列的推理模型,轻便且高效',
remark: 'OpenAI o3 系列的推理模型,轻便且高效',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad1',
modelId: 'gpt-4.1',
modelName: 'gpt-4.1',
modelDescribe: 'OpenAI 最新标准版模型,万金油模型,各个领域都十分强悍',
remark: 'OpenAI 最新标准版模型,万金油模型,各个领域都十分强悍',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ab4',
modelId: 'gpt-4.1-mini',
modelName: 'gpt-4.1-mini',
modelDescribe: 'OpenAI 适合日常使用的 GPT-4.1 精简版',
remark: 'OpenAI 适合日常使用的 GPT-4.1 精简版',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac1',
modelId: 'gpt-4.1-nano',
modelName: 'gpt-4.1-nano',
modelDescribe: 'OpenAI 极致性价比,极快的快速响应,适合轻量任务',
remark: 'OpenAI 极致性价比,极快的快速响应,适合轻量任务',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac2',
modelId: 'gpt-35-turbo',
modelName: 'gpt-35-turbo',
modelDescribe: 'OpenAI 极致性价比,极快的快速响应,适合轻量任务',
remark: 'OpenAI 极致性价比,极快的快速响应,适合轻量任务',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac3',
modelId: 'gpt-4o',
modelName: 'gpt-4o',
modelDescribe: 'OpenAI 多模态旗舰模型,支持语音、图像、文本交互,具备深度思考,需要一定的响应时间',
remark: 'OpenAI 多模态旗舰模型,支持语音、图像、文本交互,具备深度思考,需要一定的响应时间',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac6',
modelId: 'o4-mini',
modelName: 'o4-mini',
modelDescribe: 'OpenAI o4 系列的推理模型轻便且高效比o3 更深度,但速度更慢',
remark: 'OpenAI o4 系列的推理模型轻便且高效比o3 更深度,但速度更慢',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac4',
modelId: 'grok-3',
modelName: 'grok-3',
modelDescribe: '由马克斯xAI推出理论上的能力非常强用重金超高成本砸出的超强推理模型',
remark: '由马克斯xAI推出理论上的能力非常强用重金超高成本砸出的超强推理模型',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/grok.svg',
providerName: 'X',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac5',
modelId: 'grok-3-mini',
modelName: 'grok-3-mini',
modelDescribe: '由马克斯xAI推出理论上的能力非常强更快更小的模型',
remark: '由马克斯xAI推出理论上的能力非常强更快更小的模型',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/grok.svg',
providerName: 'X',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac9',
modelId: 'Phi-4-reasoning',
modelName: 'Phi-4-reasoning',
modelDescribe: '微软推出的小而强大模型Phi-4 的逻辑推理优化版本',
remark: '微软推出的小而强大模型Phi-4 的逻辑推理优化版本',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/microsoft.svg',
providerName: 'Microsoft',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac7',
modelId: 'Phi-4',
modelName: 'Phi-4',
modelDescribe: '微软推出的强大模型,适合部署简单任务',
remark: '微软推出的强大模型,适合部署简单任务',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/microsoft.svg',
providerName: 'Microsoft',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ac8',
modelId: 'Phi-4-mini-instruct',
modelName: 'Phi-4-mini-instruct',
modelDescribe: '微软推出的小而强大模型,专为指令执行设计的微型模型',
remark: '微软推出的小而强大模型,专为指令执行设计的微型模型',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/microsoft.svg',
providerName: 'Microsoft',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad7',
modelId: 'databricks-meta-llama-3-1-405B-instruct',
modelName: 'meta-llama-3-1-405B',
modelDescribe: 'Meta 原FaceBook公司打造的开源模型开源模型中的王炸具有4050亿超长参数价格也是较为昂贵',
remark: 'Meta 原FaceBook公司打造的开源模型开源模型中的王炸具有4050亿超长参数价格也是较为昂贵',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/meta-color.svg',
providerName: 'Meta',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad6',
modelId: 'databricks-meta-llama-3-3-70b-instruct',
modelName: 'meta-llama-3.3-70B',
modelDescribe: 'Meta 原FaceBook公司打造的开源模型开源模型中的王炸具有700亿参数',
remark: 'Meta 原FaceBook公司打造的开源模型开源模型中的王炸具有700亿参数',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/meta-color.svg',
providerName: 'Meta',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1bb2',
modelId: 'databricks-gpt-oss-120b',
modelName: 'gpt-oss-120b',
modelDescribe: 'OpenAI 最强大的开源模型热门具备深度思考120b参数可日常使用速度是真的快',
remark: 'OpenAI 最强大的开源模型热门具备深度思考120b参数可日常使用速度是真的快',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad8',
modelId: 'o1',
modelName: 'o1',
modelDescribe: 'OpenAI 超强推理模型强强强o1与o3价格十分昂贵列入顶级模型系列相对于mini更强但响应速度略慢',
remark: 'OpenAI 超强推理模型强强强o1与o3价格十分昂贵列入顶级模型系列相对于mini更强但响应速度略慢',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad4',
modelId: 'databricks-claude-sonnet-4',
modelName: 'claude-sonnet-4',
modelDescribe: 'claude-sonnet-4奢侈模型',
remark: 'claude-sonnet-4奢侈模型',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ad3',
modelId: 'databricks-claude-3-7-sonnet',
modelName: 'claude-3-7-sonnet',
modelDescribe: 'Anthropic 公司下开创的划时代AI纪元所有AI逻辑性几乎地表最强但价格十分昂贵',
remark: 'Anthropic 公司下开创的划时代AI纪元所有AI逻辑性几乎地表最强但价格十分昂贵',
isPremiumPackage: false,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04ecff7',
modelId: 'claude-opus-4-5-20251101',
modelName: 'claude-opus-4-5-20251101',
modelDescribe: '编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
remark: '编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04ecff6',
modelId: 'claude-opus-4-5-20251101',
modelName: 'claude-opus-4-5-20251101',
modelDescribe: '编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
remark: '编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff4',
modelId: 'claude-sonnet-4-5-20250929',
modelName: 'claude-sonnet-4-5-20250929',
modelDescribe: '编程天下第一地表最强Vip尊享包专属',
remark: '编程天下第一地表最强Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff5',
modelId: 'claude-sonnet-4-5-20250929',
modelName: 'claude-sonnet-4-5-20250929',
modelDescribe: '编程天下第一地表最强Vip尊享包专属',
remark: '编程天下第一地表最强Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff7',
modelId: 'claude-haiku-4-5-20251001',
modelName: 'claude-haiku-4-5-20251001',
modelDescribe: 'claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
remark: 'claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ff8',
modelId: 'claude-haiku-4-5-20251001',
modelName: 'claude-haiku-4-5-20251001',
modelDescribe: 'claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
remark: 'claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ba4',
modelId: 'yi-claude-sonnet-4-5-20250929',
modelName: 'yi-claude-sonnet-4-5-20250929',
modelDescribe: '(元旦限时活动-意心ai独家-token每日有限)编程天下第一地表最强Vip尊享包专属',
remark: '(元旦限时活动-意心ai独家-token每日有限)编程天下第一地表最强Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04ecba6',
modelId: 'yi-claude-opus-4-5-20251101',
modelName: 'yi-claude-opus-4-5-20251101',
modelDescribe: '(元旦限时活动-意心ai独家-token每日有限)编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
remark: '(元旦限时活动-意心ai独家-token每日有限)编程天上第一claude4-sonnet-4-5 强化版富哥专属Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '077be103-1456-a4bb-409c-3a15f04e1ba7',
modelId: 'yi-claude-haiku-4-5-20251001',
modelName: 'yi-claude-haiku-4-5-20251001',
modelDescribe: '(元旦限时活动-意心ai独家-token每日有限)claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
remark: '(元旦限时活动-意心ai独家-token每日有限)claude-sonnet-4.5实惠版本有一定性价比Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Messages',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/claude-color.svg',
providerName: 'Anthropic',
},
{
id: '3a1e8c96-d632-fad8-280a-4205d9be97d4',
modelId: 'gemini-3-pro',
modelName: 'gemini-3-pro',
modelDescribe: '谷歌全网火爆最强模型前端编程能力最强前端能力跟claude4.5 opus有的一拼生成的页面非常细腻没有ai味Vip尊享包专属',
remark: '谷歌全网火爆最强模型前端编程能力最强前端能力跟claude4.5 opus有的一拼生成的页面非常细腻没有ai味Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'GenerateContent',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/gemini-color.svg',
providerName: 'Google',
},
{
id: '3a1ea0a6-c0b1-c680-3537-80cb9600be9a',
modelId: 'gpt-5.2',
modelName: 'gpt-5.2',
modelDescribe: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
remark: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Responses',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '3a1ea0b0-ee30-a38e-1576-835ad7b1155f',
modelId: 'gemini-3-pro-high',
modelName: 'gemini-3-pro-high',
modelDescribe: '谷歌全网火爆最强模型前端编程能力最强前端能力跟claude4.5 opus有的一拼生成的页面非常细腻没有ai味Vip尊享包专属',
remark: '谷歌全网火爆最强模型前端编程能力最强前端能力跟claude4.5 opus有的一拼生成的页面非常细腻没有ai味Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'GenerateContent',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/gemini-color.svg',
providerName: 'Google',
},
{
id: '3a1ea0b9-0512-2324-9f2e-725552f17d7f',
modelId: 'gpt-5.2-codex',
modelName: 'gpt-5.2-codex',
modelDescribe: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
remark: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Responses',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '3a1ea0bc-9b22-3772-5f59-b78a6562771d',
modelId: 'gpt-5.2-codex',
modelName: 'gpt-5.2-codex',
modelDescribe: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
remark: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
{
id: '3a1ea0bd-5a5e-d628-6f5e-43e31d653569',
modelId: 'gpt-5.2',
modelName: 'gpt-5.2',
modelDescribe: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
remark: 'OpenAI最新模型相对gpt5.1大幅进步声称是目前最强模型是真还是噱头多顶流模型竞技中完爆其他模型甚至部分考试直接满分具体实际体验由你决定Vip尊享包专属',
isPremiumPackage: true,
isFree: false,
modelApiType: 'Completions',
iconUrl: 'https://ccnetcore.com/prod-api/wwwroot/aihub/logo/openai.svg',
providerName: 'OpenAi',
},
];