Commit f9399e27 by dd Committed by GitHub

Merge branch 'QuantumNous:main' into main

parents d46e6d42 41ea9388
<p align="right"> <p align="right">
<a href="./README.md">中文</a> | <strong>English</strong> <a href="./README.md">中文</a> | <strong>English</strong> | <a href="./README.fr.md">Français</a>
</p> </p>
<div align="center"> <div align="center">
......
This diff is collapsed. Click to expand it.
<p align="right"> <p align="right">
<strong>中文</strong> | <a href="./README.en.md">English</a> <strong>中文</strong> | <a href="./README.en.md">English</a> | <a href="./README.fr.md">Français</a>
</p> </p>
<div align="center"> <div align="center">
......
...@@ -24,7 +24,7 @@ type Task struct { ...@@ -24,7 +24,7 @@ type Task struct {
ID int64 `json:"id" gorm:"primary_key;AUTO_INCREMENT"` ID int64 `json:"id" gorm:"primary_key;AUTO_INCREMENT"`
CreatedAt int64 `json:"created_at" gorm:"index"` CreatedAt int64 `json:"created_at" gorm:"index"`
UpdatedAt int64 `json:"updated_at"` UpdatedAt int64 `json:"updated_at"`
TaskID string `json:"task_id" gorm:"type:varchar(50);index"` // 第三方id,不一定有/ song id\ Task id TaskID string `json:"task_id" gorm:"type:varchar(191);index"` // 第三方id,不一定有/ song id\ Task id
Platform constant.TaskPlatform `json:"platform" gorm:"type:varchar(30);index"` // 平台 Platform constant.TaskPlatform `json:"platform" gorm:"type:varchar(30);index"` // 平台
UserId int `json:"user_id" gorm:"index"` UserId int `json:"user_id" gorm:"index"`
ChannelId int `json:"channel_id" gorm:"index"` ChannelId int `json:"channel_id" gorm:"index"`
......
...@@ -18,7 +18,7 @@ import ( ...@@ -18,7 +18,7 @@ import (
// Otherwise, the sensitive information will be saved on local storage in plain text! // Otherwise, the sensitive information will be saved on local storage in plain text!
type User struct { type User struct {
Id int `json:"id"` Id int `json:"id"`
Username string `json:"username" gorm:"unique;index" validate:"max=12"` Username string `json:"username" gorm:"unique;index" validate:"max=20"`
Password string `json:"password" gorm:"not null;" validate:"min=8,max=20"` Password string `json:"password" gorm:"not null;" validate:"min=8,max=20"`
OriginalPassword string `json:"original_password" gorm:"-:all"` // this field is only for Password change verification, don't save it to database! OriginalPassword string `json:"original_password" gorm:"-:all"` // this field is only for Password change verification, don't save it to database!
DisplayName string `json:"display_name" gorm:"index" validate:"max=20"` DisplayName string `json:"display_name" gorm:"index" validate:"max=20"`
......
...@@ -110,6 +110,6 @@ func NewProxyHttpClient(proxyURL string) (*http.Client, error) { ...@@ -110,6 +110,6 @@ func NewProxyHttpClient(proxyURL string) (*http.Client, error) {
return client, nil return client, nil
default: default:
return nil, fmt.Errorf("unsupported proxy scheme: %s", parsedURL.Scheme) return nil, fmt.Errorf("unsupported proxy scheme: %s, must be http, https, socks5 or socks5h", parsedURL.Scheme)
} }
} }
...@@ -512,7 +512,6 @@ func GetCompletionRatio(name string) float64 { ...@@ -512,7 +512,6 @@ func GetCompletionRatio(name string) float64 {
} }
func getHardcodedCompletionModelRatio(name string) (float64, bool) { func getHardcodedCompletionModelRatio(name string) (float64, bool) {
lowercaseName := strings.ToLower(name)
isReservedModel := strings.HasSuffix(name, "-all") || strings.HasSuffix(name, "-gizmo-*") isReservedModel := strings.HasSuffix(name, "-all") || strings.HasSuffix(name, "-gizmo-*")
if isReservedModel { if isReservedModel {
...@@ -605,9 +604,6 @@ func getHardcodedCompletionModelRatio(name string) (float64, bool) { ...@@ -605,9 +604,6 @@ func getHardcodedCompletionModelRatio(name string) (float64, bool) {
} }
} }
// hint 只给官方上4倍率,由于开源模型供应商自行定价,不对其进行补全倍率进行强制对齐 // hint 只给官方上4倍率,由于开源模型供应商自行定价,不对其进行补全倍率进行强制对齐
if lowercaseName == "deepseek-chat" || lowercaseName == "deepseek-reasoner" {
return 4, true
}
if strings.HasPrefix(name, "ERNIE-Speed-") { if strings.HasPrefix(name, "ERNIE-Speed-") {
return 2, true return 2, true
} else if strings.HasPrefix(name, "ERNIE-Lite-") { } else if strings.HasPrefix(name, "ERNIE-Lite-") {
......
...@@ -20,7 +20,7 @@ For commercial licensing, please contact support@quantumnous.com ...@@ -20,7 +20,7 @@ For commercial licensing, please contact support@quantumnous.com
import React from 'react'; import React from 'react';
import { Button, Dropdown } from '@douyinfe/semi-ui'; import { Button, Dropdown } from '@douyinfe/semi-ui';
import { Languages } from 'lucide-react'; import { Languages } from 'lucide-react';
import { CN, GB } from 'country-flag-icons/react/3x2'; import { CN, GB, FR } from 'country-flag-icons/react/3x2';
const LanguageSelector = ({ currentLang, onLanguageChange, t }) => { const LanguageSelector = ({ currentLang, onLanguageChange, t }) => {
return ( return (
...@@ -42,12 +42,19 @@ const LanguageSelector = ({ currentLang, onLanguageChange, t }) => { ...@@ -42,12 +42,19 @@ const LanguageSelector = ({ currentLang, onLanguageChange, t }) => {
<GB title='English' className='!w-5 !h-auto' /> <GB title='English' className='!w-5 !h-auto' />
<span>English</span> <span>English</span>
</Dropdown.Item> </Dropdown.Item>
<Dropdown.Item
onClick={() => onLanguageChange('fr')}
className={`!flex !items-center !gap-2 !px-3 !py-1.5 !text-sm !text-semi-color-text-0 dark:!text-gray-200 ${currentLang === 'fr' ? '!bg-semi-color-primary-light-default dark:!bg-blue-600 !font-semibold' : 'hover:!bg-semi-color-fill-1 dark:hover:!bg-gray-600'}`}
>
<FR title='Français' className='!w-5 !h-auto' />
<span>Français</span>
</Dropdown.Item>
</Dropdown.Menu> </Dropdown.Menu>
} }
> >
<Button <Button
icon={<Languages size={18} />} icon={<Languages size={18} />}
aria-label={t('切换语言')} aria-label={t('common.changeLanguage')}
theme='borderless' theme='borderless'
type='tertiary' type='tertiary'
className='!p-1.5 !text-current focus:!bg-semi-color-fill-1 dark:focus:!bg-gray-700 !rounded-full !bg-semi-color-fill-0 dark:!bg-semi-color-fill-1 hover:!bg-semi-color-fill-1 dark:hover:!bg-semi-color-fill-2' className='!p-1.5 !text-current focus:!bg-semi-color-fill-1 dark:focus:!bg-gray-700 !rounded-full !bg-semi-color-fill-0 dark:!bg-semi-color-fill-1 hover:!bg-semi-color-fill-1 dark:hover:!bg-semi-color-fill-2'
......
...@@ -103,6 +103,7 @@ const MODEL_FETCHABLE_TYPES = new Set([ ...@@ -103,6 +103,7 @@ const MODEL_FETCHABLE_TYPES = new Set([
40, 40,
42, 42,
48, 48,
43,
]); ]);
function type2secretPrompt(type) { function type2secretPrompt(type) {
......
...@@ -22,6 +22,7 @@ import { initReactI18next } from 'react-i18next'; ...@@ -22,6 +22,7 @@ import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector'; import LanguageDetector from 'i18next-browser-languagedetector';
import enTranslation from './locales/en.json'; import enTranslation from './locales/en.json';
import frTranslation from './locales/fr.json';
import zhTranslation from './locales/zh.json'; import zhTranslation from './locales/zh.json';
i18n i18n
...@@ -36,6 +37,9 @@ i18n ...@@ -36,6 +37,9 @@ i18n
zh: { zh: {
translation: zhTranslation, translation: zhTranslation,
}, },
fr: {
translation: frTranslation,
},
}, },
fallbackLng: 'zh', fallbackLng: 'zh',
interpolation: { interpolation: {
......
...@@ -2130,5 +2130,8 @@ ...@@ -2130,5 +2130,8 @@
"域名IP过滤详细说明": "⚠️ This is an experimental option. A domain may resolve to multiple IPv4/IPv6 addresses. If enabled, ensure the IP filter list covers these addresses, otherwise access may fail.", "域名IP过滤详细说明": "⚠️ This is an experimental option. A domain may resolve to multiple IPv4/IPv6 addresses. If enabled, ensure the IP filter list covers these addresses, otherwise access may fail.",
"域名黑名单": "Domain Blacklist", "域名黑名单": "Domain Blacklist",
"白名单": "Whitelist", "白名单": "Whitelist",
"黑名单": "Blacklist" "黑名单": "Blacklist",
"common": {
"changeLanguage": "Change Language"
}
} }
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -33,5 +33,8 @@ ...@@ -33,5 +33,8 @@
"输入端口后回车,如:80 或 8000-8999": "输入端口后回车,如:80 或 8000-8999", "输入端口后回车,如:80 或 8000-8999": "输入端口后回车,如:80 或 8000-8999",
"更新SSRF防护设置": "更新SSRF防护设置", "更新SSRF防护设置": "更新SSRF防护设置",
"域名IP过滤详细说明": "⚠️此功能为实验性选项,域名可能解析到多个 IPv4/IPv6 地址,若开启,请确保 IP 过滤列表覆盖这些地址,否则可能导致访问失败。", "域名IP过滤详细说明": "⚠️此功能为实验性选项,域名可能解析到多个 IPv4/IPv6 地址,若开启,请确保 IP 过滤列表覆盖这些地址,否则可能导致访问失败。",
"common": {
"changeLanguage": "切换语言"
},
"允许在 Stripe 支付中输入促销码": "允许在 Stripe 支付中输入促销码" "允许在 Stripe 支付中输入促销码": "允许在 Stripe 支付中输入促销码"
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment