♻️ refactor: optimize lobehub models and default configuration (#11621)

* ♻️ refactor: use COPYRIGHT constant from branding config

* ♻️ refactor: optimize default model configuration

- Switch default provider from OpenAI to Anthropic
- Add DEFAULT_MINI_MODEL and DEFAULT_MINI_PROVIDER for lightweight tasks
- Use mini model for system agent tasks: generationTopic, topic, translation, queryRewrite
- Use mini model for memory extraction agents
- Reorder provider list: Anthropic/Google first, local solutions last

* ♻️ refactor: split lobehub models into organized folder structure

- Split large lobehub.ts (1316 lines) into lobehub/ folder
- Organize chat models by provider (openai, anthropic, google, etc.)
- Separate image models and utils into dedicated files

* ♻️ refactor: use SOCIAL_URL constant and fix button alignment in auth-error page

*  feat: add MiniMax M2.1 and M2.1 Lightning models

* ♻️ refactor: remove 'enabled' property from image model configurations in lobehub

* ♻️ refactor: add COPYRIGHT_FULL constant and fix Discord icon visibility

*  test: update snapshots for default provider changes

*  test: fix snapshot provider values for CI environment

* 🐛 fix(e2e): intercept all LLM providers in mock instead of only OpenAI

The default provider was changed from openai to anthropic, but the LLM mock
only intercepted /webapi/chat/openai requests. Now it intercepts all providers.
This commit is contained in:
YuTengjing
2026-01-20 20:08:54 +08:00
committed by GitHub
parent 2fffe8b6ee
commit 5074fbef2c
24 changed files with 1441 additions and 1366 deletions

View File

@@ -146,12 +146,12 @@ export class LLMMockManager {
return;
}
// Intercept OpenAI chat API requests
await page.route('**/webapi/chat/openai**', async (route) => {
// Intercept all LLM chat API requests (openai, anthropic, etc.)
await page.route('**/webapi/chat/**', async (route) => {
await this.handleChatRequest(route);
});
console.log(' ✓ LLM mocks registered (openai)');
console.log(' ✓ LLM mocks registered (all providers)');
}
/**

View File

@@ -37,3 +37,4 @@ export const BRANDING_EMAIL = {
export const BRANDING_PROVIDER = 'lobehub';
export const COPYRIGHT = `© ${new Date().getFullYear()} ${ORG_NAME}`;
export const COPYRIGHT_FULL = `${COPYRIGHT}. All rights reserved.`;

View File

@@ -1,3 +1,4 @@
export const DEFAULT_EMBEDDING_PROVIDER = 'openai';
export const DEFAULT_PROVIDER = 'openai';
export const DEFAULT_PROVIDER = 'anthropic';
export const DEFAULT_MINI_PROVIDER = 'openai';

View File

@@ -1,4 +1,5 @@
export const DEFAULT_MODEL = 'gpt-5-mini';
export const DEFAULT_MODEL = 'claude-sonnet-4-5-20250929';
export const DEFAULT_MINI_MODEL = 'gpt-5-mini';
export const DEFAULT_EMBEDDING_MODEL = 'text-embedding-3-small';

View File

@@ -1,25 +1,30 @@
import { DEFAULT_PROVIDER } from '@lobechat/business-const';
import { DEFAULT_MINI_PROVIDER, DEFAULT_PROVIDER } from '@lobechat/business-const';
import { QueryRewriteSystemAgent, SystemAgentItem, UserSystemAgentConfig } from '@lobechat/types';
import { DEFAULT_MODEL } from './llm';
import { DEFAULT_MINI_MODEL, DEFAULT_MODEL } from './llm';
export const DEFAULT_SYSTEM_AGENT_ITEM: SystemAgentItem = {
model: DEFAULT_MODEL,
provider: DEFAULT_PROVIDER,
};
export const DEFAULT_MINI_SYSTEM_AGENT_ITEM: SystemAgentItem = {
model: DEFAULT_MINI_MODEL,
provider: DEFAULT_MINI_PROVIDER,
};
export const DEFAULT_QUERY_REWRITE_SYSTEM_AGENT_ITEM: QueryRewriteSystemAgent = {
enabled: true,
model: DEFAULT_MODEL,
provider: DEFAULT_PROVIDER,
model: DEFAULT_MINI_SYSTEM_AGENT_ITEM.model,
provider: DEFAULT_MINI_SYSTEM_AGENT_ITEM.provider,
};
export const DEFAULT_SYSTEM_AGENT_CONFIG: UserSystemAgentConfig = {
agentMeta: DEFAULT_SYSTEM_AGENT_ITEM,
generationTopic: DEFAULT_SYSTEM_AGENT_ITEM,
generationTopic: DEFAULT_MINI_SYSTEM_AGENT_ITEM,
historyCompress: DEFAULT_SYSTEM_AGENT_ITEM,
queryRewrite: DEFAULT_QUERY_REWRITE_SYSTEM_AGENT_ITEM,
thread: DEFAULT_SYSTEM_AGENT_ITEM,
topic: DEFAULT_SYSTEM_AGENT_ITEM,
translation: DEFAULT_SYSTEM_AGENT_ITEM,
topic: DEFAULT_MINI_SYSTEM_AGENT_ITEM,
translation: DEFAULT_MINI_SYSTEM_AGENT_ITEM,
};

View File

@@ -29,7 +29,7 @@
"./github": "./src/aiModels/github.ts",
"./google": "./src/aiModels/google.ts",
"./groq": "./src/aiModels/groq.ts",
"./lobehub": "./src/aiModels/lobehub.ts",
"./lobehub": "./src/aiModels/lobehub/index.ts",
"./higress": "./src/aiModels/higress.ts",
"./huggingface": "./src/aiModels/huggingface.ts",
"./hunyuan": "./src/aiModels/hunyuan.ts",

View File

@@ -31,7 +31,7 @@ import { default as infiniai } from './infiniai';
import { default as internlm } from './internlm';
import { default as jina } from './jina';
import { default as lmstudio } from './lmstudio';
import { default as lobehub } from './lobehub';
import { default as lobehub } from './lobehub/index';
import { default as minimax } from './minimax';
import { default as mistral } from './mistral';
import { default as modelscope } from './modelscope';
@@ -194,7 +194,7 @@ export { default as infiniai } from './infiniai';
export { default as internlm } from './internlm';
export { default as jina } from './jina';
export { default as lmstudio } from './lmstudio';
export { default as lobehub } from './lobehub';
export { default as lobehub } from './lobehub/index';
export { default as minimax } from './minimax';
export { default as mistral } from './mistral';
export { default as modelscope } from './modelscope';

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,256 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const anthropicChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 200_000,
description: "Claude Sonnet 4.5 is Anthropic's most intelligent model to date.",
displayName: 'Claude Sonnet 4.5',
enabled: true,
id: 'claude-sonnet-4-5-20250929',
maxOutput: 8192,
pricing: {
units: [
{ name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 3.75, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-09-30',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Sonnet 4 is Anthropic's most intelligent model to date, offering near-instant responses or extended step-by-step thinking with fine-grained control for API users.",
displayName: 'Claude Sonnet 4',
id: 'claude-sonnet-4-20250514',
maxOutput: 8192,
pricing: {
units: [
{ name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 6, '5m': 3.75 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-05-23',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Sonnet 3.7 is Anthropic's most intelligent model and the first hybrid reasoning model on the market, supporting near-instant responses or extended thinking with fine-grained control.",
displayName: 'Claude Sonnet 3.7',
id: 'claude-3-7-sonnet-20250219',
maxOutput: 8192,
pricing: {
units: [
{ name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 6, '5m': 3.75 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
structuredOutput: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Opus 4.5 is Anthropic's flagship model, combining excellent intelligence and scalable performance for the highest-quality reasoning tasks.",
displayName: 'Claude Opus 4.5',
enabled: true,
id: 'claude-opus-4-5-20251101',
maxOutput: 64_000,
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 25, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 10, '5m': 6.25 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-11-24',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Opus 4.1 is Anthropic's latest and most capable model for highly complex tasks, excelling in performance, intelligence, fluency, and understanding.",
displayName: 'Claude Opus 4.1',
id: 'claude-opus-4-1-20250805',
maxOutput: 32_000,
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 1.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 75, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 30, '5m': 18.75 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-08-05',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Opus 4 is Anthropic's most powerful model for highly complex tasks, excelling in performance, intelligence, fluency, and understanding.",
displayName: 'Claude Opus 4',
id: 'claude-opus-4-20250514',
maxOutput: 32_000,
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 1.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 75, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 30, '5m': 18.75 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-05-23',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
structuredOutput: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude Haiku 4.5 is Anthropic's fastest and most intelligent Haiku model, with lightning speed and extended thinking.",
displayName: 'Claude Haiku 4.5',
enabled: true,
id: 'claude-haiku-4-5-20251001',
maxOutput: 64_000,
pricing: {
units: [
{ name: 'textInput', rate: 1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 2, '5m': 1.25 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-10-16',
settings: {
extendParams: ['disableContextCaching', 'enableReasoning', 'reasoningBudgetToken'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
"Claude 3.5 Haiku is Anthropic's fastest next-gen model, improving across skills and surpassing the previous flagship Claude 3 Opus on many benchmarks.",
displayName: 'Claude 3.5 Haiku',
id: 'claude-3-5-haiku-20241022',
maxOutput: 8192,
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 0.08, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 4, strategy: 'fixed', unit: 'millionTokens' },
{
lookup: { prices: { '1h': 1.6, '5m': 1 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2024-11-05',
settings: {
extendParams: ['disableContextCaching'],
},
type: 'chat',
},
];

View File

@@ -0,0 +1,45 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const deepseekChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
},
contextWindowTokens: 65_536,
description:
'DeepSeek V3.2 balances reasoning and output length for daily QA and agent tasks. Public benchmarks reach GPT-5 levels, and it is the first to integrate thinking into tool use, leading open-source agent evaluations.',
displayName: 'DeepSeek V3.2',
enabled: true,
id: 'deepseek-chat',
pricing: {
units: [
{ name: 'textInput', rate: 0.56, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.07, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.68, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-01',
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 65_536,
description:
'DeepSeek V3.2 Thinking is a deep reasoning model that generates chain-of-thought before outputs for higher accuracy, with top competition results and reasoning comparable to Gemini-3.0-Pro.',
displayName: 'DeepSeek V3.2 Thinking',
enabled: true,
id: 'deepseek-reasoner',
pricing: {
units: [
{ name: 'textInput', rate: 0.55, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.19, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.14, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-01',
type: 'chat',
},
];

View File

@@ -0,0 +1,267 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const googleChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
video: true,
vision: true,
},
contextWindowTokens: 1_048_576 + 65_536,
description:
"Gemini 3 Pro is Google's most powerful agent and vibe-coding model, delivering richer visuals and deeper interaction on top of state-of-the-art reasoning.",
displayName: 'Gemini 3 Pro Preview',
enabled: true,
id: 'gemini-3-pro-preview',
maxOutput: 65_536,
pricing: {
units: [
{
name: 'textInput_cacheRead',
strategy: 'tiered',
tiers: [
{ rate: 0.2, upTo: 200_000 },
{ rate: 0.4, upTo: 'infinity' },
],
unit: 'millionTokens',
},
{
name: 'textInput',
strategy: 'tiered',
tiers: [
{ rate: 2, upTo: 200_000 },
{ rate: 4, upTo: 'infinity' },
],
unit: 'millionTokens',
},
{
name: 'textOutput',
strategy: 'tiered',
tiers: [
{ rate: 12, upTo: 200_000 },
{ rate: 18, upTo: 'infinity' },
],
unit: 'millionTokens',
},
{
lookup: { prices: { '1h': 4.5 }, pricingParams: ['ttl'] },
name: 'textInput_cacheWrite',
strategy: 'lookup',
unit: 'millionTokens',
},
],
},
releasedAt: '2025-11-18',
settings: {
extendParams: ['thinkingLevel2', 'urlContext'],
searchImpl: 'params',
searchProvider: 'google',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
video: true,
vision: true,
},
contextWindowTokens: 1_048_576 + 65_536,
description:
"Gemini 3 Flash Preview is Google's latest best-value model, improving on Gemini 2.5 Flash.",
displayName: 'Gemini 3 Flash Preview',
enabled: true,
id: 'gemini-3-flash-preview',
maxOutput: 65_536,
pricing: {
units: [
{
name: 'textInput',
rate: 0.5,
strategy: 'fixed',
unit: 'millionTokens',
},
{
name: 'textInput_cacheRead',
rate: 0.05,
strategy: 'fixed',
unit: 'millionTokens',
},
{ name: 'textOutput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-17',
settings: {
extendParams: ['thinkingLevel', 'urlContext'],
searchImpl: 'params',
searchProvider: 'google',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
video: true,
vision: true,
},
contextWindowTokens: 1_048_576 + 65_536,
description:
"Gemini 2.5 Pro is Google's most advanced reasoning model, able to reason over code, math, and STEM problems and analyze large datasets, codebases, and documents with long context.",
displayName: 'Gemini 2.5 Pro',
enabled: true,
id: 'gemini-2.5-pro',
maxOutput: 65_536,
pricing: {
units: [
{
name: 'textInput_cacheRead',
strategy: 'tiered',
tiers: [
{ rate: 0.31, upTo: 200_000 },
{ rate: 0.625, upTo: 'infinity' },
],
unit: 'millionTokens',
},
{
name: 'textInput',
strategy: 'tiered',
tiers: [
{ rate: 1.25, upTo: 200_000 },
{ rate: 2.5, upTo: 'infinity' },
],
unit: 'millionTokens',
},
{
name: 'textOutput',
strategy: 'tiered',
tiers: [
{ rate: 10, upTo: 200_000 },
{ rate: 15, upTo: 'infinity' },
],
unit: 'millionTokens',
},
],
},
releasedAt: '2025-06-17',
settings: {
searchImpl: 'params',
searchProvider: 'google',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
video: true,
vision: true,
},
contextWindowTokens: 1_048_576 + 65_536,
description: "Gemini 2.5 Flash is Google's best-value model with full capabilities.",
displayName: 'Gemini 2.5 Flash',
id: 'gemini-2.5-flash',
maxOutput: 65_536,
pricing: {
units: [
{
name: 'textInput_cacheRead',
rate: 0.03,
strategy: 'fixed',
unit: 'millionTokens',
},
{
name: 'textInput',
rate: 0.3,
strategy: 'fixed',
unit: 'millionTokens',
},
{ name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-06-17',
settings: {
extendParams: ['enableReasoning', 'reasoningBudgetToken'],
searchImpl: 'params',
searchProvider: 'google',
},
type: 'chat',
},
{
abilities: {
imageOutput: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 131_072 + 32_768,
description:
"Gemini 3 Pro Image (Nano Banana Pro) is Google's image generation model and also supports multimodal chat.",
displayName: 'Nano Banana Pro',
enabled: true,
id: 'gemini-3-pro-image-preview',
maxOutput: 32_768,
pricing: {
approximatePricePerImage: 0.134,
units: [
{ name: 'imageOutput', rate: 120, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },
],
},
settings: {
searchImpl: 'params',
searchProvider: 'google',
},
type: 'chat',
},
{
abilities: {
imageOutput: true,
vision: true,
},
contextWindowTokens: 32_768 + 32_768,
description:
"Nano Banana is Google's newest, fastest, and most efficient native multimodal model, enabling conversational image generation and editing.",
displayName: 'Nano Banana',
id: 'gemini-2.5-flash-image-preview',
maxOutput: 32_768,
pricing: {
units: [
{ name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageOutput', rate: 30, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-26',
type: 'chat',
},
{
abilities: {
imageOutput: true,
vision: true,
},
contextWindowTokens: 32_768,
description: 'Gemini 2.0 Flash experimental model with image generation support.',
displayName: 'Gemini 2.0 Flash (Image Generation) Experimental',
id: 'gemini-2.0-flash-exp-image-generation',
maxOutput: 8192,
pricing: {
units: [
{ name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'audioInput', rate: 0.7, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageOutput', rate: 30, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-03-14',
type: 'chat',
},
];

View File

@@ -0,0 +1,26 @@
import { AIChatModelCard } from '../../../types/aiModel';
import { anthropicChatModels } from './anthropic';
import { deepseekChatModels } from './deepseek';
import { googleChatModels } from './google';
import { minimaxChatModels } from './minimax';
import { moonshotChatModels } from './moonshot';
import { openaiChatModels } from './openai';
import { xaiChatModels } from './xai';
export const lobehubChatModels: AIChatModelCard[] = [
...anthropicChatModels,
...googleChatModels,
...openaiChatModels,
...deepseekChatModels,
...xaiChatModels,
...minimaxChatModels,
...moonshotChatModels,
];
export { anthropicChatModels } from './anthropic';
export { deepseekChatModels } from './deepseek';
export { googleChatModels } from './google';
export { minimaxChatModels } from './minimax';
export { moonshotChatModels } from './moonshot';
export { openaiChatModels } from './openai';
export { xaiChatModels } from './xai';

View File

@@ -0,0 +1,75 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const minimaxChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 204_800,
description:
'Powerful multilingual programming capabilities, comprehensively upgraded programming experience.',
displayName: 'MiniMax M2.1',
enabled: true,
id: 'MiniMax-M2.1',
maxOutput: 131_072,
pricing: {
units: [
{ name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 0.375, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.03, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.2, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-23',
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
},
contextWindowTokens: 204_800,
description:
'Powerful multilingual programming capabilities with faster and more efficient inference.',
displayName: 'MiniMax M2.1 Lightning',
enabled: true,
id: 'MiniMax-M2.1-Lightning',
maxOutput: 131_072,
pricing: {
units: [
{ name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 0.375, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.03, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.4, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-23',
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
},
contextWindowTokens: 204_800,
description: 'Built for efficient coding and agent workflows.',
displayName: 'MiniMax M2',
id: 'MiniMax-M2-Stable',
maxOutput: 131_072,
pricing: {
units: [
{ name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheWrite', rate: 0.375, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.03, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.2, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-10-27',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
];

View File

@@ -0,0 +1,28 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const moonshotChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
search: true,
},
contextWindowTokens: 131_072,
description:
'kimi-k2 is an MoE foundation model with strong coding and agent capabilities (1T total params, 32B active), outperforming other mainstream open models across reasoning, programming, math, and agent benchmarks.',
displayName: 'Kimi K2',
enabled: true,
id: 'kimi-k2-0711-preview',
pricing: {
units: [
{ name: 'textInput', rate: 0.6, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.15, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-07-11',
settings: {
searchImpl: 'params',
},
type: 'chat',
},
];

View File

@@ -0,0 +1,345 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const openaiChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 400_000,
description:
"GPT-5.2 — OpenAI's flagship model optimized for coding and agent tasks across industries.",
displayName: 'GPT-5.2',
enabled: true,
id: 'gpt-5.2',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 1.75, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.175, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 14, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-11',
settings: {
extendParams: ['gpt5_2ReasoningEffort', 'textVerbosity'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 400_000,
description:
'GPT-5.1 — a flagship model optimized for coding and agent tasks with configurable reasoning effort and longer context.',
displayName: 'GPT-5.1',
enabled: true,
id: 'gpt-5.1',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.125, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-13',
settings: {
extendParams: ['gpt5_1ReasoningEffort', 'textVerbosity'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 400_000,
description:
'The best model for cross-domain coding and agent tasks. GPT-5 leaps in accuracy, speed, reasoning, context awareness, structured thinking, and problem solving.',
displayName: 'GPT-5',
id: 'gpt-5',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.13, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-07',
settings: {
extendParams: ['reasoningEffort'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 400_000,
description:
'A faster, more cost-efficient GPT-5 variant for well-defined tasks, delivering quicker responses while maintaining quality.',
displayName: 'GPT-5 mini',
enabled: true,
id: 'gpt-5-mini',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 0.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.03, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-07',
settings: {
extendParams: ['reasoningEffort'],
searchImpl: 'params',
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
vision: true,
},
contextWindowTokens: 400_000,
description:
'The fastest and most cost-effective GPT-5 variant, ideal for latency- and cost-sensitive applications.',
displayName: 'GPT-5 nano',
id: 'gpt-5-nano',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.01, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-07',
type: 'chat',
},
{
abilities: {
vision: true,
},
contextWindowTokens: 400_000,
description:
'The GPT-5 model used in ChatGPT, combining strong understanding and generation for conversational applications.',
displayName: 'GPT-5 Chat',
enabled: true,
id: 'gpt-5-chat-latest',
maxOutput: 128_000,
pricing: {
units: [
{ name: 'textInput', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.13, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-07',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 1_047_576,
description:
'GPT-4.1 is our flagship model for complex tasks and cross-domain problem solving.',
displayName: 'GPT-4.1',
id: 'gpt-4.1',
maxOutput: 32_768,
pricing: {
units: [
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-04-14',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 1_047_576,
description:
'GPT-4.1 mini balances intelligence, speed, and cost, making it attractive for many use cases.',
displayName: 'GPT-4.1 mini',
id: 'gpt-4.1-mini',
maxOutput: 32_768,
pricing: {
units: [
{ name: 'textInput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 1.6, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-04-14',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 1_047_576,
description:
'GPT-4.1 mini balances intelligence, speed, and cost, making it attractive for many use cases.',
displayName: 'GPT-4.1 nano',
id: 'gpt-4.1-nano',
maxOutput: 32_768,
pricing: {
units: [
{ name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.025, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-04-14',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 128_000,
description:
"GPT-4o mini is OpenAI's latest model after GPT-4 Omni, supporting text+image input with text output. It is their most advanced small model, far cheaper than recent frontier models and over 60% cheaper than GPT-3.5 Turbo, while maintaining top-tier intelligence (82% MMLU).",
displayName: 'GPT-4o mini',
id: 'gpt-4o-mini',
maxOutput: 16_385,
pricing: {
units: [
{ name: 'textInput', rate: 0.15, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 0.6, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.075, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2024-07-18',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 128_000,
description:
'ChatGPT-4o is a dynamic model updated in real time. It combines strong understanding and generation for large-scale use cases like customer support, education, and technical support.',
displayName: 'GPT-4o',
id: 'gpt-4o',
pricing: {
units: [
{ name: 'textInput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2024-05-13',
type: 'chat',
},
{
abilities: {
vision: true,
},
contextWindowTokens: 128_000,
description:
'ChatGPT-4o is a dynamic model updated in real time. It combines strong understanding and generation for large-scale use cases like customer support, education, and technical support.',
displayName: 'ChatGPT-4o',
id: 'chatgpt-4o-latest',
pricing: {
units: [
{ name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2024-08-14',
type: 'chat',
},
{
abilities: {
functionCall: true,
vision: true,
},
contextWindowTokens: 128_000,
description:
'The latest GPT-4 Turbo adds vision. Visual requests support JSON mode and function calling. It is a cost-effective multimodal model that balances accuracy and efficiency for real-time applications.',
displayName: 'GPT-4 Turbo',
id: 'gpt-4-turbo',
pricing: {
units: [
{ name: 'textInput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 30, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
'o3 is a strong all-round model that sets a new bar for math, science, programming, and visual reasoning. It excels at technical writing and instruction following, and can analyze text, code, and images for multi-step problems.',
displayName: 'o3',
id: 'o3',
maxOutput: 100_000,
pricing: {
units: [
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-04-17',
settings: {
extendParams: ['reasoningEffort'],
},
type: 'chat',
},
{
abilities: {
functionCall: true,
reasoning: true,
vision: true,
},
contextWindowTokens: 200_000,
description:
'o4-mini is the latest small o-series model, optimized for fast, effective reasoning with high efficiency in coding and vision tasks.',
displayName: 'o4-mini',
id: 'o4-mini',
maxOutput: 100_000,
pricing: {
units: [
{ name: 'textInput', rate: 1.1, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 4.4, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 0.275, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-04-17',
settings: {
extendParams: ['reasoningEffort'],
},
type: 'chat',
},
];

View File

@@ -0,0 +1,32 @@
import { AIChatModelCard } from '../../../types/aiModel';
export const xaiChatModels: AIChatModelCard[] = [
{
abilities: {
functionCall: true,
reasoning: true,
search: true,
vision: true,
},
contextWindowTokens: 256_000,
description:
'Our newest and strongest flagship model, excelling in NLP, math, and reasoning—an ideal all-rounder.',
displayName: 'Grok 4',
enabled: true,
id: 'grok-4',
pricing: {
units: [
{ name: 'textInput_cacheRead', rate: 0.75, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 15, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-07-09',
settings: {
// reasoning_effort is not supported by grok-4. Specifying reasoning_effort parameter will get an error response.
// extendParams: ['reasoningEffort'],
searchImpl: 'params',
},
type: 'chat',
},
];

View File

@@ -0,0 +1,240 @@
import { AIImageModelCard } from '../../types/aiModel';
import { huanyuanImageParamsSchema, qwenEditParamsSchema, qwenImageParamsSchema } from '../fal';
import {
gptImage1Schema,
imagenBaseParameters,
nanoBananaParameters,
nanoBananaProParameters,
} from './utils';
export const lobehubImageModels: AIImageModelCard[] = [
{
description:
"Gemini 3 Pro Image (Nano Banana Pro) is Google's image generation model and also supports multimodal chat.",
displayName: 'Nano Banana Pro',
enabled: true,
id: 'gemini-3-pro-image-preview:image',
parameters: nanoBananaProParameters,
pricing: {
approximatePricePerImage: 0.134,
units: [
{ name: 'imageOutput', rate: 120, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 12, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-11-18',
type: 'image',
},
{
description:
"Nano Banana is Google's newest, fastest, and most efficient native multimodal model, enabling conversational image generation and editing.",
displayName: 'Nano Banana',
id: 'gemini-2.5-flash-image-preview:image',
parameters: nanoBananaParameters,
pricing: {
approximatePricePerImage: 0.039,
units: [
{ name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageOutput', rate: 30, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-08-26',
type: 'image',
},
{
description: 'Imagen 4th generation text-to-image model series',
displayName: 'Imagen 4 Fast',
id: 'imagen-4.0-fast-generate-001',
organization: 'Deepmind',
parameters: imagenBaseParameters,
pricing: {
units: [{ name: 'imageGeneration', rate: 0.02, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-08-15',
type: 'image',
},
{
description: 'Imagen 4th generation text-to-image model series',
displayName: 'Imagen 4',
id: 'imagen-4.0-generate-001',
organization: 'Deepmind',
parameters: imagenBaseParameters,
pricing: {
units: [{ name: 'imageGeneration', rate: 0.04, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-08-15',
type: 'image',
},
{
description: 'Imagen 4th generation text-to-image model series Ultra version',
displayName: 'Imagen 4 Ultra',
id: 'imagen-4.0-ultra-generate-001',
organization: 'Deepmind',
parameters: imagenBaseParameters,
pricing: {
units: [{ name: 'imageGeneration', rate: 0.06, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-08-15',
type: 'image',
},
{
description:
'An enhanced GPT Image 1 model with 4× faster generation, more precise editing, and improved text rendering.',
displayName: 'GPT Image 1.5',
enabled: true,
id: 'gpt-image-1.5',
parameters: gptImage1Schema,
pricing: {
approximatePricePerImage: 0.034,
units: [
{ name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput_cacheRead', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageOutput', rate: 32, strategy: 'fixed', unit: 'millionTokens' },
],
},
releasedAt: '2025-12-16',
type: 'image',
},
{
description: 'ChatGPT native multimodal image generation model.',
displayName: 'GPT Image 1',
id: 'gpt-image-1',
parameters: gptImage1Schema,
pricing: {
approximatePricePerImage: 0.042,
units: [
{ name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'textInput_cacheRead', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput', rate: 10, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageInput_cacheRead', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
{ name: 'imageOutput', rate: 40, strategy: 'fixed', unit: 'millionTokens' },
],
},
type: 'image',
},
{
description:
'The latest DALL·E model, released in November 2023, supports more realistic, accurate image generation with stronger detail.',
displayName: 'DALL·E 3',
id: 'dall-e-3',
parameters: {
prompt: { default: '' },
quality: {
default: 'standard',
enum: ['standard', 'hd'],
},
size: {
default: '1024x1024',
enum: ['1024x1024', '1792x1024', '1024x1792'],
},
},
pricing: {
approximatePricePerImage: 0.004,
units: [
{
lookup: {
prices: {
hd_1024x1024: 0.08,
hd_1024x1792: 0.12,
hd_1792x1024: 0.12,
standard_1024x1024: 0.04,
standard_1024x1792: 0.08,
standard_1792x1024: 0.08,
},
pricingParams: ['quality', 'size'],
},
name: 'imageGeneration',
strategy: 'lookup',
unit: 'image',
},
],
},
type: 'image',
},
{
description:
'Seedream 4.5, built by ByteDance Seed team, supports multi-image editing and composition. Features enhanced subject consistency, precise instruction following, spatial logic understanding, aesthetic expression, poster layout and logo design with high-precision text-image rendering.',
displayName: 'Seedream 4.5',
enabled: true,
id: 'fal-ai/bytedance/seedream/v4.5',
parameters: {
height: { default: 2048, max: 4096, min: 1920, step: 1 },
imageUrls: { default: [], maxCount: 10, maxFileSize: 10 * 1024 * 1024 },
prompt: { default: '' },
seed: { default: null },
width: { default: 2048, max: 4096, min: 1920, step: 1 },
},
pricing: {
units: [{ name: 'imageGeneration', rate: 0.04, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-12-04',
type: 'image',
},
{
description:
'Seedream 4.0, built by ByteDance Seed, supports text and image inputs for highly controllable, high-quality image generation from prompts.',
displayName: 'Seedream 4.0',
id: 'fal-ai/bytedance/seedream/v4',
parameters: {
height: { default: 1024, max: 4096, min: 1024, step: 1 },
imageUrls: { default: [], maxCount: 10, maxFileSize: 10 * 1024 * 1024 },
prompt: {
default: '',
},
seed: { default: null },
width: { default: 1024, max: 4096, min: 1024, step: 1 },
},
pricing: {
units: [{ name: 'imageGeneration', rate: 0.03, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-09-09',
type: 'image',
},
{
description: 'A powerful native multimodal image generation model.',
displayName: 'HunyuanImage 3.0',
enabled: true,
id: 'fal-ai/hunyuan-image/v3',
parameters: huanyuanImageParamsSchema,
pricing: {
// Original price: 0.1 x 1024 x 1024 / 100_0000 = 0.1048576$
units: [{ name: 'imageGeneration', rate: 0.11, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-09-28',
type: 'image',
},
{
description:
'A professional image editing model from the Qwen team, supporting semantic and appearance edits, precise Chinese/English text editing, style transfer, rotation, and more.',
displayName: 'Qwen Edit',
enabled: true,
id: 'fal-ai/qwen-image-edit',
parameters: qwenEditParamsSchema,
pricing: {
// https://fal.ai/models/fal-ai/qwen-image-edit
// Original price: 0.03 x 1328 x 1328 / 100_0000 = 0.05290752
units: [{ name: 'imageGeneration', rate: 0.06, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-08-19',
type: 'image',
},
{
description:
'A powerful image generation model from the Qwen team with strong Chinese text rendering and diverse visual styles.',
displayName: 'Qwen Image',
enabled: true,
id: 'fal-ai/qwen-image',
parameters: qwenImageParamsSchema,
pricing: {
// Original price: 0.02 x 1328 x 1328 / 100_0000 = 0.03527168
units: [{ name: 'imageGeneration', rate: 0.04, strategy: 'fixed', unit: 'image' }],
},
releasedAt: '2025-08-04',
type: 'image',
},
];

View File

@@ -0,0 +1,10 @@
import { lobehubChatModels } from './chat';
import { lobehubImageModels } from './image';
export { lobehubChatModels } from './chat';
export { lobehubImageModels } from './image';
export * from './utils';
export const allModels = [...lobehubChatModels, ...lobehubImageModels];
export default allModels;

View File

@@ -0,0 +1,58 @@
import { ModelParamsSchema } from 'model-bank';
// Common parameters for Imagen models
export const imagenBaseParameters: ModelParamsSchema = {
aspectRatio: {
default: '1:1',
enum: ['1:1', '16:9', '9:16', '3:4', '4:3'],
},
prompt: { default: '' },
};
export const NANO_BANANA_ASPECT_RATIOS = [
'1:1', // 1024x1024 / 2048x2048 / 4096x4096
'2:3', // 848x1264 / 1696x2528 / 3392x5056
'3:2', // 1264x848 / 2528x1696 / 5056x3392
'3:4', // 896x1200 / 1792x2400 / 3584x4800
'4:3', // 1200x896 / 2400x1792 / 4800x3584
'4:5', // 928x1152 / 1856x2304 / 3712x4608
'5:4', // 1152x928 / 2304x1856 / 4608x3712
'9:16', // 768x1376 / 1536x2752 / 3072x5504
'16:9', // 1376x768 / 2752x1536 / 5504x3072
'21:9', // 1584x672 / 3168x1344 / 6336x2688
];
export const nanoBananaParameters: ModelParamsSchema = {
aspectRatio: {
default: '1:1',
enum: NANO_BANANA_ASPECT_RATIOS,
},
imageUrls: {
default: [],
},
prompt: { default: '' },
};
export const nanoBananaProParameters: ModelParamsSchema = {
aspectRatio: {
default: '1:1',
enum: NANO_BANANA_ASPECT_RATIOS,
},
imageUrls: {
default: [],
},
prompt: { default: '' },
resolution: {
default: '1K',
enum: ['1K', '2K', '4K'],
},
};
export const gptImage1Schema = {
imageUrls: { default: [], maxCount: 1, maxFileSize: 5 },
prompt: { default: '' },
size: {
default: 'auto',
enum: ['auto', '1024x1024', '1536x1024', '1024x1536'],
},
};

View File

@@ -131,23 +131,23 @@ export const LOBE_DEFAULT_MODEL_LIST: ChatModelCard[] = [
export const DEFAULT_MODEL_PROVIDER_LIST = [
...(ENABLE_BUSINESS_FEATURES ? [LobeHubProvider] : []),
AnthropicProvider,
GoogleProvider,
OpenAIProvider,
DeepSeekProvider,
XinferenceProvider,
MoonshotProvider,
BedrockProvider,
VertexAIProvider,
{ ...AzureProvider, chatModels: [] },
AzureAIProvider,
AiHubMixProvider,
OpenRouterProvider,
FalProvider,
OllamaProvider,
OllamaCloudProvider,
VLLMProvider,
ComfyUIProvider,
XinferenceProvider,
AnthropicProvider,
BedrockProvider,
GoogleProvider,
VertexAIProvider,
DeepSeekProvider,
MoonshotProvider,
AiHubMixProvider,
OpenRouterProvider,
FalProvider,
HuggingFaceProvider,
CloudflareProvider,
GithubProvider,

View File

@@ -1,5 +1,6 @@
'use client';
import { COPYRIGHT_FULL } from '@lobechat/business-const';
import { Center, Flexbox, Text } from '@lobehub/ui';
import { Divider } from 'antd';
import { cx } from 'antd-style';
@@ -41,7 +42,7 @@ const AuthContainer: FC<PropsWithChildren> = ({ children }) => {
</Center>
<Center padding={24}>
<Text align={'center'} type={'secondary'}>
© 2025 LobeHub. All rights reserved.
{COPYRIGHT_FULL}
</Text>
</Center>
</Flexbox>

View File

@@ -1,15 +1,15 @@
'use client';
import { SiDiscord } from '@icons-pack/react-simple-icons';
import { SOCIAL_URL } from '@lobechat/business-const';
import { Alert, Button, Flexbox, Icon } from '@lobehub/ui';
import Link from '@/libs/next/Link';
import { cssVar } from 'antd-style';
import { parseAsString, useQueryState } from 'nuqs';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
import AuthCard from '@/features/AuthCard';
const DISCORD_URL = 'https://discord.gg/AYFPHvv2jT';
import Link from '@/libs/next/Link';
const normalizeErrorCode = (code?: string | null) =>
(code || 'UNKNOWN').trim().toUpperCase().replaceAll('-', '_');
@@ -35,8 +35,8 @@ const AuthErrorPage = memo(() => {
{t('actions.home')}
</Button>
</Link>
<Link href={DISCORD_URL} rel="noopener noreferrer" target="_blank">
<Button block icon={<Icon icon={SiDiscord} />} type="text">
<Link href={SOCIAL_URL.discord} rel="noopener noreferrer" target="_blank">
<Button block icon={<Icon fill={cssVar.colorText} icon={SiDiscord} />} type="text">
{t('actions.discord')}
</Button>
</Link>

View File

@@ -1,4 +1,5 @@
import { DEFAULT_USER_MEMORY_EMBEDDING_MODEL_ITEM } from '@lobechat/const';
import { DEFAULT_MINI_PROVIDER } from '@lobechat/business-const';
import { DEFAULT_MINI_MODEL, DEFAULT_USER_MEMORY_EMBEDDING_MODEL_ITEM } from '@lobechat/const';
import {
type GlobalMemoryExtractionConfig,
@@ -8,8 +9,6 @@ import {
} from '@/types/serverConfig';
const MEMORY_LAYERS: GlobalMemoryLayer[] = ['context', 'experience', 'identity', 'preference'];
const DEFAULT_GATE_MODEL = 'gpt-5-mini';
const DEFAULT_PROVIDER = 'openai';
const parseTokenLimitEnv = (value?: string) => {
if (value === undefined) return undefined;
@@ -62,8 +61,8 @@ export interface MemoryExtractionPrivateConfig {
const parseGateKeeperAgent = (): MemoryAgentConfig => {
const apiKey = process.env.MEMORY_USER_MEMORY_GATEKEEPER_API_KEY;
const baseURL = process.env.MEMORY_USER_MEMORY_GATEKEEPER_BASE_URL;
const model = process.env.MEMORY_USER_MEMORY_GATEKEEPER_MODEL || DEFAULT_GATE_MODEL;
const provider = process.env.MEMORY_USER_MEMORY_GATEKEEPER_PROVIDER || DEFAULT_PROVIDER;
const model = process.env.MEMORY_USER_MEMORY_GATEKEEPER_MODEL || DEFAULT_MINI_MODEL;
const provider = process.env.MEMORY_USER_MEMORY_GATEKEEPER_PROVIDER || DEFAULT_MINI_PROVIDER;
const language = process.env.MEMORY_USER_MEMORY_GATEKEEPER_LANGUAGE || 'English';
return {
@@ -79,7 +78,7 @@ const parseLayerExtractorAgent = (fallbackModel: string): MemoryLayerExtractorCo
const apiKey = process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_API_KEY;
const baseURL = process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_BASE_URL;
const model = process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_MODEL || fallbackModel;
const provider = process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_PROVIDER || DEFAULT_PROVIDER;
const provider = process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_PROVIDER || DEFAULT_MINI_PROVIDER;
const contextLimit = parseTokenLimitEnv(
process.env.MEMORY_USER_MEMORY_LAYER_EXTRACTOR_CONTEXT_LIMIT,
);
@@ -117,7 +116,7 @@ const parseEmbeddingAgent = (
process.env.MEMORY_USER_MEMORY_EMBEDDING_PROVIDER ||
fallbackProvider ||
defaultProvider ||
DEFAULT_PROVIDER;
DEFAULT_MINI_PROVIDER;
return {
apiKey: process.env.MEMORY_USER_MEMORY_EMBEDDING_API_KEY ?? fallbackApiKey,
@@ -174,7 +173,7 @@ export const parseMemoryExtractionConfig = (): MemoryExtractionPrivateConfig =>
const agentLayerExtractor = parseLayerExtractorAgent(agentGateKeeper.model);
const embedding = parseEmbeddingAgent(
agentLayerExtractor.model,
agentLayerExtractor.provider || DEFAULT_PROVIDER,
agentLayerExtractor.provider || DEFAULT_MINI_PROVIDER,
agentGateKeeper.apiKey || agentLayerExtractor.apiKey,
);
const extractorObservabilityS3 = parseExtractorAgentObservabilityS3();

View File

@@ -51,8 +51,8 @@ exports[`settingsSelectors > currentSettings > should merge DEFAULT_SETTINGS and
exports[`settingsSelectors > currentSystemAgent > should merge DEFAULT_SYSTEM_AGENT_CONFIG and s.settings.systemAgent correctly 1`] = `
{
"agentMeta": {
"model": "gpt-5-mini",
"provider": "openai",
"model": "claude-sonnet-4-5-20250929",
"provider": "anthropic",
},
"enableAutoReply": true,
"generationTopic": {
@@ -60,8 +60,8 @@ exports[`settingsSelectors > currentSystemAgent > should merge DEFAULT_SYSTEM_AG
"provider": "openai",
},
"historyCompress": {
"model": "gpt-5-mini",
"provider": "openai",
"model": "claude-sonnet-4-5-20250929",
"provider": "anthropic",
},
"queryRewrite": {
"enabled": true,
@@ -70,8 +70,8 @@ exports[`settingsSelectors > currentSystemAgent > should merge DEFAULT_SYSTEM_AG
},
"replyMessage": "Custom auto reply",
"thread": {
"model": "gpt-5-mini",
"provider": "openai",
"model": "claude-sonnet-4-5-20250929",
"provider": "anthropic",
},
"topic": {
"model": "gpt-5-mini",
@@ -108,8 +108,8 @@ exports[`settingsSelectors > defaultAgent > should merge DEFAULT_AGENT and s.set
"historyCount": 20,
"reasoningBudgetToken": 1024,
"searchFCModel": {
"model": "gpt-5-mini",
"provider": "openai",
"model": "claude-sonnet-4-5-20250929",
"provider": "anthropic",
},
"searchMode": "off",
},
@@ -122,7 +122,7 @@ exports[`settingsSelectors > defaultAgent > should merge DEFAULT_AGENT and s.set
"top_p": 1,
},
"plugins": [],
"provider": "openai",
"provider": "anthropic",
"systemRole": "user",
"tts": {
"showAllLocaleVoice": false,
@@ -152,8 +152,8 @@ exports[`settingsSelectors > defaultAgentConfig > should merge DEFAULT_AGENT_CON
"historyCount": 20,
"reasoningBudgetToken": 1024,
"searchFCModel": {
"model": "gpt-5-mini",
"provider": "openai",
"model": "claude-sonnet-4-5-20250929",
"provider": "anthropic",
},
"searchMode": "off",
},
@@ -166,7 +166,7 @@ exports[`settingsSelectors > defaultAgentConfig > should merge DEFAULT_AGENT_CON
"top_p": 1,
},
"plugins": [],
"provider": "openai",
"provider": "anthropic",
"systemRole": "custom role",
"tts": {
"showAllLocaleVoice": false,