mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-20 06:15:58 +00:00
Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 72b87757c6 | |||
| b6dc3eac19 | |||
| 14d4786e2d | |||
| a7b5bc428e | |||
| 3079385980 | |||
| 3f74db2399 | |||
| 0a056f3f0b | |||
| c5d71fe165 | |||
| 741f588cae | |||
| 092506906a | |||
| e8c7d1c568 | |||
| 61bb8aeaf2 | |||
| caaa331002 | |||
| fcda0b50f1 | |||
| 53a2c30a75 | |||
| 203fdc4b22 | |||
| 25c43587de | |||
| 2cd2ca9a23 | |||
| 7636344e07 | |||
| 1c9f0d9b72 | |||
| d0ee3df579 | |||
| 3ad336fa28 | |||
| 92b65f7b7a | |||
| 9ea680c96d | |||
| 457e7c130d | |||
| 4d8053bebe | |||
| d91fb73f68 | |||
| 14fe7c5736 | |||
| 4c68fc3e3a | |||
| 10e44dfb6b | |||
| 5889e8e85c | |||
| 5e41d9a39c | |||
| be096eb9ff | |||
| 39e88196d7 | |||
| ceadd61ce3 | |||
| c5e0ecd31e | |||
| 21c6eb015f | |||
| 031d6f44dc | |||
| 5ce5532a0e | |||
| a53b3a5ca1 |
+217
@@ -2,6 +2,223 @@
|
||||
|
||||
# Changelog
|
||||
|
||||
## [Version 2.0.0-next.86](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.85...v2.0.0-next.86)
|
||||
|
||||
<sup>Released on **2025-11-19**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: Support user abort in the agent runtime.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: Support user abort in the agent runtime, closes [#10289](https://github.com/lobehub/lobe-chat/issues/10289) ([0925069](https://github.com/lobehub/lobe-chat/commit/0925069))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.85](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.84...v2.0.0-next.85)
|
||||
|
||||
<sup>Released on **2025-11-19**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: Slove discover pagination router.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: Slove discover pagination router, closes [#10294](https://github.com/lobehub/lobe-chat/issues/10294) ([fcda0b5](https://github.com/lobehub/lobe-chat/commit/fcda0b5))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.84](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.83...v2.0.0-next.84)
|
||||
|
||||
<sup>Released on **2025-11-19**</sup>
|
||||
|
||||
#### 💄 Styles
|
||||
|
||||
- **misc**: Add Gemini 3.0 Pro Preview to Google Provider.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### Styles
|
||||
|
||||
- **misc**: Add Gemini 3.0 Pro Preview to Google Provider, closes [#10290](https://github.com/lobehub/lobe-chat/issues/10290) ([25c4358](https://github.com/lobehub/lobe-chat/commit/25c4358))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.83](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.82...v2.0.0-next.83)
|
||||
|
||||
<sup>Released on **2025-11-19**</sup>
|
||||
|
||||
#### ✨ Features
|
||||
|
||||
- **misc**: New API support switch Responses API mode.
|
||||
|
||||
#### 💄 Styles
|
||||
|
||||
- **misc**: Update i18n.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's improved
|
||||
|
||||
- **misc**: New API support switch Responses API mode, closes [#9776](https://github.com/lobehub/lobe-chat/issues/9776) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) [#9997](https://github.com/lobehub/lobe-chat/issues/9997) [#9916](https://github.com/lobehub/lobe-chat/issues/9916) ([d0ee3df](https://github.com/lobehub/lobe-chat/commit/d0ee3df))
|
||||
|
||||
#### Styles
|
||||
|
||||
- **misc**: Update i18n, closes [#10291](https://github.com/lobehub/lobe-chat/issues/10291) ([1c9f0d9](https://github.com/lobehub/lobe-chat/commit/1c9f0d9))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.82](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.81...v2.0.0-next.82)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: Fix noisy error notification.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: Fix noisy error notification, closes [#10286](https://github.com/lobehub/lobe-chat/issues/10286) ([9ea680c](https://github.com/lobehub/lobe-chat/commit/9ea680c))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.81](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.80...v2.0.0-next.81)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: Slove when logout always show loading.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: Slove when logout always show loading, closes [#10284](https://github.com/lobehub/lobe-chat/issues/10284) ([d91fb73](https://github.com/lobehub/lobe-chat/commit/d91fb73))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.80](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.79...v2.0.0-next.80)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.79](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.78...v2.0.0-next.79)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
#### 🐛 Bug Fixes
|
||||
|
||||
- **misc**: Fixed the discover page categray sider link error.
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
#### What's fixed
|
||||
|
||||
- **misc**: Fixed the discover page categray sider link error, closes [#10282](https://github.com/lobehub/lobe-chat/issues/10282) ([39e8819](https://github.com/lobehub/lobe-chat/commit/39e8819))
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.78](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.77...v2.0.0-next.78)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
<br/>
|
||||
|
||||
<details>
|
||||
<summary><kbd>Improvements and Fixes</kbd></summary>
|
||||
|
||||
</details>
|
||||
|
||||
<div align="right">
|
||||
|
||||
[](#readme-top)
|
||||
|
||||
</div>
|
||||
|
||||
## [Version 2.0.0-next.77](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.76...v2.0.0-next.77)
|
||||
|
||||
<sup>Released on **2025-11-18**</sup>
|
||||
|
||||
@@ -10,14 +10,14 @@ import { ProxyUrlBuilder } from './urlBuilder';
|
||||
const logger = createLogger('modules:networkProxy:dispatcher');
|
||||
|
||||
/**
|
||||
* 代理管理器
|
||||
* Proxy dispatcher manager
|
||||
*/
|
||||
export class ProxyDispatcherManager {
|
||||
private static isChanging = false;
|
||||
private static changeQueue: Array<() => Promise<void>> = [];
|
||||
|
||||
/**
|
||||
* 应用代理设置(带并发控制)
|
||||
* Apply proxy settings (with concurrency control)
|
||||
*/
|
||||
static async applyProxySettings(config: NetworkProxySettings): Promise<void> {
|
||||
return new Promise((resolve, reject) => {
|
||||
@@ -31,17 +31,17 @@ export class ProxyDispatcherManager {
|
||||
};
|
||||
|
||||
if (this.isChanging) {
|
||||
// 如果正在切换,加入队列
|
||||
// If currently switching, add to queue
|
||||
this.changeQueue.push(operation);
|
||||
} else {
|
||||
// 立即执行
|
||||
// Execute immediately
|
||||
operation();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行代理设置应用
|
||||
* Execute proxy settings application
|
||||
*/
|
||||
private static async doApplyProxySettings(config: NetworkProxySettings): Promise<void> {
|
||||
this.isChanging = true;
|
||||
@@ -49,22 +49,22 @@ export class ProxyDispatcherManager {
|
||||
try {
|
||||
const currentDispatcher = getGlobalDispatcher();
|
||||
|
||||
// 禁用代理,恢复默认连接
|
||||
// Disable proxy, restore default connection
|
||||
if (!config.enableProxy) {
|
||||
await this.safeDestroyDispatcher(currentDispatcher);
|
||||
// 创建一个新的默认 Agent 来替代代理
|
||||
// Create a new default Agent to replace the proxy
|
||||
setGlobalDispatcher(new Agent());
|
||||
logger.debug('Proxy disabled, reset to direct connection mode');
|
||||
return;
|
||||
}
|
||||
|
||||
// 构建代理 URL
|
||||
// Build proxy URL
|
||||
const proxyUrl = ProxyUrlBuilder.build(config);
|
||||
|
||||
// 创建代理 agent
|
||||
// Create proxy agent
|
||||
const agent = this.createProxyAgent(config.proxyType, proxyUrl);
|
||||
|
||||
// 切换代理前销毁旧 dispatcher
|
||||
// Destroy old dispatcher before switching proxy
|
||||
await this.safeDestroyDispatcher(currentDispatcher);
|
||||
setGlobalDispatcher(agent);
|
||||
|
||||
@@ -77,7 +77,7 @@ export class ProxyDispatcherManager {
|
||||
} finally {
|
||||
this.isChanging = false;
|
||||
|
||||
// 处理队列中的下一个操作
|
||||
// Process next operation in queue
|
||||
if (this.changeQueue.length > 0) {
|
||||
const nextOperation = this.changeQueue.shift();
|
||||
if (nextOperation) {
|
||||
@@ -88,12 +88,12 @@ export class ProxyDispatcherManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建代理 agent
|
||||
* Create proxy agent
|
||||
*/
|
||||
static createProxyAgent(proxyType: string, proxyUrl: string) {
|
||||
try {
|
||||
if (proxyType === 'socks5') {
|
||||
// 解析 SOCKS5 代理 URL
|
||||
// Parse SOCKS5 proxy URL
|
||||
const url = new URL(proxyUrl);
|
||||
const socksProxies: SocksProxies = [
|
||||
{
|
||||
@@ -109,10 +109,10 @@ export class ProxyDispatcherManager {
|
||||
},
|
||||
];
|
||||
|
||||
// 使用 fetch-socks 处理 SOCKS5 代理
|
||||
// Use fetch-socks to handle SOCKS5 proxy
|
||||
return socksDispatcher(socksProxies);
|
||||
} else {
|
||||
// undici 的 ProxyAgent 支持 http, https
|
||||
// undici's ProxyAgent supports http, https
|
||||
return new ProxyAgent({ uri: proxyUrl });
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -124,7 +124,7 @@ export class ProxyDispatcherManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* 安全销毁 dispatcher
|
||||
* Safely destroy dispatcher
|
||||
*/
|
||||
private static async safeDestroyDispatcher(dispatcher: any): Promise<void> {
|
||||
try {
|
||||
|
||||
@@ -11,7 +11,7 @@ import { ProxyConfigValidator } from './validator';
|
||||
const logger = createLogger('modules:networkProxy:tester');
|
||||
|
||||
/**
|
||||
* 代理连接测试结果
|
||||
* Proxy connection test result
|
||||
*/
|
||||
export interface ProxyTestResult {
|
||||
message?: string;
|
||||
@@ -20,14 +20,14 @@ export interface ProxyTestResult {
|
||||
}
|
||||
|
||||
/**
|
||||
* 代理连接测试器
|
||||
* Proxy connection tester
|
||||
*/
|
||||
export class ProxyConnectionTester {
|
||||
private static readonly DEFAULT_TIMEOUT = 10_000; // 10秒超时
|
||||
private static readonly DEFAULT_TIMEOUT = 10_000; // 10 seconds timeout
|
||||
private static readonly DEFAULT_TEST_URL = 'https://www.google.com';
|
||||
|
||||
/**
|
||||
* 测试代理连接
|
||||
* Test proxy connection
|
||||
*/
|
||||
static async testConnection(
|
||||
url: string = this.DEFAULT_TEST_URL,
|
||||
@@ -77,13 +77,13 @@ export class ProxyConnectionTester {
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试指定代理配置的连接
|
||||
* Test connection with specified proxy configuration
|
||||
*/
|
||||
static async testProxyConfig(
|
||||
config: NetworkProxySettings,
|
||||
testUrl: string = this.DEFAULT_TEST_URL,
|
||||
): Promise<ProxyTestResult> {
|
||||
// 验证配置
|
||||
// Validate configuration
|
||||
const validation = ProxyConfigValidator.validate(config);
|
||||
if (!validation.isValid) {
|
||||
return {
|
||||
@@ -92,12 +92,12 @@ export class ProxyConnectionTester {
|
||||
};
|
||||
}
|
||||
|
||||
// 如果未启用代理,直接测试
|
||||
// If proxy is not enabled, test directly
|
||||
if (!config.enableProxy) {
|
||||
return this.testConnection(testUrl);
|
||||
}
|
||||
|
||||
// 创建临时代理 agent 进行测试
|
||||
// Create temporary proxy agent for testing
|
||||
try {
|
||||
const proxyUrl = ProxyUrlBuilder.build(config);
|
||||
logger.debug(`Testing proxy with URL: ${proxyUrl}`);
|
||||
@@ -108,7 +108,7 @@ export class ProxyConnectionTester {
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => controller.abort(), this.DEFAULT_TIMEOUT);
|
||||
|
||||
// 临时设置代理进行测试
|
||||
// Temporarily set proxy for testing
|
||||
const originalDispatcher = getGlobalDispatcher();
|
||||
setGlobalDispatcher(agent);
|
||||
|
||||
@@ -138,9 +138,9 @@ export class ProxyConnectionTester {
|
||||
clearTimeout(timeoutId);
|
||||
throw fetchError;
|
||||
} finally {
|
||||
// 恢复原来的 dispatcher
|
||||
// Restore original dispatcher
|
||||
setGlobalDispatcher(originalDispatcher);
|
||||
// 清理临时创建的代理 agent
|
||||
// Clean up temporary proxy agent
|
||||
if (agent && typeof agent.destroy === 'function') {
|
||||
try {
|
||||
await agent.destroy();
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { NetworkProxySettings } from '@lobechat/electron-client-ipc';
|
||||
|
||||
/**
|
||||
* 代理 URL 构建器
|
||||
* Proxy URL builder
|
||||
*/
|
||||
export const ProxyUrlBuilder = {
|
||||
/**
|
||||
* 构建代理 URL
|
||||
* Build proxy URL
|
||||
*/
|
||||
build(config: NetworkProxySettings): string {
|
||||
const { proxyType, proxyServer, proxyPort, proxyRequireAuth, proxyUsername, proxyPassword } =
|
||||
@@ -13,7 +13,7 @@ export const ProxyUrlBuilder = {
|
||||
|
||||
let proxyUrl = `${proxyType}://${proxyServer}:${proxyPort}`;
|
||||
|
||||
// 添加认证信息
|
||||
// Add authentication information
|
||||
if (proxyRequireAuth && proxyUsername && proxyPassword) {
|
||||
const encodedUsername = encodeURIComponent(proxyUsername);
|
||||
const encodedPassword = encodeURIComponent(proxyPassword);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { NetworkProxySettings } from '@lobechat/electron-client-ipc';
|
||||
|
||||
/**
|
||||
* 代理配置验证结果
|
||||
* Proxy configuration validation result
|
||||
*/
|
||||
export interface ProxyValidationResult {
|
||||
errors: string[];
|
||||
@@ -9,38 +9,38 @@ export interface ProxyValidationResult {
|
||||
}
|
||||
|
||||
/**
|
||||
* 代理配置验证器
|
||||
* Proxy configuration validator
|
||||
*/
|
||||
export class ProxyConfigValidator {
|
||||
private static readonly SUPPORTED_TYPES = ['http', 'https', 'socks5'] as const;
|
||||
private static readonly DEFAULT_BYPASS = 'localhost,127.0.0.1,::1';
|
||||
|
||||
/**
|
||||
* 验证代理配置
|
||||
* Validate proxy configuration
|
||||
*/
|
||||
static validate(config: NetworkProxySettings): ProxyValidationResult {
|
||||
const errors: string[] = [];
|
||||
|
||||
// 如果未启用代理,跳过验证
|
||||
// If proxy is not enabled, skip validation
|
||||
if (!config.enableProxy) {
|
||||
return { errors: [], isValid: true };
|
||||
}
|
||||
|
||||
// 验证代理类型
|
||||
// Validate proxy type
|
||||
if (!this.SUPPORTED_TYPES.includes(config.proxyType as any)) {
|
||||
errors.push(
|
||||
`Unsupported proxy type: ${config.proxyType}. Supported types: ${this.SUPPORTED_TYPES.join(', ')}`,
|
||||
);
|
||||
}
|
||||
|
||||
// 验证代理服务器
|
||||
// Validate proxy server
|
||||
if (!config.proxyServer?.trim()) {
|
||||
errors.push('Proxy server is required when proxy is enabled');
|
||||
} else if (!this.isValidHost(config.proxyServer)) {
|
||||
errors.push('Invalid proxy server format');
|
||||
}
|
||||
|
||||
// 验证代理端口
|
||||
// Validate proxy port
|
||||
if (!config.proxyPort?.trim()) {
|
||||
errors.push('Proxy port is required when proxy is enabled');
|
||||
} else {
|
||||
@@ -50,7 +50,7 @@ export class ProxyConfigValidator {
|
||||
}
|
||||
}
|
||||
|
||||
// 验证认证信息
|
||||
// Validate authentication information
|
||||
if (config.proxyRequireAuth) {
|
||||
if (!config.proxyUsername?.trim()) {
|
||||
errors.push('Proxy username is required when authentication is enabled');
|
||||
@@ -67,10 +67,10 @@ export class ProxyConfigValidator {
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证主机名格式
|
||||
* Validate host format
|
||||
*/
|
||||
private static isValidHost(host: string): boolean {
|
||||
// 简单的主机名验证(IP 地址或域名)
|
||||
// Simple host validation (IP address or domain name)
|
||||
const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/;
|
||||
const domainRegex =
|
||||
/^[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?(\.[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*$/;
|
||||
|
||||
@@ -1,4 +1,71 @@
|
||||
[
|
||||
{
|
||||
"children": {
|
||||
"features": ["Support user abort in the agent runtime."]
|
||||
},
|
||||
"date": "2025-11-19",
|
||||
"version": "2.0.0-next.86"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["Slove discover pagination router."]
|
||||
},
|
||||
"date": "2025-11-19",
|
||||
"version": "2.0.0-next.85"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Add Gemini 3.0 Pro Preview to Google Provider."]
|
||||
},
|
||||
"date": "2025-11-19",
|
||||
"version": "2.0.0-next.84"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["New API support switch Responses API mode."],
|
||||
"improvements": ["Update i18n."]
|
||||
},
|
||||
"date": "2025-11-19",
|
||||
"version": "2.0.0-next.83"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["Fix noisy error notification."]
|
||||
},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.82"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["Slove when logout always show loading."]
|
||||
},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.81"
|
||||
},
|
||||
{
|
||||
"children": {},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.80"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"fixes": ["Fixed the discover page categray sider link error."]
|
||||
},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.79"
|
||||
},
|
||||
{
|
||||
"children": {},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.78"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"improvements": ["Delete /settings/newapi pages in nextjs build."]
|
||||
},
|
||||
"date": "2025-11-18",
|
||||
"version": "2.0.0-next.77"
|
||||
},
|
||||
{
|
||||
"children": {
|
||||
"features": ["Support Interleaved thinking in MiniMax."]
|
||||
|
||||
@@ -170,20 +170,8 @@ table chat_groups_agents {
|
||||
}
|
||||
}
|
||||
|
||||
table document_chunks {
|
||||
document_id varchar(30) [not null]
|
||||
chunk_id uuid [not null]
|
||||
page_index integer
|
||||
user_id text [not null]
|
||||
created_at "timestamp with time zone" [not null, default: `now()`]
|
||||
|
||||
indexes {
|
||||
(document_id, chunk_id) [pk]
|
||||
}
|
||||
}
|
||||
|
||||
table documents {
|
||||
id varchar(30) [pk, not null]
|
||||
id varchar(255) [pk, not null]
|
||||
title text
|
||||
content text
|
||||
file_type varchar(255) [not null]
|
||||
@@ -195,6 +183,7 @@ table documents {
|
||||
source_type text [not null]
|
||||
source text [not null]
|
||||
file_id text
|
||||
parent_id varchar(255)
|
||||
user_id text [not null]
|
||||
client_id text
|
||||
editor_data jsonb
|
||||
@@ -206,6 +195,7 @@ table documents {
|
||||
source [name: 'documents_source_idx']
|
||||
file_type [name: 'documents_file_type_idx']
|
||||
file_id [name: 'documents_file_id_idx']
|
||||
parent_id [name: 'documents_parent_id_idx']
|
||||
(client_id, user_id) [name: 'documents_client_id_user_id_unique', unique]
|
||||
}
|
||||
}
|
||||
@@ -219,6 +209,7 @@ table files {
|
||||
size integer [not null]
|
||||
url text [not null]
|
||||
source text
|
||||
parent_id varchar(255)
|
||||
client_id text
|
||||
metadata jsonb
|
||||
chunk_task_id uuid
|
||||
@@ -229,6 +220,7 @@ table files {
|
||||
|
||||
indexes {
|
||||
file_hash [name: 'file_hash_idx']
|
||||
parent_id [name: 'files_parent_id_idx']
|
||||
(client_id, user_id) [name: 'files_client_id_user_id_unique', unique]
|
||||
}
|
||||
}
|
||||
@@ -660,6 +652,18 @@ table chunks {
|
||||
}
|
||||
}
|
||||
|
||||
table document_chunks {
|
||||
document_id varchar(30) [not null]
|
||||
chunk_id uuid [not null]
|
||||
page_index integer
|
||||
user_id text [not null]
|
||||
created_at "timestamp with time zone" [not null, default: `now()`]
|
||||
|
||||
indexes {
|
||||
(document_id, chunk_id) [pk]
|
||||
}
|
||||
}
|
||||
|
||||
table embeddings {
|
||||
id uuid [pk, not null, default: `gen_random_uuid()`]
|
||||
chunk_id uuid [unique]
|
||||
|
||||
@@ -11,7 +11,7 @@ tags:
|
||||
|
||||
# Using ComfyUI in LobeChat
|
||||
|
||||
<Image alt={'Using ComfyUI in LobeChat'} cover src={'https://github.com/lobehub/lobe-chat/assets/17870709/c9e5eafc-ca22-496b-a88d-cc0ae53bf720'} />
|
||||
<Image alt={'Using ComfyUI in LobeChat'} cover src={'https://hub-apac-1.lobeobjects.space/docs/e9b811f248a1db2bd1be1af888cf9b9d.png'} />
|
||||
|
||||
This documentation will guide you on how to use [ComfyUI](https://github.com/comfyanonymous/ComfyUI) in LobeChat for high-quality AI image generation and editing.
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ tags:
|
||||
|
||||
# 在 LobeChat 中使用 ComfyUI
|
||||
|
||||
<Image alt={'在 LobeChat 中使用 ComfyUI'} cover src={'https://github.com/lobehub/lobe-chat/assets/17870709/c9e5eafc-ca22-496b-a88d-cc0ae53bf720'} />
|
||||
<Image alt={'在 LobeChat 中使用 ComfyUI'} cover src={'https://hub-apac-1.lobeobjects.space/docs/e9b811f248a1db2bd1be1af888cf9b9d.png'} />
|
||||
|
||||
本文档将指导你如何在 LobeChat 中使用 [ComfyUI](https://github.com/comfyanonymous/ComfyUI) 进行高质量的 AI 图像生成和编辑。
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "قد يحتوي المحتوى على معلومات شخصية حساسة. لحماية الخصوصية، يرجى إزالة المعلومات الحساسة ثم المحاولة مرة أخرى.",
|
||||
"default": "تم حظر المحتوى: {{blockReason}}. يرجى تعديل طلبك ثم المحاولة مرة أخرى."
|
||||
},
|
||||
"InsufficientQuota": "عذرًا، لقد reached الحد الأقصى للحصة (quota) لهذه المفتاح، يرجى التحقق من رصيد الحساب الخاص بك أو زيادة حصة المفتاح ثم المحاولة مرة أخرى",
|
||||
"InsufficientQuota": "عذرًا، لقد تم الوصول إلى الحد الأقصى لحصة المفتاح (quota). يرجى التحقق من رصيد الحساب أو زيادة حصة المفتاح ثم المحاولة مرة أخرى.",
|
||||
"InvalidAccessCode": "كلمة المرور غير صحيحة أو فارغة، يرجى إدخال كلمة مرور الوصول الصحيحة أو إضافة مفتاح API مخصص",
|
||||
"InvalidBedrockCredentials": "فشلت مصادقة Bedrock، يرجى التحقق من AccessKeyId/SecretAccessKey وإعادة المحاولة",
|
||||
"InvalidClerkUser": "عذرًا، لم تقم بتسجيل الدخول بعد، يرجى تسجيل الدخول أو التسجيل للمتابعة",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "خطأ في استجابة الخادم لطلب الإضافة، يرجى التحقق من ملف وصف الإضافة وتكوين الإضافة وتنفيذ الخادم وفقًا لمعلومات الخطأ أدناه",
|
||||
"PluginSettingsInvalid": "تحتاج هذه الإضافة إلى تكوين صحيح قبل الاستخدام، يرجى التحقق من صحة تكوينك",
|
||||
"ProviderBizError": "طلب خدمة {{provider}} خاطئ، يرجى التحقق من المعلومات التالية أو إعادة المحاولة",
|
||||
"QuotaLimitReached": "عذرًا، لقد reached الحد الأقصى من استخدام الرموز أو عدد الطلبات لهذا المفتاح. يرجى زيادة حصة هذا المفتاح أو المحاولة لاحقًا.",
|
||||
"QuotaLimitReached": "عذرًا، لقد تم الوصول إلى الحد الأقصى لاستخدام الرموز (Token) أو عدد الطلبات لهذا المفتاح. يرجى زيادة حصة المفتاح أو المحاولة لاحقًا.",
|
||||
"StreamChunkError": "خطأ في تحليل كتلة الرسالة لطلب التدفق، يرجى التحقق مما إذا كانت واجهة برمجة التطبيقات الحالية تتوافق مع المعايير، أو الاتصال بمزود واجهة برمجة التطبيقات الخاصة بك للاستفسار.",
|
||||
"SubscriptionKeyMismatch": "نعتذر، بسبب عطل عرضي في النظام، فإن استخدام الاشتراك الحالي غير فعال مؤقتًا. يرجى النقر على الزر أدناه لاستعادة الاشتراك، أو مراسلتنا عبر البريد الإلكتروني للحصول على الدعم.",
|
||||
"SubscriptionPlanLimit": "لقد استنفدت نقاط اشتراكك، ولا يمكنك استخدام هذه الميزة. يرجى الترقية إلى خطة أعلى، أو تكوين واجهة برمجة التطبيقات للنموذج المخصص للاستمرار في الاستخدام",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "دليل التكوين",
|
||||
"responsesApi": {
|
||||
"desc": "استخدام معيار طلبات الجيل الجديد من OpenAI، لفتح ميزات متقدمة مثل سلسلة التفكير",
|
||||
"desc": "يعتمد تنسيق طلب الجيل الجديد من OpenAI، لتمكين ميزات متقدمة مثل سلسلة التفكير (مدعومة فقط من نماذج OpenAI)",
|
||||
"title": "استخدام معيار Responses API"
|
||||
},
|
||||
"waitingForMore": "المزيد من النماذج قيد <1>التخطيط للإدماج</1>، يرجى الانتظار"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 هو نموذج استدلال كبير الحجم مفتوح المصدر يعتمد على الانتباه المختلط، يحتوي على 456 مليار معلمة، حيث يمكن لكل رمز تفعيل حوالي 45.9 مليار معلمة. يدعم النموذج أصلاً سياقًا فائق الطول يصل إلى مليون رمز، ومن خلال آلية الانتباه السريع، يوفر 75% من العمليات الحسابية العائمة في مهام التوليد التي تصل إلى 100 ألف رمز مقارنة بـ DeepSeek R1. بالإضافة إلى ذلك، يعتمد MiniMax-M1 على بنية MoE (الخبراء المختلطون)، ويجمع بين خوارزمية CISPO وتصميم الانتباه المختلط لتدريب تعلم معزز فعال، محققًا أداءً رائدًا في الصناعة في استدلال الإدخالات الطويلة وسيناريوهات هندسة البرمجيات الحقيقية."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 يعيد تعريف الكفاءة للوكيل الذكي. إنه نموذج MoE مدمج وسريع وفعّال من حيث التكلفة، يحتوي على 230 مليار معلمة إجمالية و10 مليارات معلمة نشطة، وقد صُمم لتحقيق أداء رفيع المستوى في مهام الترميز والوكالة، مع الحفاظ على ذكاء عام قوي. بفضل 10 مليارات معلمة نشطة فقط، يقدم MiniMax-M2 أداءً يُضاهي النماذج الضخمة، مما يجعله خيارًا مثاليًا للتطبيقات عالية الكفاءة."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "يحتوي على 1 تريليون معلمة و32 مليار معلمة مفعلة. من بين النماذج غير المعتمدة على التفكير، يحقق مستويات متقدمة في المعرفة الحديثة، الرياضيات والبرمجة، ويتفوق في مهام الوكيل العامة. تم تحسينه بعناية لمهام الوكيل، لا يجيب فقط على الأسئلة بل يتخذ إجراءات. مثالي للدردشة العفوية، التجارب العامة والوكيل، وهو نموذج سريع الاستجابة لا يتطلب تفكيرًا طويلًا."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 يعزز بشكل كبير قدرة الاستدلال للنموذج حتى مع وجود بيانات تعليمية قليلة جدًا. قبل إخراج الإجابة النهائية، يقوم النموذج أولاً بإخراج سلسلة من التفكير لتحسين دقة الإجابة النهائية."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B هو نسخة مكثفة وأكثر كفاءة من نموذج Llama 70B. يحافظ على أداء قوي في مهام توليد النصوص مع تقليل استهلاك الحوسبة لتسهيل النشر والبحث. يتم تشغيله بواسطة Groq باستخدام وحدة معالجة اللغة المخصصة (LPU) لتوفير استدلال سريع وفعال."
|
||||
"description": "DeepSeek R1 Distill Llama 70B هو نموذج لغوي ضخم مبني على Llama3.3 70B، وقد تم تحسينه باستخدام نتائج DeepSeek R1، ليحقق أداءً تنافسيًا يعادل النماذج الرائدة الكبيرة."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B هو نموذج لغوي كبير مكرر يعتمد على Llama-3.1-8B-Instruct، تم تدريبه باستخدام مخرجات DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "مصمم خصيصًا للترميز الفعّال وتدفقات عمل الوكلاء."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 هو نموذج خبراء مختلط (MoE) مدمج وسريع وفعّال من حيث التكلفة، يحتوي على 230 مليار معلمة إجمالية و10 مليارات معلمة نشطة، صُمم لتحقيق أداء فائق في مهام الترميز والوكالة، مع الحفاظ على ذكاء عام قوي. يتميز هذا النموذج بأداء ممتاز في تحرير الملفات المتعددة، ودورة الترميز-التنفيذ-الإصلاح، والتحقق من الاختبارات والإصلاح، وسلاسل الأدوات المعقدة ذات الروابط الطويلة، مما يجعله خيارًا مثاليًا لسير عمل المطورين."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B هو نموذج حافة عالمي المستوى من Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Вашето съдържание може да съдържа чувствителна лична информация. За да защитите поверителността, моля, премахнете съответната чувствителна информация и опитайте отново.",
|
||||
"default": "Съдържанието е блокирано: {{blockReason}}。请调整您的请求内容后重试。"
|
||||
},
|
||||
"InsufficientQuota": "Съжаляваме, квотата за този ключ е достигнала лимита. Моля, проверете баланса на акаунта си или увеличете квотата на ключа и опитайте отново.",
|
||||
"InsufficientQuota": "Съжаляваме, но квотата за този ключ е изчерпана. Моля, проверете дали имате достатъчен баланс в акаунта си или увеличете квотата на ключа и опитайте отново.",
|
||||
"InvalidAccessCode": "Невалиден или празен код за достъп. Моля, въведете правилния код за достъп или добавете персонализиран API ключ.",
|
||||
"InvalidBedrockCredentials": "Удостоверяването на Bedrock е неуспешно. Моля, проверете AccessKeyId/SecretAccessKey и опитайте отново.",
|
||||
"InvalidClerkUser": "很抱歉,你当前尚未登录,请先登录或注册账号后继续操作",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Заявката към сървъра на плъгина върна грешка. Моля, проверете файла на манифеста на плъгина, конфигурацията на плъгина или изпълнението на сървъра въз основа на информацията за грешката по-долу",
|
||||
"PluginSettingsInvalid": "Този плъгин трябва да бъде конфигуриран правилно, преди да може да се използва. Моля, проверете дали конфигурацията ви е правилна",
|
||||
"ProviderBizError": "Грешка в услугата на {{provider}}, моля проверете следната информация или опитайте отново",
|
||||
"QuotaLimitReached": "Съжаляваме, но текущото използване на токени или брой на заявките е достигнало лимита на квотата за този ключ. Моля, увеличете квотата на ключа или опитайте отново по-късно.",
|
||||
"QuotaLimitReached": "Съжаляваме, но текущото използване на токени или броят на заявките е достигнало лимита на квотата за този ключ. Моля, увеличете квотата на ключа или опитайте отново по-късно.",
|
||||
"StreamChunkError": "Грешка при парсирането на съобщение от потокова заявка. Моля, проверете дали текущият API интерфейс отговаря на стандартите или се свържете с вашия доставчик на API за консултация.",
|
||||
"SubscriptionKeyMismatch": "Съжаляваме, но поради случайна системна грешка, текущото използване на абонамента временно е невалидно. Моля, кликнете върху бутона по-долу, за да възстановите абонамента, или се свържете с нас по имейл за поддръжка.",
|
||||
"SubscriptionPlanLimit": "Вашият абонаментен план е изчерпан, не можете да използвате тази функция. Моля, надстройте до по-висок план или конфигурирайте персонализиран модел API, за да продължите да използвате.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Ръководство за конфигуриране",
|
||||
"responsesApi": {
|
||||
"desc": "Използва новия формат на заявките на OpenAI, отключващ функции като вериги на мислене и други усъвършенствани възможности",
|
||||
"desc": "Използва новия формат за заявки на OpenAI, отключвайки разширени функции като вериги на мисълта (поддържа се само от моделите на OpenAI)",
|
||||
"title": "Използване на Responses API стандарта"
|
||||
},
|
||||
"waitingForMore": "Още модели са в <1>планиране</1>, моля, очаквайте"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 е мащабен модел за разсъждение с отворени тегла и смесено внимание, с 456 милиарда параметри, като всеки токен активира около 45.9 милиарда параметри. Моделът поддържа естествено контекст с дължина до 1 милион токена и чрез механизма за светкавично внимание спестява 75% от изчисленията при задачи с генериране на 100 хиляди токена в сравнение с DeepSeek R1. Освен това MiniMax-M1 използва MoE (смесен експертен) архитектура, комбинирайки CISPO алгоритъм и ефективно обучение с подсилване с дизайн на смесено внимание, постигащи водещи в индустрията резултати при дълги входни разсъждения и реални софтуерни инженерни сценарии."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 преосмисля ефективността на интелигентните агенти. Това е компактен, бърз и икономичен MoE модел с общо 230 милиарда параметъра и 10 милиарда активни параметъра, създаден за постигане на върхова производителност при кодиране и задачи, свързани с интелигентни агенти, като същевременно поддържа силен общ интелект. Със само 10 милиарда активни параметъра, MiniMax-M2 предлага производителност, сравнима с тази на мащабни модели, което го прави идеален избор за приложения с висока ефективност."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Общ брой параметри 1 трилион, активирани параметри 32 милиарда. Сред немисловните модели постига водещи резултати в областта на актуални знания, математика и кодиране, с по-добри възможности за универсални агентски задачи. Специално оптимизиран за агентски задачи, не само отговаря на въпроси, но и може да предприема действия. Най-подходящ за импровизирани, универсални разговори и агентски преживявания, модел с рефлексна скорост без нужда от дълго мислене."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 значително подобрява способността за разсъждение на модела дори с много малко анотирани данни. Преди да изведе окончателния отговор, моделът първо генерира мисловна верига, за да повиши точността на крайния отговор."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B е дистилиран и по-ефективен вариант на 70B Llama модела. Той запазва силна производителност при генериране на текст, намалявайки изчислителните разходи за по-лесно внедряване и изследване. Обслужва се от Groq с помощта на техния персонализиран хардуер за езикова обработка (LPU), осигурявайки бързо и ефективно разсъждение."
|
||||
"description": "DeepSeek R1 Distill Llama 70B е голям езиков модел, базиран на Llama3.3 70B, който използва фино настройване, извлечено от DeepSeek R1, за да постигне конкурентна производителност, съпоставима с водещите мащабни модели."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B е дестилиран голям езиков модел, базиран на Llama-3.1-8B-Instruct, обучен с изхода на DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Създаден специално за ефективно кодиране и работни потоци с агенти."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 е компактен, бърз и икономичен хибриден експертен (MoE) модел с общо 230 милиарда параметъра и 10 милиарда активни параметъра, създаден за постигане на върхова производителност при кодиране и задачи, свързани с интелигентни агенти, като същевременно поддържа силен общ интелект. Моделът се отличава с отлична работа при редактиране на множество файлове, затворен цикъл кодиране-изпълнение-поправка, тестване и валидиране на поправки, както и при сложни дълговерижни инструментални процеси, което го прави идеален избор за работния процес на разработчиците."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B е световен лидер сред моделите на Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Ihr Inhalt könnte sensible personenbezogene Daten enthalten. Zum Schutz der Privatsphäre entfernen Sie bitte diese Informationen und versuchen Sie es erneut.",
|
||||
"default": "Inhalt blockiert: {{blockReason}}. Bitte passen Sie Ihre Anfrage an und versuchen Sie es erneut."
|
||||
},
|
||||
"InsufficientQuota": "Es tut uns leid, das Kontingent (Quota) für diesen Schlüssel ist erreicht. Bitte überprüfen Sie Ihr Kontoguthaben oder erhöhen Sie das Kontingent des Schlüssels und versuchen Sie es erneut.",
|
||||
"InsufficientQuota": "Es tut uns leid, das Kontingent dieses Schlüssels wurde erreicht. Bitte überprüfen Sie, ob Ihr Kontostand ausreichend ist, oder erhöhen Sie das Kontingent des Schlüssels und versuchen Sie es erneut.",
|
||||
"InvalidAccessCode": "Das Passwort ist ungültig oder leer. Bitte geben Sie das richtige Zugangspasswort ein oder fügen Sie einen benutzerdefinierten API-Schlüssel hinzu.",
|
||||
"InvalidBedrockCredentials": "Die Bedrock-Authentifizierung ist fehlgeschlagen. Bitte überprüfen Sie AccessKeyId/SecretAccessKey und versuchen Sie es erneut.",
|
||||
"InvalidClerkUser": "Entschuldigung, du bist derzeit nicht angemeldet. Bitte melde dich an oder registriere ein Konto, um fortzufahren.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Fehler bei der Serveranfrage des Plugins. Bitte überprüfen Sie die Fehlerinformationen unten in Ihrer Plugin-Beschreibungsdatei, Plugin-Konfiguration oder Serverimplementierung",
|
||||
"PluginSettingsInvalid": "Das Plugin muss korrekt konfiguriert werden, um verwendet werden zu können. Bitte überprüfen Sie Ihre Konfiguration auf Richtigkeit",
|
||||
"ProviderBizError": "Fehler bei der Anforderung des {{provider}}-Dienstes. Bitte überprüfen Sie die folgenden Informationen oder versuchen Sie es erneut.",
|
||||
"QuotaLimitReached": "Es tut uns leid, die aktuelle Token-Nutzung oder die Anzahl der Anfragen hat das Kontingent (Quota) für diesen Schlüssel erreicht. Bitte erhöhen Sie das Kontingent für diesen Schlüssel oder versuchen Sie es später erneut.",
|
||||
"QuotaLimitReached": "Es tut uns leid, die Anzahl der Token oder Anfragen hat das Kontingent dieses Schlüssels erreicht. Bitte erhöhen Sie das Kontingent des Schlüssels oder versuchen Sie es später erneut.",
|
||||
"StreamChunkError": "Fehler beim Parsen des Nachrichtenchunks der Streaming-Anfrage. Bitte überprüfen Sie, ob die aktuelle API-Schnittstelle den Standards entspricht, oder wenden Sie sich an Ihren API-Anbieter.",
|
||||
"SubscriptionKeyMismatch": "Es tut uns leid, aufgrund eines vorübergehenden Systemfehlers ist das aktuelle Abonnement vorübergehend ungültig. Bitte klicken Sie auf die Schaltfläche unten, um das Abonnement wiederherzustellen, oder kontaktieren Sie uns per E-Mail für Unterstützung.",
|
||||
"SubscriptionPlanLimit": "Ihr Abonnementspunktestand ist erschöpft, Sie können diese Funktion nicht nutzen. Bitte upgraden Sie auf einen höheren Plan oder konfigurieren Sie die benutzerdefinierte Modell-API, um weiterhin zu verwenden.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Konfigurationsanleitung",
|
||||
"responsesApi": {
|
||||
"desc": "Verwendet das neue Anforderungsformat von OpenAI, um fortgeschrittene Funktionen wie Chain-of-Thought freizuschalten",
|
||||
"desc": "Verwendet das neue Anforderungsformat von OpenAI, um erweiterte Funktionen wie Chain-of-Thought freizuschalten (nur mit OpenAI-Modellen kompatibel)",
|
||||
"title": "Verwendung des Responses API-Standards"
|
||||
},
|
||||
"waitingForMore": "Weitere Modelle werden <1>geplant</1>, bitte warten Sie"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 ist ein groß angelegtes hybrides Aufmerksamkeits-Inferenzmodell mit offenen Gewichten, das 456 Milliarden Parameter umfasst und etwa 45,9 Milliarden Parameter pro Token aktiviert. Das Modell unterstützt nativ einen ultralangen Kontext von 1 Million Tokens und spart durch den Blitz-Attention-Mechanismus bei Aufgaben mit 100.000 Tokens im Vergleich zu DeepSeek R1 75 % der Fließkommaoperationen ein. Gleichzeitig verwendet MiniMax-M1 eine MoE-Architektur (Mixture of Experts) und kombiniert den CISPO-Algorithmus mit einem hybriden Aufmerksamkeitsdesign für effizientes verstärkendes Lernen, was in der Langzeiteingabe-Inferenz und realen Software-Engineering-Szenarien branchenführende Leistung erzielt."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 definiert Effizienz für Agenten neu. Es handelt sich um ein kompaktes, schnelles und kosteneffizientes MoE-Modell mit insgesamt 230 Milliarden Parametern und 10 Milliarden aktiven Parametern. Es wurde für Spitzenleistungen bei Codierungs- und Agentenaufgaben entwickelt und bewahrt gleichzeitig eine starke allgemeine Intelligenz. Mit nur 10 Milliarden aktiven Parametern bietet MiniMax-M2 eine Leistung, die mit groß angelegten Modellen vergleichbar ist, und ist damit die ideale Wahl für Anwendungen mit hohen Effizienzanforderungen."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Mit insgesamt 1 Billion Parametern und 32 Milliarden aktivierten Parametern erreicht dieses nicht-denkende Modell Spitzenleistungen in den Bereichen aktuelles Wissen, Mathematik und Programmierung und ist besonders für allgemeine Agentenaufgaben optimiert. Es wurde speziell für Agentenaufgaben verfeinert, kann nicht nur Fragen beantworten, sondern auch Aktionen ausführen. Ideal für spontane, allgemeine Gespräche und Agentenerfahrungen, ist es ein reflexartiges Modell ohne lange Denkzeiten."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 verbessert die Modellschlussfolgerungsfähigkeit erheblich, selbst bei sehr begrenzten annotierten Daten. Vor der Ausgabe der endgültigen Antwort generiert das Modell eine Denkprozesskette, um die Genauigkeit der Antwort zu erhöhen."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B ist eine destillierte, effizientere Variante des 70B Llama Modells. Es behält starke Leistung bei Textgenerierungsaufgaben bei und reduziert den Rechenaufwand für einfachere Bereitstellung und Forschung. Betrieben von Groq mit deren maßgeschneiderter Language Processing Unit (LPU) Hardware für schnelle und effiziente Inferenz."
|
||||
"description": "DeepSeek R1 Distill Llama 70B ist ein großes Sprachmodell auf Basis von Llama3.3 70B. Durch Feintuning mit den Ausgaben von DeepSeek R1 erreicht es eine konkurrenzfähige Leistung, die mit führenden Großmodellen vergleichbar ist."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B ist ein distilliertes großes Sprachmodell, das auf Llama-3.1-8B-Instruct basiert und durch Training mit den Ausgaben von DeepSeek R1 erstellt wurde."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Speziell entwickelt für effizientes Codieren und Agenten-Workflows."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 ist ein kompaktes, schnelles und kosteneffizientes Mixture-of-Experts (MoE)-Modell mit 230 Milliarden Gesamtparametern und 10 Milliarden aktiven Parametern. Es wurde für höchste Leistung bei Codierungs- und Agentenaufgaben entwickelt und bietet gleichzeitig eine starke allgemeine Intelligenz. Das Modell überzeugt bei Aufgaben wie der Bearbeitung mehrerer Dateien, dem Code-Ausführen-Fehlerbeheben-Zyklus, Testverifikation und -korrektur sowie bei komplexen, lang verknüpften Toolchains – und ist damit die ideale Wahl für Entwickler-Workflows."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B ist das weltbeste Edge-Modell von Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Your content may contain sensitive personally identifiable information (PII). To protect privacy, please remove any sensitive details and try again.",
|
||||
"default": "Content blocked: {{blockReason}}. Please adjust your request and try again."
|
||||
},
|
||||
"InsufficientQuota": "Sorry, the quota for this key has been reached. Please check your account balance or increase the key quota and try again.",
|
||||
"InsufficientQuota": "Sorry, the quota for this key has been reached. Please check if your account balance is sufficient or try again after increasing the key's quota.",
|
||||
"InvalidAccessCode": "Invalid access code or empty. Please enter the correct access code or add a custom API Key.",
|
||||
"InvalidBedrockCredentials": "Bedrock authentication failed. Please check the AccessKeyId/SecretAccessKey and retry.",
|
||||
"InvalidClerkUser": "Sorry, you are not currently logged in. Please log in or register an account to continue.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Plugin server request returned an error. Please check your plugin manifest file, plugin configuration, or server implementation based on the error information below",
|
||||
"PluginSettingsInvalid": "This plugin needs to be correctly configured before it can be used. Please check if your configuration is correct",
|
||||
"ProviderBizError": "Error requesting {{provider}} service, please troubleshoot or retry based on the following information",
|
||||
"QuotaLimitReached": "We apologize, but the current token usage or number of requests has reached the quota limit for this key. Please increase the quota for this key or try again later.",
|
||||
"QuotaLimitReached": "Sorry, the token usage or request count has reached the quota limit for this key. Please increase the key's quota or try again later.",
|
||||
"StreamChunkError": "Error parsing the message chunk of the streaming request. Please check if the current API interface complies with the standard specifications, or contact your API provider for assistance.",
|
||||
"SubscriptionKeyMismatch": "We apologize for the inconvenience. Due to a temporary system malfunction, your current subscription usage is inactive. Please click the button below to restore your subscription, or contact us via email for support.",
|
||||
"SubscriptionPlanLimit": "Your subscription points have been exhausted, and you cannot use this feature. Please upgrade to a higher plan or configure a custom model API to continue using it.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Configuration Guide",
|
||||
"responsesApi": {
|
||||
"desc": "Utilizes OpenAI's next-generation request format specification to unlock advanced features like chain of thought",
|
||||
"desc": "Uses OpenAI's next-generation request format specification to unlock advanced features like chain-of-thought (supported by OpenAI models only)",
|
||||
"title": "Use Responses API Specification"
|
||||
},
|
||||
"waitingForMore": "More models are currently <1>planned for integration</1>, please stay tuned"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 is a large-scale hybrid attention inference model with open-source weights, featuring 456 billion parameters, with approximately 45.9 billion parameters activated per token. The model natively supports ultra-long contexts of up to 1 million tokens and, through lightning attention mechanisms, reduces floating-point operations by 75% compared to DeepSeek R1 in tasks generating 100,000 tokens. Additionally, MiniMax-M1 employs a Mixture of Experts (MoE) architecture, combining the CISPO algorithm with an efficient reinforcement learning training design based on hybrid attention, achieving industry-leading performance in long-input inference and real-world software engineering scenarios."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 redefines efficiency for intelligent agents. It is a compact, fast, and cost-effective Mixture of Experts (MoE) model with 230 billion total parameters and 10 billion active parameters. Designed for top-tier performance in coding and agent tasks, it also maintains strong general intelligence. With only 10 billion active parameters, MiniMax-M2 delivers performance comparable to large-scale models, making it an ideal choice for high-efficiency applications."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "With a total of 1 trillion parameters and 32 billion activated parameters, this non-thinking model achieves top-tier performance in cutting-edge knowledge, mathematics, and coding, excelling in general agent tasks. It is carefully optimized for agent tasks, capable not only of answering questions but also taking actions. Ideal for improvisational, general chat, and agent experiences, it is a reflex-level model requiring no prolonged thinking."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 greatly improves model reasoning capabilities with minimal labeled data. Before outputting the final answer, the model first generates a chain of thought to enhance answer accuracy."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B is a distilled, more efficient variant of the 70B Llama model. It maintains strong performance on text generation tasks while reducing computational overhead for easier deployment and research. Served by Groq using its custom Language Processing Unit (LPU) hardware for fast, efficient inference."
|
||||
"description": "DeepSeek R1 Distill Llama 70B is a large language model based on Llama3.3 70B. Fine-tuned using outputs from DeepSeek R1, it achieves competitive performance on par with leading-edge large models."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B is a distilled large language model based on Llama-3.1-8B-Instruct, trained using outputs from DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Purpose-built for efficient coding and agent workflows."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 is a compact, fast, and cost-efficient Mixture of Experts (MoE) model with 230 billion total parameters and 10 billion active parameters. It is engineered for top performance in coding and agent tasks while maintaining robust general intelligence. Excelling in multi-file editing, code-run-debug loops, test validation and repair, and complex long-chain tool integrations, it is an ideal choice for developer workflows."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B is Mistral's top-tier edge model."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Su contenido podría contener información personal sensible. Para proteger la privacidad, elimine la información sensible y vuelva a intentarlo.",
|
||||
"default": "Contenido bloqueado: {{blockReason}}. Ajuste su solicitud y vuelva a intentarlo."
|
||||
},
|
||||
"InsufficientQuota": "Lo sentimos, la cuota de esta clave ha alcanzado su límite. Por favor, verifique si el saldo de su cuenta es suficiente o aumente la cuota de la clave y vuelva a intentarlo.",
|
||||
"InsufficientQuota": "Lo sentimos, la cuota de esta clave ha alcanzado su límite. Por favor, verifica si el saldo de tu cuenta es suficiente o aumenta la cuota de la clave antes de intentarlo nuevamente.",
|
||||
"InvalidAccessCode": "La contraseña no es válida o está vacía. Por favor, introduce una contraseña de acceso válida o añade una clave API personalizada",
|
||||
"InvalidBedrockCredentials": "La autenticación de Bedrock no se ha completado con éxito, por favor, verifica AccessKeyId/SecretAccessKey e inténtalo de nuevo",
|
||||
"InvalidClerkUser": "Lo siento mucho, actualmente no has iniciado sesión. Por favor, inicia sesión o regístrate antes de continuar.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Error al recibir la respuesta del servidor del complemento. Verifique el archivo de descripción del complemento, la configuración del complemento o la implementación del servidor según la información de error a continuación",
|
||||
"PluginSettingsInvalid": "Este complemento necesita una configuración correcta antes de poder usarse. Verifique si su configuración es correcta",
|
||||
"ProviderBizError": "Se produjo un error al solicitar el servicio de {{provider}}, por favor, revise la siguiente información o inténtelo de nuevo",
|
||||
"QuotaLimitReached": "Lo sentimos, el uso actual de tokens o el número de solicitudes ha alcanzado el límite de cuota de esta clave. Por favor, aumenta la cuota de esta clave o intenta de nuevo más tarde.",
|
||||
"QuotaLimitReached": "Lo sentimos, el uso de tokens o el número de solicitudes ha alcanzado el límite de cuota de esta clave. Por favor, aumenta la cuota de la clave o inténtalo más tarde.",
|
||||
"StreamChunkError": "Error de análisis del bloque de mensajes de la solicitud en streaming. Por favor, verifica si la API actual cumple con las normas estándar o contacta a tu proveedor de API para más información.",
|
||||
"SubscriptionKeyMismatch": "Lo sentimos, debido a un fallo ocasional del sistema, el uso de la suscripción actual ha dejado de ser válido temporalmente. Por favor, haga clic en el botón de abajo para restaurar la suscripción o contáctenos por correo electrónico para obtener soporte.",
|
||||
"SubscriptionPlanLimit": "Se han agotado sus puntos de suscripción, no puede utilizar esta función. Por favor, actualice a un plan superior o configure la API del modelo personalizado para continuar.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Guía de configuración",
|
||||
"responsesApi": {
|
||||
"desc": "Utiliza el nuevo formato de solicitud de OpenAI para desbloquear características avanzadas como cadenas de pensamiento",
|
||||
"desc": "Adopta el nuevo formato de solicitud de OpenAI, desbloqueando funciones avanzadas como la cadena de pensamiento (solo compatible con modelos de OpenAI)",
|
||||
"title": "Uso de la especificación Responses API"
|
||||
},
|
||||
"waitingForMore": "Más modelos están en <1>planificación de integración</1>, por favor, espera"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 es un modelo de inferencia de atención mixta a gran escala con pesos de código abierto, que cuenta con 456 mil millones de parámetros, activando aproximadamente 45.9 mil millones de parámetros por token. El modelo soporta de forma nativa contextos ultra largos de hasta 1 millón de tokens y, gracias a su mecanismo de atención relámpago, reduce en un 75 % las operaciones de punto flotante en tareas de generación de 100 mil tokens en comparación con DeepSeek R1. Además, MiniMax-M1 utiliza una arquitectura MoE (Mezcla de Expertos), combinando el algoritmo CISPO y un diseño de atención mixta para un entrenamiento eficiente mediante aprendizaje reforzado, logrando un rendimiento líder en la industria en inferencia con entradas largas y escenarios reales de ingeniería de software."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 redefine la eficiencia para los agentes inteligentes. Es un modelo MoE compacto, rápido y rentable, con un total de 230 mil millones de parámetros y 10 mil millones de parámetros activos. Está diseñado para ofrecer un rendimiento de primer nivel en tareas de codificación y agentes, manteniendo al mismo tiempo una inteligencia general sólida. Con solo 10 mil millones de parámetros activos, MiniMax-M2 ofrece un rendimiento comparable al de modelos a gran escala, lo que lo convierte en una opción ideal para aplicaciones de alta eficiencia."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Con un total de 1 billón de parámetros y 32 mil millones de parámetros activados, este modelo no reflexivo alcanza niveles de vanguardia en conocimiento avanzado, matemáticas y codificación, destacando en tareas generales de agentes. Optimizado para tareas de agentes, no solo responde preguntas sino que también puede actuar. Ideal para conversaciones improvisadas, chat general y experiencias de agentes, es un modelo de nivel reflexivo que no requiere largos tiempos de pensamiento."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 mejora enormemente la capacidad de razonamiento del modelo con muy pocos datos etiquetados. Antes de generar la respuesta final, el modelo produce una cadena de pensamiento para aumentar la precisión de la respuesta."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B es una variante destilada y más eficiente del modelo Llama de 70B. Mantiene un rendimiento sólido en tareas de generación de texto, reduciendo el costo computacional para facilitar su despliegue e investigación. Operado por Groq con su hardware personalizado de unidad de procesamiento de lenguaje (LPU) para ofrecer inferencia rápida y eficiente."
|
||||
"description": "DeepSeek R1 Distill Llama 70B es un modelo de lenguaje de gran escala basado en Llama3.3 70B. Este modelo ha sido ajustado finamente utilizando las salidas de DeepSeek R1, logrando un rendimiento competitivo comparable al de los modelos más avanzados del mercado."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B es un modelo de lenguaje grande destilado basado en Llama-3.1-8B-Instruct, entrenado utilizando la salida de DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Diseñado para una codificación eficiente y flujos de trabajo de agentes."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 es un modelo de expertos mixtos (MoE) compacto, rápido y rentable, con un total de 230 mil millones de parámetros y 10 mil millones de parámetros activos. Está diseñado para ofrecer un rendimiento de primer nivel en tareas de codificación y agentes, manteniendo una inteligencia general robusta. El modelo destaca en edición de múltiples archivos, ciclos cerrados de codificación-ejecución-corrección, verificación y corrección de pruebas, así como en complejas cadenas de herramientas de enlaces largos, lo que lo convierte en una opción ideal para los flujos de trabajo de los desarrolladores."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B es el modelo de borde de primer nivel mundial de Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "محتوای شما ممکن است شامل اطلاعات هویتی حساس فردی باشد. برای محافظت از حریم خصوصی، لطفاً اطلاعات حساس را حذف کرده و دوباره تلاش کنید.",
|
||||
"default": "محتوا مسدود شد: {{blockReason}}。لطفاً محتوای درخواست خود را اصلاح کرده و دوباره تلاش کنید."
|
||||
},
|
||||
"InsufficientQuota": "متأسفیم، سهمیه این کلید به حداکثر رسیده است، لطفاً موجودی حساب خود را بررسی کرده یا سهمیه کلید را افزایش دهید و دوباره تلاش کنید",
|
||||
"InsufficientQuota": "متأسفیم، سهمیه این کلید به حداکثر رسیده است. لطفاً موجودی حساب خود را بررسی کرده یا پس از افزایش سهمیه کلید دوباره تلاش کنید.",
|
||||
"InvalidAccessCode": "رمز عبور نادرست یا خالی است، لطفاً رمز عبور صحیح را وارد کنید یا API Key سفارشی اضافه کنید",
|
||||
"InvalidBedrockCredentials": "اعتبارسنجی Bedrock ناموفق بود، لطفاً AccessKeyId/SecretAccessKey را بررسی کرده و دوباره تلاش کنید",
|
||||
"InvalidClerkUser": "متأسفیم، شما هنوز وارد نشدهاید، لطفاً ابتدا وارد شوید یا ثبتنام کنید و سپس ادامه دهید",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "درخواست سرور افزونه با خطا مواجه شد، لطفاً بر اساس اطلاعات زیر فایل توصیف افزونه، پیکربندی افزونه یا پیادهسازی سرور را بررسی کنید",
|
||||
"PluginSettingsInvalid": "این افزونه نیاز به پیکربندی صحیح دارد تا قابل استفاده باشد، لطفاً پیکربندی خود را بررسی کنید",
|
||||
"ProviderBizError": "درخواست به سرویس {{provider}} با خطا مواجه شد، لطفاً بر اساس اطلاعات زیر بررسی کنید یا دوباره تلاش کنید",
|
||||
"QuotaLimitReached": "متأسفیم، میزان استفاده از توکن یا تعداد درخواستهای شما به حد مجاز این کلید رسیده است، لطفاً سهمیه کلید را افزایش دهید یا بعداً دوباره تلاش کنید",
|
||||
"QuotaLimitReached": "متأسفیم، میزان استفاده از توکن یا تعداد درخواستها به حداکثر سهمیه این کلید رسیده است. لطفاً سهمیه کلید را افزایش داده یا بعداً دوباره تلاش کنید.",
|
||||
"StreamChunkError": "خطا در تجزیه بلوک پیام درخواست جریانی، لطفاً بررسی کنید که آیا API فعلی با استانداردها مطابقت دارد یا با ارائهدهنده API خود تماس بگیرید",
|
||||
"SubscriptionKeyMismatch": "متأسفیم، به دلیل یک نقص موقتی در سیستم، مصرف فعلی اشتراک به طور موقت غیر فعال شده است. لطفاً بر روی دکمه زیر کلیک کنید تا اشتراک خود را بازیابی کنید، یا با ما از طریق ایمیل تماس بگیرید تا از ما پشتیبانی دریافت کنید.",
|
||||
"SubscriptionPlanLimit": "نقاط اشتراک شما تمام شده است و نمیتوانید از این ویژگی استفاده کنید. لطفاً به یک طرح بالاتر ارتقا دهید یا پس از پیکربندی API مدل سفارشی، به استفاده ادامه دهید.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "راهنمای پیکربندی",
|
||||
"responsesApi": {
|
||||
"desc": "استفاده از قالب درخواست نسل جدید OpenAI برای باز کردن ویژگیهای پیشرفته مانند زنجیره تفکر",
|
||||
"desc": "با استفاده از قالب جدید درخواست OpenAI، ویژگیهای پیشرفتهای مانند زنجیره تفکر فعال میشود (فقط برای مدلهای OpenAI پشتیبانی میشود)",
|
||||
"title": "استفاده از استاندارد Responses API"
|
||||
},
|
||||
"waitingForMore": "مدلهای بیشتری در حال <1>برنامهریزی برای اتصال</1> هستند، لطفاً منتظر بمانید"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 یک مدل استنتاج بزرگ با وزنهای متنباز و توجه ترکیبی است که دارای ۴۵۶ میلیارد پارامتر است و هر توکن میتواند حدود ۴۵.۹ میلیارد پارامتر را فعال کند. این مدل به طور بومی از زمینه بسیار طولانی ۱ میلیون توکن پشتیبانی میکند و با مکانیزم توجه سریع، در وظایف تولید ۱۰۰ هزار توکن نسبت به DeepSeek R1، ۷۵٪ از محاسبات نقطه شناور را صرفهجویی میکند. همچنین، MiniMax-M1 از معماری MoE (متخصصان ترکیبی) بهره میبرد و با ترکیب الگوریتم CISPO و طراحی توجه ترکیبی در آموزش تقویتی کارآمد، عملکرد پیشرو در صنعت را در استنتاج ورودیهای طولانی و سناریوهای واقعی مهندسی نرمافزار ارائه میدهد."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 بهرهوری را برای عاملهای هوشمند بازتعریف میکند. این یک مدل MoE فشرده، سریع و مقرونبهصرفه است که دارای ۲۳۰ میلیارد پارامتر کلی و ۱۰ میلیارد پارامتر فعال میباشد. این مدل برای ارائه عملکردی در سطح بالا در وظایف کدنویسی و عاملهای هوشمند طراحی شده است، در حالی که هوش عمومی قدرتمندی را نیز حفظ میکند. تنها با ۱۰ میلیارد پارامتر فعال، MiniMax-M2 عملکردی همتراز با مدلهای بسیار بزرگ ارائه میدهد و آن را به گزینهای ایدهآل برای کاربردهای با بهرهوری بالا تبدیل میکند."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "مدل با 1 تریلیون پارامتر کل و 32 میلیارد پارامتر فعال. در میان مدلهای غیرتفکری، در دانش پیشرفته، ریاضیات و برنامهنویسی در سطح برتر قرار دارد و در وظایف عامل عمومی تخصص دارد. به طور ویژه برای وظایف نمایندگی بهینه شده است، نه تنها قادر به پاسخگویی به سوالات بلکه قادر به انجام اقدامات است. بهترین گزینه برای گفتگوهای بداهه، چت عمومی و تجربههای نمایندگی است و یک مدل واکنشی بدون نیاز به تفکر طولانی مدت محسوب میشود."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 با داشتن دادههای برچسبخورده بسیار محدود، توانایی استدلال مدل را به طور چشمگیری افزایش داده است. قبل از ارائه پاسخ نهایی، مدل ابتدا یک زنجیره فکری را تولید میکند تا دقت پاسخ نهایی را بهبود بخشد."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B نسخه تقطیر شده و بهینهتر مدل 70B Llama است. این مدل در وظایف تولید متن عملکرد قوی خود را حفظ کرده و هزینه محاسباتی را کاهش داده تا استقرار و پژوهش را تسهیل کند. توسط Groq با استفاده از سختافزار واحد پردازش زبان سفارشی (LPU) ارائه میشود تا استدلال سریع و کارآمد فراهم کند."
|
||||
"description": "DeepSeek R1 Distill Llama 70B یک مدل زبان بزرگ مبتنی بر Llama3.3 70B است که با استفاده از خروجیهای تنظیمشده DeepSeek R1، به عملکردی رقابتی در سطح مدلهای پیشرفته بزرگ دست یافته است."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B یک مدل زبان بزرگ تقطیر شده مبتنی بر Llama-3.1-8B-Instruct است که با استفاده از خروجی DeepSeek R1 آموزش دیده است."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "ویژه طراحی شده برای کدنویسی کارآمد و جریانهای کاری عاملها."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 یک مدل فشرده، سریع و مقرونبهصرفه از نوع متخصصان ترکیبی (MoE) است که دارای ۲۳۰ میلیارد پارامتر کلی و ۱۰ میلیارد پارامتر فعال میباشد. این مدل برای ارائه عملکردی عالی در وظایف کدنویسی و عاملهای هوشمند طراحی شده و در عین حال هوش عمومی قدرتمندی را حفظ میکند. این مدل در ویرایش چندفایلی، چرخه کدنویسی-اجرا-اصلاح، آزمون و تصحیح، و زنجیره ابزارهای پیچیده و طولانی عملکردی برجسته دارد و گزینهای ایدهآل برای جریان کاری توسعهدهندگان محسوب میشود."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B مدل پیشرفته و برتر Mistral در سطح جهانی است."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Votre contenu peut contenir des informations personnelles sensibles. Pour protéger la vie privée, veuillez retirer ces informations sensibles puis réessayer.",
|
||||
"default": "Contenu bloqué : {{blockReason}}. Veuillez modifier votre demande et réessayer."
|
||||
},
|
||||
"InsufficientQuota": "Désolé, le quota de cette clé a atteint sa limite. Veuillez vérifier si le solde de votre compte est suffisant ou augmenter le quota de la clé avant de réessayer.",
|
||||
"InsufficientQuota": "Désolé, le quota associé à cette clé a été atteint. Veuillez vérifier si le solde de votre compte est suffisant ou augmenter le quota de la clé avant de réessayer.",
|
||||
"InvalidAccessCode": "Le mot de passe est incorrect ou vide. Veuillez saisir le mot de passe d'accès correct ou ajouter une clé API personnalisée.",
|
||||
"InvalidBedrockCredentials": "L'authentification Bedrock a échoué, veuillez vérifier AccessKeyId/SecretAccessKey et réessayer",
|
||||
"InvalidClerkUser": "Désolé, vous n'êtes pas actuellement connecté. Veuillez vous connecter ou vous inscrire avant de continuer.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Erreur de réponse du serveur du plugin. Veuillez vérifier le fichier de description du plugin, la configuration du plugin ou la mise en œuvre côté serveur en fonction des informations d'erreur ci-dessous",
|
||||
"PluginSettingsInvalid": "Ce plugin doit être correctement configuré avant de pouvoir être utilisé. Veuillez vérifier votre configuration",
|
||||
"ProviderBizError": "Erreur de service {{provider}}. Veuillez vérifier les informations suivantes ou réessayer.",
|
||||
"QuotaLimitReached": "Désolé, l'utilisation actuelle des tokens ou le nombre de requêtes a atteint la limite de quota de cette clé. Veuillez augmenter le quota de cette clé ou réessayer plus tard.",
|
||||
"QuotaLimitReached": "Désolé, la consommation de jetons ou le nombre de requêtes a atteint la limite de quota de cette clé. Veuillez augmenter le quota de la clé ou réessayer plus tard.",
|
||||
"StreamChunkError": "Erreur de parsing du bloc de message de la requête en streaming. Veuillez vérifier si l'API actuelle respecte les normes ou contacter votre fournisseur d'API pour des conseils.",
|
||||
"SubscriptionKeyMismatch": "Nous sommes désolés, en raison d'une défaillance système occasionnelle, l'utilisation actuelle de l'abonnement est temporairement inactive. Veuillez cliquer sur le bouton ci-dessous pour rétablir votre abonnement ou nous contacter par e-mail pour obtenir de l'aide.",
|
||||
"SubscriptionPlanLimit": "Votre quota d'abonnement est épuisé, vous ne pouvez pas utiliser cette fonctionnalité. Veuillez passer à un plan supérieur ou configurer l'API du modèle personnalisé pour continuer à l'utiliser.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Guide de configuration",
|
||||
"responsesApi": {
|
||||
"desc": "Utilise la nouvelle norme de format de requête d'OpenAI, débloquant des fonctionnalités avancées telles que les chaînes de pensée",
|
||||
"desc": "Adopte le nouveau format de requête de dernière génération d'OpenAI, permettant de débloquer des fonctionnalités avancées telles que la chaîne de pensée (pris en charge uniquement par les modèles OpenAI)",
|
||||
"title": "Utiliser la norme Responses API"
|
||||
},
|
||||
"waitingForMore": "D'autres modèles sont en <1>planification d'intégration</1>, restez à l'écoute"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 est un modèle d'inférence à attention mixte à grande échelle avec poids open source, comptant 456 milliards de paramètres, activant environ 45,9 milliards de paramètres par token. Le modèle supporte nativement un contexte ultra-long de 1 million de tokens et, grâce au mécanisme d'attention éclair, réduit de 75 % les opérations en virgule flottante lors de tâches de génération de 100 000 tokens par rapport à DeepSeek R1. Par ailleurs, MiniMax-M1 utilise une architecture MoE (Experts Mixtes), combinant l'algorithme CISPO et une conception d'attention mixte pour un entraînement efficace par apprentissage par renforcement, offrant des performances de pointe dans l'inférence sur longues entrées et les scénarios réels d'ingénierie logicielle."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 redéfinit l'efficacité pour les agents intelligents. Il s'agit d'un modèle MoE compact, rapide et économique, doté de 230 milliards de paramètres totaux et de 10 milliards de paramètres actifs, conçu pour offrir des performances de pointe dans les tâches de codage et d'agents, tout en conservant une intelligence générale puissante. Avec seulement 10 milliards de paramètres actifs, MiniMax-M2 offre des performances comparables à celles des modèles de grande taille, ce qui en fait un choix idéal pour les applications à haute efficacité."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Avec un total de 1 000 milliards de paramètres et 32 milliards de paramètres activés, ce modèle non cognitif atteint un niveau de pointe en connaissances avancées, mathématiques et codage, excelling dans les tâches d'agents généraux. Optimisé pour les tâches d'agents, il peut non seulement répondre aux questions mais aussi agir. Idéal pour les conversations improvisées, générales et les expériences d'agents, c'est un modèle réflexe ne nécessitant pas de longues réflexions."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 améliore considérablement les capacités de raisonnement du modèle avec très peu de données annotées. Avant de fournir la réponse finale, le modèle génère une chaîne de pensée pour améliorer la précision de la réponse."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B est une variante distillée et plus efficace du modèle Llama 70B. Il conserve de solides performances en génération de texte tout en réduisant les coûts de calcul pour faciliter le déploiement et la recherche. Il est servi par Groq avec son matériel personnalisé LPU pour un raisonnement rapide et efficace."
|
||||
"description": "DeepSeek R1 Distill Llama 70B est un grand modèle de langage basé sur Llama3.3 70B. Grâce au fine-tuning réalisé à partir des sorties de DeepSeek R1, il atteint des performances compétitives comparables à celles des modèles de pointe de grande envergure."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B est un modèle de langage distillé basé sur Llama-3.1-8B-Instruct, entraîné en utilisant les sorties de DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Conçu pour un codage efficace et des flux de travail d'agents performants."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 est un modèle MoE (Mixture of Experts) compact, rapide et économique, doté de 230 milliards de paramètres totaux et de 10 milliards de paramètres actifs. Il est conçu pour offrir des performances optimales dans les tâches de codage et d'agents, tout en maintenant une intelligence générale robuste. Ce modèle excelle dans l'édition multi-fichiers, les boucles de codage-exécution-correction, la vérification et la correction de tests, ainsi que dans les chaînes d'outils complexes à long terme, ce qui en fait un choix idéal pour les flux de travail des développeurs."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B est le modèle de pointe de Mistral sur le marché."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Il tuo contenuto potrebbe contenere informazioni personali sensibili. Per proteggere la privacy, rimuovi tali informazioni e riprova.",
|
||||
"default": "Contenuto bloccato: {{blockReason}}. Modifica la richiesta e riprova."
|
||||
},
|
||||
"InsufficientQuota": "Ci dispiace, la quota per questa chiave ha raggiunto il limite. Si prega di controllare il saldo dell'account o di aumentare la quota della chiave e riprovare.",
|
||||
"InsufficientQuota": "Siamo spiacenti, la quota associata a questa chiave ha raggiunto il limite. Verifica che il saldo del tuo account sia sufficiente oppure aumenta la quota della chiave e riprova.",
|
||||
"InvalidAccessCode": "Password incorrect or empty, please enter the correct access password, or add a custom API Key",
|
||||
"InvalidBedrockCredentials": "Autenticazione Bedrock non riuscita, controlla AccessKeyId/SecretAccessKey e riprova",
|
||||
"InvalidClerkUser": "Spiacenti, al momento non hai effettuato l'accesso. Per favore, effettua l'accesso o registrati prima di continuare.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Errore nella risposta del server del plugin. Verifica il file descrittivo del plugin, la configurazione del plugin o l'implementazione del server",
|
||||
"PluginSettingsInvalid": "Il plugin deve essere configurato correttamente prima di poter essere utilizzato. Verifica che la tua configurazione sia corretta",
|
||||
"ProviderBizError": "Errore di business del fornitore {{provider}}. Si prega di controllare le informazioni seguenti o riprovare.",
|
||||
"QuotaLimitReached": "Ci dispiace, l'uso attuale dei token o il numero di richieste ha raggiunto il limite di quota per questa chiave. Si prega di aumentare la quota di questa chiave o riprovare più tardi.",
|
||||
"QuotaLimitReached": "Siamo spiacenti, l'utilizzo dei token o il numero di richieste ha raggiunto il limite della quota per questa chiave. Aumenta la quota della chiave o riprova più tardi.",
|
||||
"StreamChunkError": "Erro di analisi del blocco di messaggi della richiesta in streaming. Controlla se l'interfaccia API attuale è conforme agli standard o contatta il tuo fornitore di API per ulteriori informazioni.",
|
||||
"SubscriptionKeyMismatch": "Ci scusiamo, ma a causa di un'imprevista anomalia di sistema, l'attuale utilizzo dell'abbonamento è temporaneamente non valido. Si prega di fare clic sul pulsante qui sotto per ripristinare l'abbonamento o contattarci via email per ricevere supporto.",
|
||||
"SubscriptionPlanLimit": "I tuoi punti di abbonamento sono esauriti, non puoi utilizzare questa funzione. Ti preghiamo di passare a un piano superiore o di configurare un modello API personalizzato per continuare a utilizzare.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Guida alla configurazione",
|
||||
"responsesApi": {
|
||||
"desc": "Utilizza il nuovo formato di richiesta di OpenAI per sbloccare funzionalità avanzate come la catena di pensiero",
|
||||
"desc": "Utilizza il nuovo formato di richiesta di OpenAI per sbloccare funzionalità avanzate come la catena di pensiero (supportato solo dai modelli OpenAI)",
|
||||
"title": "Utilizza lo standard Responses API"
|
||||
},
|
||||
"waitingForMore": "Altri modelli sono in fase di <1>implementazione</1>, resta sintonizzato"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 è un modello di inferenza a grande scala con pesi open source e attenzione mista, con 456 miliardi di parametri, di cui circa 45,9 miliardi attivati per ogni token. Il modello supporta nativamente un contesto ultra-lungo di 1 milione di token e, grazie al meccanismo di attenzione lampo, riduce del 75% il carico computazionale in operazioni floating point rispetto a DeepSeek R1 in compiti di generazione con 100.000 token. Inoltre, MiniMax-M1 adotta un'architettura MoE (Mixture of Experts), combinando l'algoritmo CISPO e un design di attenzione mista per un addestramento efficiente tramite apprendimento rinforzato, raggiungendo prestazioni leader nel settore per inferenze con input lunghi e scenari reali di ingegneria software."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 ridefinisce l'efficienza per gli agenti intelligenti. È un modello MoE compatto, veloce ed economico, con 230 miliardi di parametri totali e 10 miliardi di parametri attivi, progettato per offrire prestazioni di alto livello nei compiti di codifica e agenti, mantenendo al contempo una solida intelligenza generale. Con soli 10 miliardi di parametri attivi, MiniMax-M2 offre prestazioni paragonabili a quelle dei modelli su larga scala, rendendolo la scelta ideale per applicazioni ad alta efficienza."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Con un totale di 1 trilione di parametri e 32 miliardi di parametri attivi, questo modello non pensante raggiunge livelli d'eccellenza in conoscenze all'avanguardia, matematica e programmazione, ed è particolarmente adatto a compiti di agenti generici. Ottimizzato per attività di agenti, non solo risponde a domande ma può anche agire. Ideale per chat improvvisate, conversazioni generiche e esperienze di agenti, è un modello riflessivo che non richiede lunghi tempi di elaborazione."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 migliora notevolmente la capacità di ragionamento del modello anche con pochissimi dati annotati. Prima di fornire la risposta finale, il modello genera una catena di pensieri per aumentare la precisione della risposta."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B è una variante distillata e più efficiente del modello Llama da 70B. Mantiene prestazioni robuste nelle attività di generazione testuale, riducendo il carico computazionale per facilitare il deployment e la ricerca. Servito da Groq con il suo hardware personalizzato Language Processing Unit (LPU) per inferenze rapide ed efficienti."
|
||||
"description": "DeepSeek R1 Distill Llama 70B è un modello linguistico di grandi dimensioni basato su Llama3.3 70B. Grazie al fine-tuning effettuato con l'output di DeepSeek R1, il modello raggiunge prestazioni competitive paragonabili a quelle dei modelli all'avanguardia di grandi dimensioni."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B è un modello di linguaggio distillato basato su Llama-3.1-8B-Instruct, addestrato utilizzando l'output di DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Progettato per una codifica efficiente e flussi di lavoro con agenti."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 è un modello MoE (Mixture of Experts) compatto, veloce ed economico, con 230 miliardi di parametri totali e 10 miliardi di parametri attivi, progettato per offrire prestazioni eccellenti nei compiti di codifica e agenti, mantenendo una forte intelligenza generale. Si distingue per le sue prestazioni in attività come l'editing di file multipli, il ciclo chiuso codifica-esecuzione-correzione, la verifica e correzione dei test, e le complesse catene di strumenti a collegamento lungo, rendendolo una scelta ideale per i flussi di lavoro degli sviluppatori."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B è il modello di punta di Mistral per edge computing."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "コンテンツに個人の機密情報(SPII)が含まれている可能性があります。プライバシー保護のため、該当する機密情報を削除してから再度お試しください。",
|
||||
"default": "コンテンツがブロックされました:{{blockReason}}。リクエスト内容を調整してから再度お試しください。"
|
||||
},
|
||||
"InsufficientQuota": "申し訳ありませんが、そのキーのクォータが上限に達しました。アカウントの残高を確認するか、キーのクォータを増やしてから再試行してください。",
|
||||
"InsufficientQuota": "申し訳ありませんが、このキーのクォータが上限に達しました。アカウントの残高をご確認いただくか、キーのクォータを増やしてから再度お試しください。",
|
||||
"InvalidAccessCode": "パスワードが正しくないか空です。正しいアクセスパスワードを入力するか、カスタムAPIキーを追加してください",
|
||||
"InvalidBedrockCredentials": "Bedrockの認証に失敗しました。AccessKeyId/SecretAccessKeyを確認してから再試行してください。",
|
||||
"InvalidClerkUser": "申し訳ありませんが、現在ログインしていません。続行するにはログインまたはアカウント登録を行ってください",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "プラグインサーバーのリクエストエラーが発生しました。以下のエラーメッセージを参考に、プラグインのマニフェストファイル、設定、サーバー実装を確認してください",
|
||||
"PluginSettingsInvalid": "このプラグインを使用するには、正しい設定が必要です。設定が正しいかどうか確認してください",
|
||||
"ProviderBizError": "リクエスト {{provider}} サービスでエラーが発生しました。以下の情報を確認して再試行してください。",
|
||||
"QuotaLimitReached": "申し訳ありませんが、現在のトークン使用量またはリクエスト回数がこのキーのクォータ上限に達しました。キーのクォータを増やすか、後でもう一度お試しください。",
|
||||
"QuotaLimitReached": "申し訳ありませんが、現在のトークン使用量またはリクエスト回数がこのキーのクォータ上限に達しています。キーのクォータを増やすか、しばらくしてから再度お試しください。",
|
||||
"StreamChunkError": "ストリーミングリクエストのメッセージブロック解析エラーです。現在のAPIインターフェースが標準仕様に準拠しているか確認するか、APIプロバイダーにお問い合わせください。",
|
||||
"SubscriptionKeyMismatch": "申し訳ありませんが、システムの一時的な障害により、現在のサブスクリプションの使用量が一時的に無効になっています。下のボタンをクリックしてサブスクリプションを復元するか、サポートを受けるためにメールでお問い合わせください。",
|
||||
"SubscriptionPlanLimit": "あなたのサブスクリプションポイントは使い果たされました。この機能を使用することはできません。より高いプランにアップグレードするか、カスタムモデルAPIを設定して引き続き使用してください。",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "設定ガイド",
|
||||
"responsesApi": {
|
||||
"desc": "OpenAIの新世代リクエストフォーマット規格を採用し、チェーン思考などの高度な機能を解放します",
|
||||
"desc": "OpenAI の次世代リクエスト形式仕様を採用し、思考チェーンなどの高度な機能を解放します(OpenAI モデルのみ対応)",
|
||||
"title": "Responses API 規格の使用"
|
||||
},
|
||||
"waitingForMore": "さらに多くのモデルが <1>接続予定</1> です。お楽しみに"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1はオープンソースの重みを持つ大規模混合注意力推論モデルで、4560億のパラメータを有し、各トークンで約459億のパラメータが活性化されます。モデルは100万トークンの超長文コンテキストをネイティブにサポートし、ライトニングアテンション機構により10万トークンの生成タスクでDeepSeek R1と比べて75%の浮動小数点演算量を削減します。また、MiniMax-M1はMoE(混合エキスパート)アーキテクチャを採用し、CISPOアルゴリズムと混合注意力設計による効率的な強化学習トレーニングを組み合わせ、長文入力推論および実際のソフトウェア工学シナリオで業界最高の性能を実現しています。"
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 は、エージェントの効率性を再定義するコンパクトで高速かつコスト効率に優れた MoE(Mixture of Experts)モデルです。総パラメータ数は2,300億、アクティブパラメータは100億で、コーディングやエージェントタスクにおいて最高レベルの性能を発揮しつつ、強力な汎用知能を維持します。わずか100億のアクティブパラメータで、大規模モデルに匹敵する性能を実現しており、高効率なアプリケーションに最適な選択肢です。"
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "総パラメータ数1兆、活性化パラメータ320億。非思考モデルの中で、先端知識、数学、コーディングにおいてトップレベルの性能を持ち、汎用エージェントタスクに優れています。エージェントタスクに特化して最適化されており、質問に答えるだけでなく行動も可能です。即興的で汎用的なチャットやエージェント体験に最適で、長時間の思考を必要としない反射的モデルです。"
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1は極めて少ないラベル付きデータでモデルの推論能力を大幅に向上させました。最終回答を出力する前に、モデルは思考の連鎖を出力し、最終答えの正確性を高めます。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B は 70B Llama モデルの蒸留版で、より効率的な変種です。テキスト生成タスクで強力な性能を維持しつつ、計算コストを削減し、展開や研究に適しています。Groq のカスタム言語処理ユニット(LPU)ハードウェアでサービス提供され、高速かつ効率的な推論を実現します。"
|
||||
"description": "DeepSeek R1 Distill Llama 70B は、Llama3.3 70B をベースにした大規模言語モデルであり、DeepSeek R1 によるファインチューニングを通じて、最先端の大規模モデルに匹敵する競争力のある性能を実現しています。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8BはLlama-3.1-8B-Instructに基づく蒸留大言語モデルで、DeepSeek R1の出力を使用してトレーニングされています。"
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "効率的なコーディングとエージェントワークフローのために設計されたモデルです。"
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 は、コンパクトで高速、かつコスト効率に優れた混合エキスパート(MoE)モデルで、総パラメータ数は2,300億、アクティブパラメータは100億です。コーディングやエージェントタスクにおいて最高の性能を発揮しながら、強力な汎用知能を維持します。複数ファイルの編集、コードの実行と修正のループ、テストによる検証と修復、複雑な長距離ツールチェーンの処理において優れた性能を示し、開発者のワークフローに最適なモデルです。"
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3BはMistralの世界トップクラスのエッジモデルです。"
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "콘텐츠에 민감한 개인 신원 정보가 포함되어 있을 수 있습니다. 개인정보 보호를 위해 해당 민감 정보를 제거한 뒤 다시 시도하세요.",
|
||||
"default": "내용이 차단되었습니다: {{blockReason}}. 요청 내용을 조정한 후 다시 시도하세요."
|
||||
},
|
||||
"InsufficientQuota": "죄송합니다. 해당 키의 할당량이 초과되었습니다. 계좌 잔액이 충분한지 확인하거나 키 할당량을 늘린 후 다시 시도해 주십시오.",
|
||||
"InsufficientQuota": "죄송합니다. 해당 키의 할당량이 초과되었습니다. 계정 잔액이 충분한지 확인하거나 키의 할당량을 늘린 후 다시 시도해 주세요.",
|
||||
"InvalidAccessCode": "액세스 코드가 잘못되었거나 비어 있습니다. 올바른 액세스 코드를 입력하거나 사용자 지정 API 키를 추가하십시오.",
|
||||
"InvalidBedrockCredentials": "Bedrock 인증에 실패했습니다. AccessKeyId/SecretAccessKey를 확인한 후 다시 시도하십시오.",
|
||||
"InvalidClerkUser": "죄송합니다. 현재 로그인되어 있지 않습니다. 계속하려면 먼저 로그인하거나 계정을 등록해주세요.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "플러그인 서버 요청이 오류로 반환되었습니다. 플러그인 설명 파일, 플러그인 구성 또는 서버 구현을 확인해주세요.",
|
||||
"PluginSettingsInvalid": "플러그인을 사용하려면 올바른 구성이 필요합니다. 구성이 올바른지 확인해주세요.",
|
||||
"ProviderBizError": "요청한 {{provider}} 서비스에서 오류가 발생했습니다. 아래 정보를 확인하고 다시 시도해주세요.",
|
||||
"QuotaLimitReached": "죄송합니다. 현재 토큰 사용량 또는 요청 횟수가 해당 키의 할당량 한도에 도달했습니다. 해당 키의 할당량을 늘리거나 나중에 다시 시도해 주십시오.",
|
||||
"QuotaLimitReached": "죄송합니다. 현재 토큰 사용량 또는 요청 횟수가 해당 키의 할당량 한도에 도달했습니다. 키의 할당량을 늘리거나 잠시 후 다시 시도해 주세요.",
|
||||
"StreamChunkError": "스트리밍 요청의 메시지 블록 구문 분석 오류입니다. 현재 API 인터페이스가 표준 규격에 부합하는지 확인하거나 API 공급자에게 문의하십시오.",
|
||||
"SubscriptionKeyMismatch": "죄송합니다. 시스템의 일시적인 오류로 인해 현재 구독 사용량이 일시적으로 비활성화되었습니다. 아래 버튼을 클릭하여 구독을 복구하시거나, 이메일로 저희에게 지원을 요청해 주시기 바랍니다.",
|
||||
"SubscriptionPlanLimit": "귀하의 구독 포인트가 소진되어 이 기능을 사용할 수 없습니다. 더 높은 요금제로 업그레이드하거나 사용자 정의 모델 API를 구성한 후 계속 사용하십시오.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "설정 가이드",
|
||||
"responsesApi": {
|
||||
"desc": "OpenAI의 차세대 요청 형식 규격을 사용하여 Chain of Thought 등 고급 기능을 활성화합니다",
|
||||
"desc": "OpenAI의 차세대 요청 형식 규격을 사용하여, 사고의 흐름 등 고급 기능을 활성화합니다 (OpenAI 모델에서만 지원됨)",
|
||||
"title": "Responses API 규격 사용"
|
||||
},
|
||||
"waitingForMore": "더 많은 모델이 <1>도입 예정</1>입니다. 기대해 주세요"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1은 오픈 소스 가중치를 가진 대규모 혼합 주의 추론 모델로, 4,560억 개의 파라미터를 보유하고 있으며, 각 토큰당 약 459억 개의 파라미터가 활성화됩니다. 모델은 100만 토큰의 초장기 문맥을 원활히 지원하며, 번개 주의 메커니즘을 통해 10만 토큰 생성 작업에서 DeepSeek R1 대비 75%의 부동 소수점 연산량을 절감합니다. 또한 MiniMax-M1은 MoE(혼합 전문가) 아키텍처를 채택하고, CISPO 알고리즘과 혼합 주의 설계가 결합된 효율적인 강화 학습 훈련을 통해 긴 입력 추론과 실제 소프트웨어 엔지니어링 환경에서 업계 선도적인 성능을 구현합니다."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2는 에이전트를 위한 효율성을 새롭게 정의합니다. 이 모델은 2,300억 개의 총 파라미터와 100억 개의 활성 파라미터를 갖춘 컴팩트하고 빠르며 경제적인 MoE(Mixture of Experts) 모델로, 코딩 및 에이전트 작업에서 최고의 성능을 발휘하도록 설계되었으며, 강력한 범용 인공지능을 유지합니다. 단 100억 개의 활성 파라미터만으로도 대규모 모델에 필적하는 성능을 제공하여, 고효율 애플리케이션에 이상적인 선택이 됩니다."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "총 파라미터 1조, 활성화 파라미터 320억. 비사고 모델 중에서 최첨단 지식, 수학, 코딩 분야에서 최고 수준을 달성했으며, 범용 에이전트 작업에 더 강합니다. 에이전트 작업에 최적화되어 질문에 답변할 뿐만 아니라 행동도 수행할 수 있습니다. 즉흥적이고 범용적인 대화 및 에이전트 경험에 가장 적합하며, 장시간 사고가 필요 없는 반사 수준 모델입니다."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1은 매우 적은 라벨 데이터만으로도 모델 추론 능력을 크게 향상시켰습니다. 최종 답변 출력 전에 모델이 사고 과정(chain-of-thought)을 먼저 출력하여 최종 답변의 정확도를 높입니다."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B는 70B Llama 모델의 증류 및 더 효율적인 변형입니다. 텍스트 생성 작업에서 강력한 성능을 유지하면서 배포 및 연구를 위한 계산 비용을 줄였습니다. Groq의 맞춤형 언어 처리 유닛(LPU) 하드웨어를 사용하여 빠르고 효율적인 추론을 제공합니다."
|
||||
"description": "DeepSeek R1 Distill Llama 70B는 Llama3.3 70B를 기반으로 한 대형 언어 모델로, DeepSeek R1의 출력으로 미세 조정되어 최첨단 대형 모델과 견줄 수 있는 경쟁력 있는 성능을 구현합니다."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B는 Llama-3.1-8B-Instruct를 기반으로 한 증류 대형 언어 모델로, DeepSeek R1의 출력을 사용하여 훈련되었습니다."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "효율적인 코딩과 에이전트 워크플로우를 위해 설계되었습니다."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2는 2,300억 개의 총 파라미터와 100억 개의 활성 파라미터를 갖춘 컴팩트하고 빠르며 경제적인 혼합 전문가(MoE) 모델로, 코딩 및 에이전트 작업에서 최고의 성능을 발휘하도록 설계되었으며, 강력한 범용 인공지능을 유지합니다. 이 모델은 다중 파일 편집, 코드 실행-수정의 루프, 테스트 기반 검증 및 수정, 복잡한 장기 연결 툴체인 등에서 뛰어난 성능을 보여주며, 개발자 워크플로우에 이상적인 선택입니다."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B는 Mistral의 세계적 수준의 엣지 모델입니다."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Uw inhoud kan gevoelige persoonlijke identificatiegegevens bevatten. Verwijder dergelijke gevoelige gegevens om de privacy te beschermen en probeer het opnieuw.",
|
||||
"default": "Inhoud geblokkeerd: {{blockReason}}. Pas uw verzoek aan en probeer het opnieuw."
|
||||
},
|
||||
"InsufficientQuota": "Het spijt ons, de quotum van deze sleutel is bereikt. Controleer of uw account voldoende saldo heeft of vergroot het sleutelquotum en probeer het opnieuw.",
|
||||
"InsufficientQuota": "Het spijt ons, het quotum voor deze sleutel is bereikt. Controleer of het saldo van uw account toereikend is of verhoog het quotum van de sleutel en probeer het opnieuw.",
|
||||
"InvalidAccessCode": "Ongeldige toegangscode: het wachtwoord is onjuist of leeg. Voer de juiste toegangscode in of voeg een aangepaste API-sleutel toe.",
|
||||
"InvalidBedrockCredentials": "Bedrock authentication failed, please check AccessKeyId/SecretAccessKey and retry",
|
||||
"InvalidClerkUser": "Sorry, you are not currently logged in. Please log in or register an account to continue.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Fout bij serverrespons voor plug-in. Controleer de foutinformatie hieronder voor uw plug-inbeschrijvingsbestand, plug-inconfiguratie of serverimplementatie",
|
||||
"PluginSettingsInvalid": "Deze plug-in moet correct geconfigureerd zijn voordat deze kan worden gebruikt. Controleer of uw configuratie juist is",
|
||||
"ProviderBizError": "Er is een fout opgetreden bij het aanvragen van de {{provider}}-service. Controleer de volgende informatie of probeer het opnieuw.",
|
||||
"QuotaLimitReached": "Het spijt ons, het huidige tokenverbruik of het aantal verzoeken heeft de quota-limiet van deze sleutel bereikt. Verhoog de quota van deze sleutel of probeer het later opnieuw.",
|
||||
"QuotaLimitReached": "Het spijt ons, het aantal tokens of verzoeken heeft het quotum voor deze sleutel bereikt. Verhoog het quotum van de sleutel of probeer het later opnieuw.",
|
||||
"StreamChunkError": "Fout bij het parseren van het berichtblok van de streamingaanroep. Controleer of de huidige API-interface voldoet aan de standaardnormen, of neem contact op met uw API-leverancier voor advies.",
|
||||
"SubscriptionKeyMismatch": "Het spijt ons, maar door een tijdelijke systeemfout is het huidige abonnement tijdelijk ongeldig. Klik op de onderstaande knop om het abonnement te herstellen, of neem contact met ons op via e-mail voor ondersteuning.",
|
||||
"SubscriptionPlanLimit": "Uw abonnementscredits zijn op, u kunt deze functie niet gebruiken. Upgrade naar een hoger plan of configureer de aangepaste model-API om door te gaan.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Configuratiehandleiding",
|
||||
"responsesApi": {
|
||||
"desc": "Gebruik de nieuwe generatie OpenAI-aanvraagformaatstandaard om geavanceerde functies zoals keten van gedachten te ontgrendelen",
|
||||
"desc": "Maakt gebruik van het nieuwe generatie aanvraagformaat van OpenAI om geavanceerde functies zoals Chain of Thought te ontgrendelen (alleen ondersteund door OpenAI-modellen)",
|
||||
"title": "Gebruik Responses API-standaard"
|
||||
},
|
||||
"waitingForMore": "Meer modellen zijn in <1>planning voor integratie</1>, blijf op de hoogte"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 is een open-source gewichtenschaalmodel met gemengde aandacht, met 456 miljard parameters, waarbij elke token ongeveer 45,9 miljard parameters activeert. Het model ondersteunt native een ultralange context van 1 miljoen tokens en bespaart dankzij het bliksemaandachtmechanisme 75% van de floating-point-bewerkingen bij generatietaken van 100.000 tokens vergeleken met DeepSeek R1. Tegelijkertijd maakt MiniMax-M1 gebruik van een MoE (Mixture of Experts) architectuur, gecombineerd met het CISPO-algoritme en een efficiënt versterkend leermodel met gemengde aandacht, wat leidt tot toonaangevende prestaties bij lange invoerredenering en echte software-engineering scenario's."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 herdefinieert efficiëntie voor agents. Het is een compact, snel en kosteneffectief MoE-model met 230 miljard totale parameters en 10 miljard actieve parameters. Het is ontworpen voor topprestaties bij codering en agenttaken, terwijl het een sterke algemene intelligentie behoudt. Met slechts 10 miljard actieve parameters levert MiniMax-M2 prestaties die vergelijkbaar zijn met grootschalige modellen, waardoor het een ideale keuze is voor toepassingen met hoge efficiëntie."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Met in totaal 1 biljoen parameters en 32 miljard geactiveerde parameters is dit het toonaangevende niet-denkende model op het gebied van geavanceerde kennis, wiskunde en codering, en is het beter geschikt voor algemene agenttaken. Het is zorgvuldig geoptimaliseerd voor agenttaken, kan niet alleen vragen beantwoorden maar ook acties ondernemen. Ideaal voor improvisatie, algemene chat en agentervaringen, het is een reflexniveau model zonder lange denktijd."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 verbetert de redeneercapaciteit van het model aanzienlijk, zelfs met zeer weinig gelabelde data. Voor het geven van het uiteindelijke antwoord genereert het model eerst een keten van gedachten om de nauwkeurigheid van het antwoord te verhogen."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B is een gedistilleerde, efficiëntere variant van het 70B Llama-model. Het behoudt sterke prestaties bij tekstgeneratietaken en vermindert de rekenbelasting voor gemakkelijke implementatie en onderzoek. Gehost door Groq met hun aangepaste Language Processing Unit (LPU) hardware voor snelle en efficiënte inferentie."
|
||||
"description": "DeepSeek R1 Distill Llama 70B is een groot taalmodel gebaseerd op Llama3.3 70B. Het model maakt gebruik van fine-tuning op basis van de output van DeepSeek R1 en behaalt concurrerende prestaties die vergelijkbaar zijn met toonaangevende grote modellen."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B is een gedistilleerd groot taalmodel gebaseerd op Llama-3.1-8B-Instruct, dat is getraind met behulp van de output van DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Speciaal ontworpen voor efficiënte codering en agent-workflows."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 is een compact, snel en kosteneffectief Mixture-of-Experts (MoE) model met 230 miljard totale parameters en 10 miljard actieve parameters. Het is ontworpen voor topprestaties bij codering en agenttaken, terwijl het een sterke algemene intelligentie behoudt. Het model blinkt uit in bewerkingen met meerdere bestanden, de code-run-fix-cyclus, testvalidatie en -correctie, en complexe langetermijn toolchains, waardoor het een ideale keuze is voor ontwikkelaarsworkflows."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B is het toonaangevende edge-model van Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Twoja treść może zawierać wrażliwe dane osobowe. Aby chronić prywatność, usuń te informacje i spróbuj ponownie.",
|
||||
"default": "Treść została zablokowana: {{blockReason}}. Dostosuj proszę zapytanie i spróbuj ponownie."
|
||||
},
|
||||
"InsufficientQuota": "Przykro nam, limit dla tego klucza został osiągnięty. Proszę sprawdzić saldo konta lub zwiększyć limit klucza i spróbować ponownie.",
|
||||
"InsufficientQuota": "Przepraszamy, limit przydziału (quota) dla tego klucza został osiągnięty. Proszę sprawdzić, czy saldo konta jest wystarczające lub zwiększyć przydział klucza i spróbować ponownie.",
|
||||
"InvalidAccessCode": "Nieprawidłowy kod dostępu: Hasło jest nieprawidłowe lub puste. Proszę wprowadzić poprawne hasło dostępu lub dodać niestandardowy klucz API.",
|
||||
"InvalidBedrockCredentials": "Uwierzytelnienie Bedrock nie powiodło się, prosimy sprawdzić AccessKeyId/SecretAccessKey i spróbować ponownie.",
|
||||
"InvalidClerkUser": "Przepraszamy, nie jesteś obecnie zalogowany. Proszę najpierw zalogować się lub zarejestrować, aby kontynuować.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Błąd zwrócony przez serwer wtyczki. Proszę sprawdź plik opisowy wtyczki, konfigurację wtyczki lub implementację serwera zgodnie z poniższymi informacjami o błędzie",
|
||||
"PluginSettingsInvalid": "Ta wtyczka wymaga poprawnej konfiguracji przed użyciem. Proszę sprawdź, czy Twoja konfiguracja jest poprawna",
|
||||
"ProviderBizError": "Wystąpił błąd usługi {{provider}}, proszę sprawdzić poniższe informacje lub spróbować ponownie",
|
||||
"QuotaLimitReached": "Przykro nam, bieżące zużycie tokenów lub liczba żądań osiągnęła limit kwoty dla tego klucza. Proszę zwiększyć limit kwoty dla tego klucza lub spróbować ponownie później.",
|
||||
"QuotaLimitReached": "Przepraszamy, bieżące zużycie tokenów lub liczba żądań osiągnęły limit przydziału (quota) dla tego klucza. Proszę zwiększyć przydział klucza lub spróbować ponownie później.",
|
||||
"StreamChunkError": "Błąd analizy bloku wiadomości w żądaniu strumieniowym. Proszę sprawdzić, czy aktualny interfejs API jest zgodny z normami, lub skontaktować się z dostawcą API w celu uzyskania informacji.",
|
||||
"SubscriptionKeyMismatch": "Przepraszamy, z powodu sporadycznych awarii systemu, bieżące zużycie subskrypcji jest tymczasowo nieaktywne. Proszę kliknąć przycisk poniżej, aby przywrócić subskrypcję lub skontaktować się z nami drogą mailową w celu uzyskania wsparcia.",
|
||||
"SubscriptionPlanLimit": "Twoje punkty subskrypcyjne zostały wyczerpane, nie możesz korzystać z tej funkcji. Proszę zaktualizować do wyższego planu lub skonfigurować API modelu niestandardowego, aby kontynuować korzystanie.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Dokumentacja konfiguracyjna",
|
||||
"responsesApi": {
|
||||
"desc": "Wykorzystuje nową generację formatu zapytań OpenAI, odblokowując zaawansowane funkcje, takie jak łańcuchy myślowe",
|
||||
"desc": "Zgodne z nowym formatem żądań OpenAI, umożliwia korzystanie z zaawansowanych funkcji, takich jak łańcuchy myślowe (obsługiwane tylko przez modele OpenAI)",
|
||||
"title": "Użyj specyfikacji Responses API"
|
||||
},
|
||||
"waitingForMore": "Więcej modeli jest w <1>planach integracji</1>, proszę czekać"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 to otwartoźródłowy model inferencyjny o dużej skali z mieszanym mechanizmem uwagi, posiadający 456 miliardów parametrów, z których około 45,9 miliarda jest aktywowanych na każdy token. Model natywnie obsługuje ultra-długi kontekst do 1 miliona tokenów i dzięki mechanizmowi błyskawicznej uwagi oszczędza 75% operacji zmiennoprzecinkowych w zadaniach generowania na 100 tysiącach tokenów w porównaniu do DeepSeek R1. Ponadto MiniMax-M1 wykorzystuje architekturę MoE (mieszani eksperci), łącząc algorytm CISPO z efektywnym treningiem wzmacniającym opartym na mieszanej uwadze, osiągając wiodącą w branży wydajność w inferencji długich wejść i rzeczywistych scenariuszach inżynierii oprogramowania."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 na nowo definiuje wydajność agentów inteligentnych. To kompaktowy, szybki i ekonomiczny model MoE (Mixture of Experts) z 230 miliardami całkowitych parametrów i 10 miliardami aktywnych parametrów, zaprojektowany z myślą o najwyższej wydajności w zadaniach kodowania i agentowych, przy jednoczesnym zachowaniu silnej inteligencji ogólnej. Dzięki zaledwie 10 miliardom aktywnych parametrów, MiniMax-M2 oferuje wydajność porównywalną z dużymi modelami, co czyni go idealnym wyborem dla zastosowań wymagających wysokiej efektywności."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Model o łącznej liczbie parametrów 1 biliona i aktywowanych 32 miliardach parametrów. Wśród modeli nie myślących osiąga czołowe wyniki w wiedzy specjalistycznej, matematyce i kodowaniu, lepiej radząc sobie z zadaniami ogólnymi agenta. Model jest starannie zoptymalizowany pod kątem zadań agenta, potrafi nie tylko odpowiadać na pytania, ale także podejmować działania. Idealny do improwizacji, ogólnej rozmowy i doświadczeń agenta, działający na poziomie refleksu bez potrzeby długiego przetwarzania."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 znacząco poprawia zdolność wnioskowania modelu nawet przy minimalnej ilości oznaczonych danych. Przed wygenerowaniem ostatecznej odpowiedzi model najpierw generuje łańcuch myślowy, co zwiększa dokładność końcowej odpowiedzi."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B to zdystylowana, bardziej wydajna wersja modelu Llama 70B. Utrzymuje silną wydajność w zadaniach generowania tekstu, zmniejszając koszty obliczeniowe dla łatwiejszego wdrożenia i badań. Obsługiwany przez Groq na ich niestandardowym sprzęcie LPU, zapewnia szybkie i efektywne wnioskowanie."
|
||||
"description": "DeepSeek R1 Distill Llama 70B to duży model językowy oparty na Llama3.3 70B, który dzięki dostrojeniu na podstawie wyników DeepSeek R1 osiąga konkurencyjną wydajność porównywalną z czołowymi modelami najnowszej generacji."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B to destylowany duży model językowy oparty na Llama-3.1-8B-Instruct, wytrenowany przy użyciu wyjścia DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Stworzony z myślą o wydajnym kodowaniu i przepływach pracy agentów."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 to kompaktowy, szybki i ekonomiczny model MoE (Mixture of Experts) z 230 miliardami całkowitych parametrów i 10 miliardami aktywnych parametrów, zaprojektowany z myślą o najwyższej wydajności w zadaniach kodowania i agentowych, przy jednoczesnym zachowaniu silnej inteligencji ogólnej. Model ten doskonale sprawdza się w edycji wielu plików, zamkniętej pętli kodowanie-uruchamianie-naprawa, testowaniu i weryfikacji poprawek oraz w złożonych, długich łańcuchach narzędziowych, co czyni go idealnym wyborem dla przepływów pracy deweloperów."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B to czołowy model brzegowy Mistrala."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Seu conteúdo pode conter informações pessoais sensíveis. Para proteger a privacidade, remova essas informações e tente novamente.",
|
||||
"default": "Conteúdo bloqueado: {{blockReason}}。Ajuste sua solicitação e tente novamente。"
|
||||
},
|
||||
"InsufficientQuota": "Desculpe, a cota dessa chave atingiu o limite. Verifique se o saldo da conta é suficiente ou aumente a cota da chave e tente novamente.",
|
||||
"InsufficientQuota": "Desculpe, a cota desta chave foi atingida. Verifique se há saldo suficiente na conta ou aumente a cota da chave antes de tentar novamente.",
|
||||
"InvalidAccessCode": "Senha de acesso inválida ou em branco. Por favor, insira a senha de acesso correta ou adicione uma Chave de API personalizada.",
|
||||
"InvalidBedrockCredentials": "Credenciais Bedrock inválidas, por favor, verifique AccessKeyId/SecretAccessKey e tente novamente",
|
||||
"InvalidClerkUser": "Desculpe, você ainda não fez login. Por favor, faça login ou registre uma conta antes de continuar.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Erro na resposta do servidor do plugin. Verifique o arquivo de descrição do plugin, a configuração do plugin ou a implementação do servidor de acordo com as informações de erro abaixo",
|
||||
"PluginSettingsInvalid": "Este plugin precisa ser configurado corretamente antes de ser usado. Verifique se sua configuração está correta",
|
||||
"ProviderBizError": "Erro no serviço {{provider}} solicitado. Por favor, verifique as informações abaixo ou tente novamente.",
|
||||
"QuotaLimitReached": "Desculpe, o uso atual de tokens ou o número de solicitações atingiu o limite de quota da chave. Por favor, aumente a quota dessa chave ou tente novamente mais tarde.",
|
||||
"QuotaLimitReached": "Desculpe, o uso de tokens ou o número de solicitações atingiu o limite da cota desta chave. Aumente a cota da chave ou tente novamente mais tarde.",
|
||||
"StreamChunkError": "Erro de análise do bloco de mensagem da solicitação em fluxo. Verifique se a interface da API atual está em conformidade com os padrões ou entre em contato com seu fornecedor de API para mais informações.",
|
||||
"SubscriptionKeyMismatch": "Desculpe, devido a uma falha ocasional no sistema, o uso da assinatura atual está temporariamente inativo. Por favor, clique no botão abaixo para restaurar a assinatura ou entre em contato conosco por e-mail para obter suporte.",
|
||||
"SubscriptionPlanLimit": "Seu limite de pontos de assinatura foi atingido, não é possível usar essa funcionalidade. Por favor, faça um upgrade para um plano superior ou configure a API do modelo personalizado para continuar usando.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Tutorial de Configuração",
|
||||
"responsesApi": {
|
||||
"desc": "Adota o novo padrão de formato de requisição da OpenAI, desbloqueando recursos avançados como cadeias de raciocínio",
|
||||
"desc": "Adota o novo formato de solicitação da OpenAI, desbloqueando recursos avançados como Cadeia de Raciocínio (disponível apenas para modelos da OpenAI)",
|
||||
"title": "Usar o padrão Responses API"
|
||||
},
|
||||
"waitingForMore": "Mais modelos estão <1>planejados para integração</1>, fique atento"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 é um modelo de inferência de atenção mista em grande escala com pesos abertos, possuindo 456 bilhões de parâmetros, com cerca de 45,9 bilhões de parâmetros ativados por token. O modelo suporta nativamente contextos ultra longos de 1 milhão de tokens e, graças ao mecanismo de atenção relâmpago, economiza 75% do custo computacional em operações de ponto flutuante em tarefas de geração com 100 mil tokens, em comparação com o DeepSeek R1. Além disso, MiniMax-M1 utiliza a arquitetura MoE (Mistura de Especialistas), combinando o algoritmo CISPO e um design eficiente de atenção mista para treinamento reforçado, alcançando desempenho líder na indústria em inferência de entradas longas e cenários reais de engenharia de software."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "O MiniMax-M2 redefine a eficiência para agentes inteligentes. É um modelo MoE compacto, rápido e econômico, com 230 bilhões de parâmetros totais e 10 bilhões de parâmetros ativos, projetado para oferecer desempenho de ponta em tarefas de codificação e agentes, mantendo uma inteligência geral robusta. Com apenas 10 bilhões de parâmetros ativos, o MiniMax-M2 oferece desempenho comparável a modelos de grande escala, tornando-se a escolha ideal para aplicações de alta eficiência."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Com 1 trilhão de parâmetros totais e 32 bilhões de parâmetros ativados, este modelo não reflexivo alcança níveis de ponta em conhecimento avançado, matemática e codificação, sendo especialmente apto para tarefas gerais de agentes. Otimizado para tarefas de agentes, não apenas responde perguntas, mas também pode agir. Ideal para conversas improvisadas, experiências gerais de chat e agentes, funcionando como um modelo reflexivo sem necessidade de longos processos de pensamento."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 melhora significativamente a capacidade de raciocínio do modelo mesmo com poucos dados anotados. Antes de fornecer a resposta final, o modelo gera uma cadeia de pensamento para aumentar a precisão da resposta."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B é uma variante destilada e mais eficiente do modelo Llama 70B. Mantém desempenho robusto em tarefas de geração de texto, reduzindo o custo computacional para facilitar implantação e pesquisa. Atendido pela Groq usando seu hardware personalizado de unidade de processamento de linguagem (LPU) para fornecer inferência rápida e eficiente."
|
||||
"description": "O DeepSeek R1 Distill Llama 70B é um modelo de linguagem de grande porte baseado no Llama3.3 70B. Utilizando o ajuste fino derivado da saída do DeepSeek R1, ele alcança um desempenho competitivo comparável aos modelos de ponta de grande escala."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B é um modelo de linguagem grande destilado baseado no Llama-3.1-8B-Instruct, treinado usando a saída do DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Projetado para codificação eficiente e fluxos de trabalho com agentes."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "O MiniMax-M2 é um modelo de especialistas mistos (MoE) compacto, rápido e econômico, com 230 bilhões de parâmetros totais e 10 bilhões de parâmetros ativos, projetado para oferecer desempenho de alto nível em tarefas de codificação e agentes, mantendo uma inteligência geral poderosa. O modelo se destaca em edição de múltiplos arquivos, ciclos de codificação-execução-correção, verificação e correção de testes, bem como em cadeias de ferramentas complexas e de longo alcance, sendo a escolha ideal para fluxos de trabalho de desenvolvedores."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B é o modelo de ponta da Mistral para aplicações de edge computing."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Ваш запрос может содержать конфиденциальную личную информацию. Для защиты приватности удалите соответствующие данные и попробуйте снова.",
|
||||
"default": "Содержимое заблокировано: {{blockReason}}. Пожалуйста, отредактируйте запрос и попробуйте снова."
|
||||
},
|
||||
"InsufficientQuota": "Извините, квота для этого ключа достигла предела. Пожалуйста, проверьте, достаточно ли средств на вашем счете, или увеличьте квоту ключа и попробуйте снова.",
|
||||
"InsufficientQuota": "Извините, квота для данного ключа исчерпана. Пожалуйста, проверьте баланс вашего аккаунта или увеличьте квоту ключа и попробуйте снова.",
|
||||
"InvalidAccessCode": "Неверный код доступа: введите правильный код доступа или добавьте пользовательский ключ API",
|
||||
"InvalidBedrockCredentials": "Аутентификация Bedrock не прошла, пожалуйста, проверьте AccessKeyId/SecretAccessKey и повторите попытку",
|
||||
"InvalidClerkUser": "Извините, вы еще не вошли в систему. Пожалуйста, войдите или зарегистрируйтесь, прежде чем продолжить",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Запрос сервера плагина возвратил ошибку. Проверьте файл манифеста плагина, конфигурацию плагина или реализацию сервера на основе информации об ошибке ниже",
|
||||
"PluginSettingsInvalid": "Этот плагин необходимо правильно настроить, прежде чем его можно будет использовать. Пожалуйста, проверьте правильность вашей конфигурации",
|
||||
"ProviderBizError": "Ошибка обслуживания {{provider}}. Пожалуйста, проверьте следующую информацию или повторите попытку",
|
||||
"QuotaLimitReached": "Извините, текущий объем токенов или количество запросов достигло предела квоты для этого ключа. Пожалуйста, увеличьте квоту для этого ключа или попробуйте позже.",
|
||||
"QuotaLimitReached": "Извините, текущее использование токенов или количество запросов достигло лимита квоты для данного ключа. Пожалуйста, увеличьте квоту ключа или попробуйте позже.",
|
||||
"StreamChunkError": "Ошибка разбора блока сообщения потокового запроса. Пожалуйста, проверьте, соответствует ли текущий API стандартам, или свяжитесь с вашим поставщиком API для получения консультации.",
|
||||
"SubscriptionKeyMismatch": "К сожалению, из-за случайного сбоя в системе текущий объем подписки временно недоступен. Пожалуйста, нажмите кнопку ниже, чтобы восстановить подписку, или свяжитесь с нами по электронной почте для получения поддержки.",
|
||||
"SubscriptionPlanLimit": "Ваши подписочные баллы исчерпаны, вы не можете использовать эту функцию. Пожалуйста, обновите до более высокого плана или настройте API пользовательской модели, чтобы продолжить использование.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Документация по настройке",
|
||||
"responsesApi": {
|
||||
"desc": "Использует новый формат запросов OpenAI, открывая доступ к таким продвинутым функциям, как цепочки мышления",
|
||||
"desc": "Использует новый формат запроса OpenAI, открывая доступ к продвинутым функциям, таким как цепочки рассуждений (поддерживается только моделями OpenAI)",
|
||||
"title": "Использование спецификации Responses API"
|
||||
},
|
||||
"waitingForMore": "Больше моделей находится в <1>планировании подключения</1>, ожидайте с нетерпением"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 — это масштабная модель вывода с гибридным вниманием и открытыми весами, содержащая 456 миллиардов параметров, при этом каждый токен активирует около 45,9 миллиарда параметров. Модель изначально поддерживает сверхдлинный контекст до 1 миллиона токенов и благодаря механизму молниеносного внимания экономит 75% вычислительных операций с плавающей точкой в задачах генерации на 100 тысяч токенов по сравнению с DeepSeek R1. Кроме того, MiniMax-M1 использует архитектуру MoE (смешанные эксперты), сочетая алгоритм CISPO и эффективное обучение с подкреплением с гибридным вниманием, достигая ведущих в отрасли показателей при выводе на длинных входах и в реальных сценариях программной инженерии."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 переопределяет эффективность для интеллектуальных агентов. Это компактная, быстрая и экономичная модель MoE с общим числом параметров 230 миллиардов и 10 миллиардами активных параметров. Она разработана для достижения выдающейся производительности в задачах кодирования и работы агентов, при этом сохраняя мощный уровень общей интеллектуальности. Благодаря использованию всего 10 миллиардов активных параметров, MiniMax-M2 обеспечивает производительность, сопоставимую с крупномасштабными моделями, что делает её идеальным выбором для высокоэффективных приложений."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Общая численность параметров — 1 триллион, активируемых параметров — 32 миллиарда. Среди немыслящих моделей достигает передовых результатов в области актуальных знаний, математики и программирования, особенно эффективна для универсальных агентских задач. Модель тщательно оптимизирована для агентских задач, способна не только отвечать на вопросы, но и предпринимать действия. Идеально подходит для импровизационного, универсального общения и агентских сценариев, являясь моделью рефлекторного уровня без необходимости длительного обдумывания."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 значительно улучшил способность модели к рассуждению при минимальном количестве размеченных данных. Перед выводом окончательного ответа модель сначала генерирует цепочку рассуждений для повышения точности ответа."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B — дистиллированная и более эффективная версия модели Llama 70B. Она сохраняет высокую производительность в задачах генерации текста при сниженных вычислительных затратах для удобства развертывания и исследований. Обслуживается на аппаратуре Groq с использованием их специализированных языковых процессорных блоков (LPU) для быстрой и эффективной работы."
|
||||
"description": "DeepSeek R1 Distill Llama 70B — это крупная языковая модель на основе Llama3.3 70B, которая была дообучена с использованием выходных данных DeepSeek R1 и достигла конкурентоспособной производительности, сопоставимой с передовыми крупными моделями."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B — это дистиллированная большая языковая модель на основе Llama-3.1-8B-Instruct, обученная с использованием выходных данных DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Создана для эффективного кодирования и рабочих процессов агентов."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 — это компактная, быстрая и экономичная модель с архитектурой смешанных экспертов (MoE), обладающая 230 миллиардами общих параметров и 10 миллиардами активных параметров. Она разработана для достижения выдающейся производительности в задачах кодирования и работы агентов, при этом сохраняя мощную общую интеллектуальность. Модель демонстрирует отличные результаты в редактировании нескольких файлов, замкнутом цикле кодирования-запуска-исправления, проверке и исправлении тестов, а также в сложных цепочках инструментов с длинными связями, что делает её идеальным выбором для рабочих процессов разработчиков."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B - это выдающаяся модель от Mistral."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "İçeriğiniz hassas kişisel kimlik bilgileri içerebilir. Gizliliği korumak için lütfen ilgili hassas bilgileri kaldırıp tekrar deneyin.",
|
||||
"default": "İçerik engellendi: {{blockReason}}。Lütfen isteğinizin içeriğini düzenleyip tekrar deneyin."
|
||||
},
|
||||
"InsufficientQuota": "Üzgünüm, bu anahtarın kotası (quota) dolmuş durumda, lütfen hesap bakiyenizi kontrol edin veya anahtar kotasını artırdıktan sonra tekrar deneyin",
|
||||
"InsufficientQuota": "Üzgünüz, bu anahtarın kotası doldu. Lütfen hesap bakiyenizin yeterli olup olmadığını kontrol edin veya anahtar kotasını artırdıktan sonra tekrar deneyin.",
|
||||
"InvalidAccessCode": "Geçersiz Erişim Kodu: Geçersiz veya boş bir şifre girdiniz. Lütfen doğru erişim şifresini girin veya özel API Anahtarı ekleyin.",
|
||||
"InvalidBedrockCredentials": "Bedrock kimlik doğrulaması geçersiz, lütfen AccessKeyId/SecretAccessKey bilgilerinizi kontrol edip tekrar deneyin",
|
||||
"InvalidClerkUser": "Üzgünüz, şu anda giriş yapmadınız. Lütfen işlemlere devam etmeden önce giriş yapın veya hesap oluşturun",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Eklenti sunucusu isteği bir hata ile döndü. Lütfen aşağıdaki hata bilgilerine dayanarak eklenti bildirim dosyanızı, eklenti yapılandırmanızı veya sunucu uygulamanızı kontrol edin",
|
||||
"PluginSettingsInvalid": "Bu eklenti, kullanılmadan önce doğru şekilde yapılandırılmalıdır. Lütfen yapılandırmanızın doğru olup olmadığını kontrol edin",
|
||||
"ProviderBizError": "Talep {{provider}} hizmetinde bir hata oluştu, lütfen aşağıdaki bilgilere göre sorunu giderin veya tekrar deneyin",
|
||||
"QuotaLimitReached": "Üzgünüz, mevcut Token kullanımı veya istek sayısı bu anahtarın kota (quota) sınırına ulaştı. Lütfen bu anahtarın kotasını artırın veya daha sonra tekrar deneyin.",
|
||||
"QuotaLimitReached": "Üzgünüz, mevcut Token kullanımı veya istek sayısı bu anahtarın kota sınırına ulaştı. Lütfen anahtar kotasını artırın ya da daha sonra tekrar deneyin.",
|
||||
"StreamChunkError": "Akış isteği mesaj parçası çözümleme hatası, lütfen mevcut API arayüzünün standartlara uygun olup olmadığını kontrol edin veya API sağlayıcınızla iletişime geçin.",
|
||||
"SubscriptionKeyMismatch": "Üzgünüz, sistemdeki geçici bir arıza nedeniyle mevcut abonelik kullanımınız geçici olarak devre dışı kalmıştır. Lütfen aşağıdaki düğmeye tıklayarak aboneliğinizi geri yükleyin veya destek almak için bizimle iletişime geçin.",
|
||||
"SubscriptionPlanLimit": "Abonelik puanlarınız tükenmiştir, bu özelliği kullanamazsınız. Lütfen daha yüksek bir plana geçin veya özel model API'sini yapılandırarak devam edin.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Yapılandırma Kılavuzu",
|
||||
"responsesApi": {
|
||||
"desc": "OpenAI'nin yeni nesil istek formatı standardını kullanarak düşünce zinciri gibi gelişmiş özelliklerin kilidini açın",
|
||||
"desc": "OpenAI'nin yeni nesil istek formatı standardını kullanır, düşünce zinciri gibi gelişmiş özelliklerin kilidini açar (yalnızca OpenAI modelleri desteklenir)",
|
||||
"title": "Responses API Standardını Kullan"
|
||||
},
|
||||
"waitingForMore": "Daha fazla model <1>planlanıyor</1>, lütfen bekleyin"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1, açık kaynak ağırlıklı büyük ölçekli karma dikkat çıkarım modeli olup, 456 milyar parametreye sahiptir ve her Token yaklaşık 45.9 milyar parametreyi aktive eder. Model, doğal olarak 1 milyon Token uzunluğunda bağlamı destekler ve şimşek dikkat mekanizması sayesinde 100 bin Token üretim görevlerinde DeepSeek R1'e kıyasla %75 daha az kayan nokta işlemi kullanır. Ayrıca, MiniMax-M1 MoE (karışık uzman) mimarisini, CISPO algoritması ve karma dikkat tasarımı ile verimli pekiştirmeli öğrenme eğitimiyle birleştirerek uzun giriş çıkarımı ve gerçek yazılım mühendisliği senaryolarında sektör lideri performans sunar."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2, yapay zekâ ajanları için verimliliği yeniden tanımlıyor. 230 milyar toplam parametreye ve 10 milyar etkin parametreye sahip olan bu kompakt, hızlı ve ekonomik MoE (Uzman Karışımı) modeli, kodlama ve yapay zekâ görevlerinde üstün performans sunmak üzere tasarlanmıştır ve aynı zamanda güçlü bir genel zekâ kapasitesini korur. Sadece 10 milyar etkin parametreyle, MiniMax-M2 büyük ölçekli modellerle karşılaştırılabilir bir performans sunarak yüksek verimlilik gerektiren uygulamalar için ideal bir tercih haline gelir."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Toplam 1 trilyon parametre, 32 milyar aktif parametreye sahip. Düşünme modeli olmayanlar arasında, güncel bilgi, matematik ve kodlama alanlarında en üst düzeyde performans gösterir ve genel ajan görevlerinde daha yetkindir. Ajan görevleri için optimize edilmiştir; sadece soruları yanıtlamakla kalmaz, aynı zamanda eylem de gerçekleştirebilir. Doğaçlama, genel sohbet ve ajan deneyimleri için en uygunudur; uzun düşünme gerektirmeyen refleks seviyesinde bir modeldir."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1, çok az etiketli veri ile modelin akıl yürütme yeteneğini büyük ölçüde artırır. Nihai yanıtı vermeden önce, model doğruluğu artırmak için bir düşünce zinciri çıktısı üretir."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B, 70B Llama modelinin damıtılmış ve daha verimli bir varyantıdır. Metin üretimi görevlerinde güçlü performansını korur, hesaplama maliyetini azaltarak dağıtım ve araştırmayı kolaylaştırır. Groq tarafından özel Dil İşleme Birimi (LPU) donanımı ile hizmet verilir ve hızlı, verimli çıkarım sağlar."
|
||||
"description": "DeepSeek R1 Distill Llama 70B, Llama3.3 70B tabanlı büyük bir dil modelidir. Bu model, DeepSeek R1 tarafından sağlanan ince ayarlarla, öncü büyük modellerle kıyaslanabilir rekabetçi bir performans elde etmiştir."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B, Llama-3.1-8B-Instruct tabanlı bir damıtılmış büyük dil modelidir ve DeepSeek R1'in çıktısını kullanarak eğitilmiştir."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Verimli kodlama ve Agent iş akışları için özel olarak tasarlanmıştır."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2, 230 milyar toplam parametreye ve 10 milyar etkin parametreye sahip kompakt, hızlı ve ekonomik bir Uzman Karışımı (MoE) modelidir. Kodlama ve yapay zekâ görevlerinde üstün performans sunmak üzere tasarlanmış olup, güçlü bir genel zekâ kapasitesini de korur. Çoklu dosya düzenleme, kodla-çalıştır-düzelt döngüsü, test doğrulama ve düzeltme ile karmaşık uzun zincirli araç zincirlerinde üstün performans göstererek geliştirici iş akışları için ideal bir seçimdir."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B, Mistral'ın dünya çapında en üst düzey kenar modelidir."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "Nội dung của bạn có thể chứa thông tin cá nhân nhạy cảm. Để bảo vệ quyền riêng tư, vui lòng loại bỏ các thông tin nhạy cảm liên quan rồi thử lại.",
|
||||
"default": "Nội dung bị chặn: {{blockReason}}。Vui lòng điều chỉnh yêu cầu rồi thử lại。"
|
||||
},
|
||||
"InsufficientQuota": "Xin lỗi, hạn mức của khóa này đã đạt giới hạn, vui lòng kiểm tra số dư tài khoản của bạn hoặc tăng hạn mức khóa trước khi thử lại",
|
||||
"InsufficientQuota": "Rất tiếc, hạn ngạch (quota) của khóa này đã đạt giới hạn. Vui lòng kiểm tra số dư tài khoản hoặc tăng hạn ngạch của khóa rồi thử lại.",
|
||||
"InvalidAccessCode": "Mật khẩu truy cập không hợp lệ hoặc trống, vui lòng nhập mật khẩu truy cập đúng hoặc thêm Khóa API tùy chỉnh",
|
||||
"InvalidBedrockCredentials": "Xác thực Bedrock không thành công, vui lòng kiểm tra AccessKeyId/SecretAccessKey và thử lại",
|
||||
"InvalidClerkUser": "Xin lỗi, bạn chưa đăng nhập. Vui lòng đăng nhập hoặc đăng ký tài khoản trước khi tiếp tục.",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "Lỗi trả về từ máy chủ plugin, vui lòng kiểm tra tệp mô tả plugin, cấu hình plugin hoặc triển khai máy chủ theo thông tin lỗi dưới đây",
|
||||
"PluginSettingsInvalid": "Plugin cần phải được cấu hình đúng trước khi sử dụng, vui lòng kiểm tra cấu hình của bạn có đúng không",
|
||||
"ProviderBizError": "Yêu cầu dịch vụ {{provider}} gặp sự cố, vui lòng kiểm tra thông tin dưới đây hoặc thử lại",
|
||||
"QuotaLimitReached": "Xin lỗi, lượng Token hiện tại hoặc số lần yêu cầu đã đạt đến giới hạn quota của khóa này, vui lòng tăng quota của khóa hoặc thử lại sau.",
|
||||
"QuotaLimitReached": "Rất tiếc, số lượng Token sử dụng hoặc số lần yêu cầu hiện tại đã đạt giới hạn hạn ngạch (quota) của khóa này. Vui lòng tăng hạn ngạch của khóa hoặc thử lại sau.",
|
||||
"StreamChunkError": "Lỗi phân tích khối tin nhắn yêu cầu luồng, vui lòng kiểm tra xem API hiện tại có tuân thủ tiêu chuẩn hay không, hoặc liên hệ với nhà cung cấp API của bạn để được tư vấn.",
|
||||
"SubscriptionKeyMismatch": "Xin lỗi, do sự cố hệ thống tạm thời, lượng sử dụng đăng ký hiện tại đã không còn hiệu lực. Vui lòng nhấp vào nút bên dưới để khôi phục đăng ký hoặc gửi email cho chúng tôi để nhận hỗ trợ.",
|
||||
"SubscriptionPlanLimit": "Điểm đăng ký của bạn đã hết, không thể sử dụng tính năng này. Vui lòng nâng cấp lên gói cao hơn hoặc cấu hình API mô hình tùy chỉnh để tiếp tục sử dụng.",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "Hướng dẫn cấu hình",
|
||||
"responsesApi": {
|
||||
"desc": "Sử dụng định dạng yêu cầu thế hệ mới của OpenAI, mở khóa các tính năng nâng cao như chuỗi suy nghĩ",
|
||||
"desc": "Áp dụng định dạng yêu cầu thế hệ mới của OpenAI, mở khóa các tính năng nâng cao như chuỗi tư duy (chỉ hỗ trợ mô hình OpenAI)",
|
||||
"title": "Sử dụng chuẩn Responses API"
|
||||
},
|
||||
"waitingForMore": "Nhiều mô hình hơn đang <1>được lên kế hoạch</1>, xin hãy chờ đợi"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 là mô hình suy luận chú ý hỗn hợp quy mô lớn với trọng số mã nguồn mở, sở hữu 456 tỷ 600 triệu tham số, mỗi Token có thể kích hoạt khoảng 45,9 tỷ tham số. Mô hình hỗ trợ ngữ cảnh siêu dài lên đến 1 triệu Token một cách nguyên bản, và thông qua cơ chế chú ý chớp nhoáng, trong các tác vụ sinh 100.000 Token tiết kiệm 75% lượng phép tính dấu chấm động so với DeepSeek R1. Đồng thời, MiniMax-M1 áp dụng kiến trúc MoE (chuyên gia hỗn hợp), kết hợp thuật toán CISPO và thiết kế chú ý hỗn hợp trong huấn luyện tăng cường hiệu quả, đạt hiệu suất hàng đầu trong ngành khi suy luận đầu vào dài và các kịch bản kỹ thuật phần mềm thực tế."
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 tái định nghĩa hiệu suất cho các tác nhân AI. Đây là một mô hình MoE nhỏ gọn, nhanh chóng và tiết kiệm chi phí, với tổng số 230 tỷ tham số và 10 tỷ tham số kích hoạt, được thiết kế để đạt hiệu năng hàng đầu trong các tác vụ mã hóa và tác nhân, đồng thời duy trì trí tuệ nhân tạo tổng quát mạnh mẽ. Chỉ với 10 tỷ tham số kích hoạt, MiniMax-M2 có thể mang lại hiệu suất tương đương với các mô hình quy mô lớn, khiến nó trở thành lựa chọn lý tưởng cho các ứng dụng hiệu suất cao."
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "Tổng tham số 1T, tham số kích hoạt 32B. Trong các mô hình không suy nghĩ, đạt trình độ hàng đầu về kiến thức tiên tiến, toán học và lập trình, đặc biệt phù hợp với các tác vụ đại lý chung. Được tối ưu kỹ lưỡng cho tác vụ đại lý, không chỉ trả lời câu hỏi mà còn có thể thực hiện hành động. Phù hợp nhất cho trò chuyện ứng biến, trải nghiệm đại lý chung, là mô hình phản xạ không cần suy nghĩ lâu."
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 đã cải thiện đáng kể khả năng suy luận của mô hình ngay cả khi có rất ít dữ liệu gán nhãn. Trước khi đưa ra câu trả lời cuối cùng, mô hình sẽ xuất ra một chuỗi suy nghĩ nhằm nâng cao độ chính xác của câu trả lời cuối."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B là biến thể chưng cất và hiệu quả hơn của mô hình Llama 70B. Nó duy trì hiệu suất mạnh mẽ trong các nhiệm vụ tạo văn bản, giảm chi phí tính toán để dễ dàng triển khai và nghiên cứu. Được Groq phục vụ bằng phần cứng đơn vị xử lý ngôn ngữ (LPU) tùy chỉnh để cung cấp suy luận nhanh và hiệu quả."
|
||||
"description": "DeepSeek R1 Distill Llama 70B là một mô hình ngôn ngữ lớn dựa trên Llama3.3 70B, được tinh chỉnh bằng đầu ra từ DeepSeek R1, mang lại hiệu suất cạnh tranh tương đương với các mô hình tiên tiến quy mô lớn."
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B là một mô hình ngôn ngữ lớn đã được tinh chế dựa trên Llama-3.1-8B-Instruct, được đào tạo bằng cách sử dụng đầu ra từ DeepSeek R1."
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "Được sinh ra để phục vụ mã hóa hiệu quả và quy trình làm việc của Agent."
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 là một mô hình chuyên gia hỗn hợp (MoE) nhỏ gọn, nhanh chóng và tiết kiệm chi phí, với tổng số 230 tỷ tham số và 10 tỷ tham số kích hoạt, được thiết kế để đạt hiệu suất hàng đầu trong các tác vụ mã hóa và tác nhân, đồng thời duy trì trí tuệ nhân tạo tổng quát mạnh mẽ. Mô hình này thể hiện xuất sắc trong chỉnh sửa nhiều tệp, vòng lặp mã hóa-chạy-sửa lỗi, kiểm thử và sửa lỗi, cũng như các chuỗi công cụ liên kết dài phức tạp, là lựa chọn lý tưởng cho quy trình làm việc của nhà phát triển."
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B là mô hình hàng đầu thế giới của Mistral về hiệu suất cạnh biên."
|
||||
},
|
||||
|
||||
@@ -99,10 +99,10 @@
|
||||
"SubscriptionKeyMismatch": "很抱歉,由于系统偶发故障,当前订阅用量暂时失效,请点击下方按钮恢复订阅,或邮件联系我们获取支持",
|
||||
"CreateMessageError": "很抱歉,消息未能正常发送,请复制内容后重新发送,刷新页面后此消息将不会保留",
|
||||
"LocationNotSupportError": "很抱歉,你的所在地区不支持此模型服务,可能是由于区域限制或服务未开通。请确认当前地区是否支持使用此服务,或尝试使用切换到其他地区后重试。",
|
||||
"InsufficientQuota": "很抱歉,该密钥的配额(quota)已达上限,请检查账户余额是否充足,或增大密钥配额后再试",
|
||||
"InsufficientQuota": "很抱歉,该密钥的配额 (quota) 已达上限,请检查账户余额是否充足,或增大密钥配额后再试",
|
||||
"ModelNotFound": "很抱歉,无法请求到相应的模型,可能是模型不存在或者没有访问权限导致,请更换 API Key 或调整访问权限后重试",
|
||||
"ExceededContextWindow": "当前请求内容超出模型可处理的长度,请减少内容量后重试",
|
||||
"QuotaLimitReached": "很抱歉,当前 Token 用量或请求次数已达该密钥的配额(quota)上限,请增加该密钥的配额或稍后再试",
|
||||
"QuotaLimitReached": "很抱歉,当前 Token 用量或请求次数已达该密钥的配额 (quota) 上限,请增加该密钥的配额或稍后再试",
|
||||
"PermissionDenied": "很抱歉,你没有权限访问该服务,请检查你的密钥是否有访问权限",
|
||||
"InvalidProviderAPIKey": "{{provider}} API Key 不正确或为空,请检查 {{provider}} API Key 后重试",
|
||||
"ProviderBizError": "请求 {{provider}} 服务出错,请根据以下信息排查或重试",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "配置教程",
|
||||
"responsesApi": {
|
||||
"desc": "采用 OpenAI 新一代请求格式规范,解锁思维链等进阶特性",
|
||||
"desc": "采用 OpenAI 新一代请求格式规范,解锁思维链等进阶特性 (仅 OpenAI 模型支持)",
|
||||
"title": "使用 Responses API 规范"
|
||||
},
|
||||
"waitingForMore": "更多模型正在 <1>计划接入</1> 中,敬请期待"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 是开源权重的大规模混合注意力推理模型,拥有 4560 亿参数,每个 Token 可激活约 459 亿参数。模型原生支持 100 万 Token 的超长上下文,并通过闪电注意力机制,在 10 万 Token 的生成任务中相比 DeepSeek R1 节省 75% 的浮点运算量。同时,MiniMax-M1 采用 MoE(混合专家)架构,结合 CISPO 算法与混合注意力设计的高效强化学习训练,在长输入推理与真实软件工程场景中实现了业界领先的性能。"
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 为智能体重新定义了效率。它是一款紧凑、快速且经济高效的 MoE 模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。仅需 100 亿激活参数,MiniMax-M2 就能提供与大规模模型相媲美的性能,使其成为高效率应用的理想选择。"
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "总参数 1T,激活参数 32B。 非思维模型中,在前沿知识、数学和编码方面达到了顶尖水平,更擅长通用 Agent 任务。 针对代理任务进行了精心优化,不仅能回答问题,还能采取行动。 最适用于即兴、通用聊天和代理体验,是一款无需长时间思考的反射级模型。"
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 在仅有极少标注数据的情况下,极大提升了模型推理能力。在输出最终回答之前,模型会先输出一段思维链内容,以提升最终答案的准确性。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B 是 70B Llama 模型的蒸馏、更高效变体。它在文本生成任务中保持强大性能,减少计算开销以便于部署和研究。由 Groq 使用其自定义语言处理单元 (LPU) 硬件提供服务,以提供快速高效的推理。"
|
||||
"description": "DeepSeek R1 Distill Llama 70B是基于Llama3.3 70B的大型语言模型,该模型利用DeepSeek R1输出的微调,实现了与大型前沿模型相当的竞争性能。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B 是一种基于 Llama-3.1-8B-Instruct 的蒸馏大语言模型,通过使用 DeepSeek R1 的输出进行训练而得。"
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "专为高效编码与 Agent 工作流而生"
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 是一款紧凑、快速且经济高效的混合专家(MoE)模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。该模型在多文件编辑、编码-运行-修复闭环、测试校验修复以及复杂的长链接工具链方面表现优异,是开发者工作流的理想选择。"
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B 是Mistral的世界顶级边缘模型。"
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"SPII": "您的內容可能包含敏感個人身分資訊。為保護隱私,請移除相關敏感資訊後再試。",
|
||||
"default": "內容被阻擋:{{blockReason}}。請調整您的請求內容後再試。"
|
||||
},
|
||||
"InsufficientQuota": "很抱歉,該金鑰的配額已達上限,請檢查帳戶餘額是否充足,或增加金鑰配額後再試",
|
||||
"InsufficientQuota": "很抱歉,該金鑰的配額已達上限,請檢查帳戶餘額是否充足,或提升金鑰配額後再試",
|
||||
"InvalidAccessCode": "密碼不正確或為空,請輸入正確的訪問密碼,或添加自定義 API 金鑰",
|
||||
"InvalidBedrockCredentials": "Bedrock 驗證未通過,請檢查 AccessKeyId/SecretAccessKey 後重試",
|
||||
"InvalidClerkUser": "很抱歉,你當前尚未登錄,請先登錄或註冊帳號後繼續操作",
|
||||
@@ -131,7 +131,7 @@
|
||||
"PluginServerError": "外掛伺服器請求回傳錯誤。請根據下面的錯誤資訊檢查您的外掛描述檔案、外掛設定或伺服器實作",
|
||||
"PluginSettingsInvalid": "該外掛需要正確設定後才可以使用。請檢查您的設定是否正確",
|
||||
"ProviderBizError": "請求 {{provider}} 服務出錯,請根據以下資訊排查或重試",
|
||||
"QuotaLimitReached": "很抱歉,當前 Token 用量或請求次數已達該金鑰的配額上限,請增加該金鑰的配額或稍後再試",
|
||||
"QuotaLimitReached": "很抱歉,目前的 Token 使用量或請求次數已達該金鑰的配額上限,請提升該金鑰的配額或稍後再試",
|
||||
"StreamChunkError": "流式請求的消息塊解析錯誤,請檢查當前 API 介面是否符合標準規範,或聯繫你的 API 供應商諮詢",
|
||||
"SubscriptionKeyMismatch": "很抱歉,由於系統偶發故障,當前訂閱用量暫時失效,請點擊下方按鈕恢復訂閱,或郵件聯繫我們獲取支持",
|
||||
"SubscriptionPlanLimit": "您的訂閱積分已用盡,無法使用該功能,請升級到更高計劃,或配置自訂模型 API 後繼續使用",
|
||||
|
||||
@@ -295,7 +295,7 @@
|
||||
},
|
||||
"helpDoc": "配置教程",
|
||||
"responsesApi": {
|
||||
"desc": "採用 OpenAI 新一代請求格式規範,解鎖思維鏈等進階特性",
|
||||
"desc": "採用 OpenAI 新一代請求格式規範,解鎖思維鏈等進階功能(僅支援 OpenAI 模型)",
|
||||
"title": "使用 Responses API 規範"
|
||||
},
|
||||
"waitingForMore": "更多模型正在 <1>計劃接入</1> 中,敬請期待"
|
||||
|
||||
@@ -236,6 +236,9 @@
|
||||
"MiniMaxAI/MiniMax-M1-80k": {
|
||||
"description": "MiniMax-M1 是開源權重的大規模混合注意力推理模型,擁有 4560 億參數,每個 Token 可激活約 459 億參數。模型原生支援 100 萬 Token 的超長上下文,並透過閃電注意力機制,在 10 萬 Token 的生成任務中相比 DeepSeek R1 節省 75% 的浮點運算量。同時,MiniMax-M1 採用 MoE(混合專家)架構,結合 CISPO 演算法與混合注意力設計的高效強化學習訓練,在長輸入推理與真實軟體工程場景中實現了業界領先的性能。"
|
||||
},
|
||||
"MiniMaxAI/MiniMax-M2": {
|
||||
"description": "MiniMax-M2 為智慧體重新定義了效率。它是一款緊湊、快速且具高性價比的 MoE 模型,擁有 2300 億總參數與 100 億啟用參數,專為編碼與智慧體任務的頂級效能而打造,同時保有強大的通用智慧。僅需 100 億啟用參數,MiniMax-M2 即可提供媲美大型模型的效能,是高效率應用的理想選擇。"
|
||||
},
|
||||
"Moonshot-Kimi-K2-Instruct": {
|
||||
"description": "總參數 1T,激活參數 32B。非思維模型中,在前沿知識、數學和編碼方面達到頂尖水平,更擅長通用 Agent 任務。針對代理任務進行了精心優化,不僅能回答問題,還能採取行動。最適用於即興、通用聊天和代理體驗,是一款無需長時間思考的反射級模型。"
|
||||
},
|
||||
@@ -1155,7 +1158,7 @@
|
||||
"description": "DeepSeek-R1 在僅有極少標註資料的情況下,極大提升了模型推理能力。在輸出最終回答之前,模型會先輸出一段思維鏈內容,以提升最終答案的準確性。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-70b": {
|
||||
"description": "DeepSeek-R1-Distill-Llama-70B 是 70B Llama 模型的蒸餾、更高效變體。它在文字生成任務中保持強大性能,減少計算開銷以便於部署和研究。由 Groq 使用其自訂語言處理單元 (LPU) 硬體提供服務,以提供快速高效的推理。"
|
||||
"description": "DeepSeek R1 Distill Llama 70B 是一款基於 Llama3.3 70B 的大型語言模型,透過 DeepSeek R1 的微調輸出,實現了與最先進大型模型相當的競爭效能。"
|
||||
},
|
||||
"deepseek/deepseek-r1-distill-llama-8b": {
|
||||
"description": "DeepSeek R1 Distill Llama 8B是一種基於Llama-3.1-8B-Instruct的蒸餾大語言模型,通過使用DeepSeek R1的輸出進行訓練而得。"
|
||||
@@ -2462,6 +2465,9 @@
|
||||
"minimax/minimax-m2": {
|
||||
"description": "專為高效編碼與 Agent 工作流程而設計"
|
||||
},
|
||||
"minimaxai/minimax-m2": {
|
||||
"description": "MiniMax-M2 是一款緊湊、快速且具高性價比的混合專家(MoE)模型,擁有 2300 億總參數與 100 億啟用參數,專為編碼與智慧體任務的頂級效能而打造,同時保有強大的通用智慧。此模型在多檔案編輯、編碼-執行-修復閉環、測試驗證修復以及複雜的長鏈工具鏈方面表現優異,是開發者工作流程的理想選擇。"
|
||||
},
|
||||
"ministral-3b-latest": {
|
||||
"description": "Ministral 3B 是 Mistral 的全球頂尖邊緣模型。"
|
||||
},
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@lobehub/lobehub",
|
||||
"version": "2.0.0-next.77",
|
||||
"version": "2.0.0-next.86",
|
||||
"description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
||||
"keywords": [
|
||||
"framework",
|
||||
|
||||
@@ -24,11 +24,16 @@ import {
|
||||
*/
|
||||
export class AgentRuntime {
|
||||
private executors: Record<AgentInstruction['type'], InstructionExecutor>;
|
||||
private operationId?: string;
|
||||
private getOperation?: RuntimeConfig['getOperation'];
|
||||
|
||||
constructor(
|
||||
private agent: Agent,
|
||||
private config: RuntimeConfig = {},
|
||||
) {
|
||||
this.operationId = config.operationId;
|
||||
this.getOperation = config.getOperation;
|
||||
|
||||
// Build executors with priority: agent.executors > config.executors > built-in
|
||||
this.executors = {
|
||||
call_llm: this.createCallLLMExecutor(),
|
||||
@@ -44,6 +49,28 @@ export class AgentRuntime {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Get operation context (sessionId, topicId, etc.)
|
||||
* Returns the business context captured by the operation
|
||||
*/
|
||||
getContext() {
|
||||
if (!this.operationId || !this.getOperation) {
|
||||
return undefined;
|
||||
}
|
||||
return this.getOperation(this.operationId).context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get operation abort controller
|
||||
* Returns the AbortController for cancellation
|
||||
*/
|
||||
getAbortController(): AbortController | undefined {
|
||||
if (!this.operationId || !this.getOperation) {
|
||||
return undefined;
|
||||
}
|
||||
return this.getOperation(this.operationId).abortController;
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes a single step of the Plan -> Execute loop.
|
||||
* @param state - Current agent state
|
||||
@@ -194,6 +221,7 @@ export class AgentRuntime {
|
||||
approvedToolCall: ChatToolPayload,
|
||||
): Promise<{ events: AgentEvent[]; newState: AgentState; nextContext?: AgentRuntimeContext }> {
|
||||
const context: AgentRuntimeContext = {
|
||||
operationId: this.operationId,
|
||||
payload: { approvedToolCall },
|
||||
phase: 'human_approved_tool',
|
||||
session: this.createSessionContext(state),
|
||||
@@ -289,10 +317,11 @@ export class AgentRuntime {
|
||||
}
|
||||
|
||||
// Otherwise, just return the resumed state
|
||||
const initialContext = this.createInitialContext(newState);
|
||||
return {
|
||||
events: [resumeEvent],
|
||||
newState,
|
||||
nextContext: this.createInitialContext(newState),
|
||||
nextContext: initialContext,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -439,6 +468,7 @@ export class AgentRuntime {
|
||||
|
||||
// Provide next context based on LLM result
|
||||
const nextContext: AgentRuntimeContext = {
|
||||
operationId: this.operationId,
|
||||
payload: {
|
||||
hasToolCalls: toolCalls.length > 0,
|
||||
result: { content: assistantContent, tool_calls: toolCalls },
|
||||
@@ -511,6 +541,7 @@ export class AgentRuntime {
|
||||
|
||||
// Provide next context for tool result
|
||||
const nextContext: AgentRuntimeContext = {
|
||||
operationId: this.operationId,
|
||||
payload: {
|
||||
result,
|
||||
toolCall,
|
||||
@@ -726,6 +757,7 @@ export class AgentRuntime {
|
||||
events: allEvents,
|
||||
newState,
|
||||
nextContext: {
|
||||
operationId: this.operationId,
|
||||
payload: {
|
||||
parentMessageId: lastParentMessageId,
|
||||
toolCount: results.length,
|
||||
@@ -792,6 +824,7 @@ export class AgentRuntime {
|
||||
events: [warningEvent],
|
||||
newState,
|
||||
nextContext: {
|
||||
operationId: this.operationId,
|
||||
payload: { error: warningEvent.error, isCostWarning: true },
|
||||
phase: 'error' as const,
|
||||
session: this.createSessionContext(newState),
|
||||
@@ -821,6 +854,7 @@ export class AgentRuntime {
|
||||
|
||||
if (lastMessage?.role === 'user') {
|
||||
return {
|
||||
operationId: this.operationId,
|
||||
payload: {
|
||||
isFirstMessage: state.messages.length === 1,
|
||||
message: lastMessage,
|
||||
@@ -831,6 +865,7 @@ export class AgentRuntime {
|
||||
}
|
||||
|
||||
return {
|
||||
operationId: this.operationId,
|
||||
payload: undefined,
|
||||
phase: 'init',
|
||||
session: this.createSessionContext(state),
|
||||
|
||||
@@ -61,6 +61,7 @@ export interface AgentEventHumanSelectRequired {
|
||||
export type FinishReason =
|
||||
| 'completed' // Normal completion
|
||||
| 'user_requested' // User requested to end
|
||||
| 'user_aborted' // User abort
|
||||
| 'max_steps_exceeded' // Reached maximum steps limit
|
||||
| 'cost_limit_exceeded' // Reached cost limit
|
||||
| 'timeout' // Execution timeout
|
||||
|
||||
@@ -42,6 +42,22 @@ export interface GeneralAgentCallToolsBatchResultPayload {
|
||||
toolResults: GeneralAgentCallToolResultPayload[];
|
||||
}
|
||||
|
||||
export interface GeneralAgentHumanAbortPayload {
|
||||
/** Whether there are pending tool calls */
|
||||
hasToolsCalling?: boolean;
|
||||
/** Parent message ID (assistant message) */
|
||||
parentMessageId: string;
|
||||
/** Reason for the abort */
|
||||
reason: string;
|
||||
/** LLM result including content and tool_calls */
|
||||
result?: {
|
||||
content: string;
|
||||
tool_calls?: any[];
|
||||
};
|
||||
/** Pending tool calls that need to be cancelled */
|
||||
toolsCalling?: ChatToolPayload[];
|
||||
}
|
||||
|
||||
export interface GeneralAgentConfig {
|
||||
agentConfig?: {
|
||||
[key: string]: any;
|
||||
|
||||
@@ -9,6 +9,10 @@ import type { Cost, CostCalculationContext, Usage } from './usage';
|
||||
*/
|
||||
export interface AgentRuntimeContext {
|
||||
metadata?: Record<string, unknown>;
|
||||
|
||||
/** Operation ID (links to Operation for business context) */
|
||||
operationId?: string;
|
||||
|
||||
/** Phase-specific payload/context */
|
||||
payload?: unknown;
|
||||
/** Current execution phase */
|
||||
@@ -20,9 +24,11 @@ export interface AgentRuntimeContext {
|
||||
| 'tools_batch_result'
|
||||
| 'human_response'
|
||||
| 'human_approved_tool'
|
||||
| 'human_abort'
|
||||
| 'error';
|
||||
/** Session */
|
||||
session: {
|
||||
|
||||
/** Session info (kept for backward compatibility, will be optional in the future) */
|
||||
session?: {
|
||||
messageCount: number;
|
||||
sessionId: string;
|
||||
status: AgentState['status'];
|
||||
@@ -99,6 +105,22 @@ export interface CallingToolPayload {
|
||||
type: 'mcp' | 'default' | 'markdown' | 'standalone';
|
||||
}
|
||||
|
||||
export interface HumanAbortPayload {
|
||||
/** Whether there are pending tool calls */
|
||||
hasToolsCalling?: boolean;
|
||||
/** Parent message ID (assistant message) */
|
||||
parentMessageId: string;
|
||||
/** Reason for the abort */
|
||||
reason: string;
|
||||
/** LLM result including content and tool_calls */
|
||||
result?: {
|
||||
content: string;
|
||||
tool_calls?: any[];
|
||||
};
|
||||
/** Pending tool calls that need to be cancelled */
|
||||
toolsCalling?: ChatToolPayload[];
|
||||
}
|
||||
|
||||
export interface AgentInstructionCallLlm {
|
||||
payload: any;
|
||||
type: 'call_llm';
|
||||
@@ -149,6 +171,18 @@ export interface AgentInstructionFinish {
|
||||
type: 'finish';
|
||||
}
|
||||
|
||||
export interface AgentInstructionResolveAbortedTools {
|
||||
payload: {
|
||||
/** Parent message ID (assistant message) */
|
||||
parentMessageId: string;
|
||||
/** Reason for the abort */
|
||||
reason?: string;
|
||||
/** Tool calls that need to be resolved/cancelled */
|
||||
toolsCalling: ChatToolPayload[];
|
||||
};
|
||||
type: 'resolve_aborted_tools';
|
||||
}
|
||||
|
||||
/**
|
||||
* A serializable instruction object that the "Agent" (Brain) returns
|
||||
* to the "AgentRuntime" (Engine) to execute.
|
||||
@@ -160,4 +194,5 @@ export type AgentInstruction =
|
||||
| AgentInstructionRequestHumanPrompt
|
||||
| AgentInstructionRequestHumanSelect
|
||||
| AgentInstructionRequestHumanApprove
|
||||
| AgentInstructionResolveAbortedTools
|
||||
| AgentInstructionFinish;
|
||||
|
||||
@@ -15,4 +15,11 @@ export type InstructionExecutor = (
|
||||
export interface RuntimeConfig {
|
||||
/** Custom executors for specific instruction types */
|
||||
executors?: Partial<Record<AgentInstruction['type'], InstructionExecutor>>;
|
||||
/** Function to get operation context and abort controller */
|
||||
getOperation?: (operationId: string) => {
|
||||
abortController: AbortController;
|
||||
context: Record<string, any>;
|
||||
};
|
||||
/** Operation ID for tracking this runtime instance */
|
||||
operationId?: string;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
ALTER TABLE "documents" ALTER COLUMN "id" SET DATA TYPE varchar(255);--> statement-breakpoint
|
||||
ALTER TABLE "documents" ADD COLUMN IF NOT EXISTS "parent_id" varchar(255);--> statement-breakpoint
|
||||
ALTER TABLE "files" ADD COLUMN IF NOT EXISTS "parent_id" varchar(255);--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "documents" ADD CONSTRAINT "documents_parent_id_documents_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."documents"("id") ON DELETE set null ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;--> statement-breakpoint
|
||||
DO $$ BEGIN
|
||||
ALTER TABLE "files" ADD CONSTRAINT "files_parent_id_documents_id_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."documents"("id") ON DELETE set null ON UPDATE no action;
|
||||
EXCEPTION
|
||||
WHEN duplicate_object THEN null;
|
||||
END $$;--> statement-breakpoint
|
||||
CREATE INDEX IF NOT EXISTS "documents_parent_id_idx" ON "documents" USING btree ("parent_id");--> statement-breakpoint
|
||||
CREATE INDEX IF NOT EXISTS "files_parent_id_idx" ON "files" USING btree ("parent_id");
|
||||
File diff suppressed because it is too large
Load Diff
@@ -322,6 +322,13 @@
|
||||
"when": 1762911968658,
|
||||
"tag": "0045_add_tool_intervention",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 46,
|
||||
"version": "7",
|
||||
"when": 1763453175961,
|
||||
"tag": "0046_add_parent_id",
|
||||
"breakpoints": true
|
||||
}
|
||||
],
|
||||
"version": "6"
|
||||
|
||||
@@ -223,10 +223,7 @@
|
||||
"hash": "9646161fa041354714f823d726af27247bcd6e60fa3be5698c0d69f337a5700b"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"DROP TABLE \"user_budgets\";",
|
||||
"\nDROP TABLE \"user_subscriptions\";"
|
||||
],
|
||||
"sql": ["DROP TABLE \"user_budgets\";", "\nDROP TABLE \"user_subscriptions\";"],
|
||||
"bps": true,
|
||||
"folderMillis": 1729699958471,
|
||||
"hash": "7dad43a2a25d1aec82124a4e53f8d82f8505c3073f23606c1dc5d2a4598eacf9"
|
||||
@@ -298,9 +295,7 @@
|
||||
"hash": "845a692ceabbfc3caf252a97d3e19a213bc0c433df2689900135f9cfded2cf49"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"messages\" ADD COLUMN \"reasoning\" jsonb;"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"messages\" ADD COLUMN \"reasoning\" jsonb;"],
|
||||
"bps": true,
|
||||
"folderMillis": 1737609172353,
|
||||
"hash": "2cb36ae4fcdd7b7064767e04bfbb36ae34518ff4bb1b39006f2dd394d1893868"
|
||||
@@ -515,9 +510,7 @@
|
||||
"hash": "a7ccf007fd185ff922823148d1eae6fafe652fc98d2fd2793f84a84f29e93cd1"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"ai_providers\" ADD COLUMN \"config\" jsonb;"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"ai_providers\" ADD COLUMN \"config\" jsonb;"],
|
||||
"bps": true,
|
||||
"folderMillis": 1749309388370,
|
||||
"hash": "39cea379f08ee4cb944875c0b67f7791387b508c2d47958bb4cd501ed1ef33eb"
|
||||
@@ -635,9 +628,7 @@
|
||||
"hash": "1ba9b1f74ea13348da98d6fcdad7867ab4316ed565bf75d84d160c526cdac14b"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"agents\" ADD COLUMN IF NOT EXISTS \"virtual\" boolean DEFAULT false;"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"agents\" ADD COLUMN IF NOT EXISTS \"virtual\" boolean DEFAULT false;"],
|
||||
"bps": true,
|
||||
"folderMillis": 1759116400580,
|
||||
"hash": "433ddae88e785f2db734e49a4c115eee93e60afe389f7919d66e5ba9aa159a37"
|
||||
@@ -687,17 +678,13 @@
|
||||
"hash": "4bdc6505797d7a33b622498c138cfd47f637239f6905e1c484cd01d9d5f21d6b"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"user_settings\" ADD COLUMN IF NOT EXISTS \"image\" jsonb;"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"user_settings\" ADD COLUMN IF NOT EXISTS \"image\" jsonb;"],
|
||||
"bps": true,
|
||||
"folderMillis": 1760108430562,
|
||||
"hash": "ce09b301abb80f6563abc2f526bdd20b4f69bae430f09ba2179b9e3bfec43067"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"documents\" ADD COLUMN IF NOT EXISTS \"editor_data\" jsonb;"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"documents\" ADD COLUMN IF NOT EXISTS \"editor_data\" jsonb;"],
|
||||
"bps": true,
|
||||
"folderMillis": 1761554153406,
|
||||
"hash": "bf2f21293e90e11cf60a784cf3ec219eafa95f7545d7d2f9d1449c0b0949599a"
|
||||
@@ -777,19 +764,29 @@
|
||||
"hash": "923ccbdf46c32be9a981dabd348e6923b4a365444241e9b8cc174bf5b914cbc5"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"agents\" ADD COLUMN IF NOT EXISTS \"market_identifier\" text;\n"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"agents\" ADD COLUMN IF NOT EXISTS \"market_identifier\" text;\n"],
|
||||
"bps": true,
|
||||
"folderMillis": 1762870034882,
|
||||
"hash": "4178aacb4b8892b7fd15d29209bbf9b1d1f9d7c406ba796f27542c0bcd919680"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"message_plugins\" ADD COLUMN IF NOT EXISTS \"intervention\" jsonb;\n"
|
||||
],
|
||||
"sql": ["ALTER TABLE \"message_plugins\" ADD COLUMN IF NOT EXISTS \"intervention\" jsonb;\n"],
|
||||
"bps": true,
|
||||
"folderMillis": 1762911968658,
|
||||
"hash": "552a032cc0e595277232e70b5f9338658585bafe9481ae8346a5f322b673a68b"
|
||||
},
|
||||
{
|
||||
"sql": [
|
||||
"ALTER TABLE \"documents\" ALTER COLUMN \"id\" SET DATA TYPE varchar(255);",
|
||||
"\nALTER TABLE \"documents\" ADD COLUMN \"parent_id\" varchar(255);",
|
||||
"\nALTER TABLE \"files\" ADD COLUMN \"parent_id\" varchar(255);",
|
||||
"\nALTER TABLE \"documents\" ADD CONSTRAINT \"documents_parent_id_documents_id_fk\" FOREIGN KEY (\"parent_id\") REFERENCES \"public\".\"documents\"(\"id\") ON DELETE set null ON UPDATE no action;",
|
||||
"\nALTER TABLE \"files\" ADD CONSTRAINT \"files_parent_id_documents_id_fk\" FOREIGN KEY (\"parent_id\") REFERENCES \"public\".\"documents\"(\"id\") ON DELETE set null ON UPDATE no action;",
|
||||
"\nCREATE INDEX \"documents_parent_id_idx\" ON \"documents\" USING btree (\"parent_id\");",
|
||||
"\nCREATE INDEX \"files_parent_id_idx\" ON \"files\" USING btree (\"parent_id\");"
|
||||
],
|
||||
"bps": true,
|
||||
"folderMillis": 1763453175961,
|
||||
"hash": "6cfc00744de6a8f4d60b793673911bb740f9a50661663e28b843e5adae08f94a"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { and, desc, eq } from 'drizzle-orm';
|
||||
|
||||
import { LobeChatDatabase } from '../type';
|
||||
|
||||
import { DocumentItem, NewDocument, documents } from '../schemas';
|
||||
import { LobeChatDatabase } from '../type';
|
||||
|
||||
export class DocumentModel {
|
||||
private userId: string;
|
||||
@@ -13,13 +12,13 @@ export class DocumentModel {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
create = async (params: Omit<NewDocument, 'userId'>) => {
|
||||
const [result] = await this.db
|
||||
create = async (params: Omit<NewDocument, 'userId'>): Promise<DocumentItem> => {
|
||||
const result = (await this.db
|
||||
.insert(documents)
|
||||
.values({ ...params, userId: this.userId })
|
||||
.returning();
|
||||
.returning()) as DocumentItem[];
|
||||
|
||||
return result;
|
||||
return result[0]!;
|
||||
};
|
||||
|
||||
delete = async (id: string) => {
|
||||
|
||||
@@ -43,8 +43,8 @@ export class FileModel {
|
||||
params: Omit<NewFile, 'id' | 'userId'> & { id?: string; knowledgeBaseId?: string },
|
||||
insertToGlobalFiles?: boolean,
|
||||
trx?: Transaction,
|
||||
) => {
|
||||
const executeInTransaction = async (tx: Transaction) => {
|
||||
): Promise<{ id: string }> => {
|
||||
const executeInTransaction = async (tx: Transaction): Promise<FileItem> => {
|
||||
if (insertToGlobalFiles) {
|
||||
await tx.insert(globalFiles).values({
|
||||
creator: this.userId,
|
||||
@@ -56,12 +56,12 @@ export class FileModel {
|
||||
});
|
||||
}
|
||||
|
||||
const result = await tx
|
||||
const result = (await tx
|
||||
.insert(files)
|
||||
.values({ ...params, userId: this.userId })
|
||||
.returning();
|
||||
.returning()) as FileItem[];
|
||||
|
||||
const item = result[0];
|
||||
const item = result[0]!;
|
||||
|
||||
if (params.knowledgeBaseId) {
|
||||
await tx.insert(knowledgeBaseFiles).values({
|
||||
|
||||
@@ -3,7 +3,7 @@ import { FilesTabs } from '@lobechat/types';
|
||||
import { beforeEach, describe, expect, it } from 'vitest';
|
||||
|
||||
import { getTestDB } from '../../models/__tests__/_util';
|
||||
import { NewDocument, documents } from '../../schemas/document';
|
||||
import { NewDocument, documents } from '../../schemas/file';
|
||||
import { NewFile, files } from '../../schemas/file';
|
||||
import { users } from '../../schemas/user';
|
||||
import { LobeChatDatabase } from '../../type';
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import type { LobeDocumentPage } from '@lobechat/types';
|
||||
import {
|
||||
index,
|
||||
integer,
|
||||
jsonb,
|
||||
pgTable,
|
||||
primaryKey,
|
||||
text,
|
||||
uniqueIndex,
|
||||
uuid,
|
||||
varchar,
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { createdAt, timestamps } from './_helpers';
|
||||
import { files } from './file';
|
||||
import { chunks } from './rag';
|
||||
import { users } from './user';
|
||||
|
||||
/**
|
||||
* 文档表 - 存储文件内容或网页搜索结果
|
||||
*/
|
||||
export const documents = pgTable(
|
||||
'documents',
|
||||
{
|
||||
id: varchar('id', { length: 30 })
|
||||
.$defaultFn(() => idGenerator('documents', 16))
|
||||
.primaryKey(),
|
||||
|
||||
// 基本信息
|
||||
title: text('title'),
|
||||
content: text('content'),
|
||||
fileType: varchar('file_type', { length: 255 }).notNull(),
|
||||
filename: text('filename'),
|
||||
|
||||
// 统计信息
|
||||
totalCharCount: integer('total_char_count').notNull(),
|
||||
totalLineCount: integer('total_line_count').notNull(),
|
||||
|
||||
// 元数据
|
||||
metadata: jsonb('metadata').$type<Record<string, any>>(),
|
||||
|
||||
// 页面/块数据
|
||||
pages: jsonb('pages').$type<LobeDocumentPage[]>(),
|
||||
|
||||
// 来源类型
|
||||
sourceType: text('source_type', { enum: ['file', 'web', 'api'] }).notNull(),
|
||||
source: text('source').notNull(), // 文件路径或网页URL
|
||||
|
||||
// 关联文件(可选)
|
||||
fileId: text('file_id').references(() => files.id, { onDelete: 'set null' }),
|
||||
|
||||
// 用户关联
|
||||
userId: text('user_id')
|
||||
.references(() => users.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
clientId: text('client_id'),
|
||||
|
||||
editorData: jsonb('editor_data').$type<Record<string, any>>(),
|
||||
|
||||
// 时间戳
|
||||
...timestamps,
|
||||
},
|
||||
(table) => [
|
||||
index('documents_source_idx').on(table.source),
|
||||
index('documents_file_type_idx').on(table.fileType),
|
||||
index('documents_file_id_idx').on(table.fileId),
|
||||
uniqueIndex('documents_client_id_user_id_unique').on(table.clientId, table.userId),
|
||||
],
|
||||
);
|
||||
|
||||
export type NewDocument = typeof documents.$inferInsert;
|
||||
export type DocumentItem = typeof documents.$inferSelect;
|
||||
export const insertDocumentSchema = createInsertSchema(documents);
|
||||
|
||||
/**
|
||||
* 文档块表 - 将文档内容分割成块并关联到 chunks 表,用于向量检索
|
||||
* 注意:此表可选,如果已经使用 pages 字段存储了文档块,可以不需要此表
|
||||
*/
|
||||
export const documentChunks = pgTable(
|
||||
'document_chunks',
|
||||
{
|
||||
documentId: varchar('document_id', { length: 30 })
|
||||
.references(() => documents.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
chunkId: uuid('chunk_id')
|
||||
.references(() => chunks.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
pageIndex: integer('page_index'),
|
||||
|
||||
userId: text('user_id')
|
||||
.references(() => users.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
createdAt: createdAt(),
|
||||
},
|
||||
(t) => [primaryKey({ columns: [t.documentId, t.chunkId] })],
|
||||
);
|
||||
|
||||
export type NewDocumentChunk = typeof documentChunks.$inferInsert;
|
||||
export type DocumentChunkItem = typeof documentChunks.$inferSelect;
|
||||
@@ -1,5 +1,4 @@
|
||||
/* eslint-disable sort-keys-fix/sort-keys-fix */
|
||||
import { FileSource } from '@lobechat/types';
|
||||
import {
|
||||
boolean,
|
||||
index,
|
||||
@@ -14,6 +13,9 @@ import {
|
||||
} from 'drizzle-orm/pg-core';
|
||||
import { createInsertSchema } from 'drizzle-zod';
|
||||
|
||||
import { LobeDocumentPage } from '@/types/document';
|
||||
import { FileSource } from '@/types/files';
|
||||
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { accessedAt, createdAt, timestamps } from './_helpers';
|
||||
import { asyncTasks } from './asyncTask';
|
||||
@@ -35,6 +37,77 @@ export const globalFiles = pgTable('global_files', {
|
||||
export type NewGlobalFile = typeof globalFiles.$inferInsert;
|
||||
export type GlobalFileItem = typeof globalFiles.$inferSelect;
|
||||
|
||||
/**
|
||||
* 文档表 - 存储文件内容或网页搜索结果
|
||||
*/
|
||||
// @ts-ignore
|
||||
export const documents = pgTable(
|
||||
'documents',
|
||||
{
|
||||
id: varchar('id', { length: 255 })
|
||||
.$defaultFn(() => idGenerator('documents', 16))
|
||||
.primaryKey(),
|
||||
|
||||
// 基本信息
|
||||
title: text('title'),
|
||||
content: text('content'),
|
||||
|
||||
// Special type: custom/folder
|
||||
fileType: varchar('file_type', { length: 255 }).notNull(),
|
||||
filename: text('filename'),
|
||||
|
||||
// 统计信息
|
||||
totalCharCount: integer('total_char_count').notNull(),
|
||||
totalLineCount: integer('total_line_count').notNull(),
|
||||
|
||||
// 元数据
|
||||
metadata: jsonb('metadata').$type<Record<string, any>>(),
|
||||
|
||||
// 页面/块数据
|
||||
pages: jsonb('pages').$type<LobeDocumentPage[]>(),
|
||||
|
||||
// 来源类型
|
||||
sourceType: text('source_type', { enum: ['file', 'web', 'api'] }).notNull(),
|
||||
source: text('source').notNull(), // 文件路径或网页URL
|
||||
|
||||
// 关联文件(可选)
|
||||
// Forward reference to files table defined below
|
||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||
// @ts-expect-error - files is defined later in this file, forward reference is valid at runtime
|
||||
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
||||
fileId: text('file_id').references(() => files.id, { onDelete: 'set null' }),
|
||||
|
||||
// 父文档(用于文件夹层级结构)
|
||||
// @ts-ignore
|
||||
parentId: varchar('parent_id', { length: 255 }).references(() => documents.id, {
|
||||
onDelete: 'set null',
|
||||
}),
|
||||
|
||||
// 用户关联
|
||||
userId: text('user_id')
|
||||
.references(() => users.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
clientId: text('client_id'),
|
||||
|
||||
editorData: jsonb('editor_data').$type<Record<string, any>>(),
|
||||
|
||||
// 时间戳
|
||||
...timestamps,
|
||||
},
|
||||
(table) => [
|
||||
index('documents_source_idx').on(table.source),
|
||||
index('documents_file_type_idx').on(table.fileType),
|
||||
index('documents_file_id_idx').on(table.fileId),
|
||||
index('documents_parent_id_idx').on(table.parentId),
|
||||
uniqueIndex('documents_client_id_user_id_unique').on(table.clientId, table.userId),
|
||||
],
|
||||
);
|
||||
|
||||
export type NewDocument = typeof documents.$inferInsert;
|
||||
export type DocumentItem = typeof documents.$inferSelect;
|
||||
export const insertDocumentSchema = createInsertSchema(documents);
|
||||
|
||||
// @ts-ignore
|
||||
export const files = pgTable(
|
||||
'files',
|
||||
{
|
||||
@@ -60,6 +133,12 @@ export const files = pgTable(
|
||||
url: text('url').notNull(),
|
||||
source: text('source').$type<FileSource>(),
|
||||
|
||||
// 父文档(用于文件夹层级结构)
|
||||
// @ts-ignore
|
||||
parentId: varchar('parent_id', { length: 255 }).references(() => documents.id, {
|
||||
onDelete: 'set null',
|
||||
}),
|
||||
|
||||
clientId: text('client_id'),
|
||||
metadata: jsonb('metadata'),
|
||||
chunkTaskId: uuid('chunk_task_id').references(() => asyncTasks.id, { onDelete: 'set null' }),
|
||||
@@ -72,6 +151,7 @@ export const files = pgTable(
|
||||
(table) => {
|
||||
return {
|
||||
fileHashIdx: index('file_hash_idx').on(table.fileHash),
|
||||
parentIdIdx: index('files_parent_id_idx').on(table.parentId),
|
||||
clientIdUnique: uniqueIndex('files_client_id_user_id_unique').on(
|
||||
table.clientId,
|
||||
table.userId,
|
||||
|
||||
@@ -3,7 +3,6 @@ export * from './aiInfra';
|
||||
export * from './apiKey';
|
||||
export * from './asyncTask';
|
||||
export * from './chatGroup';
|
||||
export * from './document';
|
||||
export * from './file';
|
||||
export * from './generation';
|
||||
export * from './message';
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
integer,
|
||||
jsonb,
|
||||
pgTable,
|
||||
primaryKey,
|
||||
text,
|
||||
uniqueIndex,
|
||||
uuid,
|
||||
@@ -11,8 +12,8 @@ import {
|
||||
vector,
|
||||
} from 'drizzle-orm/pg-core';
|
||||
|
||||
import { timestamps } from './_helpers';
|
||||
import { files } from './file';
|
||||
import { createdAt, timestamps } from './_helpers';
|
||||
import { documents, files } from './file';
|
||||
import { users } from './user';
|
||||
|
||||
export const chunks = pgTable(
|
||||
@@ -86,3 +87,32 @@ export const embeddings = pgTable(
|
||||
|
||||
export type NewEmbeddingsItem = typeof embeddings.$inferInsert;
|
||||
export type EmbeddingsSelectItem = typeof embeddings.$inferSelect;
|
||||
|
||||
/**
|
||||
* 文档块表 - 将文档内容分割成块并关联到 chunks 表,用于向量检索
|
||||
* 注意:此表可选,如果已经使用 pages 字段存储了文档块,可以不需要此表
|
||||
*/
|
||||
export const documentChunks = pgTable(
|
||||
'document_chunks',
|
||||
{
|
||||
documentId: varchar('document_id', { length: 30 })
|
||||
.references(() => documents.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
chunkId: uuid('chunk_id')
|
||||
.references(() => chunks.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
pageIndex: integer('page_index'),
|
||||
|
||||
userId: text('user_id')
|
||||
.references(() => users.id, { onDelete: 'cascade' })
|
||||
.notNull(),
|
||||
|
||||
createdAt: createdAt(),
|
||||
},
|
||||
(t) => [primaryKey({ columns: [t.documentId, t.chunkId] })],
|
||||
);
|
||||
|
||||
export type NewDocumentChunk = typeof documentChunks.$inferInsert;
|
||||
export type DocumentChunkItem = typeof documentChunks.$inferSelect;
|
||||
|
||||
@@ -6,11 +6,10 @@ import { createdAt } from './_helpers';
|
||||
import { agents, agentsFiles, agentsKnowledgeBases } from './agent';
|
||||
import { asyncTasks } from './asyncTask';
|
||||
import { chatGroups, chatGroupsAgents } from './chatGroup';
|
||||
import { documentChunks, documents } from './document';
|
||||
import { files, knowledgeBases } from './file';
|
||||
import { documents, files, knowledgeBases } from './file';
|
||||
import { generationBatches, generationTopics, generations } from './generation';
|
||||
import { messageGroups, messages, messagesFiles } from './message';
|
||||
import { chunks, unstructuredChunks } from './rag';
|
||||
import { chunks, documentChunks, unstructuredChunks } from './rag';
|
||||
import { sessionGroups, sessions } from './session';
|
||||
import { threads, topicDocuments, topics } from './topic';
|
||||
import { users } from './user';
|
||||
|
||||
@@ -6,7 +6,7 @@ import { createInsertSchema } from 'drizzle-zod';
|
||||
import { idGenerator } from '../utils/idGenerator';
|
||||
import { createdAt, timestamps, timestamptz } from './_helpers';
|
||||
import { chatGroups } from './chatGroup';
|
||||
import { documents } from './document';
|
||||
import { documents } from './file';
|
||||
import { sessions } from './session';
|
||||
import { users } from './user';
|
||||
|
||||
|
||||
@@ -0,0 +1,243 @@
|
||||
import dayjs from 'dayjs';
|
||||
import { eq, sql } from 'drizzle-orm';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { genEndDateWhere, genRangeWhere, genStartDateWhere, genWhere } from './genWhere';
|
||||
|
||||
describe('genWhere', () => {
|
||||
describe('genWhere', () => {
|
||||
it('should return undefined when array is empty', () => {
|
||||
const result = genWhere([]);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when all elements are undefined', () => {
|
||||
const result = genWhere([undefined, undefined, undefined]);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return the single SQL condition when only one valid condition exists', () => {
|
||||
const condition = eq(sql`id`, 1);
|
||||
const result = genWhere([condition]);
|
||||
expect(result).toBe(condition);
|
||||
});
|
||||
|
||||
it('should return the single valid SQL condition when mixed with undefined', () => {
|
||||
const condition = eq(sql`id`, 1);
|
||||
const result = genWhere([undefined, condition, undefined]);
|
||||
expect(result).toBe(condition);
|
||||
});
|
||||
|
||||
it('should combine multiple SQL conditions with AND operator', () => {
|
||||
const condition1 = eq(sql`id`, 1);
|
||||
const condition2 = eq(sql`name`, 'test');
|
||||
const result = genWhere([condition1, condition2]);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
// The result should be an AND combination
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should filter out undefined conditions and combine valid ones', () => {
|
||||
const condition1 = eq(sql`id`, 1);
|
||||
const condition2 = eq(sql`name`, 'test');
|
||||
const result = genWhere([undefined, condition1, undefined, condition2, undefined]);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
});
|
||||
|
||||
describe('genStartDateWhere', () => {
|
||||
const mockKey = sql`created_at`;
|
||||
const mockFormat = (date: dayjs.Dayjs) => date.format('YYYY-MM-DD');
|
||||
|
||||
it('should return undefined when date is undefined', () => {
|
||||
const result = genStartDateWhere(undefined, mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when date is empty string', () => {
|
||||
const result = genStartDateWhere('', mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when date is invalid', () => {
|
||||
const result = genStartDateWhere('invalid-date', mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should handle lenient date parsing for malformed dates', () => {
|
||||
// dayjs is lenient and treats '2024-13-45' as valid, so it creates a condition
|
||||
const result = genStartDateWhere('2024-13-45', mockKey, mockFormat);
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should create gte condition for valid ISO date string', () => {
|
||||
const result = genStartDateWhere('2024-01-15', mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should create gte condition for valid date with time', () => {
|
||||
const result = genStartDateWhere('2024-01-15T10:30:00Z', mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle timestamp number as string', () => {
|
||||
const timestamp = Date.now().toString();
|
||||
const result = genStartDateWhere(timestamp, mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should work with custom format function', () => {
|
||||
const customFormat = (date: dayjs.Dayjs) => date.unix();
|
||||
const result = genStartDateWhere('2024-01-15', mockKey, customFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
});
|
||||
|
||||
describe('genEndDateWhere', () => {
|
||||
const mockKey = sql`created_at`;
|
||||
const mockFormat = (date: dayjs.Dayjs) => date.format('YYYY-MM-DD');
|
||||
|
||||
it('should return undefined when date is undefined', () => {
|
||||
const result = genEndDateWhere(undefined, mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when date is empty string', () => {
|
||||
const result = genEndDateWhere('', mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when date is invalid', () => {
|
||||
const result = genEndDateWhere('invalid-date', mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should handle lenient date parsing for malformed dates', () => {
|
||||
// dayjs is lenient and treats '2024-13-45' as valid, so it creates a condition
|
||||
const result = genEndDateWhere('2024-13-45', mockKey, mockFormat);
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should create lte condition with date plus one day', () => {
|
||||
const result = genEndDateWhere('2024-01-15', mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should create lte condition for valid date with time', () => {
|
||||
const result = genEndDateWhere('2024-01-15T10:30:00Z', mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle timestamp number as string', () => {
|
||||
const timestamp = Date.now().toString();
|
||||
const result = genEndDateWhere(timestamp, mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should work with custom format function', () => {
|
||||
const customFormat = (date: dayjs.Dayjs) => date.unix();
|
||||
const result = genEndDateWhere('2024-01-15', mockKey, customFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
});
|
||||
|
||||
describe('genRangeWhere', () => {
|
||||
const mockKey = sql`created_at`;
|
||||
const mockFormat = (date: dayjs.Dayjs) => date.format('YYYY-MM-DD');
|
||||
|
||||
it('should return undefined when range is undefined', () => {
|
||||
const result = genRangeWhere(undefined, mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return undefined when both dates in range are invalid', () => {
|
||||
const result = genRangeWhere(['invalid-date', 'also-invalid'], mockKey, mockFormat);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should create end date condition when only end date is valid', () => {
|
||||
const result = genRangeWhere(['invalid-date', '2024-01-15'], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should create start date condition when only start date is valid', () => {
|
||||
const result = genRangeWhere(['2024-01-15', 'invalid-date'], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should combine both start and end date conditions when both are valid', () => {
|
||||
const result = genRangeWhere(['2024-01-01', '2024-01-31'], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle ISO date strings in range', () => {
|
||||
const result = genRangeWhere(
|
||||
['2024-01-01T00:00:00Z', '2024-01-31T23:59:59Z'],
|
||||
mockKey,
|
||||
mockFormat,
|
||||
);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle timestamp numbers as strings in range', () => {
|
||||
const startTimestamp = new Date('2024-01-01').getTime().toString();
|
||||
const endTimestamp = new Date('2024-01-31').getTime().toString();
|
||||
const result = genRangeWhere([startTimestamp, endTimestamp], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should work with custom format function', () => {
|
||||
const customFormat = (date: dayjs.Dayjs) => date.unix();
|
||||
const result = genRangeWhere(['2024-01-01', '2024-01-31'], mockKey, customFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle edge case where start date is after end date', () => {
|
||||
// The function doesn't validate date order, it just creates the conditions
|
||||
const result = genRangeWhere(['2024-01-31', '2024-01-01'], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
|
||||
it('should handle same date for start and end', () => {
|
||||
const result = genRangeWhere(['2024-01-15', '2024-01-15'], mockKey, mockFormat);
|
||||
|
||||
expect(result).toBeDefined();
|
||||
expect(result?.constructor.name).toBe('SQL');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -113,6 +113,60 @@ const googleChatModels: AIChatModelCard[] = [
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
search: true,
|
||||
video: true,
|
||||
vision: true,
|
||||
},
|
||||
contextWindowTokens: 1_048_576 + 65_536,
|
||||
description:
|
||||
'Gemini 3.0 Pro Preview 是 Google 最先进的思维模型,能够对代码、数学和STEM领域的复杂问题进行推理,以及使用长上下文分析大型数据集、代码库和文档。',
|
||||
displayName: 'Gemini 3.0 Pro Preview',
|
||||
enabled: true,
|
||||
id: 'gemini-3-pro-preview',
|
||||
maxOutput: 65_536,
|
||||
pricing: {
|
||||
units: [
|
||||
{
|
||||
name: 'textInput_cacheRead',
|
||||
strategy: 'tiered',
|
||||
tiers: [
|
||||
{ rate: 0.20, upTo: 200_000 },
|
||||
{ rate: 0.40, upTo: 'infinity' },
|
||||
],
|
||||
unit: 'millionTokens',
|
||||
},
|
||||
{
|
||||
name: 'textInput',
|
||||
strategy: 'tiered',
|
||||
tiers: [
|
||||
{ rate: 2.0, upTo: 200_000 },
|
||||
{ rate: 4.0, upTo: 'infinity' },
|
||||
],
|
||||
unit: 'millionTokens',
|
||||
},
|
||||
{
|
||||
name: 'textOutput',
|
||||
strategy: 'tiered',
|
||||
tiers: [
|
||||
{ rate: 12.0, upTo: 200_000 },
|
||||
{ rate: 18.0, upTo: 'infinity' },
|
||||
],
|
||||
unit: 'millionTokens',
|
||||
},
|
||||
],
|
||||
},
|
||||
releasedAt: '2025-11-18',
|
||||
settings: {
|
||||
extendParams: ['thinkingBudget', 'urlContext'],
|
||||
searchImpl: 'params',
|
||||
searchProvider: 'google',
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
|
||||
@@ -174,10 +174,11 @@ const novitaChatModels: AIChatModelCard[] = [
|
||||
contextWindowTokens: 131_072,
|
||||
displayName: 'OpenAI GPT OSS 120B',
|
||||
id: 'openai/gpt-oss-120b',
|
||||
maxOutput: 32_768,
|
||||
pricing: {
|
||||
units: [
|
||||
{ name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textInput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 0.25, strategy: 'fixed', unit: 'millionTokens' },
|
||||
],
|
||||
},
|
||||
type: 'chat',
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
import { AIChatModelCard } from '../types/aiModel';
|
||||
|
||||
const nvidiaChatModels: AIChatModelCard[] = [
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 128_000,
|
||||
description:
|
||||
'MiniMax-M2 是一款紧凑、快速且经济高效的混合专家(MoE)模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。该模型在多文件编辑、编码-运行-修复闭环、测试校验修复以及复杂的长链接工具链方面表现优异,是开发者工作流的理想选择。',
|
||||
displayName: 'MiniMax-M2',
|
||||
enabled: true,
|
||||
id: 'minimaxai/minimax-m2',
|
||||
maxOutput: 16_384,
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
|
||||
@@ -1,6 +1,18 @@
|
||||
import { AIChatModelCard } from '../types/aiModel';
|
||||
|
||||
const ollamaCloudModels: AIChatModelCard[] = [
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 200_000,
|
||||
description: 'MiniMax M2 是专为编码和代理工作流程构建的高效大型语言模型。',
|
||||
displayName: 'MiniMax M2',
|
||||
enabled: true,
|
||||
id: 'minimax-m2',
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
@@ -36,7 +48,6 @@ const ollamaCloudModels: AIChatModelCard[] = [
|
||||
description:
|
||||
'DeepSeek V3.1:下一代推理模型,提升了复杂推理与链路思考能力,适合需要深入分析的任务。',
|
||||
displayName: 'DeepSeek V3.1',
|
||||
enabled: true,
|
||||
id: 'deepseek-v3.1:671b',
|
||||
type: 'chat',
|
||||
},
|
||||
@@ -88,13 +99,23 @@ const ollamaCloudModels: AIChatModelCard[] = [
|
||||
id: 'qwen3-coder:480b',
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
vision: true,
|
||||
},
|
||||
contextWindowTokens: 262_144,
|
||||
displayName: 'Qwen3 VL 235B Instruct',
|
||||
id: 'qwen3-vl:235b-instruct',
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
vision: true,
|
||||
},
|
||||
contextWindowTokens: 128_000,
|
||||
contextWindowTokens: 262_144,
|
||||
displayName: 'Qwen3 VL 235B',
|
||||
id: 'qwen3-vl:235b',
|
||||
type: 'chat',
|
||||
|
||||
@@ -175,6 +175,51 @@ const qwenChatModels: AIChatModelCard[] = [
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 202_752,
|
||||
description: 'GLM系列模型是智谱AI专为智能体设计的混合推理模型,提供思考与非思考两种模式。',
|
||||
displayName: 'GLM-4.6',
|
||||
id: 'glm-4.6',
|
||||
maxOutput: 16_384,
|
||||
pricing: {
|
||||
currency: 'CNY',
|
||||
units: [
|
||||
{
|
||||
lookup: {
|
||||
prices: {
|
||||
'[0, 0.032]': 3,
|
||||
'[0.032, infinity]': 4,
|
||||
},
|
||||
pricingParams: ['textInputRange'],
|
||||
},
|
||||
name: 'textInput',
|
||||
strategy: 'lookup',
|
||||
unit: 'millionTokens',
|
||||
},
|
||||
{
|
||||
lookup: {
|
||||
prices: {
|
||||
'[0, 0.032]': 14,
|
||||
'[0.032, infinity]': 16,
|
||||
},
|
||||
pricingParams: ['textInputRange'],
|
||||
},
|
||||
name: 'textOutput',
|
||||
strategy: 'lookup',
|
||||
unit: 'millionTokens',
|
||||
},
|
||||
],
|
||||
},
|
||||
settings: {
|
||||
extendParams: ['enableReasoning', 'reasoningBudgetToken'],
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
@@ -218,6 +263,7 @@ const qwenChatModels: AIChatModelCard[] = [
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
@@ -1451,6 +1497,48 @@ const qwenChatModels: AIChatModelCard[] = [
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
vision: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
description: 'Qwen3 VL 32B 思考模式(开源版),针对高难度强推理与长视频理解场景,提供顶尖的视觉+文本推理能力。',
|
||||
displayName: 'Qwen3 VL 32B Thinking',
|
||||
id: 'qwen3-vl-32b-thinking',
|
||||
maxOutput: 32_768,
|
||||
organization: 'Qwen',
|
||||
pricing: {
|
||||
currency: 'CNY',
|
||||
units: [
|
||||
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 20, strategy: 'fixed', unit: 'millionTokens' },
|
||||
],
|
||||
},
|
||||
settings: {
|
||||
extendParams: ['enableReasoning', 'reasoningBudgetToken'],
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
vision: true,
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
description: 'Qwen3 VL 32B 非思考模式(Instruct),适用于非思考指令场景,保持强大的视觉理解能力。',
|
||||
displayName: 'Qwen3 VL 32B Instruct',
|
||||
id: 'qwen3-vl-32b-instruct',
|
||||
maxOutput: 32_768,
|
||||
organization: 'Qwen',
|
||||
pricing: {
|
||||
currency: 'CNY',
|
||||
units: [
|
||||
{ name: 'textInput', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
|
||||
],
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
config: {
|
||||
deploymentName: 'qwen-math-turbo-latest',
|
||||
|
||||
@@ -2,6 +2,26 @@ import { AIChatModelCard, AIImageModelCard } from '../types/aiModel';
|
||||
|
||||
// https://siliconflow.cn/zh-cn/models
|
||||
const siliconcloudChatModels: AIChatModelCard[] = [
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
reasoning: true,
|
||||
},
|
||||
contextWindowTokens: 128_000,
|
||||
description:
|
||||
'MiniMax-M2 为智能体重新定义了效率。它是一款紧凑、快速且经济高效的 MoE 模型,拥有 2300 亿总参数和 100 亿激活参数,专为编码和智能体任务的顶级性能而打造,同时保持强大的通用智能。仅需 100 亿激活参数,MiniMax-M2 就能提供与大规模模型相媲美的性能,使其成为高效率应用的理想选择。',
|
||||
displayName: 'MiniMax-M2',
|
||||
id: 'MiniMaxAI/MiniMax-M2',
|
||||
pricing: {
|
||||
currency: 'CNY',
|
||||
units: [
|
||||
{ name: 'textInput', rate: 2.1, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 8.4, strategy: 'fixed', unit: 'millionTokens' },
|
||||
],
|
||||
},
|
||||
releasedAt: '2025-10-28',
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
|
||||
@@ -1565,23 +1565,6 @@ const vercelAIGatewayChatModels: AIChatModelCard[] = [
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
description:
|
||||
'DeepSeek-R1-Distill-Llama-70B 是 70B Llama 模型的蒸馏、更高效变体。它在文本生成任务中保持强大性能,减少计算开销以便于部署和研究。由 Groq 使用其自定义语言处理单元 (LPU) 硬件提供服务,以提供快速高效的推理。',
|
||||
displayName: 'DeepSeek R1 Distill Llama 70B',
|
||||
id: 'deepseek/deepseek-r1-distill-llama-70b',
|
||||
pricing: {
|
||||
units: [
|
||||
{ name: 'textInput', rate: 0.75, strategy: 'fixed', unit: 'millionTokens' },
|
||||
{ name: 'textOutput', rate: 0.99, strategy: 'fixed', unit: 'millionTokens' },
|
||||
],
|
||||
},
|
||||
type: 'chat',
|
||||
},
|
||||
{
|
||||
abilities: {
|
||||
functionCall: true,
|
||||
|
||||
@@ -37,7 +37,7 @@ const doubaoChatModels: AIChatModelCard[] = [
|
||||
config: {
|
||||
deploymentName: 'kimi-k2-250905',
|
||||
},
|
||||
contextWindowTokens: 131_072,
|
||||
contextWindowTokens: 262_144,
|
||||
description:
|
||||
'Kimi-K2 是一款Moonshot AI推出的具备超强代码和 Agent 能力的 MoE 架构基础模型,总参数 1T,激活参数 32B。在通用知识推理、编程、数学、Agent 等主要类别的基准性能测试中,K2 模型的性能超过其他主流开源模型。',
|
||||
displayName: 'Kimi K2',
|
||||
|
||||
@@ -1007,78 +1007,122 @@ describe('LobeOpenAICompatibleFactory', () => {
|
||||
});
|
||||
|
||||
describe('responses routing', () => {
|
||||
it('should route to Responses API when chatCompletion.useResponse is true', async () => {
|
||||
const LobeMockProviderUseResponses = createOpenAICompatibleRuntime({
|
||||
baseURL: 'https://api.test.com/v1',
|
||||
chatCompletion: {
|
||||
useResponse: true,
|
||||
},
|
||||
provider: ModelProvider.OpenAI,
|
||||
});
|
||||
it(
|
||||
'should route to Responses API when chatCompletion.useResponse is true',
|
||||
async () => {
|
||||
const LobeMockProviderUseResponses = createOpenAICompatibleRuntime({
|
||||
baseURL: 'https://api.test.com/v1',
|
||||
chatCompletion: {
|
||||
useResponse: true,
|
||||
},
|
||||
provider: ModelProvider.OpenAI,
|
||||
});
|
||||
|
||||
const inst = new LobeMockProviderUseResponses({ apiKey: 'test' });
|
||||
const inst = new LobeMockProviderUseResponses({ apiKey: 'test' });
|
||||
|
||||
// mock responses.create to return a stream-like with tee
|
||||
const prod = new ReadableStream();
|
||||
const debug = new ReadableStream();
|
||||
const mockResponsesCreate = vi
|
||||
.spyOn(inst['client'].responses, 'create')
|
||||
.mockResolvedValue({ tee: () => [prod, debug] } as any);
|
||||
// Mock responses.create to return a proper stream-like object
|
||||
const mockResponsesCreate = vi
|
||||
.spyOn(inst['client'].responses, 'create')
|
||||
.mockResolvedValue({
|
||||
toReadableStream: () =>
|
||||
new ReadableStream({
|
||||
start(controller) {
|
||||
controller.close();
|
||||
},
|
||||
}),
|
||||
} as any);
|
||||
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'any-model',
|
||||
temperature: 0,
|
||||
});
|
||||
// Mock getModelPricing to prevent async issues
|
||||
vi.mock('../../utils/model', () => ({
|
||||
getModelPricing: vi.fn().mockResolvedValue({}),
|
||||
}));
|
||||
|
||||
expect(mockResponsesCreate).toHaveBeenCalled();
|
||||
});
|
||||
try {
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'any-model',
|
||||
temperature: 0,
|
||||
});
|
||||
} catch (e) {
|
||||
// Catch errors from incomplete mocking, we only care that responses.create was called
|
||||
}
|
||||
|
||||
it('should route to Responses API when model matches useResponseModels', async () => {
|
||||
const LobeMockProviderUseResponseModels = createOpenAICompatibleRuntime({
|
||||
baseURL: 'https://api.test.com/v1',
|
||||
chatCompletion: {
|
||||
useResponseModels: ['special-model', /special-\w+/],
|
||||
},
|
||||
provider: ModelProvider.OpenAI,
|
||||
});
|
||||
const inst = new LobeMockProviderUseResponseModels({ apiKey: 'test' });
|
||||
const spy = vi.spyOn(inst['client'].responses, 'create');
|
||||
// Prevent hanging by mocking normal chat completion stream
|
||||
vi.spyOn(inst['client'].chat.completions, 'create').mockResolvedValue(
|
||||
new ReadableStream() as any,
|
||||
);
|
||||
expect(mockResponsesCreate).toHaveBeenCalled();
|
||||
},
|
||||
{ timeout: 10000 },
|
||||
);
|
||||
|
||||
// First invocation: model contains the string
|
||||
spy.mockResolvedValueOnce({
|
||||
tee: () => [new ReadableStream(), new ReadableStream()],
|
||||
} as any);
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'prefix-special-model-suffix',
|
||||
temperature: 0,
|
||||
});
|
||||
expect(spy).toHaveBeenCalledTimes(1);
|
||||
it(
|
||||
'should route to Responses API when model matches useResponseModels',
|
||||
async () => {
|
||||
const LobeMockProviderUseResponseModels = createOpenAICompatibleRuntime({
|
||||
baseURL: 'https://api.test.com/v1',
|
||||
chatCompletion: {
|
||||
useResponseModels: ['special-model', /special-\w+/],
|
||||
},
|
||||
provider: ModelProvider.OpenAI,
|
||||
});
|
||||
const inst = new LobeMockProviderUseResponseModels({ apiKey: 'test' });
|
||||
const spy = vi.spyOn(inst['client'].responses, 'create');
|
||||
// Prevent hanging by mocking normal chat completion stream
|
||||
vi.spyOn(inst['client'].chat.completions, 'create').mockResolvedValue(
|
||||
new ReadableStream() as any,
|
||||
);
|
||||
|
||||
// Second invocation: model matches the RegExp
|
||||
spy.mockResolvedValueOnce({
|
||||
tee: () => [new ReadableStream(), new ReadableStream()],
|
||||
} as any);
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'special-xyz',
|
||||
temperature: 0,
|
||||
});
|
||||
expect(spy).toHaveBeenCalledTimes(2);
|
||||
// First invocation: model contains the string
|
||||
spy.mockResolvedValueOnce({
|
||||
toReadableStream: () =>
|
||||
new ReadableStream({
|
||||
start(controller) {
|
||||
controller.close();
|
||||
},
|
||||
}),
|
||||
} as any);
|
||||
try {
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'prefix-special-model-suffix',
|
||||
temperature: 0,
|
||||
});
|
||||
} catch (e) {
|
||||
// Catch errors from incomplete mocking
|
||||
}
|
||||
expect(spy).toHaveBeenCalledTimes(1);
|
||||
|
||||
// Third invocation: model does not match any useResponseModels patterns
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'unrelated-model',
|
||||
temperature: 0,
|
||||
});
|
||||
expect(spy).toHaveBeenCalledTimes(2); // Ensure no additional calls were made
|
||||
});
|
||||
// Second invocation: model matches the RegExp
|
||||
spy.mockResolvedValueOnce({
|
||||
toReadableStream: () =>
|
||||
new ReadableStream({
|
||||
start(controller) {
|
||||
controller.close();
|
||||
},
|
||||
}),
|
||||
} as any);
|
||||
try {
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'special-xyz',
|
||||
temperature: 0,
|
||||
});
|
||||
} catch (e) {
|
||||
// Catch errors from incomplete mocking
|
||||
}
|
||||
expect(spy).toHaveBeenCalledTimes(2);
|
||||
|
||||
// Third invocation: model does not match any useResponseModels patterns
|
||||
try {
|
||||
await inst.chat({
|
||||
messages: [{ content: 'hi', role: 'user' }],
|
||||
model: 'unrelated-model',
|
||||
temperature: 0,
|
||||
});
|
||||
} catch (e) {
|
||||
// Catch errors
|
||||
}
|
||||
expect(spy).toHaveBeenCalledTimes(2); // Ensure no additional calls were made
|
||||
},
|
||||
{ timeout: 10000 },
|
||||
);
|
||||
});
|
||||
|
||||
describe('DEBUG', () => {
|
||||
|
||||
@@ -138,10 +138,10 @@ export interface OpenAICompatibleFactoryOptions<T extends Record<string, any> =
|
||||
useToolsCalling?: boolean;
|
||||
};
|
||||
models?:
|
||||
| ((params: { client: OpenAI }) => Promise<ChatModelCard[]>)
|
||||
| {
|
||||
transformModel?: (model: OpenAI.Model) => ChatModelCard;
|
||||
};
|
||||
| ((params: { client: OpenAI }) => Promise<ChatModelCard[]>)
|
||||
| {
|
||||
transformModel?: (model: OpenAI.Model) => ChatModelCard;
|
||||
};
|
||||
provider: string;
|
||||
responses?: {
|
||||
handlePayload?: (
|
||||
@@ -205,6 +205,81 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
this.logPrefix = `lobe-model-runtime:${this.id}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if should use Responses API based on various configuration options
|
||||
* @param params - Configuration parameters
|
||||
* @returns true if should use Responses API, false otherwise
|
||||
*/
|
||||
private shouldUseResponsesAPI(params: {
|
||||
/** Context for logging (e.g., 'chat', 'generateObject', 'tool calling') */
|
||||
context?: string;
|
||||
/** Factory/instance level useResponse flag */
|
||||
flagUseResponse?: boolean;
|
||||
/** Factory/instance level model patterns for Responses API */
|
||||
flagUseResponseModels?: Array<string | RegExp>;
|
||||
/** The model ID to check */
|
||||
model?: string;
|
||||
/** Explicit responseApi flag */
|
||||
responseApi?: boolean;
|
||||
/** User-specified API mode (highest priority) */
|
||||
userApiMode?: string;
|
||||
}): boolean {
|
||||
const {
|
||||
model,
|
||||
userApiMode,
|
||||
responseApi,
|
||||
flagUseResponse,
|
||||
flagUseResponseModels,
|
||||
context = 'operation',
|
||||
} = params;
|
||||
|
||||
const log = debug(`${this.logPrefix}:shouldUseResponsesAPI`);
|
||||
|
||||
// Priority 1: User explicitly set apiMode via switch
|
||||
if (userApiMode === 'responses') {
|
||||
log('using Responses API: explicit userApiMode=%s', userApiMode);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Priority 2: userApiMode is explicitly set to something else
|
||||
if (userApiMode !== undefined) {
|
||||
log('using Chat Completions API: userApiMode=%s', userApiMode);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Priority 3: Explicit responseApi flag
|
||||
if (responseApi) {
|
||||
log('using Responses API: explicit responseApi flag for %s', context);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Priority 4: Factory/instance level useResponse flag
|
||||
if (flagUseResponse) {
|
||||
log('using Responses API: flagUseResponse=true for %s', context);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Priority 5: Check if model matches useResponseModels patterns
|
||||
if (model && flagUseResponseModels?.length) {
|
||||
const matches = flagUseResponseModels.some((m: string | RegExp) =>
|
||||
typeof m === 'string' ? model.includes(m) : (m as RegExp).test(model),
|
||||
);
|
||||
if (matches) {
|
||||
log('using Responses API: model %s matches useResponseModels config', model);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Priority 6: Check built-in responsesAPIModels
|
||||
if (model && responsesAPIModels.has(model)) {
|
||||
log('using Responses API: model %s in built-in responsesAPIModels', model);
|
||||
return true;
|
||||
}
|
||||
|
||||
log('using Chat Completions API for %s', context);
|
||||
return false;
|
||||
}
|
||||
|
||||
async chat({ responseMode, ...payload }: ChatStreamPayload, options?: ChatMethodOptions) {
|
||||
try {
|
||||
const log = debug(`${this.logPrefix}:chat`);
|
||||
@@ -212,41 +287,39 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
|
||||
log('chat called with model: %s, stream: %s', payload.model, payload.stream ?? true);
|
||||
|
||||
// 工厂级 Responses API 路由控制(支持实例覆盖)
|
||||
const modelId = (payload as any).model as string | undefined;
|
||||
const shouldUseResponses = (() => {
|
||||
const instanceChat = ((this._options as any).chatCompletion || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceChat.useResponse ?? (chatCompletion ? chatCompletion.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceChat.useResponseModels ?? chatCompletion?.useResponseModels;
|
||||
|
||||
if (!chatCompletion && !instanceChat) return false;
|
||||
if (flagUseResponse) return true;
|
||||
if (!modelId || !flagUseResponseModels?.length) return false;
|
||||
return flagUseResponseModels.some((m: string | RegExp) =>
|
||||
typeof m === 'string' ? modelId.includes(m) : (m as RegExp).test(modelId),
|
||||
);
|
||||
})();
|
||||
|
||||
let processedPayload: any = payload;
|
||||
const userApiMode = (payload as any).apiMode as string | undefined;
|
||||
const modelId = (payload as any).model as string | undefined;
|
||||
|
||||
const instanceChat = ((this._options as any).chatCompletion || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceChat.useResponse ?? (chatCompletion ? chatCompletion.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceChat.useResponseModels ?? chatCompletion?.useResponseModels;
|
||||
|
||||
// Determine if should use Responses API
|
||||
const shouldUseResponses = this.shouldUseResponsesAPI({
|
||||
context: 'chat',
|
||||
flagUseResponse,
|
||||
flagUseResponseModels,
|
||||
model: modelId,
|
||||
userApiMode,
|
||||
});
|
||||
|
||||
if (shouldUseResponses) {
|
||||
log('using Responses API mode');
|
||||
processedPayload = { ...payload, apiMode: 'responses' } as any;
|
||||
} else {
|
||||
log('using Chat Completions API mode');
|
||||
}
|
||||
|
||||
// 再进行工厂级处理
|
||||
const postPayload = chatCompletion?.handlePayload
|
||||
? chatCompletion.handlePayload(processedPayload, this._options)
|
||||
: ({
|
||||
...processedPayload,
|
||||
stream: processedPayload.stream ?? true,
|
||||
} as OpenAI.ChatCompletionCreateParamsStreaming);
|
||||
...processedPayload,
|
||||
stream: processedPayload.stream ?? true,
|
||||
} as OpenAI.ChatCompletionCreateParamsStreaming);
|
||||
|
||||
if ((postPayload as any).apiMode === 'responses') {
|
||||
return this.handleResponseAPIMode(processedPayload, options);
|
||||
@@ -312,13 +385,13 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
return StreamingResponse(
|
||||
chatCompletion?.handleStream
|
||||
? chatCompletion.handleStream(prod, {
|
||||
callbacks: streamOptions.callbacks,
|
||||
inputStartAt,
|
||||
})
|
||||
callbacks: streamOptions.callbacks,
|
||||
inputStartAt,
|
||||
})
|
||||
: OpenAIStream(prod, {
|
||||
...streamOptions,
|
||||
inputStartAt,
|
||||
}),
|
||||
...streamOptions,
|
||||
inputStartAt,
|
||||
}),
|
||||
{
|
||||
headers: options?.headers,
|
||||
},
|
||||
@@ -342,9 +415,9 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
return StreamingResponse(
|
||||
chatCompletion?.handleStream
|
||||
? chatCompletion.handleStream(stream, {
|
||||
callbacks: streamOptions.callbacks,
|
||||
inputStartAt,
|
||||
})
|
||||
callbacks: streamOptions.callbacks,
|
||||
inputStartAt,
|
||||
})
|
||||
: OpenAIStream(stream, { ...streamOptions, enableStreaming: false, inputStartAt }),
|
||||
{
|
||||
headers: options?.headers,
|
||||
@@ -500,47 +573,23 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
}
|
||||
|
||||
// Factory-level Responses API routing control (supports instance override)
|
||||
const shouldUseResponses = (() => {
|
||||
const instanceGenerateObject = ((this._options as any).generateObject || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceGenerateObject.useResponse ??
|
||||
(generateObjectConfig ? generateObjectConfig.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceGenerateObject.useResponseModels ?? generateObjectConfig?.useResponseModels;
|
||||
const instanceGenerateObject = ((this._options as any).generateObject || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceGenerateObject.useResponse ??
|
||||
(generateObjectConfig ? generateObjectConfig.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceGenerateObject.useResponseModels ?? generateObjectConfig?.useResponseModels;
|
||||
|
||||
if (responseApi) {
|
||||
log('using Responses API due to explicit responseApi flag');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (flagUseResponse) {
|
||||
log('using Responses API due to useResponse flag');
|
||||
return true;
|
||||
}
|
||||
|
||||
// Use factory-configured model list if provided
|
||||
if (model && flagUseResponseModels?.length) {
|
||||
const matches = flagUseResponseModels.some((m: string | RegExp) =>
|
||||
typeof m === 'string' ? model.includes(m) : (m as RegExp).test(model),
|
||||
);
|
||||
if (matches) {
|
||||
log('using Responses API: model %s matches useResponseModels config', model);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Default: use built-in responsesAPIModels
|
||||
if (model && responsesAPIModels.has(model)) {
|
||||
log('using Responses API: model %s in built-in responsesAPIModels', model);
|
||||
return true;
|
||||
}
|
||||
|
||||
log('using Chat Completions API for generateObject');
|
||||
return false;
|
||||
})();
|
||||
const shouldUseResponses = this.shouldUseResponsesAPI({
|
||||
context: 'generateObject',
|
||||
flagUseResponse,
|
||||
flagUseResponseModels,
|
||||
model,
|
||||
responseApi,
|
||||
});
|
||||
|
||||
// Apply schema transformation if configured
|
||||
const processedSchema = generateObjectConfig?.handleSchema
|
||||
@@ -790,11 +839,11 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
...res,
|
||||
...(reasoning || reasoning_effort
|
||||
? {
|
||||
reasoning: {
|
||||
...reasoning,
|
||||
...(reasoning_effort && { effort: reasoning_effort }),
|
||||
},
|
||||
}
|
||||
reasoning: {
|
||||
...reasoning,
|
||||
...(reasoning_effort && { effort: reasoning_effort }),
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
input,
|
||||
...(max_tokens && { max_output_tokens: max_tokens }),
|
||||
@@ -885,47 +934,23 @@ export const createOpenAICompatibleRuntime = <T extends Record<string, any> = an
|
||||
);
|
||||
|
||||
// Factory-level Responses API routing control (supports instance override)
|
||||
const shouldUseResponses = (() => {
|
||||
const instanceGenerateObject = ((this._options as any).generateObject || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceGenerateObject.useResponse ??
|
||||
(generateObjectConfig ? generateObjectConfig.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceGenerateObject.useResponseModels ?? generateObjectConfig?.useResponseModels;
|
||||
const instanceGenerateObject = ((this._options as any).generateObject || {}) as {
|
||||
useResponse?: boolean;
|
||||
useResponseModels?: Array<string | RegExp>;
|
||||
};
|
||||
const flagUseResponse =
|
||||
instanceGenerateObject.useResponse ??
|
||||
(generateObjectConfig ? generateObjectConfig.useResponse : undefined);
|
||||
const flagUseResponseModels =
|
||||
instanceGenerateObject.useResponseModels ?? generateObjectConfig?.useResponseModels;
|
||||
|
||||
if (responseApi) {
|
||||
log('using Responses API due to explicit responseApi flag');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (flagUseResponse) {
|
||||
log('using Responses API due to useResponse flag');
|
||||
return true;
|
||||
}
|
||||
|
||||
// Use factory-configured model list if provided
|
||||
if (model && flagUseResponseModels?.length) {
|
||||
const matches = flagUseResponseModels.some((m: string | RegExp) =>
|
||||
typeof m === 'string' ? model.includes(m) : (m as RegExp).test(model),
|
||||
);
|
||||
if (matches) {
|
||||
log('using Responses API: model %s matches useResponseModels config', model);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Default: use built-in responsesAPIModels
|
||||
if (model && responsesAPIModels.has(model)) {
|
||||
log('using Responses API: model %s in built-in responsesAPIModels', model);
|
||||
return true;
|
||||
}
|
||||
|
||||
log('using Chat Completions API for tool calling');
|
||||
return false;
|
||||
})();
|
||||
const shouldUseResponses = this.shouldUseResponsesAPI({
|
||||
context: 'tool calling',
|
||||
flagUseResponse,
|
||||
flagUseResponseModels,
|
||||
model,
|
||||
responseApi,
|
||||
});
|
||||
|
||||
if (shouldUseResponses) {
|
||||
log('calling responses.create for tool calling');
|
||||
|
||||
@@ -5,7 +5,7 @@ import { Mock, afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { responsesAPIModels } from '../../const/models';
|
||||
import { ChatStreamPayload } from '../../types/chat';
|
||||
import * as modelParseModule from '../../utils/modelParse';
|
||||
import { LobeNewAPIAI, NewAPIModelCard, NewAPIPricing, handlePayload, params } from './index';
|
||||
import { LobeNewAPIAI, NewAPIModelCard, NewAPIPricing, params } from './index';
|
||||
|
||||
// Mock external dependencies
|
||||
vi.mock('../../utils/modelParse');
|
||||
@@ -701,78 +701,6 @@ describe('NewAPI Runtime - 100% Branch Coverage', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('HandlePayload Function - Direct Testing', () => {
|
||||
beforeEach(() => {
|
||||
// Mock responsesAPIModels as a Set for testing
|
||||
(responsesAPIModels as any).has = vi.fn((model: string) => model === 'o1-pro');
|
||||
});
|
||||
|
||||
it('should add apiMode for models in responsesAPIModels set', () => {
|
||||
(responsesAPIModels as any).has = vi.fn((model: string) => model === 'o1-pro');
|
||||
|
||||
const payload: ChatStreamPayload = {
|
||||
model: 'o1-pro',
|
||||
messages: [{ role: 'user', content: 'test' }],
|
||||
temperature: 0.5,
|
||||
};
|
||||
|
||||
const result = handlePayload(payload);
|
||||
expect(result).toEqual({ ...payload, apiMode: 'responses' });
|
||||
});
|
||||
|
||||
it('should add apiMode for gpt- models', () => {
|
||||
(responsesAPIModels as any).has = vi.fn(() => false);
|
||||
|
||||
const payload: ChatStreamPayload = {
|
||||
model: 'gpt-4o',
|
||||
messages: [{ role: 'user', content: 'test' }],
|
||||
temperature: 0.5,
|
||||
};
|
||||
|
||||
const result = handlePayload(payload);
|
||||
expect(result).toEqual({ ...payload, apiMode: 'responses' });
|
||||
});
|
||||
|
||||
it('should add apiMode for o1 models', () => {
|
||||
(responsesAPIModels as any).has = vi.fn(() => false);
|
||||
|
||||
const payload: ChatStreamPayload = {
|
||||
model: 'o1-mini',
|
||||
messages: [{ role: 'user', content: 'test' }],
|
||||
temperature: 0.5,
|
||||
};
|
||||
|
||||
const result = handlePayload(payload);
|
||||
expect(result).toEqual({ ...payload, apiMode: 'responses' });
|
||||
});
|
||||
|
||||
it('should add apiMode for o3 models', () => {
|
||||
(responsesAPIModels as any).has = vi.fn(() => false);
|
||||
|
||||
const payload: ChatStreamPayload = {
|
||||
model: 'o3-turbo',
|
||||
messages: [{ role: 'user', content: 'test' }],
|
||||
temperature: 0.5,
|
||||
};
|
||||
|
||||
const result = handlePayload(payload);
|
||||
expect(result).toEqual({ ...payload, apiMode: 'responses' });
|
||||
});
|
||||
|
||||
it('should not modify payload for regular models', () => {
|
||||
(responsesAPIModels as any).has = vi.fn(() => false);
|
||||
|
||||
const payload: ChatStreamPayload = {
|
||||
model: 'claude-3-sonnet',
|
||||
messages: [{ role: 'user', content: 'test' }],
|
||||
temperature: 0.5,
|
||||
};
|
||||
|
||||
const result = handlePayload(payload);
|
||||
expect(result).toEqual(payload);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Routers Function - Direct Testing', () => {
|
||||
it('should generate routers with correct apiTypes', () => {
|
||||
const options = { apiKey: 'test', baseURL: 'https://api.newapi.com/v1' };
|
||||
@@ -823,11 +751,11 @@ describe('NewAPI Runtime - 100% Branch Coverage', () => {
|
||||
expect(routers[3].options.baseURL).toBe('https://custom.com/v1');
|
||||
});
|
||||
|
||||
it('should configure openai router with handlePayload', () => {
|
||||
it('should configure openai router with useResponseModels', () => {
|
||||
const options = { apiKey: 'test', baseURL: 'https://custom.com/v1' };
|
||||
const routers = params.routers(options);
|
||||
|
||||
expect((routers[3].options as any).chatCompletion?.handlePayload).toBe(handlePayload);
|
||||
expect((routers[3].options as any).chatCompletion?.useResponseModels).toBeDefined();
|
||||
});
|
||||
|
||||
it('should filter anthropic models for anthropic router', () => {
|
||||
|
||||
@@ -4,7 +4,6 @@ import urlJoin from 'url-join';
|
||||
import { responsesAPIModels } from '../../const/models';
|
||||
import { createRouterRuntime } from '../../core/RouterRuntime';
|
||||
import { CreateRouterRuntimeOptions } from '../../core/RouterRuntime/createRuntime';
|
||||
import { ChatStreamPayload } from '../../types/chat';
|
||||
import { detectModelProvider, processMultiProviderModelList } from '../../utils/modelParse';
|
||||
|
||||
export interface NewAPIModelCard {
|
||||
@@ -26,18 +25,6 @@ export interface NewAPIPricing {
|
||||
supported_endpoint_types?: string[];
|
||||
}
|
||||
|
||||
export const handlePayload = (payload: ChatStreamPayload) => {
|
||||
// Handle OpenAI responses API mode
|
||||
if (
|
||||
responsesAPIModels.has(payload.model) ||
|
||||
payload.model.includes('gpt-') ||
|
||||
/^o\d/.test(payload.model)
|
||||
) {
|
||||
return { ...payload, apiMode: 'responses' };
|
||||
}
|
||||
return payload;
|
||||
};
|
||||
|
||||
export const params = {
|
||||
debug: {
|
||||
chatCompletion: () => process.env.DEBUG_NEWAPI_CHAT_COMPLETION === '1',
|
||||
@@ -178,7 +165,7 @@ export const params = {
|
||||
...options,
|
||||
baseURL: urlJoin(userBaseURL, '/v1'),
|
||||
chatCompletion: {
|
||||
handlePayload,
|
||||
useResponseModels: [...Array.from(responsesAPIModels), /gpt-\d(?!\d)/, /^o\d/],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -1548,8 +1548,9 @@ describe('LobeOpenRouterAI - custom features', () => {
|
||||
const models = await params.models();
|
||||
|
||||
const mixedModel = models.find((m) => m.id === 'mixed-free/model');
|
||||
// Input or output is 0, so should be marked as free
|
||||
expect(mixedModel?.displayName).toContain('(free)');
|
||||
// Input or output is 0. Current behavior does not append '(free)' for mixed pricing,
|
||||
// so assert the displayName equals the cleaned model name.
|
||||
expect(mixedModel?.displayName).toBe('Mixed Free Model');
|
||||
});
|
||||
|
||||
it('should handle very large pricing values', async () => {
|
||||
|
||||
@@ -99,7 +99,7 @@ export const params = {
|
||||
const cachedInputPrice = formatPrice(pricing.input_cache_read);
|
||||
const writeCacheInputPrice = formatPrice(pricing.input_cache_write);
|
||||
|
||||
const isFree = (inputPrice === 0 || outputPrice === 0) && !displayName.endsWith('(free)');
|
||||
const isFree = inputPrice === 0 && outputPrice === 0 && !displayName.endsWith('(free)');
|
||||
if (isFree) {
|
||||
displayName += ' (free)';
|
||||
}
|
||||
|
||||
@@ -108,10 +108,13 @@ export interface ModelPerformance {
|
||||
export interface MessageMetadata extends ModelUsage, ModelPerformance {
|
||||
activeBranchIndex?: number;
|
||||
activeColumn?: boolean;
|
||||
finishType?: string;
|
||||
/**
|
||||
* Message collapse state
|
||||
* true: collapsed, false/undefined: expanded
|
||||
*/
|
||||
collapsed?: boolean;
|
||||
compare?: boolean;
|
||||
usage?: ModelUsage;
|
||||
performance?: ModelPerformance;
|
||||
}
|
||||
|
||||
@@ -7,12 +7,12 @@ import { LobeToolRenderType } from '../../tool';
|
||||
// ToolIntervention must be defined first to avoid circular dependency
|
||||
export interface ToolIntervention {
|
||||
rejectedReason?: string;
|
||||
status?: 'pending' | 'approved' | 'rejected' | 'none';
|
||||
status?: 'pending' | 'approved' | 'rejected' | 'aborted' | 'none';
|
||||
}
|
||||
|
||||
export const ToolInterventionSchema = z.object({
|
||||
rejectedReason: z.string().optional(),
|
||||
status: z.enum(['pending', 'approved', 'rejected', 'none']).optional(),
|
||||
status: z.enum(['pending', 'approved', 'rejected', 'aborted', 'none']).optional(),
|
||||
});
|
||||
|
||||
export interface ChatPluginPayload {
|
||||
|
||||
@@ -48,6 +48,12 @@ export interface UniformSearchResponse {
|
||||
}
|
||||
|
||||
export interface SearchServiceImpl {
|
||||
crawlPages(params: CrawlMultiPagesQuery): Promise<{ results: CrawlUniformResult[] }>;
|
||||
webSearch(params: SearchQuery): Promise<UniformSearchResponse>;
|
||||
crawlPages(
|
||||
params: CrawlMultiPagesQuery,
|
||||
options?: { signal?: AbortSignal },
|
||||
): Promise<{ results: CrawlUniformResult[] }>;
|
||||
webSearch(
|
||||
params: SearchQuery,
|
||||
options?: { signal?: AbortSignal },
|
||||
): Promise<UniformSearchResponse>;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user