Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ readme = "README.md"
requires-python = ">=3.11,<3.12"
dependencies = [
"pip>=23.0",
"camel-ai[eigent]==0.2.90",
"camel-ai[eigent]==0.2.91a3",
"fastapi>=0.115.12",
"fastapi-babel>=1.0.0",
"uvicorn[standard]>=0.34.2",
Expand Down
1,178 changes: 639 additions & 539 deletions backend/uv.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion server/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ requires-python = ">=3.12,<3.13"
dependencies = [
"alembic>=1.15.2",
"openai>=1.99.3,<2",
"camel-ai==0.2.90a6",
"camel-ai==0.2.91a3",
"pydantic[email]>=2.11.1",
"click>=8.1.8",
"fastapi>=0.115.12",
Expand Down
560 changes: 277 additions & 283 deletions server/uv.lock

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/i18n/locales/ar/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -179,11 +179,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",

"account": "حساب",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/de/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "Netzwerk-Proxy",
"network-proxy-description": "Konfigurieren Sie einen Proxy-Server für Netzwerkanfragen. Dies ist nützlich, wenn Sie über einen Proxy auf externe APIs zugreifen müssen.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/en-us/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",

"account": "Account",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/es/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "Proxy de red",
"network-proxy-description": "Configure un servidor proxy para las solicitudes de red. Esto es útil si necesita acceder a APIs externas a través de un proxy.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/fr/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "Proxy réseau",
"network-proxy-description": "Configurez un serveur proxy pour les requêtes réseau. Utile si vous devez accéder à des API externes via un proxy.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/it/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "Proxy di rete",
"network-proxy-description": "Configura un server proxy per le richieste di rete. Utile se devi accedere ad API esterne tramite un proxy.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/ja/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "ネットワークプロキシ",
"network-proxy-description": "ネットワークリクエスト用のプロキシサーバーを設定します。プロキシ経由で外部APIにアクセスする必要がある場合に便利です。",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/ko/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "네트워크 프록시",
"network-proxy-description": "네트워크 요청을 위한 프록시 서버를 구성합니다. 프록시를 통해 외부 API에 접근해야 하는 경우 유용합니다.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/ru/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -239,11 +239,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",
"network-proxy": "Сетевой прокси",
"network-proxy-description": "Настройте прокси-сервер для сетевых запросов. Это полезно, если вам нужен доступ к внешним API через прокси.",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/zh-Hans/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",

"preferred-ide": "首选 IDE",
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/locales/zh-Hant/setting.json
Original file line number Diff line number Diff line change
Expand Up @@ -168,11 +168,13 @@
"gpt-5.1-name": "GPT-5.1",
"gpt-5.2-name": "GPT-5.2",
"gpt-5.4-name": "GPT-5.4",
"gpt-5.5-name": "GPT-5.5",
"gpt-5-mini-name": "GPT-5 Mini",
"claude-haiku-4-5-name": "Claude Haiku 4.5",
"claude-sonnet-4-5-name": "Claude Sonnet 4.5",
"claude-sonnet-4-6-name": "Claude Sonnet 4.6",
"claude-opus-4-6-name": "Claude Opus 4.6",
"deepseek-v4-pro-name": "DeepSeek V4 Pro",
"minimax-m2-5-name": "Minimax M2.5",

"network-proxy": "網路代理",
Expand Down
8 changes: 8 additions & 0 deletions src/pages/Agents/Models.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -498,11 +498,13 @@ export default function SettingModels() {
{ id: 'gpt-5.1', name: 'GPT-5.1' },
{ id: 'gpt-5.2', name: 'GPT-5.2' },
{ id: 'gpt-5.4', name: 'GPT-5.4' },
{ id: 'gpt-5.5', name: 'GPT-5.5' },
{ id: 'gpt-5-mini', name: 'GPT-5 Mini' },
{ id: 'claude-haiku-4-5', name: 'Claude Haiku 4.5' },
{ id: 'claude-sonnet-4-5', name: 'Claude Sonnet 4.5' },
{ id: 'claude-sonnet-4-6', name: 'Claude Sonnet 4.6' },
{ id: 'claude-opus-4-6', name: 'Claude Opus 4.6' },
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'minimax_m2_5', name: 'Minimax M2.5' },
];

Expand Down Expand Up @@ -1281,6 +1283,9 @@ export default function SettingModels() {
<SelectItem value="gpt-5.4">
{t('setting.gpt-5.4-name')}
</SelectItem>
<SelectItem value="gpt-5.5">
{t('setting.gpt-5.5-name')}
</SelectItem>
<SelectItem value="gpt-5-mini">
{t('setting.gpt-5-mini-name')}
</SelectItem>
Expand All @@ -1296,6 +1301,9 @@ export default function SettingModels() {
<SelectItem value="claude-opus-4-6">
{t('setting.claude-opus-4-6-name')}
</SelectItem>
<SelectItem value="deepseek-v4-pro">
{t('setting.deepseek-v4-pro-name')}
</SelectItem>
<SelectItem value="minimax_m2_5">
{t('setting.minimax-m2-5-name')}
</SelectItem>
Expand Down
4 changes: 3 additions & 1 deletion src/store/authStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { persist } from 'zustand/middleware';
type InitState = 'carousel' | 'done';
type ModelType = 'cloud' | 'local' | 'custom';
type PreferredIDE = 'vscode' | 'cursor' | 'system';
type CloudModelType =
export type CloudModelType =
| 'gemini-3.1-pro-preview'
| 'gemini-3-pro-preview'
| 'gemini-3-flash-preview'
Expand All @@ -33,7 +33,9 @@ type CloudModelType =
| 'gpt-5.1'
| 'gpt-5.2'
| 'gpt-5.4'
| 'gpt-5.5'
| 'gpt-5-mini'
| 'deepseek-v4-pro'
| 'minimax_m2_5';

// auth info interface
Expand Down
43 changes: 35 additions & 8 deletions src/store/chatStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import { fetchEventSource } from '@microsoft/fetch-event-source';
import { FileText } from 'lucide-react';
import { toast } from 'sonner';
import { createStore } from 'zustand';
import { getAuthStore, getWorkerList } from './authStore';
import { getAuthStore, getWorkerList, type CloudModelType } from './authStore';
import { usePageTabStore } from './pageTabStore';
import { useProjectStore } from './projectStore';

Expand Down Expand Up @@ -194,6 +194,39 @@ export function collectTaskUploadFiles(
return Array.from(uniqueCandidates.values());
}

type CloudModelPlatform =
| 'azure'
| 'aws-bedrock-converse'
| 'gemini'
| 'deepseek'
| 'minimax';

const CLOUD_MODEL_PLATFORM_MAP: Record<CloudModelType, CloudModelPlatform> = {
'gemini-3.1-pro-preview': 'gemini',
'gemini-3-pro-preview': 'gemini',
'gemini-3-flash-preview': 'gemini',
'gpt-4.1-mini': 'azure',
'gpt-4.1': 'azure',
'claude-haiku-4-5': 'aws-bedrock-converse',
'claude-sonnet-4-5': 'aws-bedrock-converse',
'claude-sonnet-4-6': 'aws-bedrock-converse',
'claude-opus-4-6': 'aws-bedrock-converse',
'gpt-5': 'azure',
'gpt-5.1': 'azure',
'gpt-5.2': 'azure',
'gpt-5.4': 'azure',
'gpt-5.5': 'azure',
'gpt-5-mini': 'azure',
'deepseek-v4-pro': 'deepseek',
['minimax_m2_5']: 'minimax',
};

export function getCloudModelPlatform(
cloudModelType: CloudModelType
): CloudModelPlatform {
return CLOUD_MODEL_PLATFORM_MAP[cloudModelType];
}

async function uploadTaskFiles(
files: UploadCandidate[],
uploadTargetId: string
Expand Down Expand Up @@ -808,13 +841,7 @@ const chatStore = (initial?: Partial<ChatStore>) =>
apiModel = {
api_key: res.value,
model_type: cloud_model_type,
model_platform: cloud_model_type.includes('gpt')
? 'openai'
: cloud_model_type.includes('claude')
? 'aws-bedrock-converse'
: cloud_model_type.includes('gemini')
? 'gemini'
: 'openai-compatible-model',
model_platform: getCloudModelPlatform(cloud_model_type),
api_url: res.api_url,
extra_params: {},
};
Expand Down
9 changes: 9 additions & 0 deletions test/unit/store/chatStore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ import { fetchEventSource } from '@microsoft/fetch-event-source';
import { generateUniqueId } from '../../../src/lib';
import {
collectTaskUploadFiles,
getCloudModelPlatform,
useChatStore,
} from '../../../src/store/chatStore';
import { useProjectStore } from '../../../src/store/projectStore';
Expand Down Expand Up @@ -228,6 +229,14 @@ describe('ChatStore - Core Functionality', () => {
});
});

describe('Cloud Model Platform Mapping', () => {
it('maps cloud model ids to backend platforms', () => {
expect(getCloudModelPlatform('gpt-5.5')).toBe('azure');
expect(getCloudModelPlatform('deepseek-v4-pro')).toBe('deepseek');
expect(getCloudModelPlatform('minimax_m2_5')).toBe('minimax');
});
});

describe('Task Creation', () => {
it('should create a task with unique ID', () => {
const { result } = renderHook(() => useChatStore());
Expand Down
Loading