feat(playground): add playground parameter settings panel (#6044)

Merge pull request #6044 from QuantumNous/feat/playground-parameter-panel
This commit is contained in:
同語
2026-07-10 23:28:44 +08:00
committed by GitHub
16 changed files with 737 additions and 12 deletions
@@ -0,0 +1,78 @@
/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
export const modelGroupSelectorLayoutClasses = {
desktopPanel: 'max-h-[min(50vh,28rem)] overflow-hidden',
desktopContent:
'grid h-[min(50vh,28rem)] max-h-[min(50vh,28rem)] min-h-0 gap-3 p-2 md:grid-cols-[9.5rem_minmax(0,1fr)]',
groupColumn: 'flex h-full min-h-0 min-w-0 flex-col overflow-hidden',
groupScroll: 'mt-2 grid min-h-0 flex-1 gap-1 overflow-y-auto pr-1',
modelColumn: 'flex h-full min-h-0 min-w-0 overflow-hidden rounded-lg border',
modelCommand: 'min-h-0 flex-1 rounded-lg border-0 bg-transparent p-1',
modelList:
'min-h-0 flex-1 max-h-none [scrollbar-color:var(--border)_transparent] [scrollbar-width:thin] [&::-webkit-scrollbar]:block [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border [&::-webkit-scrollbar-track]:bg-transparent',
modelItem:
'relative mb-0.5 flex items-center justify-between rounded-md border border-transparent px-2 py-1.5 pl-3 text-[12px] leading-4 transition-colors before:absolute before:inset-y-2 before:left-1 before:w-1 before:rounded-full before:bg-transparent',
selectedModelItem:
'border-primary/40 bg-primary/12 text-foreground shadow-sm before:bg-primary',
unselectedModelItem:
'text-muted-foreground hover:bg-accent hover:text-foreground',
selectedModelText: 'font-semibold text-foreground',
unselectedModelText: 'font-medium',
} as const
type ScrollableOption = {
offsetHeight?: number
offsetTop?: number
scrollIntoView: (options?: ScrollIntoViewOptions) => void
}
type ScrollableOptionContainer = {
clientHeight: number
scrollTo?: (options: ScrollToOptions) => void
scrollTop: number
}
export function scrollSelectedOptionIntoView(
selectedOption: ScrollableOption | null,
scrollContainer?: ScrollableOptionContainer | null
): void {
if (
scrollContainer &&
selectedOption?.offsetTop !== undefined &&
selectedOption.offsetHeight !== undefined
) {
const scrollTop = Math.max(
0,
selectedOption.offsetTop -
(scrollContainer.clientHeight - selectedOption.offsetHeight) / 2
)
if (scrollContainer.scrollTo) {
scrollContainer.scrollTo({ top: scrollTop, behavior: 'auto' })
} else {
scrollContainer.scrollTop = scrollTop
}
return
}
selectedOption?.scrollIntoView({
block: 'center',
inline: 'nearest',
})
}
+90 -10
View File
@@ -17,7 +17,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import React, { useState, useMemo, useCallback } from 'react'
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { Button } from '@/components/ui/button'
@@ -44,6 +44,11 @@ import {
import { useIsMobile } from '@/hooks/use-mobile'
import { cn } from '@/lib/utils'
import {
modelGroupSelectorLayoutClasses,
scrollSelectedOptionIntoView,
} from './model-group-selector-layout'
interface ModelOption {
label: string
value: string
@@ -565,6 +570,9 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
const [open, setOpen] = useState(false)
const [searchQuery, setSearchQuery] = useState('')
const isMobile = useIsMobile()
const groupScrollContainerRef = useRef<HTMLDivElement | null>(null)
const selectedGroupOptionRef = useRef<HTMLButtonElement | null>(null)
const selectedModelOptionRef = useRef<HTMLDivElement | null>(null)
const currentModel = useMemo(
() => models.find((model) => model.value === selectedModel),
@@ -610,6 +618,28 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
[onGroupChange]
)
useEffect(() => {
if (!open) {
return
}
let secondFrameId = 0
const firstFrameId = window.requestAnimationFrame(() => {
secondFrameId = window.requestAnimationFrame(() => {
scrollSelectedOptionIntoView(
selectedGroupOptionRef.current,
groupScrollContainerRef.current
)
scrollSelectedOptionIntoView(selectedModelOptionRef.current)
})
})
return () => {
window.cancelAnimationFrame(firstFrameId)
window.cancelAnimationFrame(secondFrameId)
}
}, [open, selectedGroup, selectedModel])
const renderTrigger = () => (
<Button
aria-expanded={open}
@@ -636,11 +666,22 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
)
const renderGroupList = () => (
<div className='min-w-0 space-y-2'>
<div
className={cn(
'min-w-0 space-y-2',
!isMobile && modelGroupSelectorLayoutClasses.groupColumn
)}
>
<div className='text-muted-foreground px-1 text-[11px] leading-4 font-medium'>
{t('Model Group')}
</div>
<div className='grid gap-1'>
<div
className={cn(
'grid gap-1',
!isMobile && modelGroupSelectorLayoutClasses.groupScroll
)}
ref={groupScrollContainerRef}
>
{groups.map((group) => {
const isSelected = selectedGroup === group.value
@@ -655,6 +696,7 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
disabled={disabled}
key={group.value}
onClick={() => handleGroupChange(group.value)}
ref={isSelected ? selectedGroupOptionRef : undefined}
type='button'
>
<span className='min-w-0 truncate font-medium'>
@@ -675,7 +717,10 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
const renderModelList = () => (
<Command
className='min-w-0 rounded-lg border-0 bg-transparent p-1'
className={cn(
'min-w-0 rounded-lg border-0 bg-transparent p-1',
!isMobile && modelGroupSelectorLayoutClasses.modelCommand
)}
filter={() => 1}
shouldFilter={false}
>
@@ -685,7 +730,11 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
placeholder={t('Search models...')}
value={searchQuery}
/>
<CommandList className={isMobile ? 'max-h-[45vh]' : 'max-h-[20rem]'}>
<CommandList
className={
isMobile ? 'max-h-[45vh]' : modelGroupSelectorLayoutClasses.modelList
}
>
{filteredModels.length === 0 ? (
<div className='text-muted-foreground px-3 py-8 text-center text-[12px] leading-5'>
{t('No model found.')}
@@ -694,12 +743,29 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
<CommandGroup className='p-1'>
{filteredModels.map((model) => (
<CommandItem
className='mb-0.5 flex items-center justify-between rounded-md px-2 py-1.5 text-[12px] leading-4 transition-colors'
className={cn(
modelGroupSelectorLayoutClasses.modelItem,
selectedModel === model.value
? modelGroupSelectorLayoutClasses.selectedModelItem
: modelGroupSelectorLayoutClasses.unselectedModelItem
)}
key={model.value}
onSelect={handleModelChange}
ref={
selectedModel === model.value
? selectedModelOptionRef
: undefined
}
value={model.value}
>
<span className='min-w-0 truncate font-medium'>
<span
className={cn(
'min-w-0 truncate',
selectedModel === model.value
? modelGroupSelectorLayoutClasses.selectedModelText
: modelGroupSelectorLayoutClasses.unselectedModelText
)}
>
{model.label}
</span>
<Check
@@ -717,9 +783,20 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
)
const renderContent = () => (
<div className='grid gap-3 p-2 md:grid-cols-[9.5rem_minmax(0,1fr)]'>
<div
className={
isMobile
? 'grid gap-3 p-2 md:grid-cols-[9.5rem_minmax(0,1fr)]'
: modelGroupSelectorLayoutClasses.desktopContent
}
>
{renderGroupList()}
<div className='min-w-0 overflow-hidden rounded-lg border'>
<div
className={cn(
'min-w-0 overflow-hidden rounded-lg border',
!isMobile && modelGroupSelectorLayoutClasses.modelColumn
)}
>
{renderModelList()}
</div>
</div>
@@ -742,7 +819,10 @@ export const ModelGroupSelector: React.FC<ModelGroupSelectorProps> = ({
<PopoverTrigger render={renderTrigger()} />
<PopoverContent
align='end'
className='bg-popover z-50 w-[34rem] max-w-[calc(100vw-2rem)] rounded-xl border p-0 shadow-lg'
className={cn(
'bg-popover z-50 w-[34rem] max-w-[calc(100vw-2rem)] rounded-xl border p-0 shadow-lg',
modelGroupSelectorLayoutClasses.desktopPanel
)}
collisionPadding={8}
side='top'
sideOffset={8}
@@ -43,17 +43,33 @@ import {
getAttachmentActionNotice,
getSearchActionNotice,
} from '../../lib'
import type { ParameterEnabled, PlaygroundConfig } from '../../types'
import { PlaygroundParameterPanel } from './playground-parameter-panel'
type PlaygroundInputToolsProps = {
config: PlaygroundConfig
disabled?: boolean
hasMessages?: boolean
onClearMessages?: () => void
onConfigChange: <K extends keyof PlaygroundConfig>(
key: K,
value: PlaygroundConfig[K]
) => void
onParameterEnabledChange: (
key: keyof ParameterEnabled,
value: boolean
) => void
parameterEnabled: ParameterEnabled
}
export function PlaygroundInputTools({
config,
disabled,
hasMessages = false,
onClearMessages,
onConfigChange,
onParameterEnabledChange,
parameterEnabled,
}: PlaygroundInputToolsProps) {
const { t } = useTranslation()
const [clearConfirmOpen, setClearConfirmOpen] = useState(false)
@@ -133,6 +149,14 @@ export function PlaygroundInputTools({
</TooltipContent>
</Tooltip>
<PlaygroundParameterPanel
config={config}
disabled={disabled}
onConfigChange={onConfigChange}
onParameterEnabledChange={onParameterEnabledChange}
parameterEnabled={parameterEnabled}
/>
<Tooltip>
<TooltipTrigger
render={
@@ -27,11 +27,17 @@ import {
} from '@/components/ai-elements/prompt-input'
import { getSubmittableInputText } from '../../lib'
import type { ModelOption, GroupOption } from '../../types'
import type {
ModelOption,
GroupOption,
ParameterEnabled,
PlaygroundConfig,
} from '../../types'
import { PlaygroundInputControls } from './playground-input-controls'
import { PlaygroundInputTools } from './playground-input-tools'
interface PlaygroundInputProps {
config: PlaygroundConfig
onSubmit: (text: string) => void
onStop?: () => void
disabled?: boolean
@@ -44,10 +50,20 @@ interface PlaygroundInputProps {
groupValue: string
onGroupChange: (value: string) => void
hasMessages?: boolean
onConfigChange: <K extends keyof PlaygroundConfig>(
key: K,
value: PlaygroundConfig[K]
) => void
onClearMessages?: () => void
onParameterEnabledChange: (
key: keyof ParameterEnabled,
value: boolean
) => void
parameterEnabled: ParameterEnabled
}
export function PlaygroundInput({
config,
onSubmit,
onStop,
disabled,
@@ -60,7 +76,10 @@ export function PlaygroundInput({
groupValue,
onGroupChange,
hasMessages = false,
onConfigChange,
onClearMessages,
onParameterEnabledChange,
parameterEnabled,
}: PlaygroundInputProps) {
const { t } = useTranslation()
const [text, setText] = useState('')
@@ -107,9 +126,13 @@ export function PlaygroundInput({
text={text}
tools={
<PlaygroundInputTools
config={config}
disabled={disabled}
hasMessages={hasMessages}
onConfigChange={onConfigChange}
onClearMessages={onClearMessages}
onParameterEnabledChange={onParameterEnabledChange}
parameterEnabled={parameterEnabled}
/>
}
/>
@@ -0,0 +1,266 @@
/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import { SlidersHorizontalIcon } from 'lucide-react'
import { useTranslation } from 'react-i18next'
import { PromptInputButton } from '@/components/ai-elements/prompt-input'
import { Badge } from '@/components/ui/badge'
import { Input } from '@/components/ui/input'
import {
Popover,
PopoverContent,
PopoverTrigger,
} from '@/components/ui/popover'
import {
Sheet,
SheetContent,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@/components/ui/sheet'
import { Slider } from '@/components/ui/slider'
import { Switch } from '@/components/ui/switch'
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from '@/components/ui/tooltip'
import { useIsMobile } from '@/hooks/use-mobile'
import { cn } from '@/lib/utils'
import {
getParameterControlValueText,
normalizeParameterNumberValue,
PLAYGROUND_PARAMETER_CONTROLS,
PLAYGROUND_PARAMETER_PANEL_SCROLL_CLASS,
type PlaygroundParameterKey,
} from '../../lib/parameters/playground-parameters'
import type { ParameterEnabled, PlaygroundConfig } from '../../types'
type PlaygroundParameterPanelProps = {
config: PlaygroundConfig
disabled?: boolean
onConfigChange: <K extends keyof PlaygroundConfig>(
key: K,
value: PlaygroundConfig[K]
) => void
onParameterEnabledChange: (
key: PlaygroundParameterKey,
value: boolean
) => void
parameterEnabled: ParameterEnabled
}
type PlaygroundParameterContentProps = PlaygroundParameterPanelProps & {
compact?: boolean
}
function PlaygroundParameterContent({
compact = false,
config,
disabled,
onConfigChange,
onParameterEnabledChange,
parameterEnabled,
}: PlaygroundParameterContentProps) {
const { t } = useTranslation()
const updateParameterConfig = (
key: PlaygroundParameterKey,
value: number | null
) => {
if (key === 'seed') {
onConfigChange('seed', value)
return
}
onConfigChange(key, value ?? 0)
}
return (
<div
className={cn(
'grid gap-3',
PLAYGROUND_PARAMETER_PANEL_SCROLL_CLASS,
compact ? 'px-4 pb-4' : 'p-1'
)}
>
{PLAYGROUND_PARAMETER_CONTROLS.map((control) => {
const enabled = parameterEnabled[control.key]
const value = config[control.key]
const controlId = `playground-${control.key}`
return (
<div
className={cn(
'border-border/70 bg-background/60 grid gap-2 rounded-lg border p-3 transition-opacity',
(!enabled || disabled) && 'opacity-55'
)}
key={control.key}
>
<div className='flex items-start justify-between gap-3'>
<div className='min-w-0 space-y-1'>
<div className='flex min-w-0 items-center gap-2'>
<label
className='truncate text-sm leading-5 font-medium'
htmlFor={controlId}
>
{t(control.labelKey)}
</label>
<Badge
className='h-5 max-w-24 shrink-0 px-1.5 font-mono text-[11px]'
variant='outline'
>
{t(getParameterControlValueText(control.key, value))}
</Badge>
</div>
<p className='text-muted-foreground text-xs leading-4'>
{t(control.descriptionKey)}
</p>
</div>
<Switch
aria-label={t('Enable {{parameter}}', {
parameter: t(control.labelKey),
})}
checked={enabled}
disabled={disabled}
onCheckedChange={(checked) =>
onParameterEnabledChange(control.key, checked)
}
size='sm'
/>
</div>
{control.valueType === 'slider' ? (
<Slider
className='py-1.5'
disabled={disabled || !enabled}
id={controlId}
max={control.max}
min={control.min}
onValueChange={(nextValue) => {
const firstValue = Array.isArray(nextValue)
? nextValue[0]
: nextValue
updateParameterConfig(
control.key,
normalizeParameterNumberValue(control.key, firstValue)
)
}}
step={control.step}
value={[Number(value)]}
/>
) : (
<Input
disabled={disabled || !enabled}
id={controlId}
inputMode='numeric'
max={control.max}
min={control.min}
onChange={(event) => {
updateParameterConfig(
control.key,
normalizeParameterNumberValue(
control.key,
event.target.value
)
)
}}
step={control.step}
type='number'
value={value ?? ''}
/>
)}
</div>
)
})}
</div>
)
}
export function PlaygroundParameterPanel(props: PlaygroundParameterPanelProps) {
const { t } = useTranslation()
const isMobile = useIsMobile()
const activeCount = PLAYGROUND_PARAMETER_CONTROLS.filter(
(control) => props.parameterEnabled[control.key]
).length
const trigger = (
<PromptInputButton
aria-label={t('Parameters')}
className='text-muted-foreground hover:text-foreground hover:bg-muted/70 relative font-medium'
disabled={props.disabled}
variant='ghost'
>
<SlidersHorizontalIcon size={16} />
<span className='bg-primary text-primary-foreground absolute -top-1 -right-1 flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-1 text-[9px] leading-none font-semibold'>
{activeCount}
</span>
</PromptInputButton>
)
if (isMobile) {
return (
<Sheet>
<Tooltip>
<TooltipTrigger render={<SheetTrigger render={trigger} />} />
<TooltipContent>
<p>{t('Parameters')}</p>
</TooltipContent>
</Tooltip>
<SheetContent
className='max-h-[85vh] overflow-hidden rounded-t-xl'
side='bottom'
>
<SheetHeader>
<SheetTitle>{t('Parameter settings')}</SheetTitle>
</SheetHeader>
<PlaygroundParameterContent {...props} compact />
</SheetContent>
</Sheet>
)
}
return (
<Popover>
<Tooltip>
<TooltipTrigger render={<PopoverTrigger render={trigger} />} />
<TooltipContent>
<p>{t('Parameters')}</p>
</TooltipContent>
</Tooltip>
<PopoverContent
align='start'
className='w-[22rem] max-w-[calc(100vw-2rem)] gap-3 p-3'
collisionPadding={8}
side='top'
sideOffset={8}
>
<div className='space-y-1 px-1'>
<div className='text-sm font-semibold'>{t('Parameter settings')}</div>
<div className='text-muted-foreground text-xs leading-4'>
{t('Only enabled parameters are sent with the request.')}
</div>
</div>
<PlaygroundParameterContent {...props} />
</PopoverContent>
</Popover>
)
}
+5
View File
@@ -37,6 +37,7 @@ export function Playground() {
setModels,
setGroups,
updateConfig,
updateParameterEnabled,
clearMessages,
} = usePlaygroundState()
@@ -95,6 +96,7 @@ export function Playground() {
{/* Input area: center content and constrain to the same container width */}
<div className='mx-auto w-full max-w-4xl'>
<PlaygroundInput
config={config}
disabled={isGenerating}
groups={groups}
groupValue={config.group}
@@ -103,10 +105,13 @@ export function Playground() {
modelValue={config.model}
models={models}
onGroupChange={(value) => updateConfig('group', value)}
onConfigChange={updateConfig}
onClearMessages={handleClearMessages}
onModelChange={(value) => updateConfig('model', value)}
onParameterEnabledChange={updateParameterEnabled}
onStop={stopGeneration}
onSubmit={handleSendMessage}
parameterEnabled={parameterEnabled}
hasMessages={messages.length > 0}
/>
</div>
+1
View File
@@ -31,6 +31,7 @@ export * from './message/message-timing-utils'
export * from './message/message-update-utils'
export * from './message/message-utils'
export * from './options/playground-option-utils'
export * from './parameters/playground-parameters'
export * from './state/playground-state-utils'
export * from './storage/storage'
export * from './streaming/payload-builder'
@@ -0,0 +1,129 @@
/*
Copyright (C) 2023-2026 QuantumNous
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import type { PlaygroundConfig, ParameterEnabled } from '../../types'
type ParameterValue = PlaygroundConfig[keyof PlaygroundConfig]
export type PlaygroundParameterKey = keyof ParameterEnabled
export type PlaygroundParameterControl = {
key: PlaygroundParameterKey
labelKey: string
descriptionKey: string
valueType: 'slider' | 'number'
min: number
max: number
step: number
}
export const PLAYGROUND_PARAMETER_CONTROLS = [
{
key: 'temperature',
labelKey: 'Temperature',
descriptionKey: 'Controls randomness and creativity',
valueType: 'slider',
min: 0.1,
max: 1,
step: 0.1,
},
{
key: 'top_p',
labelKey: 'Top P',
descriptionKey: 'Limits token selection to a probability mass',
valueType: 'slider',
min: 0.1,
max: 1,
step: 0.1,
},
{
key: 'frequency_penalty',
labelKey: 'Frequency Penalty',
descriptionKey: 'Reduces repeated wording',
valueType: 'slider',
min: -2,
max: 2,
step: 0.1,
},
{
key: 'presence_penalty',
labelKey: 'Presence Penalty',
descriptionKey: 'Encourages new topics',
valueType: 'slider',
min: -2,
max: 2,
step: 0.1,
},
{
key: 'max_tokens',
labelKey: 'Max Tokens',
descriptionKey: 'Caps the response length',
valueType: 'number',
min: 0,
max: 200000,
step: 1,
},
{
key: 'seed',
labelKey: 'Seed',
descriptionKey: 'Keeps compatible responses more repeatable',
valueType: 'number',
min: 0,
max: 2147483647,
step: 1,
},
] as const satisfies readonly PlaygroundParameterControl[]
export const PLAYGROUND_PARAMETER_PANEL_SCROLL_CLASS =
'max-h-[min(28rem,calc(100vh-10rem))] overflow-y-auto pr-1'
export function normalizeParameterNumberValue(
key: PlaygroundParameterKey,
value: string | number
): number | null {
if (value === '') {
return key === 'seed' ? null : 0
}
const control = PLAYGROUND_PARAMETER_CONTROLS.find((item) => item.key === key)
const parsed = typeof value === 'number' ? value : Number.parseFloat(value)
if (!control || Number.isNaN(parsed)) {
return key === 'seed' ? null : 0
}
const clamped = Math.min(control.max, Math.max(control.min, parsed))
if (control.step >= 1) {
return Math.trunc(clamped)
}
const precision = Math.max(0, String(control.step).split('.')[1]?.length ?? 0)
return Number(clamped.toFixed(precision))
}
export function getParameterControlValueText(
key: PlaygroundParameterKey,
value: ParameterValue
): string {
if (key === 'seed' && value === null) {
return 'Not set'
}
return String(value)
}
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "Cancelled",
"Cancelled at": "Cancelled at",
"Capabilities": "Capabilities",
"Caps the response length": "Caps the response length",
"Capture a reusable bundle of models, tags, or endpoints.": "Capture a reusable bundle of models, tags, or endpoints.",
"Card view": "Card view",
"Category": "Category",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "Contract review, compliance, summarisation",
"Control which models are exposed and which groups may use them.": "Control which models are exposed and which groups may use them.",
"Controls how much the model thinks before answering": "Controls how much the model thinks before answering",
"Controls randomness and creativity": "Controls randomness and creativity",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "Controls whether user verification (biometrics/PIN) is required during Passkey flows.",
"Conversation cleared": "Conversation cleared",
"Conversion rate from USD to your custom currency": "Conversion rate from USD to your custom currency",
@@ -1552,6 +1554,7 @@
"Empty": "Empty",
"Empty value will be saved as {}.": "Empty value will be saved as {}.",
"Enable": "Enable",
"Enable {{parameter}}": "Enable {{parameter}}",
"Enable 2FA": "Enable 2FA",
"Enable All": "Enable All",
"Enable check-in feature": "Enable check-in feature",
@@ -1599,6 +1602,7 @@
"Enabled Status": "Enabled Status",
"Enabling...": "Enabling...",
"Encourages introducing new topics": "Encourages introducing new topics",
"Encourages new topics": "Encourages new topics",
"End": "End",
"End Error": "End Error",
"End Reason": "End Reason",
@@ -2032,6 +2036,7 @@
"Frames per second": "Frames per second",
"Free": "Free",
"Free: {{free}} / Total: {{total}}": "Free: {{free}} / Total: {{total}}",
"Frequency Penalty": "Frequency Penalty",
"Friendly name to identify this channel": "Friendly name to identify this channel",
"From Address": "From Address",
"From IO.NET deployment": "From IO.NET deployment",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "Keep the platform ready",
"Keep this above 1 minute to avoid heavy database load": "Keep this above 1 minute to avoid heavy database load",
"Keep-alive Ping": "Keep-alive Ping",
"Keeps compatible responses more repeatable": "Keeps compatible responses more repeatable",
"Key": "Key",
"Key Fingerprint": "Key Fingerprint",
"Key Sources": "Key Sources",
@@ -2447,6 +2453,7 @@
"Limit Reached": "Limit Reached",
"Limit which models can be used with this key": "Limit which models can be used with this key",
"Limited": "Limited",
"Limits token selection to a probability mass": "Limits token selection to a probability mass",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "Link to your documentation site",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "Max Success",
"Max successful requests": "Max successful requests",
"Max Successful Requests": "Max Successful Requests",
"Max Tokens": "Max Tokens",
"Maximum 1000 characters. Supports Markdown and HTML.": "Maximum 1000 characters. Supports Markdown and HTML.",
"Maximum 200 characters": "Maximum 200 characters",
"Maximum 500 characters. Supports Markdown and HTML.": "Maximum 500 characters. Supports Markdown and HTML.",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "Only configured combinations are overridden. All other calls keep the billing group base ratio.",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "Only configured combinations are overridden. All other calls keep the token group base ratio.",
"Only enabled parameters are sent with the request.": "Only enabled parameters are sent with the request.",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.",
"Only successful requests": "Only successful requests",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "Parameter override must be valid JSON format",
"Parameter Override Template (JSON)": "Parameter Override Template (JSON)",
"Parameter override template must be a JSON object": "Parameter override template must be a JSON object",
"Parameter settings": "Parameter settings",
"parameter.": "parameter.",
"Parameters": "Parameters",
"Parsed {{count}} service account file(s)": "Parsed {{count}} service account file(s)",
@@ -3390,6 +3400,7 @@
"Prepend": "Prepend",
"Prepend to Start": "Prepend to Start",
"Prepend value to array / string / object start": "Prepend value to array / string / object start",
"Presence Penalty": "Presence Penalty",
"Preserve the original field when applying this rule": "Preserve the original field when applying this rule",
"Preset groups": "Preset groups",
"Preset recharge amounts (JSON array)": "Preset recharge amounts (JSON array)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "Redirecting to GitHub...",
"Redirecting to payment page...": "Redirecting to payment page...",
"Redirecting to sign in in {{seconds}} seconds.": "Redirecting to sign in in {{seconds}} seconds.",
"Reduces repeated wording": "Reduces repeated wording",
"Reference Video": "Reference Video",
"Referral link:": "Referral link:",
"Referral Program": "Referral Program",
@@ -3948,6 +3960,7 @@
"Security & Limits": "Security & Limits",
"Security Check": "Security Check",
"Security verification": "Security verification",
"Seed": "Seed",
"Select": "Select",
"Select a color": "Select a color",
"Select a group": "Select a group",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Telegram login requires widget integration; coming soon",
"Telegram Login Widget": "Telegram Login Widget",
"Temperature": "Temperature",
"Template": "Template",
"Template variables:": "Template variables:",
"Templates": "Templates",
@@ -4587,6 +4601,7 @@
"Top models": "Top models",
"Top Models": "Top Models",
"Top models by traffic": "Top models by traffic",
"Top P": "Top P",
"Top up balance and view billing history.": "Top up balance and view billing history.",
"Top Users": "Top Users",
"Top vendors": "Top vendors",
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "Annulé",
"Cancelled at": "Annulé le",
"Capabilities": "Capacités",
"Caps the response length": "Limite la longueur de la réponse",
"Capture a reusable bundle of models, tags, or endpoints.": "Capturez un ensemble réutilisable de modèles, d'étiquettes ou de points de terminaison.",
"Card view": "Vue cartes",
"Category": "Catégorie",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "Revue de contrats, conformité, résumé",
"Control which models are exposed and which groups may use them.": "Contrôlez les modèles exposés et les groupes autorisés à les utiliser.",
"Controls how much the model thinks before answering": "Contrôle la quantité de raisonnement avant la réponse",
"Controls randomness and creativity": "Contrôle le hasard et la créativité",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "Contrôle si la vérification de l'utilisateur (biométrie/PIN) est requise lors des flux de Passkey.",
"Conversation cleared": "Conversation effacée",
"Conversion rate from USD to your custom currency": "Taux de conversion de l'USD vers votre devise personnalisée",
@@ -1552,6 +1554,7 @@
"Empty": "Vide",
"Empty value will be saved as {}.": "Une valeur vide sera enregistrée comme {}.",
"Enable": "Activer",
"Enable {{parameter}}": "Activer {{parameter}}",
"Enable 2FA": "Activer 2FA",
"Enable All": "Tout activer",
"Enable check-in feature": "Activer la fonction de connexion",
@@ -1599,6 +1602,7 @@
"Enabled Status": "Statut activé",
"Enabling...": "Activation en cours...",
"Encourages introducing new topics": "Encourage l'introduction de nouveaux sujets",
"Encourages new topics": "Encourage de nouveaux sujets",
"End": "End",
"End Error": "Erreur finale",
"End Reason": "Raison de fin",
@@ -2032,6 +2036,7 @@
"Frames per second": "Images par seconde",
"Free": "Libre",
"Free: {{free}} / Total: {{total}}": "Disponible : {{free}} / Total : {{total}}",
"Frequency Penalty": "Pénalité de fréquence",
"Friendly name to identify this channel": "Nom convivial pour identifier ce canal",
"From Address": "De l'adresse",
"From IO.NET deployment": "Depuis le déploiement IO.NET",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "Gardez la plateforme prête",
"Keep this above 1 minute to avoid heavy database load": "Gardez cette valeur au-dessus de 1 minute pour éviter une charge excessive de la base de données",
"Keep-alive Ping": "Ping de maintien de connexion",
"Keeps compatible responses more repeatable": "Rend les réponses compatibles plus reproductibles",
"Key": "Clé",
"Key Fingerprint": "Empreinte de clé",
"Key Sources": "Sources de clé",
@@ -2447,6 +2453,7 @@
"Limit Reached": "Limite atteinte",
"Limit which models can be used with this key": "Limiter les modèles pouvant être utilisés avec cette clé",
"Limited": "Limité",
"Limits token selection to a probability mass": "Limite la sélection des tokens par masse de probabilité",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "Lien vers votre site de documentation",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "Max Succès",
"Max successful requests": "Nombre max de requêtes réussies",
"Max Successful Requests": "Max Requêtes réussies",
"Max Tokens": "Tokens max.",
"Maximum 1000 characters. Supports Markdown and HTML.": "Maximum 1000 caractères. Prend en charge Markdown et HTML.",
"Maximum 200 characters": "Maximum 200 caractères",
"Maximum 500 characters. Supports Markdown and HTML.": "Maximum 500 caractères. Prend en charge Markdown et HTML.",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "Uniquement disponible pour les administrateurs. Lorsque cette option est activée, vous recevrez une notification récapitulative via votre méthode sélectionnée lorsque la vérification planifiée des modèles détecte des changements de modèles en amont ou des échecs de vérification.",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "Seules les combinaisons configurées sont remplacées. Tous les autres appels gardent le taux de base du groupe de facturation.",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "Seules les combinaisons configurées sont remplacées. Les autres appels conservent le ratio de base du groupe du jeton.",
"Only enabled parameters are sent with the request.": "Seuls les paramètres activés sont envoyés avec la requête.",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "Saisissez uniquement lorigine du site, par exemple https://api.example.com. Najoutez aucun chemin comme /api/user/epay/notify. Laissez vide pour utiliser ladresse du serveur.",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Seuls les champs sélectionnés seront écrasés. Vous pouvez relancer l'assistant de synchronisation si de nouveaux conflits apparaissent.",
"Only successful requests": "Uniquement les requêtes réussies",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "La substitution de paramètres doit être au format JSON valide",
"Parameter Override Template (JSON)": "Modèle de remplacement de paramètres (JSON)",
"Parameter override template must be a JSON object": "Le modèle de remplacement de paramètres doit être un objet JSON",
"Parameter settings": "Paramètres",
"parameter.": "paramètre.",
"Parameters": "Paramètres",
"Parsed {{count}} service account file(s)": "{{count}} fichier(s) de compte de service analysé(s)",
@@ -3390,6 +3400,7 @@
"Prepend": "Ajouter au début",
"Prepend to Start": "Ajouter au début",
"Prepend value to array / string / object start": "Ajouter la valeur au début du tableau / chaîne / objet",
"Presence Penalty": "Pénalité de présence",
"Preserve the original field when applying this rule": "Conserver le champ original lors de lapplication de cette règle",
"Preset groups": "Groupes prédéfinis",
"Preset recharge amounts (JSON array)": "Montants de recharge prédéfinis (tableau JSON)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "Redirection vers GitHub...",
"Redirecting to payment page...": "Redirection vers la page de paiement...",
"Redirecting to sign in in {{seconds}} seconds.": "Redirection vers la connexion dans {{seconds}} secondes.",
"Reduces repeated wording": "Réduit les formulations répétées",
"Reference Video": "Vidéo de référence",
"Referral link:": "Lien de parrainage :",
"Referral Program": "Programme de parrainage",
@@ -3948,6 +3960,7 @@
"Security & Limits": "Sécurité et limites",
"Security Check": "Vérification de sécurité",
"Security verification": "Vérification de sécurité",
"Seed": "Graine",
"Select": "Sélectionner",
"Select a color": "Sélectionner une couleur",
"Select a group": "Sélectionner un groupe",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "La connexion Telegram nécessite l'intégration d'un widget ; disponible bientôt",
"Telegram Login Widget": "Widget de connexion Telegram",
"Temperature": "Température",
"Template": "Modèle",
"Template variables:": "Variables de modèle :",
"Templates": "Modèles",
@@ -4587,6 +4601,7 @@
"Top models": "Top modèles",
"Top Models": "Top Modèles",
"Top models by traffic": "Modèles les plus utilisés",
"Top P": "Top P",
"Top up balance and view billing history.": "Recharger le solde et consulter l'historique de facturation.",
"Top Users": "Top utilisateurs",
"Top vendors": "Top fournisseurs",
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "キャンセル",
"Cancelled at": "キャンセル日時",
"Capabilities": "機能",
"Caps the response length": "応答の長さを制限します",
"Capture a reusable bundle of models, tags, or endpoints.": "モデル、タグ、またはエンドポイントの再利用可能なバンドルを保存。",
"Card view": "カード表示",
"Category": "カテゴリ",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "契約レビュー・コンプライアンス・要約",
"Control which models are exposed and which groups may use them.": "公開するモデルと、それらを利用できるグループを制御します。",
"Controls how much the model thinks before answering": "モデルが回答前に考える深さを制御します",
"Controls randomness and creativity": "ランダム性と創造性を調整します",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "Passkeyフロー中にユーザー認証(生体認証/PIN)が必要かどうかを制御します。",
"Conversation cleared": "会話を消去しました",
"Conversion rate from USD to your custom currency": "USDからカスタム通貨への換算レート",
@@ -1552,6 +1554,7 @@
"Empty": "空",
"Empty value will be saved as {}.": "空の値は {} として保存されます。",
"Enable": "有効にする",
"Enable {{parameter}}": "{{parameter}}を有効化",
"Enable 2FA": "2FA を有効にする",
"Enable All": "すべて有効にする",
"Enable check-in feature": "チェックイン機能を有効にする",
@@ -1599,6 +1602,7 @@
"Enabled Status": "有効ステータス",
"Enabling...": "有効化中...",
"Encourages introducing new topics": "新しい話題への展開を促進します",
"Encourages new topics": "新しい話題を促します",
"End": "終了",
"End Error": "終了エラー",
"End Reason": "終了理由",
@@ -2032,6 +2036,7 @@
"Frames per second": "フレームレート",
"Free": "空き",
"Free: {{free}} / Total: {{total}}": "空き容量: {{free}} / 合計: {{total}}",
"Frequency Penalty": "頻度ペナルティ",
"Friendly name to identify this channel": "このチャネルを識別するための表示名",
"From Address": "差出人アドレス",
"From IO.NET deployment": "IO.NET展開から",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "プラットフォームを準備状態に保つ",
"Keep this above 1 minute to avoid heavy database load": "データベースへの負荷を避けるため、これを1分以上に保ってください",
"Keep-alive Ping": "キープアライブPing",
"Keeps compatible responses more repeatable": "対応モデルの応答を再現しやすくします",
"Key": "キー",
"Key Fingerprint": "キーフィンガープリント",
"Key Sources": "キーソース",
@@ -2447,6 +2453,7 @@
"Limit Reached": "上限に達しました",
"Limit which models can be used with this key": "このキーで使用できるモデルを制限する",
"Limited": "制限",
"Limits token selection to a probability mass": "確率質量でトークン選択を制限します",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "ドキュメントサイトへのリンク",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "最大成功数",
"Max successful requests": "最大成功リクエスト数",
"Max Successful Requests": "最大成功リクエスト数",
"Max Tokens": "最大トークン数",
"Maximum 1000 characters. Supports Markdown and HTML.": "最大1000文字。MarkdownとHTMLをサポートしています。",
"Maximum 200 characters": "最大200文字",
"Maximum 500 characters. Supports Markdown and HTML.": "最大500文字。MarkdownとHTMLをサポートしています。",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "管理者のみ利用可能です。有効にすると、スケジュールされたモデルチェックでアップストリームモデルの変更やチェック失敗が検出された際に、選択した方法で概要通知を受け取ります。",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "設定された組み合わせだけが上書きされます。それ以外の呼び出しは課金グループの基本倍率のままです。",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "設定済みの組み合わせだけが上書きされます。他の呼び出しはトークングループの基本倍率を維持します。",
"Only enabled parameters are sent with the request.": "有効なパラメータだけがリクエストに送信されます。",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "サイトのオリジンのみを入力してください。例: https://api.example.com。/api/user/epay/notify などのパスは含めないでください。空欄の場合はサーバーアドレスを使用します。",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "選択されたフィールドのみが上書きされます。新しい競合が発生した場合は、同期ウィザードを再実行できます。",
"Only successful requests": "成功したリクエストのみ",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "パラメータオーバーライドは有効なJSON形式である必要があります",
"Parameter Override Template (JSON)": "パラメータオーバーライドテンプレート (JSON)",
"Parameter override template must be a JSON object": "パラメータオーバーライドテンプレートはJSONオブジェクトである必要があります",
"Parameter settings": "パラメータ設定",
"parameter.": "パラメーター。",
"Parameters": "パラメータ",
"Parsed {{count}} service account file(s)": "__ PH_0 __サービスアカウントファイルを解析しました",
@@ -3390,6 +3400,7 @@
"Prepend": "先頭に追加",
"Prepend to Start": "先頭に追加",
"Prepend value to array / string / object start": "配列/文字列/オブジェクトの先頭に値を追加",
"Presence Penalty": "存在ペナルティ",
"Preserve the original field when applying this rule": "このルール適用時に元のフィールドを保持します",
"Preset groups": "プリセットグループ",
"Preset recharge amounts (JSON array)": "プリセットチャージ金額 (JSON配列)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "GitHub にリダイレクトしています...",
"Redirecting to payment page...": "支払いページにリダイレクト中...",
"Redirecting to sign in in {{seconds}} seconds.": "{{seconds}} 秒後にログインページへ移動します。",
"Reduces repeated wording": "同じ表現の繰り返しを抑えます",
"Reference Video": "参照動画",
"Referral link:": "紹介リンク:",
"Referral Program": "紹介プログラム",
@@ -3948,6 +3960,7 @@
"Security & Limits": "セキュリティと制限",
"Security Check": "セキュリティチェック",
"Security verification": "セキュリティ確認",
"Seed": "シード",
"Select": "選択",
"Select a color": "色を選択",
"Select a group": "グループを選択",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Telegramログインにはウィジェット統合が必要です;近日公開",
"Telegram Login Widget": "Telegramログインウィジェット",
"Temperature": "温度",
"Template": "テンプレート",
"Template variables:": "テンプレート変数:",
"Templates": "テンプレート",
@@ -4587,6 +4601,7 @@
"Top models": "人気モデル",
"Top Models": "トップモデル",
"Top models by traffic": "トラフィック上位モデル",
"Top P": "Top P",
"Top up balance and view billing history.": "残高をチャージし、請求履歴を確認。",
"Top Users": "上位ユーザー",
"Top vendors": "人気ベンダー",
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "Отменено",
"Cancelled at": "Отменено",
"Capabilities": "Возможности",
"Caps the response length": "Ограничивает длину ответа",
"Capture a reusable bundle of models, tags, or endpoints.": "Создайте повторно используемый набор моделей, тегов или конечных точек.",
"Card view": "Карточки",
"Category": "Категория",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "Анализ контрактов, комплаенс, резюме",
"Control which models are exposed and which groups may use them.": "Управляйте тем, какие модели доступны и какие группы могут их использовать.",
"Controls how much the model thinks before answering": "Регулирует глубину размышлений модели перед ответом",
"Controls randomness and creativity": "Управляет случайностью и креативностью",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "Определяет, требуется ли проверка пользователя (биометрия/PIN) во время процессов Passkey.",
"Conversation cleared": "Диалог очищен",
"Conversion rate from USD to your custom currency": "Курс конвертации из USD в вашу пользовательскую валюту",
@@ -1552,6 +1554,7 @@
"Empty": "Пусто",
"Empty value will be saved as {}.": "Пустое значение будет сохранено как {}.",
"Enable": "Включить",
"Enable {{parameter}}": "Включить {{parameter}}",
"Enable 2FA": "Включить 2FA",
"Enable All": "Включить все",
"Enable check-in feature": "Включить функцию прибытия",
@@ -1599,6 +1602,7 @@
"Enabled Status": "Статус включения",
"Enabling...": "Включается...",
"Encourages introducing new topics": "Поощряет введение новых тем",
"Encourages new topics": "Стимулирует новые темы",
"End": "End",
"End Error": "Ошибка завершения",
"End Reason": "Причина завершения",
@@ -2032,6 +2036,7 @@
"Frames per second": "Кадров в секунду",
"Free": "Свободно",
"Free: {{free}} / Total: {{total}}": "Свободно: {{free}} / Всего: {{total}}",
"Frequency Penalty": "Штраф за частоту",
"Friendly name to identify this channel": "Дружественное имя для идентификации этого канала",
"From Address": "Отправитель",
"From IO.NET deployment": "Из развертывания IO.NET",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "Поддерживайте платформу в готовности",
"Keep this above 1 minute to avoid heavy database load": "Держите это значение выше 1 минуты, чтобы избежать высокой нагрузки на базу данных",
"Keep-alive Ping": "Пинг Keep-alive",
"Keeps compatible responses more repeatable": "Делает совместимые ответы более воспроизводимыми",
"Key": "Ключ",
"Key Fingerprint": "Отпечаток ключа",
"Key Sources": "Источники ключей",
@@ -2447,6 +2453,7 @@
"Limit Reached": "Достигнут лимит",
"Limit which models can be used with this key": "Ограничить модели, которые могут быть использованы с этим ключом",
"Limited": "Ограничено",
"Limits token selection to a probability mass": "Ограничивает выбор токенов суммарной вероятностью",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "Ссылка на ваш сайт документации",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "Макс. успешных",
"Max successful requests": "Макс. успешных запросов",
"Max Successful Requests": "Макс. успешных запросов",
"Max Tokens": "Макс. токены",
"Maximum 1000 characters. Supports Markdown and HTML.": "Максимум 1000 символов. Поддерживает Markdown и HTML.",
"Maximum 200 characters": "Максимум 200 символов",
"Maximum 500 characters. Supports Markdown and HTML.": "Максимум 500 символов. Поддерживает Markdown и HTML.",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "Доступно только для администраторов. При включении вы будете получать сводное уведомление выбранным способом, когда запланированная проверка моделей обнаружит изменения в вышестоящих моделях или сбои проверки.",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "Переопределяются только настроенные комбинации. Остальные вызовы используют базовый коэффициент тарифной группы.",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "Переопределяются только настроенные комбинации. Остальные вызовы используют базовый коэффициент группы токена.",
"Only enabled parameters are sent with the request.": "С запросом отправляются только включенные параметры.",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "Введите только origin сайта, например https://api.example.com. Не добавляйте пути, например /api/user/epay/notify. Оставьте пустым, чтобы использовать адрес сервера.",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Будут перезаписаны только выбранные поля. Вы можете повторно запустить мастер синхронизации, если появятся новые конфликты.",
"Only successful requests": "Только успешные запросы",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "Переопределение параметров должно быть в валидном формате JSON",
"Parameter Override Template (JSON)": "Шаблон переопределения параметров (JSON)",
"Parameter override template must be a JSON object": "Шаблон переопределения параметров должен быть объектом JSON",
"Parameter settings": "Параметры",
"parameter.": "параметр.",
"Parameters": "Параметры",
"Parsed {{count}} service account file(s)": "Проанализировано файлов сервисного аккаунта {{count}}",
@@ -3390,6 +3400,7 @@
"Prepend": "Добавить в начало",
"Prepend to Start": "Добавить в начало",
"Prepend value to array / string / object start": "Добавить значение в начало массива / строки / объекта",
"Presence Penalty": "Штраф за присутствие",
"Preserve the original field when applying this rule": "Сохранять исходное поле при применении этого правила",
"Preset groups": "Предустановленные группы",
"Preset recharge amounts (JSON array)": "Предустановленные суммы пополнения (массив JSON)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "Перенаправление на GitHub...",
"Redirecting to payment page...": "Перенаправление на страницу оплаты...",
"Redirecting to sign in in {{seconds}} seconds.": "Переход на страницу входа через {{seconds}} сек.",
"Reduces repeated wording": "Уменьшает повторение формулировок",
"Reference Video": "Эталонное видео",
"Referral link:": "Реферальная ссылка:",
"Referral Program": "Реферальная программа",
@@ -3948,6 +3960,7 @@
"Security & Limits": "Безопасность и лимиты",
"Security Check": "Проверка безопасности",
"Security verification": "Подтверждение безопасности",
"Seed": "Seed",
"Select": "Выбрать",
"Select a color": "Выбрать цвет",
"Select a group": "Выбрать группу",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Вход через Telegram требует интеграции виджета; скоро",
"Telegram Login Widget": "Виджет входа Telegram",
"Temperature": "Температура",
"Template": "Шаблон",
"Template variables:": "Переменные шаблона:",
"Templates": "Шаблоны",
@@ -4587,6 +4601,7 @@
"Top models": "Топ моделей",
"Top Models": "Лучшие модели",
"Top models by traffic": "Популярные модели по трафику",
"Top P": "Top P",
"Top up balance and view billing history.": "Пополнить баланс и просмотреть историю платежей.",
"Top Users": "Лучшие пользователи",
"Top vendors": "Топ поставщиков",
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "Đã hủy",
"Cancelled at": "Đã hủy lúc",
"Capabilities": "Khả năng",
"Caps the response length": "Giới hạn độ dài phản hồi",
"Capture a reusable bundle of models, tags, or endpoints.": "Đóng gói một bộ có thể tái sử dụng gồm các mô hình, thẻ hoặc điểm cuối.",
"Card view": "Dạng thẻ",
"Category": "Danh mục",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "Rà soát hợp đồng, tuân thủ, tóm tắt",
"Control which models are exposed and which groups may use them.": "Kiểm soát mô hình được hiển thị và nhóm nào có thể sử dụng chúng.",
"Controls how much the model thinks before answering": "Điều chỉnh mức suy luận trước khi trả lời",
"Controls randomness and creativity": "Điều chỉnh độ ngẫu nhiên và sáng tạo",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "Kiểm soát xem liệu có yêu cầu xác minh người dùng (sinh trắc học/mã PIN) trong các luồng Passkey hay không.",
"Conversation cleared": "Đã xóa cuộc trò chuyện",
"Conversion rate from USD to your custom currency": "Tỷ giá chuyển đổi từ USD sang đơn vị tiền tệ tùy chỉnh của bạn",
@@ -1552,6 +1554,7 @@
"Empty": "Trống",
"Empty value will be saved as {}.": "Giá trị trống sẽ được lưu thành {}.",
"Enable": "Bật",
"Enable {{parameter}}": "Bật {{parameter}}",
"Enable 2FA": "Bật 2FA",
"Enable All": "Bật tất cả",
"Enable check-in feature": "Bật tính năng điểm danh",
@@ -1599,6 +1602,7 @@
"Enabled Status": "Trạng thái kích hoạt",
"Enabling...": "Đang bật...",
"Encourages introducing new topics": "Khuyến khích chủ đề mới",
"Encourages new topics": "Khuyến khích chủ đề mới",
"End": "End",
"End Error": "Lỗi kết thúc",
"End Reason": "Lý do kết thúc",
@@ -2032,6 +2036,7 @@
"Frames per second": "Khung hình / giây",
"Free": "Trống",
"Free: {{free}} / Total: {{total}}": "Còn trống: {{free}} / Tổng: {{total}}",
"Frequency Penalty": "Phạt tần suất",
"Friendly name to identify this channel": "Tên thân thiện để nhận dạng kênh này",
"From Address": "Địa chỉ Người gửi",
"From IO.NET deployment": "Từ triển khai IO.NET",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "Giữ nền tảng luôn sẵn sàng",
"Keep this above 1 minute to avoid heavy database load": "Giữ cái này trên 1 phút để tránh tải nặng cơ sở dữ liệu",
"Keep-alive Ping": "Ping duy trì",
"Keeps compatible responses more repeatable": "Giúp phản hồi tương thích dễ lặp lại hơn",
"Key": "Khóa",
"Key Fingerprint": "Vân tay khóa",
"Key Sources": "Nguồn khóa",
@@ -2447,6 +2453,7 @@
"Limit Reached": "Đã đạt giới hạn",
"Limit which models can be used with this key": "Giới hạn các mô hình có thể được sử dụng với khóa này",
"Limited": "Giới hạn",
"Limits token selection to a probability mass": "Giới hạn lựa chọn token theo khối xác suất",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "Liên kết đến trang web tài liệu của bạn",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "Thành công tối đa",
"Max successful requests": "Số yêu cầu thành công tối đa",
"Max Successful Requests": "Yêu cầu thành công tối đa",
"Max Tokens": "Token tối đa",
"Maximum 1000 characters. Supports Markdown and HTML.": "Tối đa 1000 ký tự. Hỗ trợ Markdown và HTML.",
"Maximum 200 characters": "Tối đa 200 ký tự",
"Maximum 500 characters. Supports Markdown and HTML.": "Tối đa 500 ký tự. Hỗ trợ Markdown và HTML.",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "Chỉ khả dụng cho quản trị viên. Khi bật, bạn sẽ nhận được thông báo tổng hợp qua phương thức đã chọn khi kiểm tra mô hình định kỳ phát hiện thay đổi mô hình nguồn hoặc lỗi kiểm tra.",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "Chỉ các tổ hợp đã cấu hình mới bị ghi đè. Các cuộc gọi khác vẫn dùng hệ số cơ bản của nhóm tính phí.",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "Chỉ các tổ hợp đã cấu hình mới bị ghi đè. Các lệnh gọi khác giữ tỷ lệ cơ bản của nhóm token.",
"Only enabled parameters are sent with the request.": "Chỉ các tham số đã bật mới được gửi trong yêu cầu.",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "Chỉ nhập origin của trang, ví dụ https://api.example.com. Không nhập đường dẫn như /api/user/epay/notify. Để trống để dùng địa chỉ máy chủ.",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "Chỉ các trường được chọn sẽ bị ghi đè. Bạn có thể chạy lại trình hướng dẫn đồng bộ hóa nếu có xung đột mới xuất hiện.",
"Only successful requests": "Chỉ các yêu cầu thành công",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "Ghi đè tham số phải ở định dạng JSON hợp lệ",
"Parameter Override Template (JSON)": "Mẫu ghi đè tham số (JSON)",
"Parameter override template must be a JSON object": "Mẫu ghi đè tham số phải là đối tượng JSON",
"Parameter settings": "Cài đặt tham số",
"parameter.": "tham số",
"Parameters": "Tham số",
"Parsed {{count}} service account file(s)": "Đã phân tích {{count}} tệp tài khoản dịch vụ",
@@ -3390,6 +3400,7 @@
"Prepend": "Thêm vào đầu",
"Prepend to Start": "Thêm vào đầu",
"Prepend value to array / string / object start": "Thêm giá trị vào đầu mảng / chuỗi / đối tượng",
"Presence Penalty": "Phạt hiện diện",
"Preserve the original field when applying this rule": "Giữ trường gốc khi áp dụng quy tắc này",
"Preset groups": "Nhóm đặt sẵn",
"Preset recharge amounts (JSON array)": "Số tiền nạp đặt trước (mảng JSON)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "Đang chuyển hướng đến GitHub...",
"Redirecting to payment page...": "Đang chuyển hướng đến trang thanh toán...",
"Redirecting to sign in in {{seconds}} seconds.": "Đang chuyển đến trang đăng nhập sau {{seconds}} giây.",
"Reduces repeated wording": "Giảm cách diễn đạt lặp lại",
"Reference Video": "Video tham chiếu",
"Referral link:": "Liên kết giới thiệu:",
"Referral Program": "Chương trình Giới thiệu",
@@ -3948,6 +3960,7 @@
"Security & Limits": "Bảo mật & giới hạn",
"Security Check": "Kiểm tra bảo mật",
"Security verification": "Xác minh bảo mật",
"Seed": "Seed",
"Select": "Chọn",
"Select a color": "Chọn một màu",
"Select a group": "Chọn một nhóm",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Đăng nhập Telegram yêu cầu tích hợp widget; sắp ra mắt",
"Telegram Login Widget": "Tiện ích đăng nhập Telegram",
"Temperature": "Nhiệt độ",
"Template": "Mẫu",
"Template variables:": "Biến mẫu:",
"Templates": "Mẫu",
@@ -4587,6 +4601,7 @@
"Top models": "Mô hình hàng đầu",
"Top Models": "Người mẫu hàng đầu",
"Top models by traffic": "Mô hình có lượng truy cập cao nhất",
"Top P": "Top P",
"Top up balance and view billing history.": "Nạp tiền vào tài khoản và xem lịch sử thanh toán.",
"Top Users": "Người dùng hàng đầu",
"Top vendors": "Nhà cung cấp hàng đầu",
+16 -1
View File
@@ -712,6 +712,7 @@
"Cancelled": "已取消",
"Cancelled at": "作廢於",
"Capabilities": "能力",
"Caps the response length": "限制回覆長度",
"Capture a reusable bundle of models, tags, or endpoints.": "捕捉可重用的模型、標籤或端點捆綁包。",
"Card view": "卡片檢視",
"Category": "分類",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "合同審閱、合規與摘要",
"Control which models are exposed and which groups may use them.": "控制對外暴露的模型,以及哪些分組可以使用它們。",
"Controls how much the model thinks before answering": "控制模型回答前的推理深度",
"Controls randomness and creativity": "控制輸出的隨機性和創造性",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "控制在通行金鑰流程中是否需要用戶驗證(生物識別/PIN)。",
"Conversation cleared": "對話已清空",
"Conversion rate from USD to your custom currency": "從美元到您的自訂貨幣的轉換率",
@@ -1502,7 +1504,7 @@
"Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.": "每個檔位支援 0~2 個條件(針對 len、p、c),最後一檔為兜底檔無需條件。建議條件使用 len(完整輸入長度,含緩存命中),避免緩存命中降低 p 導致檔位誤判。",
"Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.": "每個檔位最多支援 2 個條件;最後一個檔位是不帶條件的兜底檔。建議使用完整輸入長度作為檔位條件,避免緩存命中減少收費輸入 token 後誤判檔位。",
"Each tier supports up to 2 conditions. The last tier without conditions is the fallback.": "每個階梯最多支援 2 個條件。最後一個無條件階梯作為兜底。",
"Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.": "當您的推薦人儲值時即可獲得獎勵。隨時將累計獎勵轉移到您的餘額。",
"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.": "Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.",
"Edit": "編輯",
"Edit {{title}}": "編輯{{title}}",
"Edit all channels with tag:": "編輯所有帶有標籤的渠道:",
@@ -1552,6 +1554,7 @@
"Empty": "空",
"Empty value will be saved as {}.": "空值將儲存為 {}。",
"Enable": "啟用",
"Enable {{parameter}}": "啟用 {{parameter}}",
"Enable 2FA": "啟用 2FA",
"Enable All": "啟用全部",
"Enable check-in feature": "啟用簽到功能",
@@ -1599,6 +1602,7 @@
"Enabled Status": "啟用狀態",
"Enabling...": "正在啟用...",
"Encourages introducing new topics": "鼓勵引入新話題",
"Encourages new topics": "鼓勵討論新話題",
"End": "結束",
"End Error": "結束錯誤",
"End Reason": "結束原因",
@@ -2032,6 +2036,7 @@
"Frames per second": "幀率",
"Free": "可用",
"Free: {{free}} / Total: {{total}}": "可用空間: {{free}} / 總空間: {{total}}",
"Frequency Penalty": "頻率懲罰",
"Friendly name to identify this channel": "用於識別此渠道的友好名稱",
"From Address": "發件地址",
"From IO.NET deployment": "來自 IO.NET 部署",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "保持平台就緒",
"Keep this above 1 minute to avoid heavy database load": "保持此值大於 1 分鐘以避免資料庫負載過重",
"Keep-alive Ping": "保持連線心跳",
"Keeps compatible responses more repeatable": "讓相容模型的回覆更可重現",
"Key": "金鑰",
"Key Fingerprint": "Key 指紋",
"Key Sources": "Key 來源",
@@ -2447,6 +2453,7 @@
"Limit Reached": "已達上限",
"Limit which models can be used with this key": "限制此金鑰可使用的模型",
"Limited": "受限",
"Limits token selection to a probability mass": "依機率質量限制詞元選擇範圍",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "您的文件站點連結",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "最大成功數",
"Max successful requests": "最大成功請求數",
"Max Successful Requests": "最大成功請求數",
"Max Tokens": "最大 Tokens",
"Maximum 1000 characters. Supports Markdown and HTML.": "最多 1000 個字元。支援 Markdown 和 HTML。",
"Maximum 200 characters": "最多 200 個字元",
"Maximum 500 characters. Supports Markdown and HTML.": "最多 500 個字元。支援 Markdown 和 HTML。",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "僅管理員可用。啟用後,當定時模型檢查偵測到上游模型變更或檢查失敗時,您將透過所選方式收到摘要通知。",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "只有設定過的組合才會被覆蓋,其餘呼叫仍使用收費分組的基礎倍率。",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "只有已設定的組合會被覆蓋,其他呼叫仍使用令牌分組的基礎倍率。",
"Only enabled parameters are sent with the request.": "只有啟用的參數會隨請求傳送。",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "只填寫站點根域名,例如 https://api.example.com。不要填寫 /api/user/epay/notify 這類路徑。留空則使用伺服器地址。",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "僅選定的欄位將會被覆蓋。如果出現新的衝突,您可以重新執行同步精靈。",
"Only successful requests": "僅成功的請求",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "參數覆蓋必須是合法的 JSON 格式",
"Parameter Override Template (JSON)": "參數覆蓋模板 (JSON)",
"Parameter override template must be a JSON object": "參數覆蓋模板必須是 JSON 物件",
"Parameter settings": "參數設定",
"parameter.": "參數。",
"Parameters": "參數",
"Parsed {{count}} service account file(s)": "已解析 {{count}} 個服務賬號檔案",
@@ -3390,6 +3400,7 @@
"Prepend": "前置追加",
"Prepend to Start": "追加到開頭",
"Prepend value to array / string / object start": "把值追加到陣列/字串/物件開頭",
"Presence Penalty": "存在懲罰",
"Preserve the original field when applying this rule": "套用此規則時保留原始欄位",
"Preset groups": "預設分組",
"Preset recharge amounts (JSON array)": "預設儲值金額(JSON 陣列)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "正在跳轉 GitHub...",
"Redirecting to payment page...": "正在重新導向到支付頁面...",
"Redirecting to sign in in {{seconds}} seconds.": "將在 {{seconds}} 秒後跳轉到登入頁。",
"Reduces repeated wording": "減少重複措辭",
"Reference Video": "參照生影片",
"Referral link:": "推薦連結:",
"Referral Program": "推薦計劃",
@@ -3948,6 +3960,7 @@
"Security & Limits": "安全與限制",
"Security Check": "安全驗證",
"Security verification": "安全驗證",
"Seed": "隨機種子",
"Select": "選擇",
"Select a color": "選擇顏色",
"Select a group": "選擇一個分組",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Telegram 登入需要小部件整合;即將推出",
"Telegram Login Widget": "Telegram 登入小部件",
"Temperature": "溫度",
"Template": "模板",
"Template variables:": "模板變數:",
"Templates": "模板",
@@ -4587,6 +4601,7 @@
"Top models": "熱門模型",
"Top Models": "熱門模型",
"Top models by traffic": "流量最高的模型",
"Top P": "Top P",
"Top up balance and view billing history.": "儲值餘額並查看賬單歷史。",
"Top Users": "熱門用戶",
"Top vendors": "熱門廠商",
+15
View File
@@ -712,6 +712,7 @@
"Cancelled": "已取消",
"Cancelled at": "作废于",
"Capabilities": "能力",
"Caps the response length": "限制回复长度",
"Capture a reusable bundle of models, tags, or endpoints.": "捕获可重用的模型、标签或端点捆绑包。",
"Card view": "卡片视图",
"Category": "分类",
@@ -1044,6 +1045,7 @@
"Contract review, compliance, summarisation": "合同审阅、合规与摘要",
"Control which models are exposed and which groups may use them.": "控制对外暴露的模型,以及哪些分组可以使用它们。",
"Controls how much the model thinks before answering": "控制模型回答前的推理深度",
"Controls randomness and creativity": "控制输出的随机性和创造性",
"Controls whether user verification (biometrics/PIN) is required during Passkey flows.": "控制在通行密钥流程中是否需要用户验证(生物识别/PIN)。",
"Conversation cleared": "对话已清空",
"Conversion rate from USD to your custom currency": "从美元到您的自定义货币的转换率",
@@ -1552,6 +1554,7 @@
"Empty": "空",
"Empty value will be saved as {}.": "空值将保存为 {}。",
"Enable": "启用",
"Enable {{parameter}}": "启用 {{parameter}}",
"Enable 2FA": "启用 2FA",
"Enable All": "启用全部",
"Enable check-in feature": "启用签到功能",
@@ -1599,6 +1602,7 @@
"Enabled Status": "启用状态",
"Enabling...": "正在启用...",
"Encourages introducing new topics": "鼓励引入新话题",
"Encourages new topics": "鼓励讨论新话题",
"End": "结束",
"End Error": "结束错误",
"End Reason": "结束原因",
@@ -2032,6 +2036,7 @@
"Frames per second": "帧率",
"Free": "可用",
"Free: {{free}} / Total: {{total}}": "可用空间: {{free}} / 总空间: {{total}}",
"Frequency Penalty": "频率惩罚",
"Friendly name to identify this channel": "用于识别此渠道的友好名称",
"From Address": "发件地址",
"From IO.NET deployment": "来自 IO.NET 部署",
@@ -2379,6 +2384,7 @@
"Keep the platform ready": "保持平台就绪",
"Keep this above 1 minute to avoid heavy database load": "保持此值大于 1 分钟以避免数据库负载过重",
"Keep-alive Ping": "保持连接心跳",
"Keeps compatible responses more repeatable": "让兼容模型的回复更可复现",
"Key": "密钥",
"Key Fingerprint": "Key 指纹",
"Key Sources": "Key 来源",
@@ -2447,6 +2453,7 @@
"Limit Reached": "已达上限",
"Limit which models can be used with this key": "限制此密钥可使用的模型",
"Limited": "受限",
"Limits token selection to a probability mass": "按概率质量限制词元选择范围",
"LingYiWanWu": "LingYiWanWu",
"Link to your documentation site": "您的文档站点链接",
"LinuxDO": "LinuxDO",
@@ -2552,6 +2559,7 @@
"Max Success": "最大成功数",
"Max successful requests": "最大成功请求数",
"Max Successful Requests": "最大成功请求数",
"Max Tokens": "最大 Tokens",
"Maximum 1000 characters. Supports Markdown and HTML.": "最多 1000 个字符。支持 Markdown 和 HTML。",
"Maximum 200 characters": "最多 200 个字符",
"Maximum 500 characters. Supports Markdown and HTML.": "最多 500 个字符。支持 Markdown 和 HTML。",
@@ -3038,6 +3046,7 @@
"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.": "仅管理员可用。启用后,当定时模型检查检测到上游模型变更或检查失败时,您将通过所选方式收到汇总通知。",
"Only configured combinations are overridden. All other calls keep the billing group base ratio.": "只有配置过的组合才会被覆盖,其余调用仍使用计费分组的基础倍率。",
"Only configured combinations are overridden. All other calls keep the token group base ratio.": "只有已配置的组合会被覆盖,其他调用仍使用令牌分组的基础倍率。",
"Only enabled parameters are sent with the request.": "只有启用的参数会随请求发送。",
"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.": "只填写站点根域名,例如 https://api.example.com。不要填写 /api/user/epay/notify 这类路径。留空则使用服务器地址。",
"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.": "仅选定的字段将被覆盖。如果出现新的冲突,您可以重新运行同步向导。",
"Only successful requests": "仅成功的请求",
@@ -3166,6 +3175,7 @@
"Parameter override must be valid JSON format": "参数覆盖必须是合法的 JSON 格式",
"Parameter Override Template (JSON)": "参数覆盖模板 (JSON)",
"Parameter override template must be a JSON object": "参数覆盖模板必须是 JSON 对象",
"Parameter settings": "参数设置",
"parameter.": "参数。",
"Parameters": "参数",
"Parsed {{count}} service account file(s)": "已解析 {{count}} 个服务账号文件",
@@ -3390,6 +3400,7 @@
"Prepend": "前置追加",
"Prepend to Start": "追加到开头",
"Prepend value to array / string / object start": "把值追加到数组/字符串/对象开头",
"Presence Penalty": "存在惩罚",
"Preserve the original field when applying this rule": "应用此规则时保留原始字段",
"Preset groups": "预设分组",
"Preset recharge amounts (JSON array)": "预设充值金额(JSON 数组)",
@@ -3613,6 +3624,7 @@
"Redirecting to GitHub...": "正在跳转 GitHub...",
"Redirecting to payment page...": "正在重定向到支付页面...",
"Redirecting to sign in in {{seconds}} seconds.": "将在 {{seconds}} 秒后跳转到登录页。",
"Reduces repeated wording": "减少重复措辞",
"Reference Video": "参照生视频",
"Referral link:": "推荐链接:",
"Referral Program": "推荐计划",
@@ -3948,6 +3960,7 @@
"Security & Limits": "安全与限制",
"Security Check": "安全验证",
"Security verification": "安全验证",
"Seed": "随机种子",
"Select": "选择",
"Select a color": "选择颜色",
"Select a group": "选择一个分组",
@@ -4353,6 +4366,7 @@
"Telegram": "Telegram",
"Telegram login requires widget integration; coming soon": "Telegram 登录需要小部件集成;即将推出",
"Telegram Login Widget": "Telegram 登录小部件",
"Temperature": "温度",
"Template": "模板",
"Template variables:": "模板变量:",
"Templates": "模板",
@@ -4587,6 +4601,7 @@
"Top models": "热门模型",
"Top Models": "热门模型",
"Top models by traffic": "流量最高的模型",
"Top P": "Top P",
"Top up balance and view billing history.": "充值余额并查看账单历史。",
"Top Users": "热门用户",
"Top vendors": "热门厂商",
+14
View File
@@ -228,6 +228,20 @@ export const STATIC_I18N_KEYS = [
'Match models starting with this name',
'Match models containing this name',
'Match models ending with this name',
// Playground parameter controls
'Temperature',
'Top P',
'Frequency Penalty',
'Presence Penalty',
'Max Tokens',
'Seed',
'Controls randomness and creativity',
'Limits token selection to a probability mass',
'Reduces repeated wording',
'Encourages new topics',
'Caps the response length',
'Keeps compatible responses more repeatable',
'All Status',
'All Sync Status',
'Official Sync',