Merge branch 'main' into feat/webauthn

This commit is contained in:
Ruben Talstra 2025-02-22 14:28:12 +01:00 committed by GitHub
commit 8173f5fca1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
132 changed files with 5513 additions and 769 deletions

View file

@ -28,7 +28,8 @@
},
"homepage": "https://librechat.ai",
"dependencies": {
"@ariakit/react": "^0.4.11",
"@ariakit/react": "^0.4.15",
"@ariakit/react-core": "^0.4.15",
"@codesandbox/sandpack-react": "^2.19.10",
"@dicebear/collection": "^7.0.4",
"@dicebear/core": "^7.0.4",
@ -43,6 +44,7 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.0.0",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-progress": "^1.1.2",
"@radix-ui/react-radio-group": "^1.1.3",
"@radix-ui/react-select": "^2.0.0",
"@radix-ui/react-separator": "^1.0.3",
@ -63,6 +65,8 @@
"framer-motion": "^11.5.4",
"html-to-image": "^1.11.11",
"i18next": "^24.2.2",
"i18next-browser-languagedetector": "^8.0.3",
"input-otp": "^1.4.2",
"js-cookie": "^3.0.5",
"librechat-data-provider": "*",
"lodash": "^4.17.21",
@ -82,7 +86,7 @@
"react-i18next": "^15.4.0",
"react-lazy-load-image-component": "^1.6.0",
"react-markdown": "^9.0.1",
"react-resizable-panels": "^2.1.1",
"react-resizable-panels": "^2.1.7",
"react-router-dom": "^6.11.2",
"react-speech-recognition": "^3.10.0",
"react-textarea-autosize": "^8.4.0",

View file

@ -97,7 +97,7 @@ function AuthLayout({
) : (
<>
{children}
{(pathname.includes('login') || pathname.includes('register')) && (
{!pathname.includes('2fa') && (pathname.includes('login') || pathname.includes('register')) && (
<SocialLoginRender
startupConfig={startupConfig}
mode={mode}

View file

@ -166,9 +166,7 @@ const LoginForm: React.FC<TLoginFormProps> = ({ onSubmit, startupConfig, error,
type="submit"
className="
w-full rounded-2xl bg-green-600 px-4 py-3 text-sm font-medium text-white
transition-colors hover:bg-green-700 focus:outline-none focus:ring-2
focus:ring-green-500 focus:ring-offset-2 disabled:opacity-50
disabled:hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700
transition-colors hover:bg-green-700 dark:bg-green-600 dark:hover:bg-green-700
"
>
{localize('com_auth_continue')}

View file

@ -0,0 +1,176 @@
import React, { useState, useCallback } from 'react';
import { useSearchParams } from 'react-router-dom';
import { useForm, Controller } from 'react-hook-form';
import { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from 'input-otp';
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Label } from '~/components';
import { useVerifyTwoFactorTempMutation } from '~/data-provider';
import { useToastContext } from '~/Providers';
import { useLocalize } from '~/hooks';
interface VerifyPayload {
tempToken: string;
token?: string;
backupCode?: string;
}
type TwoFactorFormInputs = {
token?: string;
backupCode?: string;
};
const TwoFactorScreen: React.FC = React.memo(() => {
const [searchParams] = useSearchParams();
const tempTokenRaw = searchParams.get('tempToken');
const tempToken = tempTokenRaw !== null && tempTokenRaw !== '' ? tempTokenRaw : '';
const {
control,
handleSubmit,
formState: { errors },
} = useForm<TwoFactorFormInputs>();
const localize = useLocalize();
const { showToast } = useToastContext();
const [useBackup, setUseBackup] = useState<boolean>(false);
const [isLoading, setIsLoading] = useState<boolean>(false);
const { mutate: verifyTempMutate } = useVerifyTwoFactorTempMutation({
onSuccess: (result) => {
if (result.token != null && result.token !== '') {
window.location.href = '/';
}
},
onMutate: () => {
setIsLoading(true);
},
onError: (error: unknown) => {
setIsLoading(false);
const err = error as { response?: { data?: { message?: unknown } } };
const errorMsg =
typeof err.response?.data?.message === 'string'
? err.response.data.message
: 'Error verifying 2FA';
showToast({ message: errorMsg, status: 'error' });
},
});
const onSubmit = useCallback(
(data: TwoFactorFormInputs) => {
const payload: VerifyPayload = { tempToken };
if (useBackup && data.backupCode != null && data.backupCode !== '') {
payload.backupCode = data.backupCode;
} else if (data.token != null && data.token !== '') {
payload.token = data.token;
}
verifyTempMutate(payload);
},
[tempToken, useBackup, verifyTempMutate],
);
const toggleBackupOn = useCallback(() => {
setUseBackup(true);
}, []);
const toggleBackupOff = useCallback(() => {
setUseBackup(false);
}, []);
return (
<div className="mt-4">
<form onSubmit={handleSubmit(onSubmit)}>
<Label className="flex justify-center break-keep text-center text-sm text-text-primary">
{localize('com_auth_two_factor')}
</Label>
{!useBackup && (
<div className="my-4 flex justify-center text-text-primary">
<Controller
name="token"
control={control}
render={({ field: { onChange, value } }) => (
<InputOTP
maxLength={6}
value={value != null ? value : ''}
onChange={onChange}
pattern={REGEXP_ONLY_DIGITS}
>
<InputOTPGroup>
<InputOTPSlot index={0} />
<InputOTPSlot index={1} />
<InputOTPSlot index={2} />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot index={3} />
<InputOTPSlot index={4} />
<InputOTPSlot index={5} />
</InputOTPGroup>
</InputOTP>
)}
/>
{errors.token && <span className="text-sm text-red-500">{errors.token.message}</span>}
</div>
)}
{useBackup && (
<div className="my-4 flex justify-center text-text-primary">
<Controller
name="backupCode"
control={control}
render={({ field: { onChange, value } }) => (
<InputOTP
maxLength={8}
value={value != null ? value : ''}
onChange={onChange}
pattern={REGEXP_ONLY_DIGITS_AND_CHARS}
>
<InputOTPGroup>
<InputOTPSlot index={0} />
<InputOTPSlot index={1} />
<InputOTPSlot index={2} />
<InputOTPSlot index={3} />
<InputOTPSlot index={4} />
<InputOTPSlot index={5} />
<InputOTPSlot index={6} />
<InputOTPSlot index={7} />
</InputOTPGroup>
</InputOTP>
)}
/>
{errors.backupCode && (
<span className="text-sm text-red-500">{errors.backupCode.message}</span>
)}
</div>
)}
<div className="flex items-center justify-between">
<button
type="submit"
aria-label={localize('com_auth_continue')}
data-testid="login-button"
disabled={isLoading}
className="w-full rounded-2xl bg-green-600 px-4 py-3 text-sm font-medium text-white transition-colors hover:bg-green-700 disabled:opacity-80 dark:bg-green-600 dark:hover:bg-green-700"
>
{isLoading ? localize('com_auth_email_verifying_ellipsis') : localize('com_ui_verify')}
</button>
</div>
<div className="mt-4 flex justify-center">
{!useBackup ? (
<button
type="button"
onClick={toggleBackupOn}
className="inline-flex p-1 text-sm font-medium text-green-600 transition-colors hover:text-green-700 dark:text-green-400 dark:hover:text-green-300"
>
{localize('com_ui_use_backup_code')}
</button>
) : (
<button
type="button"
onClick={toggleBackupOff}
className="inline-flex p-1 text-sm font-medium text-green-600 transition-colors hover:text-green-700 dark:text-green-400 dark:hover:text-green-300"
>
{localize('com_ui_use_2fa_code')}
</button>
)}
</div>
</form>
</div>
);
});
export default TwoFactorScreen;

View file

@ -4,3 +4,4 @@ export { default as ResetPassword } from './ResetPassword';
export { default as VerifyEmail } from './VerifyEmail';
export { default as ApiErrorWatcher } from './ApiErrorWatcher';
export { default as RequestPasswordReset } from './RequestPasswordReset';
export { default as TwoFactorScreen } from './TwoFactorScreen';

View file

@ -55,7 +55,7 @@ const FileUpload: React.FC<FileUploadProps> = ({
let statusText: string;
if (!status) {
statusText = text ?? localize('com_endpoint_import');
statusText = text ?? localize('com_ui_import');
} else if (status === 'success') {
statusText = successText ?? localize('com_ui_upload_success');
} else {
@ -72,12 +72,12 @@ const FileUpload: React.FC<FileUploadProps> = ({
)}
>
<FileUp className="mr-1 flex w-[22px] items-center stroke-1" />
<span className="flex text-xs ">{statusText}</span>
<span className="flex text-xs">{statusText}</span>
<input
id={`file-upload-${id}`}
value=""
type="file"
className={cn('hidden ', className)}
className={cn('hidden', className)}
accept=".json"
onChange={handleFileChange}
/>

View file

@ -1,8 +1,13 @@
import { useRecoilState } from 'recoil';
import { Settings2 } from 'lucide-react';
import { Root, Anchor } from '@radix-ui/react-popover';
import { useState, useEffect, useMemo } from 'react';
import { tConvoUpdateSchema, EModelEndpoint, isParamEndpoint } from 'librechat-data-provider';
import { Root, Anchor } from '@radix-ui/react-popover';
import {
EModelEndpoint,
isParamEndpoint,
isAgentsEndpoint,
tConvoUpdateSchema,
} from 'librechat-data-provider';
import type { TPreset, TInterfaceConfig } from 'librechat-data-provider';
import { EndpointSettings, SaveAsPresetDialog, AlternativeSettings } from '~/components/Endpoints';
import { PluginStoreDialog, TooltipAnchor } from '~/components';
@ -42,7 +47,6 @@ export default function HeaderOptions({
if (endpoint && noSettings[endpoint]) {
setShowPopover(false);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [endpoint, noSettings]);
const saveAsPreset = () => {
@ -67,7 +71,7 @@ export default function HeaderOptions({
<div className="my-auto lg:max-w-2xl xl:max-w-3xl">
<span className="flex w-full flex-col items-center justify-center gap-0 md:order-none md:m-auto md:gap-2">
<div className="z-[61] flex w-full items-center justify-center gap-2">
{interfaceConfig?.modelSelect === true && (
{interfaceConfig?.modelSelect === true && !isAgentsEndpoint(endpoint) && (
<ModelSelect
conversation={conversation}
setOption={setOption}

View file

@ -80,7 +80,7 @@ function AccountSettings() {
!isNaN(parseFloat(balanceQuery.data)) && (
<>
<div className="text-token-text-secondary ml-3 mr-2 py-2 text-sm" role="note">
{localize('com_nav_balance')}: ${parseFloat(balanceQuery.data).toFixed(2)}
{localize('com_nav_balance')}: {parseFloat(balanceQuery.data).toFixed(2)}
</div>
<DropdownMenuSeparator />
</>

View file

@ -3,19 +3,36 @@ import DisplayUsernameMessages from './DisplayUsernameMessages';
import DeleteAccount from './DeleteAccount';
import Avatar from './Avatar';
import PassKeys from './PassKeys';
import EnableTwoFactorItem from './TwoFactorAuthentication';
import BackupCodesItem from './BackupCodesItem';
import { useAuthContext } from '~/hooks';
function Account() {
const user = useAuthContext();
return (
<div className="flex flex-col gap-3 p-1 text-sm text-text-primary">
<div className="pb-3">
<DisplayUsernameMessages />
</div>
<div className="pb-3">
<Avatar />
</div>
{user?.user?.provider === 'local' && (
<>
<div className="pb-3">
<EnableTwoFactorItem />
</div>
{Array.isArray(user.user?.backupCodes) && user.user?.backupCodes.length > 0 && (
<div className="pb-3">
<BackupCodesItem />
</div>
)}
</>
)}
<div className="pb-3">
<DeleteAccount />
</div>
<div className="pb-3">
<DisplayUsernameMessages />
</div>
<div className="pb-3">
<PassKeys />
</div>

View file

@ -47,7 +47,7 @@ function Avatar() {
const { mutate: uploadAvatar, isLoading: isUploading } = useUploadAvatarMutation({
onSuccess: (data) => {
showToast({ message: localize('com_ui_upload_success') });
setUser((prev) => ({ ...prev, avatar: data.url } as TUser));
setUser((prev) => ({ ...prev, avatar: data.url }) as TUser);
openButtonRef.current?.click();
},
onError: (error) => {
@ -133,9 +133,11 @@ function Avatar() {
>
<div className="flex items-center justify-between">
<span>{localize('com_nav_profile_picture')}</span>
<OGDialogTrigger ref={openButtonRef} className="btn btn-neutral relative">
<FileImage className="mr-2 flex w-[22px] items-center stroke-1" />
<span>{localize('com_nav_change_picture')}</span>
<OGDialogTrigger ref={openButtonRef}>
<Button variant="outline">
<FileImage className="mr-2 flex w-[22px] items-center stroke-1" />
<span>{localize('com_nav_change_picture')}</span>
</Button>
</OGDialogTrigger>
</div>

View file

@ -0,0 +1,194 @@
import React, { useState } from 'react';
import { RefreshCcw, ShieldX } from 'lucide-react';
import { motion, AnimatePresence } from 'framer-motion';
import { TBackupCode, TRegenerateBackupCodesResponse, type TUser } from 'librechat-data-provider';
import {
OGDialog,
OGDialogContent,
OGDialogTitle,
OGDialogTrigger,
Button,
Label,
Spinner,
TooltipAnchor,
} from '~/components';
import { useRegenerateBackupCodesMutation } from '~/data-provider';
import { useAuthContext, useLocalize } from '~/hooks';
import { useToastContext } from '~/Providers';
import { useSetRecoilState } from 'recoil';
import store from '~/store';
const BackupCodesItem: React.FC = () => {
const localize = useLocalize();
const { user } = useAuthContext();
const { showToast } = useToastContext();
const setUser = useSetRecoilState(store.user);
const [isDialogOpen, setDialogOpen] = useState<boolean>(false);
const { mutate: regenerateBackupCodes, isLoading } = useRegenerateBackupCodesMutation();
const fetchBackupCodes = (auto: boolean = false) => {
regenerateBackupCodes(undefined, {
onSuccess: (data: TRegenerateBackupCodesResponse) => {
const newBackupCodes: TBackupCode[] = data.backupCodesHash.map((codeHash) => ({
codeHash,
used: false,
usedAt: null,
}));
setUser((prev) => ({ ...prev, backupCodes: newBackupCodes }) as TUser);
showToast({
message: localize('com_ui_backup_codes_regenerated'),
status: 'success',
});
// Trigger file download only when user explicitly clicks the button.
if (!auto && newBackupCodes.length) {
const codesString = data.backupCodes.join('\n');
const blob = new Blob([codesString], { type: 'text/plain;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'backup-codes.txt';
a.click();
URL.revokeObjectURL(url);
}
},
onError: () =>
showToast({
message: localize('com_ui_backup_codes_regenerate_error'),
status: 'error',
}),
});
};
const handleRegenerate = () => {
fetchBackupCodes(false);
};
return (
<OGDialog open={isDialogOpen} onOpenChange={setDialogOpen}>
<div className="flex items-center justify-between">
<div className="flex items-center space-x-3">
<Label className="font-light">{localize('com_ui_backup_codes')}</Label>
</div>
<OGDialogTrigger asChild>
<Button aria-label="Show Backup Codes" variant="outline">
{localize('com_ui_show')}
</Button>
</OGDialogTrigger>
</div>
<OGDialogContent className="w-11/12 max-w-lg">
<OGDialogTitle className="mb-6 text-2xl font-semibold">
{localize('com_ui_backup_codes')}
</OGDialogTitle>
<AnimatePresence>
<motion.div
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -20 }}
className="mt-4"
>
{Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 ? (
<>
<div className="grid grid-cols-2 gap-4">
{user?.backupCodes.map((code, index) => {
const isUsed = code.used;
const description = `Backup code number ${index + 1}, ${
isUsed
? `used on ${code.usedAt ? new Date(code.usedAt).toLocaleDateString() : 'an unknown date'}`
: 'not used yet'
}`;
return (
<motion.div
key={code.codeHash}
role="listitem"
tabIndex={0}
aria-label={description}
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: index * 0.1 }}
onFocus={() => {
const announcement = new CustomEvent('announce', {
detail: { message: description },
});
document.dispatchEvent(announcement);
}}
className={`flex flex-col rounded-xl border p-4 backdrop-blur-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary ${
isUsed
? 'border-red-200 bg-red-50/80 dark:border-red-800 dark:bg-red-900/20'
: 'border-green-200 bg-green-50/80 dark:border-green-800 dark:bg-green-900/20'
} `}
>
<div className="flex items-center justify-between" aria-hidden="true">
<span className="text-sm font-medium text-text-secondary">
#{index + 1}
</span>
<TooltipAnchor
description={
code.usedAt ? new Date(code.usedAt).toLocaleDateString() : ''
}
disabled={!isUsed}
focusable={false}
className={isUsed ? 'cursor-pointer' : 'cursor-default'}
render={
<span
className={`rounded-full px-3 py-1 text-sm font-medium ${
isUsed
? 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300'
: 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300'
}`}
>
{isUsed ? localize('com_ui_used') : localize('com_ui_not_used')}
</span>
}
/>
</div>
</motion.div>
);
})}
</div>
<div className="mt-12 flex justify-center">
<Button
onClick={handleRegenerate}
disabled={isLoading}
variant="default"
className="px-8 py-3 transition-all disabled:opacity-50"
>
{isLoading ? (
<Spinner className="mr-2" />
) : (
<RefreshCcw className="mr-2 h-4 w-4" />
)}
{isLoading
? localize('com_ui_regenerating')
: localize('com_ui_regenerate_backup')}
</Button>
</div>
</>
) : (
<div className="flex flex-col items-center gap-4 p-6 text-center">
<ShieldX className="h-12 w-12 text-text-primary" />
<p className="text-lg text-text-secondary">{localize('com_ui_no_backup_codes')}</p>
<Button
onClick={handleRegenerate}
disabled={isLoading}
variant="default"
className="px-8 py-3 transition-all disabled:opacity-50"
>
{isLoading && <Spinner className="mr-2" />}
{localize('com_ui_generate_backup')}
</Button>
</div>
)}
</motion.div>
</AnimatePresence>
</OGDialogContent>
</OGDialog>
);
};
export default React.memo(BackupCodesItem);

View file

@ -57,7 +57,7 @@ const DeleteAccount = ({ disabled = false }: { title?: string; disabled?: boolea
</Button>
</OGDialogTrigger>
</div>
<OGDialogContent className="w-11/12 max-w-2xl">
<OGDialogContent className="w-11/12 max-w-md">
<OGDialogHeader>
<OGDialogTitle className="text-lg font-medium leading-6">
{localize('com_nav_delete_account_confirm')}

View file

@ -0,0 +1,36 @@
import React from 'react';
import { motion } from 'framer-motion';
import { LockIcon, UnlockIcon } from 'lucide-react';
import { Label, Button } from '~/components';
import { useLocalize } from '~/hooks';
interface DisableTwoFactorToggleProps {
enabled: boolean;
onChange: () => void;
disabled?: boolean;
}
export const DisableTwoFactorToggle: React.FC<DisableTwoFactorToggleProps> = ({
enabled,
onChange,
disabled,
}) => {
const localize = useLocalize();
return (
<div className="flex items-center justify-between">
<div className="flex items-center space-x-2">
<Label className="font-light"> {localize('com_nav_2fa')}</Label>
</div>
<div className="flex items-center gap-3">
<Button
variant={enabled ? 'destructive' : 'outline'}
onClick={onChange}
disabled={disabled}
>
{enabled ? localize('com_ui_2fa_disable') : localize('com_ui_2fa_enable')}
</Button>
</div>
</div>
);
};

View file

@ -0,0 +1,298 @@
import React, { useCallback, useState } from 'react';
import { useSetRecoilState } from 'recoil';
import { SmartphoneIcon } from 'lucide-react';
import { motion, AnimatePresence } from 'framer-motion';
import type { TUser, TVerify2FARequest } from 'librechat-data-provider';
import { OGDialog, OGDialogContent, OGDialogHeader, OGDialogTitle, Progress } from '~/components';
import { SetupPhase, QRPhase, VerifyPhase, BackupPhase, DisablePhase } from './TwoFactorPhases';
import { DisableTwoFactorToggle } from './DisableTwoFactorToggle';
import { useAuthContext, useLocalize } from '~/hooks';
import { useToastContext } from '~/Providers';
import store from '~/store';
import {
useConfirmTwoFactorMutation,
useDisableTwoFactorMutation,
useEnableTwoFactorMutation,
useVerifyTwoFactorMutation,
} from '~/data-provider';
export type Phase = 'setup' | 'qr' | 'verify' | 'backup' | 'disable';
const phaseVariants = {
initial: { opacity: 0, scale: 0.95 },
animate: { opacity: 1, scale: 1, transition: { duration: 0.3, ease: 'easeOut' } },
exit: { opacity: 0, scale: 0.95, transition: { duration: 0.3, ease: 'easeIn' } },
};
const TwoFactorAuthentication: React.FC = () => {
const localize = useLocalize();
const { user } = useAuthContext();
const setUser = useSetRecoilState(store.user);
const { showToast } = useToastContext();
const [secret, setSecret] = useState<string>('');
const [otpauthUrl, setOtpauthUrl] = useState<string>('');
const [downloaded, setDownloaded] = useState<boolean>(false);
const [disableToken, setDisableToken] = useState<string>('');
const [backupCodes, setBackupCodes] = useState<string[]>([]);
const [isDialogOpen, setDialogOpen] = useState<boolean>(false);
const [verificationToken, setVerificationToken] = useState<string>('');
const [phase, setPhase] = useState<Phase>(Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 ? 'disable' : 'setup');
const { mutate: confirm2FAMutate } = useConfirmTwoFactorMutation();
const { mutate: enable2FAMutate, isLoading: isGenerating } = useEnableTwoFactorMutation();
const { mutate: verify2FAMutate, isLoading: isVerifying } = useVerifyTwoFactorMutation();
const { mutate: disable2FAMutate, isLoading: isDisabling } = useDisableTwoFactorMutation();
const steps = ['Setup', 'Scan QR', 'Verify', 'Backup'];
const phasesLabel: Record<Phase, string> = {
setup: 'Setup',
qr: 'Scan QR',
verify: 'Verify',
backup: 'Backup',
disable: '',
};
const currentStep = steps.indexOf(phasesLabel[phase]);
const resetState = useCallback(() => {
if (Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 && otpauthUrl) {
disable2FAMutate(undefined, {
onError: () =>
showToast({ message: localize('com_ui_2fa_disable_error'), status: 'error' }),
});
}
setOtpauthUrl('');
setSecret('');
setBackupCodes([]);
setVerificationToken('');
setDisableToken('');
setPhase(Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 ? 'disable' : 'setup');
setDownloaded(false);
}, [user, otpauthUrl, disable2FAMutate, localize, showToast]);
const handleGenerateQRCode = useCallback(() => {
enable2FAMutate(undefined, {
onSuccess: ({ otpauthUrl, backupCodes }) => {
setOtpauthUrl(otpauthUrl);
setSecret(otpauthUrl.split('secret=')[1].split('&')[0]);
setBackupCodes(backupCodes);
setPhase('qr');
},
onError: () => showToast({ message: localize('com_ui_2fa_generate_error'), status: 'error' }),
});
}, [enable2FAMutate, localize, showToast]);
const handleVerify = useCallback(() => {
if (!verificationToken) {
return;
}
verify2FAMutate(
{ token: verificationToken },
{
onSuccess: () => {
showToast({ message: localize('com_ui_2fa_verified') });
confirm2FAMutate(
{ token: verificationToken },
{
onSuccess: () => setPhase('backup'),
onError: () =>
showToast({ message: localize('com_ui_2fa_invalid'), status: 'error' }),
},
);
},
onError: () => showToast({ message: localize('com_ui_2fa_invalid'), status: 'error' }),
},
);
}, [verificationToken, verify2FAMutate, confirm2FAMutate, localize, showToast]);
const handleDownload = useCallback(() => {
if (!backupCodes.length) {
return;
}
const blob = new Blob([backupCodes.join('\n')], { type: 'text/plain;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'backup-codes.txt';
a.click();
URL.revokeObjectURL(url);
setDownloaded(true);
}, [backupCodes]);
const handleConfirm = useCallback(() => {
setDialogOpen(false);
setPhase('disable');
showToast({ message: localize('com_ui_2fa_enabled') });
setUser(
(prev) =>
({
...prev,
backupCodes: backupCodes.map((code) => ({
code,
codeHash: code,
used: false,
usedAt: null,
})),
}) as TUser,
);
}, [setUser, localize, showToast, backupCodes]);
const handleDisableVerify = useCallback(
(token: string, useBackup: boolean) => {
// Validate: if not using backup, ensure token has at least 6 digits;
// if using backup, ensure backup code has at least 8 characters.
if (!useBackup && token.trim().length < 6) {
return;
}
if (useBackup && token.trim().length < 8) {
return;
}
const payload: TVerify2FARequest = {};
if (useBackup) {
payload.backupCode = token.trim();
} else {
payload.token = token.trim();
}
verify2FAMutate(payload, {
onSuccess: () => {
disable2FAMutate(undefined, {
onSuccess: () => {
showToast({ message: localize('com_ui_2fa_disabled') });
setDialogOpen(false);
setUser(
(prev) =>
({
...prev,
totpSecret: '',
backupCodes: [],
}) as TUser,
);
setPhase('setup');
setOtpauthUrl('');
},
onError: () =>
showToast({ message: localize('com_ui_2fa_disable_error'), status: 'error' }),
});
},
onError: () => showToast({ message: localize('com_ui_2fa_invalid'), status: 'error' }),
});
},
[disableToken, verify2FAMutate, disable2FAMutate, showToast, localize, setUser],
);
return (
<OGDialog
open={isDialogOpen}
onOpenChange={(open) => {
setDialogOpen(open);
if (!open) {
resetState();
}
}}
>
<DisableTwoFactorToggle
enabled={Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0}
onChange={() => setDialogOpen(true)}
disabled={isVerifying || isDisabling || isGenerating}
/>
<OGDialogContent className="w-11/12 max-w-lg p-6">
<AnimatePresence mode="wait">
<motion.div
key={phase}
variants={phaseVariants}
initial="initial"
animate="animate"
exit="exit"
className="space-y-6"
>
<OGDialogHeader>
<OGDialogTitle className="mb-2 flex items-center gap-3 text-2xl font-bold">
<SmartphoneIcon className="h-6 w-6 text-primary" />
{Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 ? localize('com_ui_2fa_disable') : localize('com_ui_2fa_setup')}
</OGDialogTitle>
{Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0 && phase !== 'disable' && (
<div className="mt-4 space-y-3">
<Progress
value={(steps.indexOf(phasesLabel[phase]) / (steps.length - 1)) * 100}
className="h-2 rounded-full"
/>
<div className="flex justify-between text-sm">
{steps.map((step, index) => (
<motion.span
key={step}
animate={{
color:
currentStep >= index ? 'var(--text-primary)' : 'var(--text-tertiary)',
}}
className="font-medium"
>
{step}
</motion.span>
))}
</div>
</div>
)}
</OGDialogHeader>
<AnimatePresence mode="wait">
{phase === 'setup' && (
<SetupPhase
isGenerating={isGenerating}
onGenerate={handleGenerateQRCode}
onNext={() => setPhase('qr')}
onError={(error) => showToast({ message: error.message, status: 'error' })}
/>
)}
{phase === 'qr' && (
<QRPhase
secret={secret}
otpauthUrl={otpauthUrl}
onNext={() => setPhase('verify')}
onError={(error) => showToast({ message: error.message, status: 'error' })}
/>
)}
{phase === 'verify' && (
<VerifyPhase
token={verificationToken}
onTokenChange={setVerificationToken}
isVerifying={isVerifying}
onNext={handleVerify}
onError={(error) => showToast({ message: error.message, status: 'error' })}
/>
)}
{phase === 'backup' && (
<BackupPhase
backupCodes={backupCodes}
onDownload={handleDownload}
downloaded={downloaded}
onNext={handleConfirm}
onError={(error) => showToast({ message: error.message, status: 'error' })}
/>
)}
{phase === 'disable' && (
<DisablePhase
onDisable={handleDisableVerify}
isDisabling={isDisabling}
onError={(error) => showToast({ message: error.message, status: 'error' })}
/>
)}
</AnimatePresence>
</motion.div>
</AnimatePresence>
</OGDialogContent>
</OGDialog>
);
};
export default React.memo(TwoFactorAuthentication);

View file

@ -0,0 +1,60 @@
import React from 'react';
import { motion } from 'framer-motion';
import { Download } from 'lucide-react';
import { Button, Label } from '~/components';
import { useLocalize } from '~/hooks';
const fadeAnimation = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 },
};
interface BackupPhaseProps {
onNext: () => void;
onError: (error: Error) => void;
backupCodes: string[];
onDownload: () => void;
downloaded: boolean;
}
export const BackupPhase: React.FC<BackupPhaseProps> = ({
backupCodes,
onDownload,
downloaded,
onNext,
}) => {
const localize = useLocalize();
return (
<motion.div {...fadeAnimation} className="space-y-6">
<Label className="break-keep text-sm">{localize('com_ui_download_backup_tooltip')}</Label>
<div className="grid grid-cols-2 gap-4 rounded-xl bg-surface-secondary p-6">
{backupCodes.map((code, index) => (
<motion.div
key={code}
initial={{ opacity: 0, y: 20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ delay: index * 0.1 }}
className="rounded-lg bg-surface-tertiary p-3"
>
<div className="flex items-center justify-between">
<span className="hidden text-sm text-text-secondary sm:inline">#{index + 1}</span>
<span className="font-mono text-lg">{code}</span>
</div>
</motion.div>
))}
</div>
<div className="flex gap-4">
<Button variant="outline" onClick={onDownload} className="flex-1 gap-2">
<Download className="h-4 w-4" />
<span className="hidden sm:inline">{localize('com_ui_download_backup')}</span>
</Button>
<Button onClick={onNext} disabled={!downloaded} className="flex-1">
{localize('com_ui_complete_setup')}
</Button>
</div>
</motion.div>
);
};

View file

@ -0,0 +1,88 @@
import React, { useState } from 'react';
import { motion } from 'framer-motion';
import { REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from 'input-otp';
import {
Button,
InputOTP,
InputOTPGroup,
InputOTPSlot,
InputOTPSeparator,
Spinner,
} from '~/components';
import { useLocalize } from '~/hooks';
const fadeAnimation = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 },
};
interface DisablePhaseProps {
onSuccess?: () => void;
onError?: (error: Error) => void;
onDisable: (token: string, useBackup: boolean) => void;
isDisabling: boolean;
}
export const DisablePhase: React.FC<DisablePhaseProps> = ({ onDisable, isDisabling }) => {
const localize = useLocalize();
const [token, setToken] = useState('');
const [useBackup, setUseBackup] = useState(false);
return (
<motion.div {...fadeAnimation} className="space-y-8">
<div className="flex justify-center">
<InputOTP
value={token}
onChange={setToken}
maxLength={useBackup ? 8 : 6}
pattern={useBackup ? REGEXP_ONLY_DIGITS_AND_CHARS : REGEXP_ONLY_DIGITS}
className="gap-2"
>
{useBackup ? (
<InputOTPGroup>
<InputOTPSlot index={0} />
<InputOTPSlot index={1} />
<InputOTPSlot index={2} />
<InputOTPSlot index={3} />
<InputOTPSlot index={4} />
<InputOTPSlot index={5} />
<InputOTPSlot index={6} />
<InputOTPSlot index={7} />
</InputOTPGroup>
) : (
<>
<InputOTPGroup>
<InputOTPSlot index={0} />
<InputOTPSlot index={1} />
<InputOTPSlot index={2} />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot index={3} />
<InputOTPSlot index={4} />
<InputOTPSlot index={5} />
</InputOTPGroup>
</>
)}
</InputOTP>
</div>
<Button
variant="destructive"
onClick={() => onDisable(token, useBackup)}
disabled={isDisabling || token.length !== (useBackup ? 8 : 6)}
className="w-full rounded-xl px-6 py-3 transition-all disabled:opacity-50"
>
{isDisabling === true && <Spinner className="mr-2" />}
{isDisabling ? localize('com_ui_disabling') : localize('com_ui_2fa_disable')}
</Button>
<button
onClick={() => setUseBackup(!useBackup)}
className="text-sm text-primary hover:underline"
>
{useBackup ? localize('com_ui_use_2fa_code') : localize('com_ui_use_backup_code')}
</button>
</motion.div>
);
};

View file

@ -0,0 +1,66 @@
import React, { useState } from 'react';
import { motion } from 'framer-motion';
import { QRCodeSVG } from 'qrcode.react';
import { Copy, Check } from 'lucide-react';
import { Input, Button, Label } from '~/components';
import { useLocalize } from '~/hooks';
import { cn } from '~/utils';
const fadeAnimation = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 },
};
interface QRPhaseProps {
secret: string;
otpauthUrl: string;
onNext: () => void;
onSuccess?: () => void;
onError?: (error: Error) => void;
}
export const QRPhase: React.FC<QRPhaseProps> = ({ secret, otpauthUrl, onNext }) => {
const localize = useLocalize();
const [isCopying, setIsCopying] = useState(false);
const handleCopy = async () => {
await navigator.clipboard.writeText(secret);
setIsCopying(true);
setTimeout(() => setIsCopying(false), 2000);
};
return (
<motion.div {...fadeAnimation} className="space-y-6">
<div className="flex flex-col items-center space-y-6">
<motion.div
initial={{ scale: 0.8, opacity: 0 }}
animate={{ scale: 1, opacity: 1 }}
className="rounded-2xl bg-white p-4 shadow-lg"
>
<QRCodeSVG value={otpauthUrl} size={240} />
</motion.div>
<div className="w-full space-y-3">
<Label className="text-sm font-medium text-text-secondary">
{localize('com_ui_secret_key')}
</Label>
<div className="flex gap-2">
<Input value={secret} readOnly className="font-mono text-lg tracking-wider" />
<Button
size="sm"
variant="outline"
onClick={handleCopy}
className={cn('h-auto shrink-0', isCopying ? 'cursor-default' : '')}
>
{isCopying ? <Check className="size-4" /> : <Copy className="size-4" />}
</Button>
</div>
</div>
</div>
<Button onClick={onNext} className="w-full">
{localize('com_ui_continue')}
</Button>
</motion.div>
);
};

View file

@ -0,0 +1,42 @@
import React from 'react';
import { QrCode } from 'lucide-react';
import { motion } from 'framer-motion';
import { Button, Spinner } from '~/components';
import { useLocalize } from '~/hooks';
const fadeAnimation = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 },
};
interface SetupPhaseProps {
onNext: () => void;
onError: (error: Error) => void;
isGenerating: boolean;
onGenerate: () => void;
}
export const SetupPhase: React.FC<SetupPhaseProps> = ({ isGenerating, onGenerate, onNext }) => {
const localize = useLocalize();
return (
<motion.div {...fadeAnimation} className="space-y-6">
<div className="rounded-xl bg-surface-secondary p-6">
<h3 className="mb-4 flex justify-center text-lg font-medium">
{localize('com_ui_2fa_account_security')}
</h3>
<Button
variant="default"
onClick={onGenerate}
className="flex w-full"
disabled={isGenerating}
>
{isGenerating ? <Spinner className="size-5" /> : <QrCode className="size-5" />}
{isGenerating ? localize('com_ui_generating') : localize('com_ui_generate_qrcode')}
</Button>
</div>
</motion.div>
);
};

View file

@ -0,0 +1,58 @@
import React from 'react';
import { motion } from 'framer-motion';
import { Button, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '~/components';
import { REGEXP_ONLY_DIGITS } from 'input-otp';
import { useLocalize } from '~/hooks';
const fadeAnimation = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
transition: { duration: 0.2 },
};
interface VerifyPhaseProps {
token: string;
onTokenChange: (value: string) => void;
isVerifying: boolean;
onNext: () => void;
onError: (error: Error) => void;
}
export const VerifyPhase: React.FC<VerifyPhaseProps> = ({
token,
onTokenChange,
isVerifying,
onNext,
}) => {
const localize = useLocalize();
return (
<motion.div {...fadeAnimation} className="space-y-8">
<div className="flex justify-center">
<InputOTP
value={token}
onChange={onTokenChange}
maxLength={6}
pattern={REGEXP_ONLY_DIGITS}
className="gap-2"
>
<InputOTPGroup>
{Array.from({ length: 3 }).map((_, i) => (
<InputOTPSlot key={i} index={i} />
))}
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
{Array.from({ length: 3 }).map((_, i) => (
<InputOTPSlot key={i + 3} index={i + 3} />
))}
</InputOTPGroup>
</InputOTP>
</div>
<Button onClick={onNext} disabled={isVerifying || token.length !== 6} className="w-full">
{localize('com_ui_verify')}
</Button>
</motion.div>
);
};

View file

@ -0,0 +1,5 @@
export * from './BackupPhase';
export * from './QRPhase';
export * from './VerifyPhase';
export * from './SetupPhase';
export * from './DisablePhase';

View file

@ -82,7 +82,7 @@ function ImportConversations() {
onClick={handleImportClick}
onKeyDown={handleKeyDown}
disabled={!allowImport}
aria-label={localize('com_ui_import_conversation')}
aria-label={localize('com_ui_import')}
className="btn btn-neutral relative"
>
{allowImport ? (
@ -90,7 +90,7 @@ function ImportConversations() {
) : (
<Spinner className="mr-1 w-4" />
)}
<span>{localize('com_ui_import_conversation')}</span>
<span>{localize('com_ui_import')}</span>
</button>
<input
ref={fileInputRef}

View file

@ -270,9 +270,7 @@ export default function SharedLinks() {
<OGDialog open={isOpen} onOpenChange={setIsOpen}>
<OGDialogTrigger asChild onClick={() => setIsOpen(true)}>
<button className="btn btn-neutral relative">
{localize('com_nav_shared_links_manage')}
</button>
<Button variant="outline">{localize('com_ui_manage')}</Button>
</OGDialogTrigger>
<OGDialogContent

View file

@ -12,7 +12,7 @@ export default function ArchivedChats() {
<OGDialog>
<OGDialogTrigger asChild>
<Button variant="outline" aria-label="Archived chats">
{localize('com_nav_archived_chats_manage')}
{localize('com_ui_manage')}
</Button>
</OGDialogTrigger>
<OGDialogTemplate

View file

@ -51,15 +51,17 @@ export const LangSelector = ({
const languageOptions = [
{ value: 'auto', label: localize('com_nav_lang_auto') },
{ value: 'en-US', label: localize('com_nav_lang_english') },
{ value: 'zh-CN', label: localize('com_nav_lang_chinese') },
{ value: 'zh-TW', label: localize('com_nav_lang_traditionalchinese') },
{ value: 'zh-Hans', label: localize('com_nav_lang_chinese') },
{ value: 'zh-Hant', label: localize('com_nav_lang_traditional_chinese') },
{ value: 'ar-EG', label: localize('com_nav_lang_arabic') },
{ value: 'de-DE', label: localize('com_nav_lang_german') },
{ value: 'es-ES', label: localize('com_nav_lang_spanish') },
{ value: 'et-EE', label: localize('com_nav_lang_estonian') },
{ value: 'fr-FR', label: localize('com_nav_lang_french') },
{ value: 'it-IT', label: localize('com_nav_lang_italian') },
{ value: 'pl-PL', label: localize('com_nav_lang_polish') },
{ value: 'pt-BR', label: localize('com_nav_lang_brazilian_portuguese') },
{ value: 'pt-PT', label: localize('com_nav_lang_portuguese') },
{ value: 'ru-RU', label: localize('com_nav_lang_russian') },
{ value: 'ja-JP', label: localize('com_nav_lang_japanese') },
{ value: 'sv-SE', label: localize('com_nav_lang_swedish') },

View file

@ -44,7 +44,7 @@ const Command = ({
}
return (
<div className="rounded-xl border border-border-light">
<div className="rounded-xl border border-border-light shadow-md">
<h3 className="flex h-10 items-center gap-1 pl-4 text-sm text-text-secondary">
<SquareSlash className="icon-sm" aria-hidden="true" />
<Input

View file

@ -41,7 +41,7 @@ const Description = ({
}
return (
<div className="rounded-xl border border-border-light">
<div className="rounded-xl border border-border-light shadow-md">
<h3 className="flex h-10 items-center gap-1 pl-4 text-sm text-text-secondary">
<Info className="icon-sm" aria-hidden="true" />
<Input

View file

@ -32,7 +32,7 @@ export default function List({
<div className="flex w-full justify-end">
<Button
variant="outline"
className="w-full bg-transparent px-3"
className={`w-full bg-transparent ${isChatRoute ? '' : 'mx-2'}`}
onClick={() => navigate('/d/prompts/new')}
>
<Plus className="size-4" aria-hidden />

View file

@ -81,7 +81,7 @@ const PromptEditor: React.FC<Props> = ({ name, isEditing, setIsEditing }) => {
<div
role="button"
className={cn(
'w-full flex-1 overflow-auto rounded-b-xl border border-border-light p-2 transition-all duration-150 sm:p-4',
'w-full flex-1 overflow-auto rounded-b-xl border border-border-light p-2 shadow-md transition-all duration-150 sm:p-4',
{
'cursor-pointer bg-surface-primary hover:bg-surface-secondary active:bg-surface-tertiary':
!isEditing,
@ -105,6 +105,7 @@ const PromptEditor: React.FC<Props> = ({ name, isEditing, setIsEditing }) => {
isEditing ? (
<TextareaAutosize
{...field}
autoFocus
className="w-full resize-none overflow-y-auto rounded bg-transparent text-sm text-text-primary focus:outline-none sm:text-base"
minRows={3}
maxRows={14}

View file

@ -237,7 +237,6 @@ const PromptForm = () => {
payload: { name: groupName, category: value },
})
}
className="w-full"
/>
<div className="mt-2 flex flex-row items-center justify-center gap-x-2 lg:mt-0">
{hasShareAccess && <SharePrompt group={group} disabled={isLoadingGroup} />}
@ -349,7 +348,7 @@ const PromptForm = () => {
{isLoadingPrompts ? (
<Skeleton className="h-96" aria-live="polite" />
) : (
<div className="flex h-full flex-col gap-4">
<div className="mb-2 flex h-full flex-col gap-4">
<PromptEditor name="prompt" isEditing={isEditing} setIsEditing={setIsEditing} />
<PromptVariables promptText={promptText} />
<Description

View file

@ -28,7 +28,7 @@ const PromptVariables = ({
}, [promptText]);
return (
<div className="rounded-xl border border-border-light bg-transparent p-4 shadow-md ">
<div className="rounded-xl border border-border-light bg-transparent p-4 shadow-md">
<h3 className="flex items-center gap-2 py-2 text-lg font-semibold text-text-primary">
<Variable className="icon-sm" aria-hidden="true" />
{localize('com_ui_variables')}
@ -71,7 +71,7 @@ const PromptVariables = ({
</span>
</div>
<div>
<span className="text-text-text-primary text-sm font-medium">
<span className="text-sm font-medium text-text-primary">
{localize('com_ui_dropdown_variables')}
</span>
<span className="text-sm text-text-secondary">

View file

@ -74,6 +74,7 @@ export default function AgentSwitcher({ isCollapsed }: SwitcherProps) {
ariaLabel={'agent'}
setValue={onSelect}
items={agentOptions}
iconClassName="assistant-item"
SelectIcon={
<Icon
isCreatedByUser={false}

View file

@ -1,3 +1,4 @@
import { Plus } from 'lucide-react';
import React, { useMemo, useCallback } from 'react';
import { useGetModelsQuery } from 'librechat-data-provider/react-query';
import { Controller, useWatch, useForm, FormProvider } from 'react-hook-form';
@ -211,34 +212,54 @@ export default function AgentPanel({
className="scrollbar-gutter-stable h-auto w-full flex-shrink-0 overflow-x-hidden"
aria-label="Agent configuration form"
>
<div className="mt-2 flex w-full flex-wrap gap-2">
<Controller
name="agent"
control={control}
render={({ field }) => (
<AgentSelect
reset={reset}
value={field.value}
agentQuery={agentQuery}
setCurrentAgentId={setCurrentAgentId}
selectedAgentId={current_agent_id ?? null}
createMutation={create}
/>
)}
/>
{/* Select Button */}
<div className="mx-1 mt-2 flex w-full flex-wrap gap-2">
<div className="w-full">
<Controller
name="agent"
control={control}
render={({ field }) => (
<AgentSelect
reset={reset}
value={field.value}
agentQuery={agentQuery}
setCurrentAgentId={setCurrentAgentId}
selectedAgentId={current_agent_id ?? null}
createMutation={create}
/>
)}
/>
</div>
{/* Create + Select Button */}
{agent_id && (
<Button
variant="submit"
disabled={!agent_id}
onClick={(e) => {
e.preventDefault();
handleSelectAgent();
}}
aria-label="Select agent"
>
{localize('com_ui_select')}
</Button>
<div className="flex w-full gap-2">
<Button
type="button"
variant="outline"
className="w-full justify-center"
onClick={() => {
reset(defaultAgentFormValues);
setCurrentAgentId(undefined);
}}
>
<Plus className="mr-1 h-4 w-4" />
{localize('com_ui_create') +
' ' +
localize('com_ui_new') +
' ' +
localize('com_ui_agent')}
</Button>
<Button
variant="submit"
disabled={!agent_id}
onClick={(e) => {
e.preventDefault();
handleSelectAgent();
}}
aria-label={localize('com_ui_select') + ' ' + localize('com_ui_agent')}
>
{localize('com_ui_select')}
</Button>
</div>
)}
</div>
{!canEditAgent && (

View file

@ -4,10 +4,16 @@ import { Skeleton } from '~/components/ui';
export default function AgentPanelSkeleton() {
return (
<div className="scrollbar-gutter-stable h-auto w-full flex-shrink-0 overflow-x-hidden">
{/* Agent Select and Button */}
<div className="mt-1 flex w-full gap-2">
<Skeleton className="h-[40px] w-4/5 rounded-lg" />
<Skeleton className="h-[40px] w-1/5 rounded-lg" />
<div className="mx-1 mt-2 flex w-full flex-wrap gap-2">
{/* Agent Select Dropdown */}
<div className="w-full">
<Skeleton className="h-[40px] w-full rounded-md" />
</div>
{/* Create and Select Buttons */}
<div className="flex w-full gap-2">
<Skeleton className="h-[40px] w-3/4 rounded-md" /> {/* Create Button */}
<Skeleton className="h-[40px] w-1/4 rounded-md" /> {/* Select Button */}
</div>
</div>
<div className="h-auto bg-white px-4 pb-8 pt-3 dark:bg-transparent">

View file

@ -1,16 +1,17 @@
import { Plus, EarthIcon } from 'lucide-react';
import { EarthIcon } from 'lucide-react';
import { useCallback, useEffect, useRef } from 'react';
import { AgentCapabilities, defaultAgentFormValues } from 'librechat-data-provider';
import type { UseMutationResult, QueryObserverResult } from '@tanstack/react-query';
import type { Agent, AgentCreateParams } from 'librechat-data-provider';
import type { UseFormReset } from 'react-hook-form';
import type { TAgentCapabilities, AgentForm, TAgentOption } from '~/common';
import { cn, createDropdownSetter, createProviderOption, processAgentOption } from '~/utils';
import { useListAgentsQuery, useGetStartupConfig } from '~/data-provider';
import SelectDropDown from '~/components/ui/SelectDropDown';
import { cn, createProviderOption, processAgentOption } from '~/utils';
import ControlCombobox from '~/components/ui/ControlCombobox';
import { useLocalize } from '~/hooks';
const keys = new Set(Object.keys(defaultAgentFormValues));
const SELECT_ID = 'agent-builder-combobox';
export default function AgentSelect({
reset,
@ -120,6 +121,9 @@ export default function AgentSelect({
}
resetAgentForm(agent);
setTimeout(() => {
document.getElementById(SELECT_ID)?.focus();
}, 5);
},
[agents, createMutation, setCurrentAgentId, agentQuery.data, resetAgentForm, reset],
);
@ -152,51 +156,36 @@ export default function AgentSelect({
}, [selectedAgentId, agents, onSelect]);
const createAgent = localize('com_ui_create') + ' ' + localize('com_ui_agent');
const hasAgentValue = !!(typeof currentAgentValue === 'object'
? currentAgentValue.value != null && currentAgentValue.value !== ''
: typeof currentAgentValue !== 'undefined');
return (
<SelectDropDown
value={!hasAgentValue ? createAgent : (currentAgentValue as TAgentOption)}
setValue={createDropdownSetter(onSelect)}
availableValues={
agents ?? [
<ControlCombobox
selectId={SELECT_ID}
containerClassName="px-0"
selectedValue={(currentAgentValue?.value ?? '') + ''}
displayValue={currentAgentValue?.label ?? ''}
selectPlaceholder={createAgent}
iconSide="right"
searchPlaceholder={localize('com_agents_search_name')}
SelectIcon={currentAgentValue?.icon}
setValue={onSelect}
items={
agents?.map((agent) => ({
label: agent.name ?? '',
value: agent.id ?? '',
icon: agent.icon,
})) ?? [
{
label: 'Loading...',
value: '',
},
]
}
iconSide="left"
optionIconSide="right"
showAbove={false}
showLabel={false}
emptyTitle={true}
showOptionIcon={true}
containerClassName="flex-grow"
searchClassName="dark:from-gray-850"
searchPlaceholder={localize('com_agents_search_name')}
optionsClass="hover:bg-gray-20/50 dark:border-gray-700"
optionsListClass="rounded-lg shadow-lg dark:bg-gray-850 dark:border-gray-700 dark:last:border"
currentValueClass={cn(
'text-md font-semibold text-gray-900 dark:text-white',
hasAgentValue ? 'text-gray-500' : '',
)}
className={cn(
'rounded-md dark:border-gray-700 dark:bg-gray-850',
'z-50 flex h-[40px] w-full flex-none items-center justify-center truncate px-4 hover:cursor-pointer hover:border-green-500 focus:border-gray-400',
)}
renderOption={() => (
<span className="flex items-center gap-1.5 truncate">
<span className="absolute inset-y-0 left-0 flex items-center pl-2 text-gray-800 dark:text-gray-100">
<Plus className="w-[16px]" />
</span>
<span className={cn('ml-4 flex h-6 items-center gap-1 text-gray-800 dark:text-gray-100')}>
{createAgent}
</span>
</span>
'z-50 flex h-[40px] w-full flex-none items-center justify-center truncate rounded-md bg-transparent font-bold',
)}
ariaLabel={localize('com_ui_agent')}
isCollapsed={false}
showCarat={true}
/>
);
}

View file

@ -1,14 +1,14 @@
import React, { useMemo, useEffect } from 'react';
import { ChevronLeft, RotateCcw } from 'lucide-react';
import { getSettingsKeys } from 'librechat-data-provider';
import { useFormContext, useWatch, Controller } from 'react-hook-form';
import { getSettingsKeys, alternateName } from 'librechat-data-provider';
import type * as t from 'librechat-data-provider';
import type { AgentForm, AgentModelPanelProps, StringOption } from '~/common';
import { componentMapping } from '~/components/SidePanel/Parameters/components';
import { agentSettings } from '~/components/SidePanel/Parameters/settings';
import { getEndpointField, cn, cardStyle } from '~/utils';
import ControlCombobox from '~/components/ui/ControlCombobox';
import { useGetEndpointsQuery } from '~/data-provider';
import { SelectDropDown } from '~/components/ui';
import { getEndpointField, cn } from '~/utils';
import { useLocalize } from '~/hooks';
import { Panel } from '~/common';
@ -33,7 +33,7 @@ export default function Parameters({
return value ?? '';
}, [providerOption]);
const models = useMemo(
() => (provider ? modelsData[provider] ?? [] : []),
() => (provider ? (modelsData[provider] ?? []) : []),
[modelsData, provider],
);
@ -78,8 +78,8 @@ export default function Parameters({
return (
<div className="scrollbar-gutter-stable h-full min-h-[50vh] overflow-auto pb-12 text-sm">
<div className="model-panel relative flex flex-col items-center px-16 py-6 text-center">
<div className="absolute left-0 top-6">
<div className="model-panel relative flex flex-col items-center px-16 py-4 text-center">
<div className="absolute left-0 top-4">
<button
type="button"
className="btn btn-neutral relative"
@ -99,6 +99,7 @@ export default function Parameters({
{/* Endpoint aka Provider for Agents */}
<div className="mb-4">
<label
id="provider-label"
className="text-token-text-primary model-panel-label mb-2 block font-medium"
htmlFor="provider"
>
@ -108,38 +109,47 @@ export default function Parameters({
name="provider"
control={control}
rules={{ required: true, minLength: 1 }}
render={({ field, fieldState: { error } }) => (
<>
<SelectDropDown
emptyTitle={true}
value={field.value ?? ''}
title={localize('com_ui_provider')}
placeholder={localize('com_ui_select_provider')}
searchPlaceholder={localize('com_ui_select_search_provider')}
setValue={field.onChange}
availableValues={providers}
showAbove={false}
showLabel={false}
className={cn(
cardStyle,
'flex h-9 w-full flex-none items-center justify-center border-none px-4 hover:cursor-pointer',
(field.value === undefined || field.value === '') &&
'border-2 border-yellow-400',
render={({ field, fieldState: { error } }) => {
const value =
typeof field.value === 'string'
? field.value
: ((field.value as StringOption)?.value ?? '');
const display =
typeof field.value === 'string'
? field.value
: ((field.value as StringOption)?.label ?? '');
return (
<>
<ControlCombobox
selectedValue={value}
displayValue={alternateName[display] ?? display}
selectPlaceholder={localize('com_ui_select_provider')}
searchPlaceholder={localize('com_ui_select_search_provider')}
setValue={field.onChange}
items={providers.map((provider) => ({
label: typeof provider === 'string' ? provider : provider.label,
value: typeof provider === 'string' ? provider : provider.value,
}))}
className={cn(error ? 'border-2 border-red-500' : '')}
ariaLabel={localize('com_ui_provider')}
isCollapsed={false}
showCarat={true}
/>
{error && (
<span className="model-panel-error text-sm text-red-500 transition duration-300 ease-in-out">
{localize('com_ui_field_required')}
</span>
)}
containerClassName={cn('rounded-md', error ? 'border-red-500 border-2' : '')}
/>
{error && (
<span className="model-panel-error text-sm text-red-500 transition duration-300 ease-in-out">
{localize('com_ui_field_required')}
</span>
)}
</>
)}
</>
);
}}
/>
</div>
{/* Model */}
<div className="model-panel-section mb-4">
<label
id="model-label"
className={cn(
'text-token-text-primary model-panel-label mb-2 block font-medium',
!provider && 'text-gray-500 dark:text-gray-400',
@ -152,35 +162,36 @@ export default function Parameters({
name="model"
control={control}
rules={{ required: true, minLength: 1 }}
render={({ field, fieldState: { error } }) => (
<>
<SelectDropDown
emptyTitle={true}
placeholder={
provider
? localize('com_ui_select_model')
: localize('com_ui_select_provider_first')
}
value={field.value}
setValue={field.onChange}
availableValues={models}
showAbove={false}
showLabel={false}
disabled={!provider}
className={cn(
cardStyle,
'flex h-[40px] w-full flex-none items-center justify-center border-none px-4',
!provider ? 'cursor-not-allowed bg-gray-200' : 'hover:cursor-pointer',
render={({ field, fieldState: { error } }) => {
return (
<>
<ControlCombobox
selectedValue={field.value || ''}
selectPlaceholder={
provider
? localize('com_ui_select_model')
: localize('com_ui_select_provider_first')
}
searchPlaceholder={localize('com_ui_select_model')}
setValue={field.onChange}
items={models.map((model) => ({
label: model,
value: model,
}))}
disabled={!provider}
className={cn('disabled:opacity-50', error ? 'border-2 border-red-500' : '')}
ariaLabel={localize('com_ui_model')}
isCollapsed={false}
showCarat={true}
/>
{provider && error && (
<span className="text-sm text-red-500 transition duration-300 ease-in-out">
{localize('com_ui_field_required')}
</span>
)}
containerClassName={cn('rounded-md', error ? 'border-red-500 border-2' : '')}
/>
{provider && error && (
<span className="text-sm text-red-500 transition duration-300 ease-in-out">
{localize('com_ui_field_required')}
</span>
)}
</>
)}
</>
);
}}
/>
</div>
</div>
@ -188,7 +199,6 @@ export default function Parameters({
{parameters && (
<div className="h-auto max-w-full overflow-x-hidden p-2">
<div className="grid grid-cols-4 gap-6">
{' '}
{/* This is the parent element containing all settings */}
{/* Below is an example of an applied dynamic setting, each be contained by a div with the column span specified */}
{parameters.map((setting) => {

View file

@ -78,6 +78,7 @@ export default function AssistantSwitcher({ isCollapsed }: SwitcherProps) {
ariaLabel={'assistant'}
setValue={onSelect}
items={assistantOptions}
iconClassName="assistant-item"
SelectIcon={
<Icon
isCreatedByUser={false}

View file

@ -1,10 +1,10 @@
import * as Ariakit from '@ariakit/react';
import { matchSorter } from 'match-sorter';
import { AutoSizer, List } from 'react-virtualized';
import { startTransition, useMemo, useState, useEffect, useRef, memo } from 'react';
import { cn } from '~/utils';
import { Search, ChevronDown } from 'lucide-react';
import { useMemo, useState, useRef, memo, useEffect } from 'react';
import { SelectRenderer } from '@ariakit/react-core/select/select-renderer';
import type { OptionWithIcon } from '~/common';
import { Search } from 'lucide-react';
import { cn } from '~/utils';
interface ControlComboboxProps {
selectedValue: string;
@ -16,6 +16,13 @@ interface ControlComboboxProps {
selectPlaceholder?: string;
isCollapsed: boolean;
SelectIcon?: React.ReactNode;
containerClassName?: string;
iconClassName?: string;
showCarat?: boolean;
className?: string;
disabled?: boolean;
iconSide?: 'left' | 'right';
selectId?: string;
}
const ROW_HEIGHT = 36;
@ -28,18 +35,47 @@ function ControlCombobox({
ariaLabel,
searchPlaceholder,
selectPlaceholder,
containerClassName,
isCollapsed,
SelectIcon,
showCarat,
className,
disabled,
iconClassName,
iconSide = 'left',
selectId,
}: ControlComboboxProps) {
const [searchValue, setSearchValue] = useState('');
const buttonRef = useRef<HTMLButtonElement>(null);
const [buttonWidth, setButtonWidth] = useState<number | null>(null);
const getItem = (option: OptionWithIcon) => ({
id: `item-${option.value}`,
value: option.value as string | undefined,
label: option.label,
icon: option.icon,
});
const combobox = Ariakit.useComboboxStore({
defaultItems: items.map(getItem),
resetValueOnHide: true,
value: searchValue,
setValue: setSearchValue,
});
const select = Ariakit.useSelectStore({
combobox,
defaultItems: items.map(getItem),
value: selectedValue,
setValue,
});
const matches = useMemo(() => {
return matchSorter(items, searchValue, {
const filteredItems = matchSorter(items, searchValue, {
keys: ['value', 'label'],
baseSort: (a, b) => (a.index < b.index ? -1 : 1),
});
return filteredItems.map(getItem);
}, [searchValue, items]);
useEffect(() => {
@ -48,104 +84,95 @@ function ControlCombobox({
}
}, [isCollapsed]);
const rowRenderer = ({
index,
key,
style,
}: {
index: number;
key: string;
style: React.CSSProperties;
}) => {
const item = matches[index];
return (
<Ariakit.SelectItem
key={key}
value={`${item.value ?? ''}`}
aria-label={`${item.label ?? item.value ?? ''}`}
className={cn(
'flex cursor-pointer items-center px-3 text-sm',
'text-text-primary hover:bg-surface-tertiary',
'data-[active-item]:bg-surface-tertiary',
)}
render={<Ariakit.ComboboxItem />}
style={style}
>
{item.icon != null && (
<div className="assistant-item mr-2 flex h-5 w-5 items-center justify-center overflow-hidden rounded-full">
{item.icon}
</div>
)}
<span className="flex-grow truncate text-left">{item.label}</span>
</Ariakit.SelectItem>
);
};
const selectIconClassName = cn(
'flex h-5 w-5 items-center justify-center overflow-hidden rounded-full',
iconClassName,
);
const optionIconClassName = cn(
'mr-2 flex h-5 w-5 items-center justify-center overflow-hidden rounded-full',
iconClassName,
);
return (
<div className="flex w-full items-center justify-center px-1">
<Ariakit.ComboboxProvider
resetValueOnHide
setValue={(value) => {
startTransition(() => {
setSearchValue(value);
});
}}
<div className={cn('flex w-full items-center justify-center px-1', containerClassName)}>
<Ariakit.SelectLabel store={select} className="sr-only">
{ariaLabel}
</Ariakit.SelectLabel>
<Ariakit.Select
ref={buttonRef}
store={select}
id={selectId}
disabled={disabled}
className={cn(
'flex items-center justify-center gap-2 rounded-full bg-surface-secondary',
'text-text-primary hover:bg-surface-tertiary',
'border border-border-light',
isCollapsed ? 'h-10 w-10' : 'h-10 w-full rounded-md px-3 py-2 text-sm',
className,
)}
>
<Ariakit.SelectProvider value={selectedValue} setValue={setValue}>
<Ariakit.SelectLabel className="sr-only">{ariaLabel}</Ariakit.SelectLabel>
<Ariakit.Select
ref={buttonRef}
className={cn(
'flex items-center justify-center gap-2 rounded-full bg-surface-secondary',
'text-text-primary hover:bg-surface-tertiary',
'border border-border-light',
isCollapsed ? 'h-10 w-10' : 'h-10 w-full rounded-md px-3 py-2 text-sm',
{SelectIcon != null && iconSide === 'left' && (
<div className={selectIconClassName}>{SelectIcon}</div>
)}
{!isCollapsed && (
<>
<span className="flex-grow truncate text-left">
{displayValue != null
? displayValue || selectPlaceholder
: selectedValue || selectPlaceholder}
</span>
{SelectIcon != null && iconSide === 'right' && (
<div className={selectIconClassName}>{SelectIcon}</div>
)}
>
{SelectIcon != null && (
<div className="assistant-item flex h-5 w-5 items-center justify-center overflow-hidden rounded-full">
{SelectIcon}
</div>
)}
{!isCollapsed && (
<span className="flex-grow truncate text-left">
{displayValue ?? selectPlaceholder}
</span>
)}
</Ariakit.Select>
<Ariakit.SelectPopover
gutter={4}
portal
className="z-50 overflow-hidden rounded-md border border-border-light bg-surface-secondary shadow-lg"
style={{ width: isCollapsed ? '300px' : buttonWidth ?? '300px' }}
>
<div className="p-2">
<div className="relative">
<Search className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-primary" />
<Ariakit.Combobox
autoSelect
placeholder={searchPlaceholder}
className="w-full rounded-md border border-border-light bg-surface-tertiary py-2 pl-9 pr-3 text-sm text-text-primary focus:outline-none"
/>
</div>
</div>
<div className="max-h-[50vh]">
<AutoSizer disableHeight>
{({ width }) => (
<List
width={width}
height={Math.min(matches.length * ROW_HEIGHT, 300)}
rowCount={matches.length}
rowHeight={ROW_HEIGHT}
rowRenderer={rowRenderer}
overscanRowCount={5}
/>
)}
</AutoSizer>
</div>
</Ariakit.SelectPopover>
</Ariakit.SelectProvider>
</Ariakit.ComboboxProvider>
{showCarat && <ChevronDown className="h-4 w-4 text-text-secondary" />}
</>
)}
</Ariakit.Select>
<Ariakit.SelectPopover
store={select}
gutter={4}
portal
className="z-50 overflow-hidden rounded-md border border-border-light bg-surface-secondary shadow-lg"
style={{ width: isCollapsed ? '300px' : (buttonWidth ?? '300px') }}
>
<div className="p-2">
<div className="relative">
<Search className="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-primary" />
<Ariakit.Combobox
store={combobox}
autoSelect
placeholder={searchPlaceholder}
className="w-full rounded-md border border-border-light bg-surface-tertiary py-2 pl-9 pr-3 text-sm text-text-primary focus:outline-none"
/>
</div>
</div>
<div className="max-h-[300px] overflow-auto">
<Ariakit.ComboboxList store={combobox}>
<SelectRenderer store={select} items={matches} itemSize={ROW_HEIGHT} overscan={5}>
{({ value, icon, label, ...item }) => (
<Ariakit.ComboboxItem
key={item.id}
{...item}
className={cn(
'flex w-full cursor-pointer items-center px-3 text-sm',
'text-text-primary hover:bg-surface-tertiary',
'data-[active-item]:bg-surface-tertiary',
)}
render={<Ariakit.SelectItem value={value} />}
>
{icon != null && iconSide === 'left' && (
<div className={optionIconClassName}>{icon}</div>
)}
<span className="flex-grow truncate text-left">{label}</span>
{icon != null && iconSide === 'right' && (
<div className={optionIconClassName}>{icon}</div>
)}
</Ariakit.ComboboxItem>
)}
</SelectRenderer>
</Ariakit.ComboboxList>
</div>
</Ariakit.SelectPopover>
</div>
);
}

View file

@ -0,0 +1,68 @@
import * as React from 'react';
import { OTPInput, OTPInputContext } from 'input-otp';
import { Minus } from 'lucide-react';
import { cn } from '~/utils';
const InputOTP = React.forwardRef<
React.ElementRef<typeof OTPInput>,
React.ComponentPropsWithoutRef<typeof OTPInput>
>(({ className, containerClassName, ...props }, ref) => (
<OTPInput
ref={ref}
containerClassName={cn(
'flex items-center gap-2 has-[:disabled]:opacity-50',
containerClassName,
)}
className={cn('disabled:cursor-not-allowed', className)}
{...props}
/>
));
InputOTP.displayName = 'InputOTP';
const InputOTPGroup = React.forwardRef<
React.ElementRef<'div'>,
React.ComponentPropsWithoutRef<'div'>
>(({ className, ...props }, ref) => (
<div ref={ref} className={cn('flex items-center', className)} {...props} />
));
InputOTPGroup.displayName = 'InputOTPGroup';
const InputOTPSlot = React.forwardRef<
React.ElementRef<'div'>,
React.ComponentPropsWithoutRef<'div'> & { index: number }
>(({ index, className, ...props }, ref) => {
const inputOTPContext = React.useContext(OTPInputContext);
const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
return (
<div
ref={ref}
className={cn(
'text-md relative flex h-11 w-11 items-center justify-center border-y border-r border-input shadow-sm transition-all first:rounded-l-xl first:border-l last:rounded-r-xl',
isActive && 'z-10 ring-1 ring-ring',
className,
)}
{...props}
>
{char}
{hasFakeCaret && (
<div className="pointer-events-none absolute inset-0 flex items-center justify-center">
<div className="animate-caret-blink h-4 w-px bg-foreground duration-1000" />
</div>
)}
</div>
);
});
InputOTPSlot.displayName = 'InputOTPSlot';
const InputOTPSeparator = React.forwardRef<
React.ElementRef<'div'>,
React.ComponentPropsWithoutRef<'div'>
>(({ ...props }, ref) => (
<div ref={ref} role="separator" {...props}>
<Minus />
</div>
));
InputOTPSeparator.displayName = 'InputOTPSeparator';
export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };

View file

@ -0,0 +1,22 @@
import * as React from 'react';
import * as ProgressPrimitive from '@radix-ui/react-progress';
import { cn } from '~/utils';
const Progress = React.forwardRef<
React.ElementRef<typeof ProgressPrimitive.Root>,
React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>
>(({ className, value, ...props }, ref) => (
<ProgressPrimitive.Root
ref={ref}
className={cn('relative h-2 w-full overflow-hidden rounded-full bg-primary/20', className)}
{...props}
>
<ProgressPrimitive.Indicator
className="h-full w-full flex-1 bg-primary transition-all"
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
/>
</ProgressPrimitive.Root>
));
Progress.displayName = ProgressPrimitive.Root.displayName;
export { Progress };

View file

@ -1,4 +1,4 @@
import React from 'react';
import React, { useRef } from 'react';
import {
Label,
Listbox,
@ -82,18 +82,14 @@ function SelectDropDown({
}
let title = _title;
if (emptyTitle) {
title = '';
} else if (!(title ?? '')) {
title = localize('com_ui_model');
}
const values = availableValues ?? [];
// Detemine if we should to convert this component into a searchable select. If we have enough elements, a search
// input will appear near the top of the menu, allowing correct filtering of different model menu items. This will
// reset once the component is unmounted (as per a normal search)
// Enable searchable select if enough items are provided.
const [filteredValues, searchRender] = useMultiSearch<string[] | Option[]>({
availableOptions: values,
placeholder: searchPlaceholder,
@ -103,26 +99,35 @@ function SelectDropDown({
});
const hasSearchRender = searchRender != null;
const options = hasSearchRender ? filteredValues : values;
const renderIcon = showOptionIcon && value != null && (value as OptionWithIcon).icon != null;
const buttonRef = useRef<HTMLButtonElement>(null);
return (
<div className={cn('flex items-center justify-center gap-2 ', containerClassName ?? '')}>
<div className={cn('flex items-center justify-center gap-2', containerClassName ?? '')}>
<div className={cn('relative w-full', subContainerClassName ?? '')}>
<Listbox value={value} onChange={setValue} disabled={disabled}>
{({ open }) => (
<>
<ListboxButton
ref={buttonRef}
data-testid="select-dropdown-button"
onKeyDown={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
if (!open && buttonRef.current) {
buttonRef.current.click();
}
}
}}
className={cn(
'relative flex w-full cursor-default flex-col rounded-md border border-black/10 bg-white py-2 pl-3 pr-10 text-left disabled:bg-white dark:border-gray-600 dark:bg-gray-700 sm:text-sm',
'relative flex w-full cursor-default flex-col rounded-md border border-black/10 bg-white py-2 pl-3 pr-10 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:bg-white dark:border-gray-600 dark:bg-gray-700 sm:text-sm',
className ?? '',
)}
>
{' '}
{showLabel && (
<Label
className="block text-xs text-gray-700 dark:text-gray-500 "
className="block text-xs text-gray-700 dark:text-gray-500"
id="headlessui-listbox-label-:r1:"
data-headlessui-state=""
>
@ -154,11 +159,9 @@ function SelectDropDown({
if (!value) {
return <span className="text-text-secondary">{placeholder}</span>;
}
if (typeof value !== 'string') {
return value.label ?? '';
}
return value;
})()}
</span>
@ -171,7 +174,7 @@ function SelectDropDown({
viewBox="0 0 24 24"
strokeLinecap="round"
strokeLinejoin="round"
className="h-4 w-4 text-gray-400"
className="h-4 w-4 text-gray-400"
height="1em"
width="1em"
xmlns="http://www.w3.org/2000/svg"
@ -212,17 +215,17 @@ function SelectDropDown({
if (!option) {
return null;
}
const currentLabel =
typeof option === 'string' ? option : option.label ?? option.value ?? '';
const currentValue = typeof option === 'string' ? option : option.value ?? '';
typeof option === 'string' ? option : (option.label ?? option.value ?? '');
const currentValue = typeof option === 'string' ? option : (option.value ?? '');
const currentIcon =
typeof option === 'string' ? null : (option.icon as React.ReactNode) ?? null;
typeof option === 'string'
? null
: ((option.icon as React.ReactNode) ?? null);
let activeValue: string | number | null | Option = value;
if (typeof activeValue !== 'string') {
activeValue = activeValue?.value ?? '';
}
return (
<ListboxOption
key={i}

View file

@ -24,6 +24,8 @@ export * from './Textarea';
export * from './TextareaAutosize';
export * from './Tooltip';
export * from './Pagination';
export * from './Progress';
export * from './InputOTP';
export { default as Combobox } from './Combobox';
export { default as Dropdown } from './Dropdown';
export { default as FileUpload } from './FileUpload';

View file

@ -1,6 +1,6 @@
import { useResetRecoilState, useSetRecoilState } from 'recoil';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { MutationKeys, dataService, request } from 'librechat-data-provider';
import { MutationKeys, QueryKeys, dataService, request } from 'librechat-data-provider';
import type { UseMutationResult } from '@tanstack/react-query';
import type * as t from 'librechat-data-provider';
import useClearStates from '~/hooks/Config/useClearStates';
@ -84,3 +84,91 @@ export const useDeleteUserMutation = (
},
});
};
// Array.isArray(user?.backupCodes) && user?.backupCodes.length > 0
export const useEnableTwoFactorMutation = (): UseMutationResult<
t.TEnable2FAResponse,
unknown,
void,
unknown
> => {
const queryClient = useQueryClient();
return useMutation(() => dataService.enableTwoFactor(), {
onSuccess: (data) => {
queryClient.setQueryData([QueryKeys.user, '2fa'], data);
},
});
};
export const useVerifyTwoFactorMutation = (): UseMutationResult<
t.TVerify2FAResponse,
unknown,
t.TVerify2FARequest,
unknown
> => {
const queryClient = useQueryClient();
return useMutation((payload: t.TVerify2FARequest) => dataService.verifyTwoFactor(payload), {
onSuccess: (data) => {
queryClient.setQueryData([QueryKeys.user, '2fa'], data);
},
});
};
export const useConfirmTwoFactorMutation = (): UseMutationResult<
t.TVerify2FAResponse,
unknown,
t.TVerify2FARequest,
unknown
> => {
const queryClient = useQueryClient();
return useMutation((payload: t.TVerify2FARequest) => dataService.confirmTwoFactor(payload), {
onSuccess: (data) => {
queryClient.setQueryData([QueryKeys.user, '2fa'], data);
},
});
};
export const useDisableTwoFactorMutation = (): UseMutationResult<
t.TDisable2FAResponse,
unknown,
void,
unknown
> => {
const queryClient = useQueryClient();
return useMutation(() => dataService.disableTwoFactor(), {
onSuccess: (data) => {
queryClient.setQueryData([QueryKeys.user, '2fa'], null);
},
});
};
export const useRegenerateBackupCodesMutation = (): UseMutationResult<
t.TRegenerateBackupCodesResponse,
unknown,
void,
unknown
> => {
const queryClient = useQueryClient();
return useMutation(() => dataService.regenerateBackupCodes(), {
onSuccess: (data) => {
queryClient.setQueryData([QueryKeys.user, '2fa', 'backup'], data);
},
});
};
export const useVerifyTwoFactorTempMutation = (
options?: t.MutationOptions<t.TVerify2FATempResponse, t.TVerify2FATempRequest, unknown, unknown>,
): UseMutationResult<t.TVerify2FATempResponse, unknown, t.TVerify2FATempRequest, unknown> => {
const queryClient = useQueryClient();
return useMutation(
(payload: t.TVerify2FATempRequest) => dataService.verifyTwoFactorTemp(payload),
{
...(options || {}),
onSuccess: (data, ...args) => {
queryClient.setQueryData([QueryKeys.user, '2fa'], data);
options?.onSuccess?.(data, ...args);
},
},
);
};

View file

@ -70,7 +70,12 @@ const AuthContextProvider = ({
const loginUser = useLoginUserMutation({
onSuccess: (data: t.TLoginResponse) => {
const { user, token } = data;
const { user, token, twoFAPending, tempToken } = data;
if (twoFAPending) {
// Redirect to the two-factor authentication route.
navigate(`/login/2fa?tempToken=${tempToken}`, { replace: true });
return;
}
setError(undefined);
setUserContext({ token, isAuthenticated: true, user, redirect: '/c/new' });
},
@ -212,4 +217,4 @@ const useAuthContext = () => {
return context;
};
export { AuthContextProvider, useAuthContext };
export { AuthContextProvider, useAuthContext };

View file

@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
import { useQueryClient } from '@tanstack/react-query';
import { QueryKeys, EModelEndpoint, LocalStorageKeys, Constants } from 'librechat-data-provider';
import type { TConversation, TEndpointsConfig, TModelsConfig } from 'librechat-data-provider';
import { buildDefaultConvo, getDefaultEndpoint, getEndpointField } from '~/utils';
import { buildDefaultConvo, getDefaultEndpoint, getEndpointField, logger } from '~/utils';
import store from '~/store';
const useNavigateToConvo = (index = 0) => {
@ -20,7 +20,7 @@ const useNavigateToConvo = (index = 0) => {
invalidateMessages = false,
) => {
if (!conversation) {
console.log('Conversation not provided');
logger.warn('conversation', 'Conversation not provided to `navigateToConvo`');
return;
}
hasSetConversation.current = true;
@ -34,10 +34,10 @@ const useNavigateToConvo = (index = 0) => {
}
let convo = { ...conversation };
if (!convo.endpoint) {
/* undefined endpoint edge case */
const endpointsConfig = queryClient.getQueryData<TEndpointsConfig>([QueryKeys.endpoints]);
if (!convo.endpoint || !endpointsConfig?.[convo.endpoint]) {
/* undefined/removed endpoint edge case */
const modelsConfig = queryClient.getQueryData<TModelsConfig>([QueryKeys.models]);
const endpointsConfig = queryClient.getQueryData<TEndpointsConfig>([QueryKeys.endpoints]);
const defaultEndpoint = getDefaultEndpoint({
convoSetup: conversation,
endpointsConfig,
@ -51,10 +51,10 @@ const useNavigateToConvo = (index = 0) => {
const models = modelsConfig?.[defaultEndpoint ?? ''] ?? [];
convo = buildDefaultConvo({
models,
conversation,
endpoint: defaultEndpoint,
lastConversationSetup: conversation,
models,
});
}
clearAllConversations(true);
@ -68,7 +68,7 @@ const useNavigateToConvo = (index = 0) => {
invalidateMessages?: boolean,
) => {
if (!conversation) {
console.log('Conversation not provided');
logger.warn('conversation', 'Conversation not provided to `navigateToConvo`');
return;
}
// set conversation to the new conversation
@ -78,7 +78,7 @@ const useNavigateToConvo = (index = 0) => {
lastSelectedTools =
JSON.parse(localStorage.getItem(LocalStorageKeys.LAST_TOOLS) ?? '') ?? [];
} catch (e) {
// console.error(e);
logger.error('conversation', 'Error parsing last selected tools', e);
}
const hasTools = (conversation.tools?.length ?? 0) > 0;
navigateToConvo(

View file

@ -1,12 +1,10 @@
import { v4 } from 'uuid';
import debounce from 'lodash/debounce';
import { useQueryClient } from '@tanstack/react-query';
import { useState, useEffect, useCallback, useRef, useMemo } from 'react';
import React, { useState, useEffect, useCallback, useRef, useMemo } from 'react';
import {
megabyte,
QueryKeys,
EModelEndpoint,
codeTypeMapping,
mergeFileConfig,
isAgentsEndpoint,
isAssistantsEndpoint,
@ -16,14 +14,12 @@ import {
import type { TEndpointsConfig, TError } from 'librechat-data-provider';
import type { ExtendedFile, FileSetter } from '~/common';
import { useUploadFileMutation, useGetFileConfig } from '~/data-provider';
import useLocalize, { TranslationKeys } from '~/hooks/useLocalize';
import { useDelayedUploadToast } from './useDelayedUploadToast';
import { useToastContext } from '~/Providers/ToastContext';
import { useChatContext } from '~/Providers/ChatContext';
import useLocalize from '~/hooks/useLocalize';
import { logger, validateFiles } from '~/utils';
import useUpdateFiles from './useUpdateFiles';
import { logger } from '~/utils';
const { checkType } = defaultFileConfig;
type UseFileHandling = {
overrideEndpoint?: EModelEndpoint;
@ -58,20 +54,11 @@ const useFileHandling = (params?: UseFileHandling) => {
[params?.overrideEndpoint, conversation?.endpointType, conversation?.endpoint],
);
const { fileLimit, fileSizeLimit, totalSizeLimit, supportedMimeTypes } = useMemo(
() =>
fileConfig?.endpoints[endpoint] ??
fileConfig?.endpoints.default ??
defaultFileConfig.endpoints[endpoint] ??
defaultFileConfig.endpoints.default,
[fileConfig, endpoint],
);
const displayToast = useCallback(() => {
if (errors.length > 1) {
// TODO: this should not be a dynamic localize input!!
const errorList = Array.from(new Set(errors))
.map((e, i) => `${i > 0 ? '• ' : ''}${localize(e) || e}\n`)
.map((e, i) => `${i > 0 ? '• ' : ''}${localize(e as TranslationKeys) || e}\n`)
.join('');
showToast({
message: errorList,
@ -80,7 +67,7 @@ const useFileHandling = (params?: UseFileHandling) => {
});
} else if (errors.length === 1) {
// TODO: this should not be a dynamic localize input!!
const message = localize(errors[0]) || errors[0];
const message = localize(errors[0] as TranslationKeys) || errors[0];
showToast({
message,
status: 'error',
@ -147,7 +134,7 @@ const useFileHandling = (params?: UseFileHandling) => {
const errorMessage =
error?.code === 'ERR_CANCELED'
? 'com_error_files_upload_canceled'
: error?.response?.data?.message ?? 'com_error_files_upload';
: (error?.response?.data?.message ?? 'com_error_files_upload');
setError(errorMessage);
},
},
@ -228,87 +215,6 @@ const useFileHandling = (params?: UseFileHandling) => {
uploadFile.mutate(formData);
};
const validateFiles = useCallback(
(fileList: File[]) => {
const existingFiles = Array.from(files.values());
const incomingTotalSize = fileList.reduce((total, file) => total + file.size, 0);
if (incomingTotalSize === 0) {
setError('com_error_files_empty');
return false;
}
const currentTotalSize = existingFiles.reduce((total, file) => total + file.size, 0);
if (fileList.length + files.size > fileLimit) {
setError(`You can only upload up to ${fileLimit} files at a time.`);
return false;
}
for (let i = 0; i < fileList.length; i++) {
let originalFile = fileList[i];
let fileType = originalFile.type;
const extension = originalFile.name.split('.').pop() ?? '';
const knownCodeType = codeTypeMapping[extension];
// Infer MIME type for Known Code files when the type is empty or a mismatch
if (knownCodeType && (!fileType || fileType !== knownCodeType)) {
fileType = knownCodeType;
}
// Check if the file type is still empty after the extension check
if (!fileType) {
setError('Unable to determine file type for: ' + originalFile.name);
return false;
}
// Replace empty type with inferred type
if (originalFile.type !== fileType) {
const newFile = new File([originalFile], originalFile.name, { type: fileType });
originalFile = newFile;
fileList[i] = newFile;
}
if (!checkType(originalFile.type, supportedMimeTypes)) {
console.log(originalFile);
setError('Currently, unsupported file type: ' + originalFile.type);
return false;
}
if (originalFile.size >= fileSizeLimit) {
setError(`File size exceeds ${fileSizeLimit / megabyte} MB.`);
return false;
}
}
if (currentTotalSize + incomingTotalSize > totalSizeLimit) {
setError(`The total size of the files cannot exceed ${totalSizeLimit / megabyte} MB.`);
return false;
}
const combinedFilesInfo = [
...existingFiles.map(
(file) =>
`${file.file?.name ?? file.filename}-${file.size}-${
file.type?.split('/')[0] ?? 'file'
}`,
),
...fileList.map(
(file: File | undefined) =>
`${file?.name}-${file?.size}-${file?.type.split('/')[0] ?? 'file'}`,
),
];
const uniqueFilesSet = new Set(combinedFilesInfo);
if (uniqueFilesSet.size !== combinedFilesInfo.length) {
setError('com_error_files_dupe');
return false;
}
return true;
},
[files, fileLimit, fileSizeLimit, totalSizeLimit, supportedMimeTypes],
);
const loadImage = (extendedFile: ExtendedFile, preview: string) => {
const img = new Image();
img.onload = async () => {
@ -332,7 +238,16 @@ const useFileHandling = (params?: UseFileHandling) => {
/* Validate files */
let filesAreValid: boolean;
try {
filesAreValid = validateFiles(fileList);
filesAreValid = validateFiles({
files,
fileList,
setError,
endpointFileConfig:
fileConfig?.endpoints[endpoint] ??
fileConfig?.endpoints.default ??
defaultFileConfig.endpoints[endpoint] ??
defaultFileConfig.endpoints.default,
});
} catch (error) {
console.error('file validation error', error);
setError('com_error_files_validation');

View file

@ -1,16 +1,16 @@
import { useGetCategories } from '~/data-provider';
import CategoryIcon from '~/components/Prompts/Groups/CategoryIcon';
import useLocalize from '~/hooks/useLocalize';
import useLocalize, { TranslationKeys } from '~/hooks/useLocalize';
const loadingCategories = [
const loadingCategories: { label: TranslationKeys; value: string }[] = [
{
label: 'Loading...',
label: 'com_ui_loading',
value: '',
},
] as undefined | { label: string; value: string }[];
];
const emptyCategory = {
label: '-',
const emptyCategory: { label: TranslationKeys; value: string } = {
label: 'com_ui_empty_category',
value: '',
};
@ -19,7 +19,7 @@ const useCategories = (className = '') => {
const { data: categories = loadingCategories } = useGetCategories({
select: (data) =>
data.map((category) => ({
label: localize(`com_ui_${category.label}`) || category.label,
label: localize(category.label as TranslationKeys),
value: category.value,
icon: category.value ? (
<CategoryIcon category={category.value} className={className} />

View file

@ -1,9 +1,9 @@
import { useEffect, useCallback } from 'react';
import { useEffect } from 'react';
import { TOptions } from 'i18next';
import { useRecoilValue } from 'recoil';
import { useTranslation } from 'react-i18next';
import { TOptions } from 'i18next';
import store from '~/store';
import { resources } from '~/locales/i18n';
import store from '~/store';
export type TranslationKeys = keyof typeof resources.en.translation;
@ -17,10 +17,5 @@ export default function useLocalize() {
}
}, [lang, i18n]);
const memoizedLocalize = useCallback(
(phraseKey: TranslationKeys, options?: TOptions) => t(phraseKey, options),
[t],
);
return memoizedLocalize;
}
return (phraseKey: TranslationKeys, options?: TOptions) => t(phraseKey, options);
}

View file

@ -34,10 +34,9 @@ describe('i18next translation tests', () => {
expect(i18n.t('com_ui_examples')).toBe(English.com_ui_examples);
});
it('should return an empty string for an invalid key', () => {
it('should return the key itself for an invalid key', () => {
i18n.changeLanguage('en');
// @ts-ignore
expect(i18n.t('invalid-key')).toBe('');
expect(i18n.t('invalid-key')).toBe('invalid-key'); // Returns the key itself
});
it('should correctly format placeholders in the translation', () => {

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "القيم الأعلى = أكثر عشوائية، بينما القيم الأقل = أكثر تركيزًا وحتمية. نوصي بتغيير هذا أو Top P ولكن ليس كلاهما.",
"com_endpoint_google_topk": "Top-k يغير كيفية اختيار النموذج للرموز للإخراج. top-k من 1 يعني أن الرمز المحدد هو الأكثر احتمالية بين جميع الرموز في مفردات النموذج (يسمى أيضًا الترميز الجشعي)، بينما top-k من 3 يعني أن الرمز التالي يتم اختياره من بين الرموز الثلاثة الأكثر احتمالية (باستخدام الحرارة).",
"com_endpoint_google_topp": "Top-p يغير كيفية اختيار النموذج للرموز للإخراج. يتم اختيار الرموز من الأكثر K (انظر معلمة topK) احتمالًا إلى الأقل حتى يصبح مجموع احتمالاتهم يساوي قيمة top-p.",
"com_endpoint_import": "استيراد",
"com_endpoint_instructions_assistants": "تعليمات التجاوز",
"com_endpoint_instructions_assistants_placeholder": "يتجاوز التعليمات الخاصة بالمساعد. هذا مفيد لتعديل السلوك على أساس كل مرة.",
"com_endpoint_max_output_tokens": "الحد الأقصى لعدد الرموز المنتجة",
@ -262,7 +261,6 @@
"com_nav_archive_name": "الاسم",
"com_nav_archived_chats": "الدردشات المؤرشفة",
"com_nav_archived_chats_empty": "ليس لديك أي دردشات مؤرشفة.",
"com_nav_archived_chats_manage": "إدارة",
"com_nav_at_command": "أمر-@",
"com_nav_at_command_description": "تبديل الأمر \"@\" للتنقل بين نقاط النهاية والنماذج والإعدادات المسبقة وغيرها",
"com_nav_audio_play_error": "خطأ في تشغيل الصوت: {{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "اللغة",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "الكلام",
"com_nav_settings": "الإعدادات",
"com_nav_shared_links": "روابط مشتركة",
"com_nav_shared_links_manage": "الإدارة",
"com_nav_show_code": "إظهار الشفرة دائمًا عند استخدام مفسر الشفرة",
"com_nav_slash_command": "/-الأمر",
"com_nav_slash_command_description": "تبديل الأمر \"/\" لاختيار موجه عبر لوحة المفاتيح",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "إنه عيد ميلادي الأول!",
"com_ui_host": "مُضيف",
"com_ui_image_gen": "توليد الصور",
"com_ui_import_conversation": "استيراد",
"com_ui_import_conversation_error": "حدث خطأ أثناء استيراد محادثاتك",
"com_ui_import_conversation_file_type_error": "نوع الملف غير مدعوم للاستيراد",
"com_ui_import_conversation_info": "استيراد محادثات من ملف JSON",

View file

@ -18,13 +18,16 @@
"com_agents_not_available": "Agent nicht verfügbar",
"com_agents_search_name": "Agenten nach Namen suchen",
"com_agents_update_error": "Beim Aktualisieren deines Agenten ist ein Fehler aufgetreten.",
"com_assistants_action_attempt": "Assistent möchte kommunizieren mit {{0}}",
"com_assistants_actions": "Aktionen",
"com_assistants_actions_disabled": "Du müsst einen Assistenten erstellen, bevor du Aktionen hinzufügen kannst.",
"com_assistants_actions_info": "Lasse deinen Assistenten Informationen abrufen oder Aktionen über APIs ausführen",
"com_assistants_add_actions": "Aktionen hinzufügen",
"com_assistants_add_tools": "Werkzeuge hinzufügen",
"com_assistants_allow_sites_you_trust": "Erlaube nur Webseiten, denen du vertraust.",
"com_assistants_append_date": "Aktuelles Datum & Uhrzeit anhängen",
"com_assistants_append_date_tooltip": "Wenn aktiviert, werden das aktuelle Client-Datum und die Uhrzeit an die Systemanweisungen des Assistenten angehängt.",
"com_assistants_attempt_info": "Assistent möchte Folgendes senden:",
"com_assistants_available_actions": "Verfügbare Aktionen",
"com_assistants_capabilities": "Fähigkeiten",
"com_assistants_code_interpreter": "Code-Interpreter",
@ -59,6 +62,7 @@
"com_assistants_update_error": "Bei der Aktualisierung deines Assistenten ist ein Fehler aufgetreten.",
"com_assistants_update_success": "Erfolgreich aktualisiert",
"com_auth_already_have_account": "Hast du bereits ein Konto?",
"com_auth_apple_login": "Mit Apple anmelden",
"com_auth_back_to_login": "Zurück zur Anmeldung",
"com_auth_click": "Klicke",
"com_auth_click_here": "Klicke hier",
@ -81,6 +85,7 @@
"com_auth_email_verification_redirecting": "Weiterleitung in {{0}} Sekunden...",
"com_auth_email_verification_resend_prompt": "Keine E-Mail erhalten?",
"com_auth_email_verification_success": "E-Mail erfolgreich verifiziert",
"com_auth_email_verifying_ellipsis": "Überprüfe …",
"com_auth_error_create": "Bei der Registrierung deines Kontos ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"com_auth_error_invalid_reset_token": "Dieser Passwort-Reset-Token ist nicht mehr gültig.",
"com_auth_error_login": "Anmeldung mit den angegebenen Informationen nicht möglich. Bitte überprüfe deine Anmeldedaten und versuche es erneut.",
@ -117,9 +122,11 @@
"com_auth_submit_registration": "Registrierung absenden",
"com_auth_to_reset_your_password": "um Ihr Passwort zurückzusetzen.",
"com_auth_to_try_again": "um es erneut zu versuchen.",
"com_auth_two_factor": "Prüfe deine bevorzugte Einmalkennwort-App auf einen Code.",
"com_auth_username": "Benutzername (optional)",
"com_auth_username_max_length": "Benutzername darf nicht länger als 20 Zeichen sein",
"com_auth_username_min_length": "Benutzername muss mindestens 2 Zeichen lang sein",
"com_auth_verify_your_identity": "Bestätige deine Identität",
"com_auth_welcome_back": "Willkommen zurück",
"com_click_to_download": "(hier klicken zum Herunterladen)",
"com_download_expired": "Download abgelaufen",
@ -178,7 +185,6 @@
"com_endpoint_google_temp": "Höhere Werte = zufälliger, während niedrigere Werte = fokussierter und deterministischer. Wir empfehlen, entweder dies oder Top P zu ändern, aber nicht beides.",
"com_endpoint_google_topk": "Top-k ändert, wie das Modell Token für die Antwort auswählt. Ein Top-k von 1 bedeutet, dass das ausgewählte Token das wahrscheinlichste unter allen Token im Vokabular des Modells ist (auch Greedy-Decoding genannt), während ein Top-k von 3 bedeutet, dass das nächste Token aus den 3 wahrscheinlichsten Token ausgewählt wird (unter Verwendung der Temperatur).",
"com_endpoint_google_topp": "Top-p ändert, wie das Modell Token für die Antwort auswählt. Token werden von den wahrscheinlichsten K (siehe topK-Parameter) bis zu den am wenigsten wahrscheinlichen ausgewählt, bis die Summe ihrer Wahrscheinlichkeiten dem Top-p-Wert entspricht.",
"com_endpoint_import": "Importieren",
"com_endpoint_instructions_assistants": "Anweisungen überschreiben",
"com_endpoint_instructions_assistants_placeholder": "Überschreibt die Anweisungen des Assistenten. Dies ist nützlich, um das Verhalten auf Basis einzelner Ausführungen zu modifizieren.",
"com_endpoint_max_output_tokens": "Max. Antwort-Token",
@ -195,6 +201,7 @@
"com_endpoint_openai_max_tokens": "Optionales 'max_tokens'-Feld, das die maximale Anzahl von Token darstellt, die in der Chat-Vervollständigung generiert werden können. Die Gesamtlänge der Eingabe-Token und der generierten Token ist durch die Kontextlänge des Modells begrenzt. Du kannst Fehler erleben, wenn diese Zahl die maximalen Kontext-Token überschreitet.",
"com_endpoint_openai_pres": "Zahl zwischen -2,0 und 2,0. Positive Werte bestrafen neue Token basierend darauf, ob sie im bisherigen Text vorkommen, wodurch die Wahrscheinlichkeit des Modells erhöht wird, über neue Themen zu sprechen.",
"com_endpoint_openai_prompt_prefix_placeholder": "Lege benutzerdefinierte Anweisungen fest, die in die Systemnachricht an die KI aufgenommen werden sollen. Standard: keine",
"com_endpoint_openai_reasoning_effort": "Nur für o1-Modelle: Begrenzt den Aufwand des Nachdenkens bei Schlussfolgerungsmodellen. Die Reduzierung des Nachdenkeaufwands kann zu schnelleren Antworten und weniger Token führen, die für das Überlegen vor einer Antwort verwendet werden.",
"com_endpoint_openai_resend": "Alle im Chat zuvor angehängten Bilder mit jeder neuen Nachricht erneut senden. Hinweis: Dies kann die Kosten der Anfrage aufgrund höherer Token-Anzahl erheblich erhöhen und du kannst bei vielen Bildanhängen Fehler erleben.",
"com_endpoint_openai_resend_files": "Alle im Chat zuvor angehängten Dateien mit jeder neuen Nachricht erneut senden. Hinweis: Dies wird die Kosten der Anfrage aufgrund höherer Token-Anzahl erheblich erhöhen und du kannst bei vielen Anhängen Fehler erleben.",
"com_endpoint_openai_stop": "Bis zu 4 Sequenzen, bei denen die API keine weiteren Token generiert.",
@ -228,6 +235,7 @@
"com_endpoint_prompt_prefix_assistants": "Zusätzliche Anweisungen",
"com_endpoint_prompt_prefix_assistants_placeholder": "Lege zusätzliche Anweisungen oder Kontext zusätzlich zu den Hauptanweisungen des Assistenten fest. Wird ignoriert, wenn leer.",
"com_endpoint_prompt_prefix_placeholder": "Lege benutzerdefinierte Anweisungen oder Kontext fest. Wird ignoriert, wenn leer.",
"com_endpoint_reasoning_effort": "Denkaufwand",
"com_endpoint_save_as_preset": "Voreinstellung speichern",
"com_endpoint_search": "Endpunkt nach Namen suchen",
"com_endpoint_set_custom_name": "Lege einen benutzerdefinierten Namen fest, falls du diese Voreinstellung wiederfinden möchtest",
@ -256,13 +264,13 @@
"com_files_number_selected": "{{0}} von {{1}} Datei(en) ausgewählt",
"com_generated_files": "Generierte Dateien:",
"com_hide_examples": "Beispiele ausblenden",
"com_nav_2fa": "Zwei-Faktor-Authentifizierung (2FA)",
"com_nav_account_settings": "Kontoeinstellungen",
"com_nav_always_make_prod": "Neue Versionen direkt produktiv nehmen",
"com_nav_archive_created_at": "Archivierungsdatum",
"com_nav_archive_name": "Name",
"com_nav_archived_chats": "Archivierte Chats",
"com_nav_archived_chats_empty": "Du hast keine archivierten Chats.",
"com_nav_archived_chats_manage": "Verwalten",
"com_nav_at_command": "@-Befehl",
"com_nav_at_command_description": "Schaltet den Befehl \"@\" zum Wechseln von Endpunkten, Modellen, Voreinstellungen usw. um.",
"com_nav_audio_play_error": "Fehler beim Abspielen des Audios: {{0}}",
@ -322,6 +330,7 @@
"com_nav_help_faq": "Hilfe & FAQ",
"com_nav_hide_panel": "Rechte Seitenleiste verstecken",
"com_nav_info_code_artifacts": "Aktiviert die Anzeige experimenteller Code-Artefakte neben dem Chat",
"com_nav_info_code_artifacts_agent": "Aktiviert die Verwendung von Code-Artefakten für diesen Agenten. Standardmäßig werden zusätzliche, spezielle Anweisungen für die Nutzung von Artefakten hinzugefügt, es sei denn, der \"Benutzerdefinierte Prompt-Modus\" ist aktiviert.",
"com_nav_info_custom_prompt_mode": "Wenn aktiviert, wird die Standard-Systemaufforderung für Artefakte nicht eingeschlossen. Alle Anweisungen zur Erzeugung von Artefakten müssen in diesem Modus manuell bereitgestellt werden.",
"com_nav_info_enter_to_send": "Wenn aktiviert, sendet das Drücken von `ENTER` Ihre Nachricht. Wenn deaktiviert, fügt das Drücken von Enter eine neue Zeile hinzu, und du musst `STRG + ENTER` drücken, um deine Nachricht zu senden.",
"com_nav_info_fork_change_default": "`Nur sichtbare Nachrichten` umfasst nur den direkten Pfad zur ausgewählten Nachricht. `Zugehörige Verzweigungen einbeziehen` fügt Verzweigungen entlang des Pfades hinzu. `Alle bis/von hier einbeziehen` umfasst alle verbundenen Nachrichten und Verzweigungen.",
@ -329,6 +338,7 @@
"com_nav_info_include_shadcnui": "Wenn aktiviert, werden Anweisungen zur Verwendung von shadcn/ui-Komponenten eingeschlossen. shadcn/ui ist eine Sammlung wiederverwendbarer Komponenten, die mit Radix UI und Tailwind CSS erstellt wurden. Hinweis: Dies sind umfangreiche Anweisungen, die Sie nur aktivieren sollten, wenn es Ihnen wichtig ist, das KI-Modell über die korrekten Importe und Komponenten zu informieren. Weitere Informationen zu diesen Komponenten finden Sie unter: https://ui.shadcn.com/",
"com_nav_info_latex_parsing": "Wenn aktiviert, wird LaTeX-Code in Nachrichten als mathematische Gleichungen gerendert. Das Deaktivieren kann die Leistung verbessern, wenn du keine LaTeX-Darstellung benötigst.",
"com_nav_info_save_draft": "Wenn aktiviert, werden der Text und die Anhänge, die du in das Chat-Formular eingibst, automatisch lokal als Entwürfe gespeichert. Diese Entwürfe sind auch verfügbar, wenn du die Seite neu lädst oder zu einer anderen Konversation wechseln. Entwürfe werden lokal auf deinem Gerät gespeichert und werden gelöscht, sobald die Nachricht gesendet wird.",
"com_nav_info_show_thinking": "Wenn aktiviert, sind die Denkprozess-Dropdowns standardmäßig geöffnet, sodass du die Gedankengänge der KI in Echtzeit sehen kannst. Wenn deaktiviert, bleiben sie standardmäßig geschlossen, für eine übersichtlichere Oberfläche.",
"com_nav_info_user_name_display": "Wenn aktiviert, wird der Benutzername des Absenders über jeder Nachricht angezeigt, die du sendest. Wenn deaktiviert, siehst du nur \"Du\" über deinen Nachrichten.",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Automatisch erkennen",
@ -336,6 +346,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +356,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Sprache",
@ -371,6 +383,7 @@
"com_nav_plus_command_description": "Schaltet den Befehl \"+\" zum Hinzufügen einer Mehrfachantwort-Einstellung um",
"com_nav_profile_picture": "Profilbild",
"com_nav_save_drafts": "Entwürfe lokal speichern",
"com_nav_scroll_button": "Zum Ende scrollen Button",
"com_nav_search_placeholder": "Nachrichten durchsuchen",
"com_nav_send_message": "Nachricht senden",
"com_nav_setting_account": "Konto",
@ -381,8 +394,8 @@
"com_nav_setting_speech": "Sprache",
"com_nav_settings": "Einstellungen",
"com_nav_shared_links": "Geteilte Links",
"com_nav_shared_links_manage": "Verwalten",
"com_nav_show_code": "Code immer anzeigen, wenn der Code-Interpreter verwendet wird",
"com_nav_show_thinking": "Denkprozess-Dropdowns standardmäßig öffnen",
"com_nav_slash_command": "/-Befehl",
"com_nav_slash_command_description": "Schaltet den Befehl \"/\" zur Auswahl einer Eingabeaufforderung über die Tastatur um",
"com_nav_source_buffer_error": "Fehler beim Einrichten der Audiowiedergabe. Bitte lade die Seite neu.",
@ -418,9 +431,19 @@
"com_sidepanel_conversation_tags": "Lesezeichen",
"com_sidepanel_hide_panel": "Seitenleiste ausblenden",
"com_sidepanel_manage_files": "Dateien verwalten",
"com_sidepanel_parameters": "Parameter",
"com_sidepanel_parameters": "KI-Einstellungen",
"com_sidepanel_select_agent": "Wähle einen Agenten",
"com_sidepanel_select_assistant": "Assistenten auswählen",
"com_ui_2fa_account_security": "Die Zwei-Faktor-Authentifizierung bietet deinem Konto eine zusätzliche Sicherheitsebene.",
"com_ui_2fa_disable": "2FA deaktivieren",
"com_ui_2fa_disable_error": "Beim Deaktivieren der Zwei-Faktor-Authentifizierung ist ein Fehler aufgetreten.",
"com_ui_2fa_disabled": "2FA wurde deaktiviert.",
"com_ui_2fa_enable": "2FA aktivieren",
"com_ui_2fa_enabled": "2FA wurde aktiviert.",
"com_ui_2fa_generate_error": "Beim Erstellen der Einstellungen für die Zwei-Faktor-Authentifizierung ist ein Fehler aufgetreten.",
"com_ui_2fa_invalid": "Ungültiger Zwei-Faktor-Authentifizierungscode.",
"com_ui_2fa_setup": "2FA einrichten",
"com_ui_2fa_verified": "Die Zwei-Faktor-Authentifizierung wurde erfolgreich verifiziert.",
"com_ui_accept": "Ich akzeptiere",
"com_ui_add": "Hinzufügen",
"com_ui_add_model_preset": "Ein KI-Modell oder eine Voreinstellung für eine zusätzliche Antwort hinzufügen",
@ -435,17 +458,22 @@
"com_ui_agent_duplicate_error": "Beim Duplizieren des Assistenten ist ein Fehler aufgetreten",
"com_ui_agent_duplicated": "Agent wurde erfolgreich dupliziert",
"com_ui_agent_editing_allowed": "Andere Nutzende können diesen Agenten bereits bearbeiten",
"com_ui_agent_shared_to_all": "Hier muss etwas eingegeben werden. War leer.",
"com_ui_agents": "Agenten",
"com_ui_agents_allow_create": "Erstellung von Assistenten erlauben",
"com_ui_agents_allow_share_global": "Assistenten für alle Nutzenden freigeben",
"com_ui_agents_allow_use": "Verwendung von Agenten erlauben",
"com_ui_all": "alle",
"com_ui_all_proper": "Alle",
"com_ui_analyzing": "Analyse läuft",
"com_ui_analyzing_finished": "Analyse abgeschlossen",
"com_ui_api_key": "API-Schlüssel",
"com_ui_archive": "Archivieren",
"com_ui_archive_error": "Konversation konnte nicht archiviert werden",
"com_ui_artifact_click": "Zum Öffnen klicken",
"com_ui_artifacts": "Artefakte",
"com_ui_artifacts_toggle": "Artefakte-Funktion einschalten",
"com_ui_artifacts_toggle_agent": "Artefakte aktivieren",
"com_ui_ascending": "Aufsteigend",
"com_ui_assistant": "Assistent",
"com_ui_assistant_delete_error": "Beim Löschen des Assistenten ist ein Fehler aufgetreten",
@ -458,10 +486,20 @@
"com_ui_attach_error_type": "Nicht unterstützter Dateityp für Endpunkt:",
"com_ui_attach_warn_endpoint": "Nicht-Assistentendateien werden möglicherweise ohne kompatibles Werkzeug ignoriert",
"com_ui_attachment": "Anhang",
"com_ui_auth_type": "Authentifizierungstyp",
"com_ui_auth_url": "Autorisierungs-URL",
"com_ui_authentication": "Authentifizierung",
"com_ui_authentication_type": "Authentifizierungstyp",
"com_ui_avatar": "Avatar",
"com_ui_azure": "Azure",
"com_ui_back_to_chat": "Zurück zum Chat",
"com_ui_back_to_prompts": "Zurück zu den Prompts",
"com_ui_backup_codes": "Backup-Codes",
"com_ui_backup_codes_regenerate_error": "Beim Neuerstellen der Backup-Codes ist ein Fehler aufgetreten.",
"com_ui_backup_codes_regenerated": "Backup-Codes wurden erfolgreich neu erstellt.",
"com_ui_basic": "Basic",
"com_ui_basic_auth_header": "Basic-Authentifizierungsheader",
"com_ui_bearer": "Bearer",
"com_ui_bookmark_delete_confirm": "Bist du sicher, dass du dieses Lesezeichen löschen möchtest?",
"com_ui_bookmarks": "Lesezeichen",
"com_ui_bookmarks_add": "Lesezeichen hinzufügen",
@ -480,17 +518,24 @@
"com_ui_bookmarks_title": "Titel",
"com_ui_bookmarks_update_error": "Beim Aktualisieren des Lesezeichens ist ein Fehler aufgetreten",
"com_ui_bookmarks_update_success": "Lesezeichen erfolgreich aktualisiert",
"com_ui_bulk_delete_error": "Geteilte Links konnten nicht gelöscht werden.",
"com_ui_callback_url": "Callback-URL",
"com_ui_cancel": "Abbrechen",
"com_ui_chat": "Chat",
"com_ui_chat_history": "Chatverlauf",
"com_ui_clear": "Löschen",
"com_ui_clear_all": "Auswahl löschen",
"com_ui_client_secret": "Client Secret",
"com_ui_close": "Schließen",
"com_ui_close_menu": "Menü schließen",
"com_ui_code": "Code",
"com_ui_collapse_chat": "Chat einklappen",
"com_ui_command_placeholder": "Optional: Gib einen Promptbefehl ein oder den Namen.",
"com_ui_command_usage_placeholder": "Wähle einen Prompt nach Befehl oder Name aus",
"com_ui_complete_setup": "Einrichtung abschließen",
"com_ui_confirm_action": "Aktion bestätigen",
"com_ui_confirm_admin_use_change": "Wenn du diese Einstellung änderst, wird der Zugriff für Administratoren, einschließlich dir selbst, gesperrt. Bist du sicher, dass du fortfahren möchtest?",
"com_ui_confirm_change": "Änderung bestätigen",
"com_ui_context": "Kontext",
"com_ui_continue": "Fortfahren",
"com_ui_controls": "Steuerung",
@ -502,6 +547,9 @@
"com_ui_create": "Erstellen",
"com_ui_create_link": "Link erstellen",
"com_ui_create_prompt": "Prompt erstellen",
"com_ui_currently_production": "Aktuell im Produktivbetrieb",
"com_ui_custom": "Benutzerdefiniert",
"com_ui_custom_header_name": "Benutzerdefinierter Headername",
"com_ui_custom_prompt_mode": "Benutzerdefinierter Promptmodus für Artefakte",
"com_ui_dashboard": "Dashboard",
"com_ui_date": "Datum",
@ -522,6 +570,7 @@
"com_ui_date_today": "Heute",
"com_ui_date_yesterday": "Gestern",
"com_ui_decline": "Ich akzeptiere nicht",
"com_ui_default_post_request": "Standard (POST-Anfrage)",
"com_ui_delete": "Löschen",
"com_ui_delete_action": "Aktion löschen",
"com_ui_delete_action_confirm": "Bist du sicher, dass du diese Aktion löschen möchtest?",
@ -537,6 +586,11 @@
"com_ui_descending": "Absteigend",
"com_ui_description": "Beschreibung",
"com_ui_description_placeholder": "Optional: Gib eine Beschreibung für den Prompt ein",
"com_ui_disabling": "Deaktiviere …",
"com_ui_download": "Herunterladen",
"com_ui_download_artifact": "Artefakt herunterladen",
"com_ui_download_backup": "Backup-Codes herunterladen",
"com_ui_download_backup_tooltip": "Bevor du fortfährst, lade bitte deine Backup-Codes herunter. Du benötigst sie, um den Zugang wiederherzustellen, falls du dein Authentifizierungsgerät verlierst.",
"com_ui_download_error": "Fehler beim Herunterladen der Datei. Die Datei wurde möglicherweise gelöscht.",
"com_ui_dropdown_variables": "Dropdown-Variablen:",
"com_ui_dropdown_variables_info": "Erstellen Sie benutzerdefinierte Dropdown-Menüs für Ihre Eingabeaufforderungen: `{{variable_name:option1|option2|option3}}`",
@ -558,7 +612,9 @@
"com_ui_examples": "Beispiele",
"com_ui_export_convo_modal": "Konversation exportieren",
"com_ui_field_required": "Dieses Feld ist erforderlich",
"com_ui_filter_prompts": "Prompts filtern",
"com_ui_filter_prompts_name": "Prompts nach Namen filtern",
"com_ui_finance": "Finanzen",
"com_ui_fork": "Abzweigen",
"com_ui_fork_all_target": "Alle bis/von hier einbeziehen",
"com_ui_fork_branches": "Zugehörige Verzweigungen einbeziehen",
@ -581,30 +637,41 @@
"com_ui_fork_split_target_setting": "Abzweigung standardmäßig von der Zielnachricht beginnen",
"com_ui_fork_success": "Konversation erfolgreich abgezweigt",
"com_ui_fork_visible": "Nur sichtbare Nachrichten",
"com_ui_generate_backup": "Backup-Codes generieren",
"com_ui_generate_qrcode": "QR-Code generieren",
"com_ui_generating": "Generiere …",
"com_ui_go_back": "Zurück",
"com_ui_go_to_conversation": "Zur Konversation gehen",
"com_ui_happy_birthday": "Es ist mein 1. Geburtstag!",
"com_ui_hide_qr": "QR-Code ausblenden",
"com_ui_host": "Host",
"com_ui_idea": "Ideen",
"com_ui_image_gen": "Bildgenerierung",
"com_ui_import_conversation": "Importieren",
"com_ui_import": "Importieren",
"com_ui_import_conversation_error": "Beim Importieren Ihrer Konversationen ist ein Fehler aufgetreten",
"com_ui_import_conversation_file_type_error": "Nicht unterstützter Importtyp",
"com_ui_import_conversation_info": "Konversationen aus einer JSON-Datei importieren",
"com_ui_import_conversation_success": "Konversationen erfolgreich importiert",
"com_ui_include_shadcnui": "Anweisungen für shadcn/ui-Komponenten einschließen",
"com_ui_include_shadcnui_agent": "shadcn/ui-Anweisungen einfügen",
"com_ui_input": "Eingabe",
"com_ui_instructions": "Anweisungen",
"com_ui_latest_footer": "Alle KIs für alle.",
"com_ui_latest_production_version": "Neueste Produktiv-Version",
"com_ui_latest_version": "Neueste Version",
"com_ui_librechat_code_api_key": "Hole dir deinen LibreChat Code Interpreter API-Schlüssel",
"com_ui_librechat_code_api_subtitle": "Sicher. Mehrsprachig. Ein-/Ausgabedateien.",
"com_ui_librechat_code_api_title": "KI-Code ausführen",
"com_ui_llm_menu": "LLM-Menü",
"com_ui_llms_available": "Verfügbare LLMs",
"com_ui_loading": "Lade …",
"com_ui_locked": "Gesperrt",
"com_ui_logo": "{{0}} Logo",
"com_ui_manage": "Verwalten",
"com_ui_max_tags": "Die maximale Anzahl ist {{0}}, es werden die neuesten Werte verwendet.",
"com_ui_mention": "Erwähne einen Endpunkt, Assistenten oder eine Voreinstellung, um schnell dorthin zu wechseln",
"com_ui_min_tags": "Es können nicht mehr Werte entfernt werden, mindestens {{0}} sind erforderlich.",
"com_ui_misc": "Verschiedenes",
"com_ui_model": "KI-Modell",
"com_ui_model_parameters": "Modell-Parameter",
"com_ui_more_info": "Mehr Infos",
@ -613,15 +680,20 @@
"com_ui_new_chat": "Neuer Chat",
"com_ui_next": "Weiter",
"com_ui_no": "Nein",
"com_ui_no_backup_codes": "Keine Backup-Codes verfügbar. Bitte erstelle neue.",
"com_ui_no_bookmarks": "Du hast noch keine Lesezeichen. Klicke auf einen Chat und füge ein neues hinzu",
"com_ui_no_category": "Keine Kategorie",
"com_ui_no_changes": "Keine Änderungen zum Aktualisieren",
"com_ui_no_terms_content": "Keine Inhalte der Allgemeinen Geschäftsbedingungen zum Anzeigen",
"com_ui_none": "Keine",
"com_ui_none_selected": "Nichts ausgewählt",
"com_ui_not_used": "Nicht verwendet",
"com_ui_nothing_found": "Nichts gefunden",
"com_ui_oauth": "OAuth",
"com_ui_of": "von",
"com_ui_off": "Aus",
"com_ui_on": "An",
"com_ui_openai": "OpenAI",
"com_ui_page": "Seite",
"com_ui_prev": "Zurück",
"com_ui_preview": "Vorschau",
@ -641,9 +713,14 @@
"com_ui_prompts_allow_use": "Verwendung von Prompts erlauben",
"com_ui_provider": "Anbieter",
"com_ui_read_aloud": "Vorlesen",
"com_ui_refresh_link": "Link aktualisieren",
"com_ui_regenerate": "Neu generieren",
"com_ui_regenerate_backup": "Backup-Codes neu generieren",
"com_ui_regenerating": "Generiere neu ...",
"com_ui_region": "Region",
"com_ui_rename": "Umbenennen",
"com_ui_rename_prompt": "Prompt umbenennen",
"com_ui_requires_auth": "Authentifizierung erforderlich",
"com_ui_reset_var": "{{0}} zurücksetzen",
"com_ui_result": "Ergebnis",
"com_ui_revoke": "Widerrufen",
@ -653,12 +730,16 @@
"com_ui_revoke_keys": "Schlüssel widerrufen",
"com_ui_revoke_keys_confirm": "Bist du sicher, dass du alle Schlüssel widerrufen möchtest?",
"com_ui_role_select": "Rolle auswählen",
"com_ui_roleplay": "Rollenspiel",
"com_ui_run_code": "Code ausführen",
"com_ui_run_code_error": "Bei der Ausführung des Codes ist ein Fehler aufgetreten",
"com_ui_save": "Speichern",
"com_ui_save_submit": "Speichern & Absenden",
"com_ui_saved": "Gespeichert!",
"com_ui_schema": "Schema",
"com_ui_scope": "Umfang",
"com_ui_search": "Suche",
"com_ui_secret_key": "Geheimschlüssel",
"com_ui_select": "Auswählen",
"com_ui_select_file": "Datei auswählen",
"com_ui_select_model": "Ein KI-Modell auswählen",
@ -677,9 +758,15 @@
"com_ui_share_to_all_users": "Mit allen Benutzern teilen",
"com_ui_share_update_message": "Ihr Name, benutzerdefinierte Anweisungen und alle Nachrichten, die du nach dem Teilen hinzufügen, bleiben privat.",
"com_ui_share_var": "{{0}} teilen",
"com_ui_shared_link_bulk_delete_success": "Geteilte Links erfolgreich gelöscht",
"com_ui_shared_link_delete_success": "Geteilter Link erfolgreich gelöscht",
"com_ui_shared_link_not_found": "Geteilter Link nicht gefunden",
"com_ui_shared_prompts": "Geteilte Prompts",
"com_ui_shop": "Einkaufen",
"com_ui_show": "Anzeigen",
"com_ui_show_all": "Alle anzeigen",
"com_ui_show_qr": "QR-Code anzeigen",
"com_ui_sign_in_to_domain": "Anmelden bei {{0}}",
"com_ui_simple": "Einfach",
"com_ui_size": "Größe",
"com_ui_special_variables": "Spezielle Variablen:",
@ -688,9 +775,16 @@
"com_ui_stop": "Stopp",
"com_ui_storage": "Speicher",
"com_ui_submit": "Absenden",
"com_ui_teach_or_explain": "Lernen",
"com_ui_temporary_chat": "Temporärer Chat",
"com_ui_terms_and_conditions": "Allgemeine Geschäftsbedingungen",
"com_ui_terms_of_service": "Nutzungsbedingungen",
"com_ui_thinking": "Nachdenken...",
"com_ui_thoughts": "Gedanken",
"com_ui_token_exchange_method": "Token-Austauschmethode",
"com_ui_token_url": "Token-URL",
"com_ui_tools": "Werkzeuge",
"com_ui_travel": "Reisen",
"com_ui_unarchive": "Aus Archiv holen",
"com_ui_unarchive_error": "Konversation konnte nicht aus dem Archiv geholt werden",
"com_ui_unknown": "Unbekannt",
@ -707,12 +801,18 @@
"com_ui_upload_invalid_var": "Ungültige Datei zum Hochladen. Muss ein Bild sein und {{0}} MB nicht überschreiten",
"com_ui_upload_success": "Datei erfolgreich hochgeladen",
"com_ui_upload_type": "Upload-Typ auswählen",
"com_ui_use_2fa_code": "Stattdessen 2FA-Code verwenden",
"com_ui_use_backup_code": "Stattdessen Backup-Code verwenden",
"com_ui_use_micrphone": "Mikrofon verwenden",
"com_ui_use_prompt": "Prompt verwenden",
"com_ui_used": "Verwendet",
"com_ui_variables": "Variablen",
"com_ui_variables_info": "Verwende doppelte geschweifte Klammern in Ihrem Text, um Variablen zu erstellen, z.B. {{Beispielvariable}}, die du später beim Verwenden des Prompts ausfüllen kannst.",
"com_ui_verify": "Überprüfen",
"com_ui_version_var": "Version {{0}}",
"com_ui_versions": "Versionen",
"com_ui_view_source": "Quell-Chat anzeigen",
"com_ui_write": "Schreiben",
"com_ui_yes": "Ja",
"com_ui_zoom": "Zoom",
"com_user_message": "Du",

View file

@ -87,6 +87,7 @@
"com_auth_email_verification_redirecting": "Redirecting in {{0}} seconds...",
"com_auth_email_verification_resend_prompt": "Didn't receive the email?",
"com_auth_email_verification_success": "Email verified successfully",
"com_auth_email_verifying_ellipsis": "Verifying...",
"com_auth_error_create": "There was an error attempting to register your account. Please try again.",
"com_auth_error_invalid_reset_token": "This password reset token is no longer valid.",
"com_auth_error_login": "Unable to login with the information provided. Please check your credentials and try again.",
@ -123,9 +124,11 @@
"com_auth_submit_registration": "Submit registration",
"com_auth_to_reset_your_password": "to reset your password.",
"com_auth_to_try_again": "to try again.",
"com_auth_two_factor": "Check your preferred one-time password application for a code",
"com_auth_username": "Username (optional)",
"com_auth_username_max_length": "Username must be less than 20 characters",
"com_auth_username_min_length": "Username must be at least 2 characters",
"com_auth_verify_your_identity": "Verify Your Identity",
"com_auth_welcome_back": "Welcome back",
"com_click_to_download": "(click here to download)",
"com_download_expired": "(download expired)",
@ -184,7 +187,6 @@
"com_endpoint_google_temp": "Higher values = more random, while lower values = more focused and deterministic. We recommend altering this or Top P but not both.",
"com_endpoint_google_topk": "Top-k changes how the model selects tokens for output. A top-k of 1 means the selected token is the most probable among all tokens in the model's vocabulary (also called greedy decoding), while a top-k of 3 means that the next token is selected from among the 3 most probable tokens (using temperature).",
"com_endpoint_google_topp": "Top-p changes how the model selects tokens for output. Tokens are selected from most K (see topK parameter) probable to least until the sum of their probabilities equals the top-p value.",
"com_endpoint_import": "Import",
"com_endpoint_instructions_assistants": "Override Instructions",
"com_endpoint_instructions_assistants_placeholder": "Overrides the instructions of the assistant. This is useful for modifying the behavior on a per-run basis.",
"com_endpoint_max_output_tokens": "Max Output Tokens",
@ -266,13 +268,13 @@
"com_files_table": "something needs to go here. was empty",
"com_generated_files": "Generated files:",
"com_hide_examples": "Hide Examples",
"com_nav_2fa": "Two-Factor Authentication (2FA)",
"com_nav_account_settings": "Account Settings",
"com_nav_always_make_prod": "Always make new versions production",
"com_nav_archive_created_at": "Date Archived",
"com_nav_archive_name": "Name",
"com_nav_archived_chats": "Archived chats",
"com_nav_archived_chats_empty": "You have no archived conversations.",
"com_nav_archived_chats_manage": "Manage",
"com_nav_at_command": "@-Command",
"com_nav_at_command_description": "Toggle command \"@\" for switching endpoints, models, presets, etc.",
"com_nav_audio_play_error": "Error playing audio: {{0}}",
@ -348,6 +350,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -357,10 +360,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Language",
@ -394,7 +398,6 @@
"com_nav_setting_speech": "Speech",
"com_nav_settings": "Settings",
"com_nav_shared_links": "Shared links",
"com_nav_shared_links_manage": "Manage",
"com_nav_show_code": "Always show code when using code interpreter",
"com_nav_show_thinking": "Open Thinking Dropdowns by Default",
"com_nav_slash_command": "/-Command",
@ -435,6 +438,16 @@
"com_sidepanel_parameters": "Parameters",
"com_sidepanel_select_agent": "Select an Agent",
"com_sidepanel_select_assistant": "Select an Assistant",
"com_ui_2fa_account_security": "Two-factor authentication adds an extra layer of security to your account",
"com_ui_2fa_disable": "Disable 2FA",
"com_ui_2fa_disable_error": "There was an error disabling two-factor authentication",
"com_ui_2fa_disabled": "2FA has been disabled",
"com_ui_2fa_enable": "Enable 2FA",
"com_ui_2fa_enabled": "2FA has been enabled",
"com_ui_2fa_generate_error": "There was an error generating two-factor authentication settings",
"com_ui_2fa_invalid": "Invalid two-factor authentication code",
"com_ui_2fa_setup": "Setup 2FA",
"com_ui_2fa_verified": "Successfully verified Two-Factor Authentication",
"com_ui_accept": "I accept",
"com_ui_add": "Add",
"com_ui_add_model_preset": "Add a model or preset for an additional response",
@ -485,6 +498,9 @@
"com_ui_azure": "Azure",
"com_ui_back_to_chat": "Back to Chat",
"com_ui_back_to_prompts": "Back to Prompts",
"com_ui_backup_codes": "Backup Codes",
"com_ui_backup_codes_regenerate_error": "There was an error regenerating backup codes",
"com_ui_backup_codes_regenerated": "Backup codes have been regenerated successfully",
"com_ui_basic": "Basic",
"com_ui_basic_auth_header": "Basic authorization header",
"com_ui_bearer": "Bearer",
@ -521,6 +537,7 @@
"com_ui_collapse_chat": "Collapse Chat",
"com_ui_command_placeholder": "Optional: Enter a command for the prompt or name will be used",
"com_ui_command_usage_placeholder": "Select a Prompt by command or name",
"com_ui_complete_setup": "Complete Setup",
"com_ui_confirm_action": "Confirm Action",
"com_ui_confirm_admin_use_change": "Changing this setting will block access for admins, including yourself. Are you sure you want to proceed?",
"com_ui_confirm_change": "Confirm Change",
@ -574,8 +591,11 @@
"com_ui_descending": "Desc",
"com_ui_description": "Description",
"com_ui_description_placeholder": "Optional: Enter a description to display for the prompt",
"com_ui_disabling": "Disabling...",
"com_ui_download": "Download",
"com_ui_download_artifact": "Download Artifact",
"com_ui_download_backup": "Download Backup Codes",
"com_ui_download_backup_tooltip": "Before you continue, download your backup codes. You will need them to regain access if you lose your authenticator device",
"com_ui_download_error": "Error downloading file. The file may have been deleted.",
"com_ui_drag_drop": "something needs to go here. was empty",
"com_ui_dropdown_variables": "Dropdown variables:",
@ -585,6 +605,7 @@
"com_ui_duplication_processing": "Duplicating conversation...",
"com_ui_duplication_success": "Successfully duplicated conversation",
"com_ui_edit": "Edit",
"com_ui_empty_category": "-",
"com_ui_endpoint": "Endpoint",
"com_ui_endpoint_menu": "LLM Endpoint Menu",
"com_ui_endpoints_available": "Available Endpoints",
@ -600,6 +621,7 @@
"com_ui_field_required": "This field is required",
"com_ui_filter_prompts": "Filter Prompts",
"com_ui_filter_prompts_name": "Filter prompts by name",
"com_ui_finance": "Finance",
"com_ui_fork": "Fork",
"com_ui_fork_all_target": "Include all to/from here",
"com_ui_fork_branches": "Include related branches",
@ -622,14 +644,18 @@
"com_ui_fork_split_target_setting": "Start fork from target message by default",
"com_ui_fork_success": "Successfully forked conversation",
"com_ui_fork_visible": "Visible messages only",
"com_ui_generate_backup": "Generate Backup Codes",
"com_ui_generate_qrcode": "Generate QR Code",
"com_ui_generating": "Generating...",
"com_ui_global_group": "something needs to go here. was empty",
"com_ui_go_back": "Go back",
"com_ui_go_to_conversation": "Go to conversation",
"com_ui_happy_birthday": "It's my 1st birthday!",
"com_ui_hide_qr": "Hide QR Code",
"com_ui_host": "Host",
"com_ui_idea": "Ideas",
"com_ui_image_gen": "Image Gen",
"com_ui_import_conversation": "Import",
"com_ui_import": "Import",
"com_ui_import_conversation_error": "There was an error importing your conversations",
"com_ui_import_conversation_file_type_error": "Unsupported import type",
"com_ui_import_conversation_info": "Import conversations from a JSON file",
@ -646,20 +672,24 @@
"com_ui_librechat_code_api_title": "Run AI Code",
"com_ui_llm_menu": "LLM Menu",
"com_ui_llms_available": "Available LLMs",
"com_ui_loading": "Loading...",
"com_ui_locked": "Locked",
"com_ui_logo": "{{0}} Logo",
"com_ui_manage": "Manage",
"com_ui_max_tags": "Maximum number allowed is {{0}}, using latest values.",
"com_ui_mention": "Mention an endpoint, assistant, or preset to quickly switch to it",
"com_ui_min_tags": "Cannot remove more values, a minimum of {{0}} are required.",
"com_ui_misc": "Misc.",
"com_ui_model": "Model",
"com_ui_model_parameters": "Model Parameters",
"com_ui_more_info": "More info",
"com_ui_my_prompts": "My Prompts",
"com_ui_name": "Name",
"com_ui_new": "New",
"com_ui_new_chat": "New chat",
"com_ui_next": "Next",
"com_ui_no": "No",
"com_ui_no_backup_codes": "No backup codes available. Please generate new ones",
"com_ui_no_bookmarks": "it seems like you have no bookmarks yet. Click on a chat and add a new one",
"com_ui_no_category": "No category",
"com_ui_no_changes": "No changes to update",
@ -668,6 +698,7 @@
"com_ui_no_valid_items": "something needs to go here. was empty",
"com_ui_none": "None",
"com_ui_none_selected": "None selected",
"com_ui_not_used": "Not Used",
"com_ui_nothing_found": "Nothing found",
"com_ui_oauth": "OAuth",
"com_ui_of": "of",
@ -695,6 +726,8 @@
"com_ui_read_aloud": "Read aloud",
"com_ui_refresh_link": "Refresh link",
"com_ui_regenerate": "Regenerate",
"com_ui_regenerate_backup": "Regenerate Backup Codes",
"com_ui_regenerating": "Regenerating...",
"com_ui_region": "Region",
"com_ui_rename": "Rename",
"com_ui_rename_prompt": "Rename Prompt",
@ -708,6 +741,7 @@
"com_ui_revoke_keys": "Revoke Keys",
"com_ui_revoke_keys_confirm": "Are you sure you want to revoke all keys?",
"com_ui_role_select": "Role",
"com_ui_roleplay": "Roleplay",
"com_ui_run_code": "Run Code",
"com_ui_run_code_error": "There was an error running the code",
"com_ui_save": "Save",
@ -716,6 +750,7 @@
"com_ui_schema": "Schema",
"com_ui_scope": "Scope",
"com_ui_search": "Search",
"com_ui_secret_key": "Secret Key",
"com_ui_select": "Select",
"com_ui_select_file": "Select a file",
"com_ui_select_model": "Select a model",
@ -739,6 +774,8 @@
"com_ui_shared_link_delete_success": "Successfully deleted shared link",
"com_ui_shared_link_not_found": "Shared link not found",
"com_ui_shared_prompts": "Shared Prompts",
"com_ui_shop": "Shopping",
"com_ui_show": "Show",
"com_ui_show_all": "Show All",
"com_ui_show_qr": "Show QR Code",
"com_ui_sign_in_to_domain": "Sign-in to {{0}}",
@ -750,6 +787,7 @@
"com_ui_stop": "Stop",
"com_ui_storage": "Storage",
"com_ui_submit": "Submit",
"com_ui_teach_or_explain": "Learning",
"com_ui_temporary_chat": "Temporary Chat",
"com_ui_terms_and_conditions": "Terms and Conditions",
"com_ui_terms_of_service": "Terms of service",
@ -758,6 +796,7 @@
"com_ui_token_exchange_method": "Token Exchange Method",
"com_ui_token_url": "Token URL",
"com_ui_tools": "Tools",
"com_ui_travel": "Travel",
"com_ui_unarchive": "Unarchive",
"com_ui_unarchive_error": "Failed to unarchive conversation",
"com_ui_unknown": "Unknown",
@ -774,13 +813,18 @@
"com_ui_upload_invalid_var": "Invalid file for upload. Must be an image not exceeding {{0}} MB",
"com_ui_upload_success": "Successfully uploaded file",
"com_ui_upload_type": "Select Upload Type",
"com_ui_use_2fa_code": "Use 2FA Code Instead",
"com_ui_use_backup_code": "Use Backup Code Instead",
"com_ui_use_micrphone": "Use microphone",
"com_ui_use_prompt": "Use prompt",
"com_ui_used": "Used",
"com_ui_variables": "Variables",
"com_ui_variables_info": "Use double braces in your text to create variables, e.g. `{{example variable}}`, to later fill when using the prompt.",
"com_ui_verify": "Verify",
"com_ui_version_var": "Version {{0}}",
"com_ui_versions": "Versions",
"com_ui_view_source": "View source chat",
"com_ui_write": "Writing",
"com_ui_yes": "Yes",
"com_ui_zoom": "Zoom",
"com_user_message": "You",

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "Los valores más altos = más aleatorios, mientras que los valores más bajos = más enfocados y deterministas. Recomendamos alterar esto o Top P, pero no ambos.",
"com_endpoint_google_topk": "Top-k cambia la forma en que el modelo selecciona tokens para la salida. Un top-k de 1 significa que el token seleccionado es el más probable entre todos los tokens en el vocabulario del modelo (también llamado decodificación codiciosa), mientras que un top-k de 3 significa que el siguiente token se selecciona entre los 3 tokens más probables (usando temperatura).",
"com_endpoint_google_topp": "Top-p cambia la forma en que el modelo selecciona tokens para la salida. Los tokens se seleccionan desde los más K (ver parámetro topK) probables hasta los menos probables hasta que la suma de sus probabilidades sea igual al valor top-p.",
"com_endpoint_import": "Importar",
"com_endpoint_instructions_assistants": "Anular instrucciones",
"com_endpoint_instructions_assistants_placeholder": "Anula las instrucciones del asistente. Esto es útil para modificar el comportamiento por ejecución.",
"com_endpoint_max_output_tokens": "Tokens de Salida Máximos",
@ -262,7 +261,6 @@
"com_nav_archive_name": "Nombre",
"com_nav_archived_chats": "Archivadas",
"com_nav_archived_chats_empty": "No tienes conversaciones archivadas.",
"com_nav_archived_chats_manage": "Gestionar",
"com_nav_at_command": "Comando @",
"com_nav_at_command_description": "Alternar comando \"@\" para cambiar entre puntos de conexión, modelos, ajustes predefinidos, etc.",
"com_nav_audio_play_error": "Error al reproducir el audio: {{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Idioma",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "Voz y habla",
"com_nav_settings": "Configuración",
"com_nav_shared_links": "Links Compartidos",
"com_nav_shared_links_manage": "Gerenciar",
"com_nav_show_code": "Mostrar siempre el código cuando se use el intérprete de código",
"com_nav_slash_command": "Comando /",
"com_nav_slash_command_description": "Alternar comando '/' para seleccionar un mensaje predefinido mediante el teclado",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "¡Es mi primer cumpleaños!",
"com_ui_host": "Host",
"com_ui_image_gen": "Gen Imágenes",
"com_ui_import_conversation": "Importar",
"com_ui_import_conversation_error": "Hubo un error al importar tus chats",
"com_ui_import_conversation_file_type_error": "com_ui_import_conversation_file_type_error: Tipo de archivo no compatible para importar",
"com_ui_import_conversation_info": "Importar chats de un archivo JSON",

View file

@ -0,0 +1,796 @@
{
"chat_direction_left_to_right": "Joonda vestlus vasakult paremale.",
"chat_direction_right_to_left": "Joonda vestlus paremalt vasakule.",
"com_a11y_ai_composing": "AI genereerib vastust.",
"com_a11y_end": "AI on oma vastuse lõpetanud.",
"com_a11y_start": "AI on oma vastuse andmise alustanud.",
"com_agents_allow_editing": "Luba teistel kasutajatel sinu agenti muuta",
"com_agents_by_librechat": "LibreChatilt",
"com_agents_code_interpreter": "Kui see on lubatud, saab sinu agent kasutada LibreChati koodiinterpreteerimise API-t genereeritud koodi turvaliseks käivitamiseks, sealhulgas failide töötlemiseks. Vajalik on kehtiv API võti.",
"com_agents_code_interpreter_title": "Koodiinterpreteerimise API",
"com_agents_create_error": "Agendi loomisel tekkis viga.",
"com_agents_description_placeholder": "Valikuline: Kirjelda oma agenti siin",
"com_agents_enable_file_search": "Luba failiotsing",
"com_agents_file_search_disabled": "Agent tuleb luua enne failide üleslaadimist failiotsinguks.",
"com_agents_file_search_info": "Kui see on lubatud, teavitatakse agenti täpselt allpool loetletud failinimedest, mis võimaldab tal nendest failidest asjakohast konteksti hankida.",
"com_agents_instructions_placeholder": "Süsteemijuhised, mida agent kasutab",
"com_agents_missing_provider_model": "Enne agendi loomist valige teenusepakkuja ja mudel.",
"com_agents_name_placeholder": "Valikuline: Agendi nimi",
"com_agents_no_access": "Sul pole õigust seda agenti muuta.",
"com_agents_not_available": "Agent pole saadaval",
"com_agents_search_name": "Otsi agente nime järgi",
"com_agents_update_error": "Agendi uuendamisel tekkis viga.",
"com_assistants_action_attempt": "Assistent soovib suhelda: {{0}}",
"com_assistants_actions": "Tegevused",
"com_assistants_actions_disabled": "Enne tegevuste lisamist peate looma assistendi.",
"com_assistants_actions_info": "Lubage oma assistendil API-de kaudu teavet hankida või toiminguid teha",
"com_assistants_add_actions": "Lisa tegevusi",
"com_assistants_add_tools": "Lisa tööriistu",
"com_assistants_allow_sites_you_trust": "Luba ainult usaldusväärseid saite.",
"com_assistants_append_date": "Lisa praegune kuupäev ja kellaaeg",
"com_assistants_append_date_tooltip": "Kui see on lubatud, lisatakse praegune kliendi kuupäev ja kellaaeg assistendi süsteemijuhistele.",
"com_assistants_attempt_info": "Assistent soovib saata järgmist:",
"com_assistants_available_actions": "Saadaolevad tegevused",
"com_assistants_capabilities": "Võimed",
"com_assistants_code_interpreter": "Koodiinterpreteerija",
"com_assistants_code_interpreter_files": "Allpool olevad failid on ainult koodiinterpreteerijale:",
"com_assistants_code_interpreter_info": "Koodiinterpreteerija võimaldab assistendil kirjutada ja käivitada koodi. See tööriist saab töödelda mitmekesise andmestruktuuri ja vorminguga faile ning genereerida faile, näiteks graafikuid.",
"com_assistants_completed_action": "Suhtles {{0}}",
"com_assistants_completed_function": "Käivitas {{0}}",
"com_assistants_conversation_starters": "Vestluse alustajad",
"com_assistants_conversation_starters_placeholder": "Sisesta vestluse alustaja",
"com_assistants_create_error": "Assistendi loomisel tekkis viga.",
"com_assistants_create_success": "Loomine õnnestus",
"com_assistants_delete_actions_error": "Tegevuse kustutamisel tekkis viga.",
"com_assistants_delete_actions_success": "Tegevuse kustutamine assistendilt õnnestus",
"com_assistants_description_placeholder": "Valikuline: Kirjelda oma assistenti siin",
"com_assistants_domain_info": "Assistent saatis selle teabe aadressile {{0}}",
"com_assistants_file_search": "Failiotsing",
"com_assistants_file_search_info": "Failiotsing võimaldab assistendil kasutada teadmisi failidest, mille sina või sinu kasutajad üles laadite. Kui fail on üles laaditud, otsustab assistent automaatselt, millal kasutajate päringute põhjal sisu hankida. Vektorhoidlate lisamine failiotsinguks pole veel toetatud. Saate neid lisada teenusepakkuja mänguväljakult või lisada faile sõnumitele, et neid lõimes failiotsinguks kasutada.",
"com_assistants_function_use": "Assistent kasutas {{0}}",
"com_assistants_image_vision": "Pildi nägemine",
"com_assistants_instructions_placeholder": "Süsteemijuhised, mida assistent kasutab",
"com_assistants_knowledge": "Teadmised",
"com_assistants_knowledge_disabled": "Enne failide teadmistena üleslaadimist tuleb assistent luua ning koodiinterpreteerija või otsing lubada ja salvestada.",
"com_assistants_knowledge_info": "Kui laadite faile üles jaotise Teadmised alla, võivad vestlused teie assistendiga sisaldada failide sisu.",
"com_assistants_max_starters_reached": "Vestluse alustajate maksimaalne arv on saavutatud",
"com_assistants_name_placeholder": "Valikuline: Assistendi nimi",
"com_assistants_non_retrieval_model": "Selles mudelis pole failiotsing lubatud. Valige mõni muu mudel.",
"com_assistants_retrieval": "Otsing",
"com_assistants_running_action": "Käivitatakse tegevust",
"com_assistants_search_name": "Otsi assistente nime järgi",
"com_assistants_update_actions_error": "Tegevuse loomisel või uuendamisel tekkis viga.",
"com_assistants_update_actions_success": "Tegevuse loomine või uuendamine õnnestus",
"com_assistants_update_error": "Assistendi uuendamisel tekkis viga.",
"com_assistants_update_success": "Uuendamine õnnestus",
"com_auth_already_have_account": "Sul on juba konto?",
"com_auth_apple_login": "Logi sisse Apple'iga",
"com_auth_back_to_login": "Tagasi sisselogimisele",
"com_auth_click": "Vajuta",
"com_auth_click_here": "Vajuta siia",
"com_auth_continue": "Jätka",
"com_auth_create_account": "Loo oma konto",
"com_auth_discord_login": "Jätka Discordiga",
"com_auth_email": "E-post",
"com_auth_email_address": "E-posti aadress",
"com_auth_email_max_length": "E-post ei tohiks olla pikem kui 120 tähemärki",
"com_auth_email_min_length": "E-post peab olema vähemalt 6 tähemärki",
"com_auth_email_pattern": "Sa pead sisestama kehtiva e-posti aadressi",
"com_auth_email_required": "E-post on kohustuslik",
"com_auth_email_resend_link": "Saada e-kiri uuesti",
"com_auth_email_resent_failed": "E-kirja uuesti saatmine ebaõnnestus",
"com_auth_email_resent_success": "Kinnituskiri saadeti edukalt uuesti",
"com_auth_email_verification_failed": "E-posti kinnitamine ebaõnnestus",
"com_auth_email_verification_failed_token_missing": "Kinnitamine ebaõnnestus, tunnus puudub",
"com_auth_email_verification_in_progress": "Sinu e-posti kinnitamine, palun oota",
"com_auth_email_verification_invalid": "Vigane e-posti kinnitus",
"com_auth_email_verification_redirecting": "Suunatakse ümber {{0}} sekundi pärast...",
"com_auth_email_verification_resend_prompt": "Kas sa ei saanud e-kirja?",
"com_auth_email_verification_success": "E-post kinnitatud",
"com_auth_error_create": "Konto registreerimisel tekkis viga. Proovige uuesti.",
"com_auth_error_invalid_reset_token": "See parooli lähtestamise tunnus pole enam kehtiv.",
"com_auth_error_login": "Sisselogimine esitatud teabega ei õnnestu. Palun kontrolli oma andmeid ja proovi uuesti.",
"com_auth_error_login_ban": "Sinu konto on ajutiselt blokeeritud meie teenuse rikkumiste tõttu.",
"com_auth_error_login_rl": "Liiga palju sisselogimiskatseid lühikese aja jooksul. Palun proovi hiljem uuesti.",
"com_auth_error_login_server": "Tekkis sisemine serveriviga. Palun oota hetk ja proovi uuesti.",
"com_auth_error_login_unverified": "Sinu kontot pole veel kinnitatud. Palun leia kinnituslink enda e-postist.",
"com_auth_facebook_login": "Jätka Facebookiga",
"com_auth_full_name": "Täisnimi",
"com_auth_github_login": "Jätka Githubiga",
"com_auth_google_login": "Jätka Google'iga",
"com_auth_here": "SIIA",
"com_auth_login": "Logi sisse",
"com_auth_login_with_new_password": "Nüüd saad sisse logida oma uue parooliga.",
"com_auth_name_max_length": "Nimi peab olema vähem kui 80 tähemärki",
"com_auth_name_min_length": "Nimi peab olema vähemalt 3 tähemärki",
"com_auth_name_required": "Nimi on kohustuslik",
"com_auth_no_account": "Sul pole kontot?",
"com_auth_password": "Parool",
"com_auth_password_confirm": "Kinnita parool",
"com_auth_password_forgot": "Unustasid parooli?",
"com_auth_password_max_length": "Parool peab olema vähem kui 128 tähemärki",
"com_auth_password_min_length": "Parool peab olema vähemalt 8 tähemärki",
"com_auth_password_not_match": "Paroolid ei ühti",
"com_auth_password_required": "Parool on kohustuslik",
"com_auth_registration_success_generic": "Palun vaata oma e-posti, et oma e-posti aadress kinnitada.",
"com_auth_registration_success_insecure": "Registreerimine õnnestus.",
"com_auth_reset_password": "Lähtesta oma parool",
"com_auth_reset_password_if_email_exists": "Kui selle e-postiga konto on olemas, on saadetud parooli lähtestamise juhistega e-kiri. Palun kontrolli oma rämpsposti kausta.",
"com_auth_reset_password_link_sent": "E-kiri saadetud",
"com_auth_reset_password_success": "Parooli lähtestamine õnnestus",
"com_auth_sign_in": "Logi sisse",
"com_auth_sign_up": "Registreeru",
"com_auth_submit_registration": "Saada registreerimine",
"com_auth_to_reset_your_password": "parooli lähtestamiseks.",
"com_auth_to_try_again": "uuesti proovimiseks.",
"com_auth_username": "Kasutajanimi (valikuline)",
"com_auth_username_max_length": "Kasutajanimi peab olema vähem kui 20 tähemärki",
"com_auth_username_min_length": "Kasutajanimi peab olema vähemalt 2 tähemärki",
"com_auth_welcome_back": "Teretulemast tagasi",
"com_click_to_download": "(vajuta siia, et alla laadida)",
"com_download_expired": "(allalaadimine aegunud)",
"com_download_expires": "(vajuta siia, et alla laadida - aegub {{0}})",
"com_endpoint": "Otspunkt",
"com_endpoint_agent": "Agent",
"com_endpoint_agent_model": "Agendi mudel (soovitatav: GPT-3.5)",
"com_endpoint_agent_placeholder": "Palun vali agent",
"com_endpoint_ai": "AI",
"com_endpoint_anthropic_maxoutputtokens": "Maksimaalne märkide arv, mida vastuses genereerida saab. Lühemate vastuste jaoks määrake madalam väärtus ja pikemate vastuste jaoks kõrgem väärtus. Märkus: mudelid võivad peatuda enne selle maksimumi saavutamist.",
"com_endpoint_anthropic_prompt_cache": "Päringu vahemällu salvestamine võimaldab suurt konteksti või juhiseid API-kõnede vahel uuesti kasutada, vähendades kulusid ja latentsust",
"com_endpoint_anthropic_temp": "Vahemikus 0 kuni 1. Kasutage analüütiliste / valikvastustega küsimuste puhul väärtust, mis on lähemal 0-le, ning loominguliste ja genereerivate ülesannete puhul väärtust, mis on lähemal 1-le. Soovitame muuta kas seda või Top P-d, aga mitte mõlemat.",
"com_endpoint_anthropic_topk": "Top-k muudab seda, kuidas mudel valib väljundi jaoks märgid. Top-k väärtus 1 tähendab, et valitud märk on kõige tõenäolisem kõigi mudeli sõnavaras olevate märkide seas (nimetatakse ka ahneks dekodeerimiseks), samas kui top-k väärtus 3 tähendab, et järgmine märk valitakse 3 kõige tõenäolisema märgi seast (kasutades temperatuuri).",
"com_endpoint_anthropic_topp": "Top-p muudab seda, kuidas mudel valib väljundi jaoks märgid. Märgid valitakse kõige tõenäolisemast K (vt parameetrit topK) kuni vähim tõenäoliseni, kuni nende tõenäosuste summa on võrdne top-p väärtusega.",
"com_endpoint_assistant": "Assistent",
"com_endpoint_assistant_model": "Assistendi mudel",
"com_endpoint_assistant_placeholder": "Palun vali assistent parempoolsest külgpaneelist",
"com_endpoint_completion": "Lõpetamine",
"com_endpoint_completion_model": "Lõpetamise mudel (soovitatav: GPT-4)",
"com_endpoint_config_click_here": "Klõpsa siia",
"com_endpoint_config_google_api_info": "Et saada oma Generative Language API võtit (Gemini jaoks),",
"com_endpoint_config_google_api_key": "Google API võti",
"com_endpoint_config_google_cloud_platform": "(Google Cloud Platformilt)",
"com_endpoint_config_google_gemini_api": "(Gemini API)",
"com_endpoint_config_google_service_key": "Google'i teenusekonto võti",
"com_endpoint_config_key": "Määra API võti",
"com_endpoint_config_key_encryption": "Sinu võti krüpteeritakse ja kustutatakse",
"com_endpoint_config_key_for": "Määra API võti",
"com_endpoint_config_key_google_need_to": "Sa pead",
"com_endpoint_config_key_google_service_account": "Loo teenusekonto",
"com_endpoint_config_key_google_vertex_ai": "Luba Vertex AI",
"com_endpoint_config_key_google_vertex_api": "API Google Cloudis, seejärel",
"com_endpoint_config_key_google_vertex_api_role": "Veenduge, et klõpsate 'Loo ja jätka', et anda vähemalt roll 'Vertex AI kasutaja'. Lõpuks looge siia importimiseks JSON-võti.",
"com_endpoint_config_key_import_json_key": "Impordi teenusekonto JSON-võti.",
"com_endpoint_config_key_import_json_key_invalid": "Vigane teenusekonto JSON-võti, kas importisite õige faili?",
"com_endpoint_config_key_import_json_key_success": "Teenusekonto JSON-võtme importimine õnnestus",
"com_endpoint_config_key_name": "Võti",
"com_endpoint_config_key_never_expires": "Sinu võti ei aegu kunagi",
"com_endpoint_config_placeholder": "Määra oma võti päise menüüs vestlemiseks.",
"com_endpoint_config_value": "Sisesta väärtus",
"com_endpoint_context": "Kontekst",
"com_endpoint_context_info": "Maksimaalne märkide arv, mida konteksti jaoks kasutada saab. Kasutage seda selleks, et kontrollida, mitu märki taotluse kohta saadetakse. Kui seda pole määratud, kasutatakse süsteemi vaikesätteid, mis põhinevad teadaolevate mudelite konteksti suurusel. Kõrgemate väärtuste määramine võib põhjustada vigu ja/või suuremaid märgikulusid.",
"com_endpoint_context_tokens": "Maksimum kontekstimärgid",
"com_endpoint_custom_name": "Kohandatud nimi",
"com_endpoint_default": "vaikimisi",
"com_endpoint_default_blank": "vaikimisi: tühi",
"com_endpoint_default_empty": "vaikimisi: tühi",
"com_endpoint_default_with_num": "vaikimisi: {{0}}",
"com_endpoint_examples": "Eelseadistused",
"com_endpoint_export": "Ekspordi",
"com_endpoint_export_share": "Ekspordi/Jaga",
"com_endpoint_frequency_penalty": "Sageduse karistus",
"com_endpoint_func_hover": "Luba pluginate kasutamine OpenAI funktsioonidena",
"com_endpoint_google_custom_name_placeholder": "Määra Google'ile kohandatud nimi",
"com_endpoint_google_maxoutputtokens": "Maksimaalne märkide arv, mida vastuses genereerida saab. Lühemate vastuste jaoks määrake madalam väärtus ja pikemate vastuste jaoks kõrgem väärtus. Märkus: mudelid võivad peatuda enne selle maksimumi saavutamist.",
"com_endpoint_google_temp": "Kõrgemad väärtused = juhuslikum, samas kui madalamad väärtused = keskendunum ja deterministlikum. Soovitame muuta kas seda või Top P-d, aga mitte mõlemat.",
"com_endpoint_google_topk": "Top-k muudab seda, kuidas mudel valib väljundi jaoks märgid. Top-k väärtus 1 tähendab, et valitud märk on kõige tõenäolisem kõigi mudeli sõnavaras olevate märkide seas (nimetatakse ka ahneks dekodeerimiseks), samas kui top-k väärtus 3 tähendab, et järgmine märk valitakse 3 kõige tõenäolisema märgi seast (kasutades temperatuuri).",
"com_endpoint_google_topp": "Top-p muudab seda, kuidas mudel valib väljundi jaoks märgid. Märgid valitakse kõige tõenäolisemast K (vt parameetrit topK) kuni vähim tõenäoliseni, kuni nende tõenäosuste summa on võrdne top-p väärtusega.",
"com_endpoint_instructions_assistants": "Tühista juhised",
"com_endpoint_instructions_assistants_placeholder": "Tühistab assistendi juhised. See on kasulik käitumise muutmiseks käivituse kohta.",
"com_endpoint_max_output_tokens": "Maksimaalsed väljundmärgid",
"com_endpoint_message": "Sõnum",
"com_endpoint_message_new": "Sõnum {{0}}",
"com_endpoint_message_not_appendable": "Muuda oma sõnumit või genereeri uuesti.",
"com_endpoint_my_preset": "Minu eelseadistus",
"com_endpoint_no_presets": "Eelseadistusi pole veel, kasutage ühe loomiseks seadete nuppu",
"com_endpoint_open_menu": "Ava menüü",
"com_endpoint_openai_custom_name_placeholder": "Määra AI-le kohandatud nimi",
"com_endpoint_openai_detail": "Visioonitaotluste eraldusvõime. \"Madal\" on odavam ja kiirem, \"Kõrge\" on detailsem ja kallim ning \"Automaatne\" valib automaatselt kahe vahel vastavalt pildi eraldusvõimele.",
"com_endpoint_openai_freq": "Arv vahemikus -2,0 kuni 2,0. Positiivsed väärtused karistavad uusi märke nende senise sageduse alusel tekstis, vähendades mudeli tõenäosust sama rida sõnasõnaliselt korrata.",
"com_endpoint_openai_max": "Maksimaalsed genereeritavad märgid. Sisendmärkide ja genereeritud märkide kogupikkus on piiratud mudeli konteksti pikkusega.",
"com_endpoint_openai_max_tokens": "Valikuline väli 'max_tokens', mis esindab vestluse lõpetamisel genereeritavate märkide maksimaalset arvu. Sisendmärkide ja genereeritud märkide kogupikkus on piiratud mudelite konteksti pikkusega. Kui see arv ületab maksimaalseid kontekstimärke, võivad tekkida vead.",
"com_endpoint_openai_pres": "Arv vahemikus -2,0 kuni 2,0. Positiivsed väärtused karistavad uusi märke selle alusel, kas need esinevad senises tekstis, suurendades mudeli tõenäosust rääkida uutest teemadest.",
"com_endpoint_openai_prompt_prefix_placeholder": "Määra kohandatud juhised süsteemiteatesse lisamiseks. Vaikimisi: puudub",
"com_endpoint_openai_reasoning_effort": "Ainult o1 mudelid: piirab põhjendusmudelite põhjendustegevust. Põhjendustegevuse vähendamine võib tuua kaasa kiiremad vastused ja vähem põhjendamiseks kasutatud märke vastuses.",
"com_endpoint_openai_resend": "Saada kõik varem lisatud pildid uuesti. Märkus: see võib märgikulusid oluliselt suurendada ja paljude pildimanustega võivad tekkida vead.",
"com_endpoint_openai_resend_files": "Saada kõik varem lisatud failid uuesti. Märkus: see suurendab märgikulusid ja paljude manustega võivad tekkida vead.",
"com_endpoint_openai_stop": "Kuni 4 järjestust, mille korral API lõpetab täiendavate märkide genereerimise.",
"com_endpoint_openai_temp": "Kõrgemad väärtused = juhuslikum, samas kui madalamad väärtused = keskendunum ja deterministlikum. Soovitame muuta kas seda või Top P-d, aga mitte mõlemat.",
"com_endpoint_openai_topp": "Alternatiiviks temperatuuriga näidiste võtmisele on tuumaproovide võtmine, kus mudel arvestab märkide tulemustega, millel on top_p tõenäosuse mass. Seega 0,1 tähendab, et arvesse võetakse ainult märke, mis moodustavad 10% suurima tõenäosusega massi. Soovitame muuta kas seda või temperatuuri, aga mitte mõlemat.",
"com_endpoint_output": "Väljund",
"com_endpoint_plug_image_detail": "Pildi detailid",
"com_endpoint_plug_resend_files": "Saada failid uuesti",
"com_endpoint_plug_set_custom_instructions_for_gpt_placeholder": "Määra kohandatud juhised süsteemiteatesse lisamiseks. Vaikimisi: puudub",
"com_endpoint_plug_skip_completion": "Jäta lõpetamine vahele",
"com_endpoint_plug_use_functions": "Kasuta funktsioone",
"com_endpoint_presence_penalty": "Olekukaristus",
"com_endpoint_preset": "eelseadistus",
"com_endpoint_preset_custom_name_placeholder": "Otspunkti kohandatud nimi.",
"com_endpoint_preset_default": "on nüüd vaike-eelseadistus.",
"com_endpoint_preset_default_item": "Vaikimisi:",
"com_endpoint_preset_default_none": "Vaikimisi eelseadistus pole aktiivne.",
"com_endpoint_preset_default_removed": "pole enam vaike-eelseadistus.",
"com_endpoint_preset_delete_confirm": "Oled sa kindel, et sa soovid selle eelseadistuse kustutada?",
"com_endpoint_preset_delete_error": "Eelseadistuse kustutamisel tekkis viga. Palun proovi uuesti.",
"com_endpoint_preset_import": "Eelseadistus imporditud!",
"com_endpoint_preset_import_error": "Eelseadistuse importimisel tekkis viga. Palun proovi uuesti.",
"com_endpoint_preset_name": "Eelseadistuse nimi",
"com_endpoint_preset_save_error": "Eelseadistuse salvestamisel tekkis viga. Palun proovi uuesti.",
"com_endpoint_preset_selected": "Eelseadistus aktiivne!",
"com_endpoint_preset_selected_title": "Aktiivne!",
"com_endpoint_preset_title": "Eelseadistus",
"com_endpoint_presets": "eelseadistused",
"com_endpoint_presets_clear_warning": "Oled sa kindel, et sa soovid kõik eelseadistused kustutada? See on pöördumatu.",
"com_endpoint_prompt_cache": "Kasuta päringu vahemällu salvestamist",
"com_endpoint_prompt_prefix": "Kohandatud juhised",
"com_endpoint_prompt_prefix_assistants": "Täiendavad juhised",
"com_endpoint_prompt_prefix_assistants_placeholder": "Määra täiendavad juhised või kontekst lisaks assistendi peamistele juhistele. Kui see on tühi, ignoreeritakse seda.",
"com_endpoint_prompt_prefix_placeholder": "Määra kohandatud juhised või kontekst. Kui see on tühi, ignoreeritakse seda.",
"com_endpoint_reasoning_effort": "Põhjendustegevus",
"com_endpoint_save_as_preset": "Salvesta eelseadistusena",
"com_endpoint_search": "Otsi otspunkti nime järgi",
"com_endpoint_set_custom_name": "Määra kohandatud nimi, juhuks kui sa selle eelseadistuse leiad",
"com_endpoint_skip_hover": "Luba lõpetamise etapi vahelejätmine, mis vaatab üle lõpliku vastuse ja genereeritud sammud",
"com_endpoint_stop": "Peatamise järjestused",
"com_endpoint_stop_placeholder": "Eralda väärtused, vajutades `Enter`",
"com_endpoint_temperature": "Temperatuur",
"com_endpoint_top_k": "Top K",
"com_endpoint_top_p": "Top P",
"com_endpoint_use_active_assistant": "Kasuta aktiivset assistenti",
"com_error_expired_user_key": "Esitatud võti {{0}} aegus {{1}}. Esitage uus võti ja proovige uuesti.",
"com_error_files_dupe": "Leiti duplikaatfail.",
"com_error_files_empty": "Tühjad failid pole lubatud.",
"com_error_files_process": "Faili töötlemisel tekkis viga.",
"com_error_files_unsupported_capability": "Ühtegi seda failitüüpi toetavat võimalust pole lubatud.",
"com_error_files_upload": "Faili üleslaadimisel tekkis viga.",
"com_error_files_upload_canceled": "Faili üleslaadimise taotlus tühistati. Märkus: faili üleslaadimine võib endiselt olla pooleli ja see tuleb käsitsi kustutada.",
"com_error_files_validation": "Faili valideerimisel tekkis viga.",
"com_error_input_length": "Viimase sõnumi märkide arv on liiga pikk, ületades märkide limiidi (vastavalt {{0}}). Palun lühendage oma sõnumit, kohandage vestluse parameetrites maksimaalset konteksti suurust või jätkamiseks hargnege vestlus.",
"com_error_invalid_user_key": "Esitati vigane võti. Esitage kehtiv võti ja proovige uuesti.",
"com_error_moderation": "Tundub, et esitatud sisu on meie modereerimissüsteemi poolt märgistatud kui meie kogukonna juhistega mitte vastav. Me ei saa selle konkreetse teemaga jätkata. Kui teil on muid küsimusi või teemasid, mida soovite uurida, muutke oma sõnumit või looge uus vestlus.",
"com_error_no_base_url": "Baasaadressi ei leitud. Palun lisage see ja proovige uuesti.",
"com_error_no_user_key": "Võtit ei leitud. Palun sisestage võti ja proovige uuesti.",
"com_files_filter": "Filtreeri faile...",
"com_files_no_results": "Tulemusi pole.",
"com_files_number_selected": "{{0}} / {{1}} üksust valitud",
"com_files_table": "Failide tabel",
"com_generated_files": "Genereeritud failid:",
"com_hide_examples": "Peida näited",
"com_nav_account_settings": "Konto seaded",
"com_nav_always_make_prod": "Tee uued versioonid alati toodangusse",
"com_nav_archive_created_at": "Arhiveerimise kuupäev",
"com_nav_archive_name": "Nimi",
"com_nav_archived_chats": "Arhiveeritud vestlused",
"com_nav_archived_chats_empty": "Sul ei ole arhiveeritud vestlusi.",
"com_nav_at_command": "@-käsk",
"com_nav_at_command_description": "Lülita käsk \"@\" sisse/välja lõpp-punktide, mudelite, eelseadistuste jms vahetamiseks.",
"com_nav_audio_play_error": "Viga heli esitamisel: {{0}}",
"com_nav_audio_process_error": "Viga heli töötlemisel: {{0}}",
"com_nav_auto_scroll": "Automaatne kerimine vestluse avamisel viimase sõnumini",
"com_nav_auto_send_prompts": "Saada vihjed automaatselt",
"com_nav_auto_send_text": "Saada tekst automaatselt",
"com_nav_auto_send_text_disabled": "Keelamiseks määra -1",
"com_nav_auto_transcribe_audio": "Transkribeeri heli automaatselt",
"com_nav_automatic_playback": "Esita viimane sõnum automaatselt",
"com_nav_balance": "Saldo",
"com_nav_browser": "Brauser",
"com_nav_buffer_append_error": "Probleem heli voogedastusega. Taasesitus võib katkeda.",
"com_nav_change_picture": "Muuda pilti",
"com_nav_chat_commands": "Vestluskäsud",
"com_nav_chat_commands_info": "Need käsud aktiveeritakse konkreetsete märkide sisestamisel sõnumi alguses. Iga käsk käivitatakse sellele määratud eesliitega. Saate need keelata, kui kasutate neid märke sageli sõnumite alustamiseks.",
"com_nav_chat_direction": "Vestluse suund",
"com_nav_clear_all_chats": "Tühjenda kõik vestlused",
"com_nav_clear_cache_confirm_message": "Oled sa kindel, et sa soovid vahemälu tühjendada?",
"com_nav_clear_conversation": "Tühjenda vestlused",
"com_nav_clear_conversation_confirm_message": "Oled sa kindel, et sa soovid kõik vestlused tühjendada? See on pöördumatu.",
"com_nav_close_sidebar": "Sulge külgriba",
"com_nav_commands": "Käsud",
"com_nav_confirm_clear": "Kinnita tühjendamine",
"com_nav_conversation_mode": "Vestlusrežiim",
"com_nav_convo_menu_options": "Vestluse menüü valikud",
"com_nav_db_sensitivity": "Detsibelli tundlikkus",
"com_nav_delete_account": "Kustuta konto",
"com_nav_delete_account_button": "Kustuta minu konto jäädavalt",
"com_nav_delete_account_confirm": "Kustuta konto - oled sa kindel?",
"com_nav_delete_account_email_placeholder": "Palun sisesta oma konto e-post",
"com_nav_delete_cache_storage": "Kustuta TTS vahemälu",
"com_nav_delete_data_info": "Kõik sinu andmed kustutatakse.",
"com_nav_delete_warning": "HOIATUS: See kustutab sinu konto jäädavalt.",
"com_nav_edge": "Edge",
"com_nav_enable_cache_tts": "Luba TTS vahemälu",
"com_nav_enable_cloud_browser_voice": "Kasuta pilvepõhiseid hääli",
"com_nav_enabled": "Lubatud",
"com_nav_engine": "Mootor",
"com_nav_enter_to_send": "Vajuta Enter sõnumite saatmiseks",
"com_nav_export": "Ekspordi",
"com_nav_export_all_message_branches": "Ekspordi kõik sõnumite harud",
"com_nav_export_conversation": "Ekspordi vestlus",
"com_nav_export_filename": "Failinimi",
"com_nav_export_filename_placeholder": "Määra failinimi",
"com_nav_export_include_endpoint_options": "Kaasa otspunkti valikud",
"com_nav_export_recursive": "Rekursiivne",
"com_nav_export_recursive_or_sequential": "Rekursiivne või järjestikune?",
"com_nav_export_type": "Tüüp",
"com_nav_external": "Väline",
"com_nav_font_size": "Sõnumi fondi suurus",
"com_nav_font_size_base": "Keskmine",
"com_nav_font_size_lg": "Suur",
"com_nav_font_size_sm": "Väike",
"com_nav_font_size_xl": "Eriti suur",
"com_nav_font_size_xs": "Eriti väike",
"com_nav_help_faq": "Abi ja KKK",
"com_nav_hide_panel": "Peida kõige parempoolsem külgpaneel",
"com_nav_info_code_artifacts": "Võimaldab katsetuslike koodiartefaktide kuvamist vestluse kõrval",
"com_nav_info_code_artifacts_agent": "Võimaldab selle agendi jaoks koodiartefaktide kasutamist. Vaikimisi lisatakse artefaktide kasutamisele spetsiifilised täiendavad juhised, välja arvatud juhul, kui on lubatud \"Kohandatud viiparežiim\".",
"com_nav_info_custom_prompt_mode": "Kui see on lubatud, siis vaikimisi artefaktide süsteemiviipa ei lisata. Kõik artefakte genereerivad juhised tuleb selles režiimis käsitsi esitada.",
"com_nav_info_enter_to_send": "Kui see on lubatud, saadab `ENTER` sõnumi. Kui see on keelatud, lisab Enter uue rea ja sõnumi saatmiseks peate vajutama `CTRL + ENTER` / `⌘ + ENTER`.",
"com_nav_info_fork_change_default": "`Ainult nähtavad sõnumid` sisaldab ainult otsest teed valitud sõnumini. `Kaasa seotud harud` lisab harud mööda teed. `Kaasa kõik siia/siit` sisaldab kõiki ühendatud sõnumeid ja harusid.",
"com_nav_info_fork_split_target_setting": "Kui see on lubatud, algab hargnemine sihtsõnumist vestluse viimase sõnumini vastavalt valitud käitumisele.",
"com_nav_info_include_shadcnui": "Kui see on lubatud, siis lisatakse juhised shadcn/ui komponentide kasutamiseks. shadcn/ui on Radix UI ja Tailwind CSS-i abil loodud taaskasutatavate komponentide kogu. Märkus: need on pikad juhised, peaksid lubama ainult siis, kui LLM-i õigete importide ja komponentide teavitamine on sinu jaoks oluline. Nende komponentide kohta lisateabe saamiseks külastage: https://ui.shadcn.com/",
"com_nav_info_latex_parsing": "Kui see on lubatud, renderdatakse sõnumites olev LaTeX-kood matemaatiliste võrranditena. Selle keelamine võib jõudlust parandada, kui sa LaTeX-i renderdamist ei vaja.",
"com_nav_info_save_draft": "Kui see on lubatud, salvestatakse vestlusvormi sisestatud tekst ja manused automaatselt kohalikult mustanditena. Need mustandid on saadaval ka siis, kui lehe uuesti laadite või teisele vestlusele lülitute. Mustandid salvestatakse lokaalselt sinu seadmesse ja kustutatakse pärast sõnumi saatmist.",
"com_nav_info_show_thinking": "Kui see on lubatud, kuvatakse vestluses vaikimisi avatud mõtlemise rippmenüüd, võimaldades sul AI põhjendusi reaalajas vaadata. Kui see on keelatud, jäävad mõtlemise rippmenüüd vaikimisi suletuks, et saada puhtam ja sujuvam liides",
"com_nav_info_user_name_display": "Kui see on lubatud, kuvatakse saatja kasutajanimi iga sinu saadetud sõnumi kohal. Kui see on keelatud, näed oma sõnumite kohal ainult \"Sina\".",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Tuvasta automaatselt",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
"com_nav_lang_hebrew": "עברית",
"com_nav_lang_indonesia": "Indonesia",
"com_nav_lang_italian": "Italiano",
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Keel",
"com_nav_latex_parsing": "LaTeXi parsimine sõnumites (võib mõjutada jõudlust)",
"com_nav_log_out": "Logi välja",
"com_nav_long_audio_warning": "Pikemate tekstide töötlemine võtab kauem aega.",
"com_nav_maximize_chat_space": "Maksimeeri vestluse ruumi",
"com_nav_modular_chat": "Luba otspunktide vahetamine vestluse keskel",
"com_nav_my_files": "Minu failid",
"com_nav_no_search_results": "Otsingutulemusi ei leitud",
"com_nav_not_supported": "Pole toetatud",
"com_nav_open_sidebar": "Ava külgriba",
"com_nav_playback_rate": "Heli taasesituse kiirus",
"com_nav_plugin_auth_error": "Selle pistikprogrammi autentimisel tekkis viga. Palun proovi uuesti.",
"com_nav_plugin_install": "Paigalda",
"com_nav_plugin_search": "Otsi pistikprogramme",
"com_nav_plugin_store": "Pistikprogrammide pood",
"com_nav_plugin_uninstall": "Eemalda",
"com_nav_plus_command": "+-käsk",
"com_nav_plus_command_description": "Lülita käsk \"+\" sisse/välja mitme vastuse seadistuse lisamiseks",
"com_nav_profile_picture": "Profiilipilt",
"com_nav_save_drafts": "Salvesta mustandid kohalikult",
"com_nav_scroll_button": "Keri nupu lõppu",
"com_nav_search_placeholder": "Otsi sõnumeid",
"com_nav_send_message": "Saada sõnum",
"com_nav_setting_account": "Konto",
"com_nav_setting_beta": "Beeta funktsioonid",
"com_nav_setting_chat": "Vestlus",
"com_nav_setting_data": "Andmekontroll",
"com_nav_setting_general": "Üldine",
"com_nav_setting_speech": "Kõne",
"com_nav_settings": "Seaded",
"com_nav_shared_links": "Jagatud lingid",
"com_nav_show_code": "Näita koodi alati, kui kasutatakse koodiinterpreteerijat",
"com_nav_show_thinking": "Ava mõtlemise rippmenüüd vaikimisi",
"com_nav_slash_command": "/-käsk",
"com_nav_slash_command_description": "Lülita käsk \"/\" sisse/välja, et valida klaviatuuri kaudu viipa",
"com_nav_source_buffer_error": "Viga heli taasesituse seadistamisel. Palun värskenda lehte.",
"com_nav_speech_cancel_error": "Heli taasesitust ei saa peatada. Võib-olla pead lehte värskendama.",
"com_nav_speech_to_text": "Kõnest tekstiks",
"com_nav_stop_generating": "Lõpeta genereerimine",
"com_nav_text_to_speech": "Tekst kõneks",
"com_nav_theme": "Teema",
"com_nav_theme_dark": "Tume",
"com_nav_theme_light": "Hele",
"com_nav_theme_system": "Süsteem",
"com_nav_tool_dialog": "Assistendi tööriistad",
"com_nav_tool_dialog_agents": "Agendi tööriistad",
"com_nav_tool_dialog_description": "Tööriistade valikute säilitamiseks tuleb assistent salvestada.",
"com_nav_tool_remove": "Eemalda",
"com_nav_tool_search": "Otsi tööriistu",
"com_nav_tts_init_error": "Teksti kõneks muutmise initsialiseerimine ebaõnnestus: {{0}}",
"com_nav_tts_unsupported_error": "Valitud mootori tekst kõneks muutmise funktsioon ei ole selles brauseris toetatud.",
"com_nav_user": "KASUTAJA",
"com_nav_user_msg_markdown": "Renderda kasutajasõnumid markdownina",
"com_nav_user_name_display": "Kuva kasutajanimi sõnumites",
"com_nav_voice_select": "Hääl",
"com_nav_voices_fetch_error": "Hääle valikuid ei saanud hankida. Palun kontrolli oma internetiühendust.",
"com_nav_welcome_agent": "Palun vali agent",
"com_nav_welcome_assistant": "Palun vali assistent",
"com_nav_welcome_message": "Kuidas ma saan täna sind aidata?",
"com_show_agent_settings": "Näita agendi seadeid",
"com_show_completion_settings": "Näita lõpetamise seadeid",
"com_show_examples": "Näita näiteid",
"com_sidepanel_agent_builder": "Agendi ehitaja",
"com_sidepanel_assistant_builder": "Assistendi ehitaja",
"com_sidepanel_attach_files": "Lisa faile",
"com_sidepanel_conversation_tags": "Järjehoidjad",
"com_sidepanel_hide_panel": "Peida paneel",
"com_sidepanel_manage_files": "Halda faile",
"com_sidepanel_parameters": "Parameetrid",
"com_sidepanel_select_agent": "Vali agent",
"com_sidepanel_select_assistant": "Vali assistent",
"com_ui_accept": "Nõustun",
"com_ui_add": "Lisa",
"com_ui_add_model_preset": "Lisa mudel või eelseadistus täiendava vastuse jaoks",
"com_ui_add_multi_conversation": "Lisa mitmevestlus",
"com_ui_admin": "Administraator",
"com_ui_admin_access_warning": "Administraatori juurdepääsu keelamine sellele funktsioonile võib põhjustada ootamatuid kasutajaliidese probleeme, mis nõuavad värskendamist. Kui see on salvestatud, on ainus viis taastada liideseseade kaudu librechat.yaml konfiguratsioonis, mis mõjutab kõiki rolle.",
"com_ui_admin_settings": "Administraatori seaded",
"com_ui_advanced": "Täpsemad",
"com_ui_agent": "Agent",
"com_ui_agent_delete_error": "Agendi kustutamisel tekkis viga",
"com_ui_agent_deleted": "Agendi kustutamine õnnestus",
"com_ui_agent_duplicate_error": "Agendi dubleerimisel tekkis viga",
"com_ui_agent_duplicated": "Agendi dubleerimine õnnestus",
"com_ui_agent_editing_allowed": "Teised kasutajad saavad seda agenti juba muuta",
"com_ui_agent_shared_to_all": "Seda agenti on jagatud kõigi kasutajatega",
"com_ui_agents": "Agendid",
"com_ui_agents_allow_create": "Luba agentide loomine",
"com_ui_agents_allow_share_global": "Luba agentide jagamine kõigile kasutajatele",
"com_ui_agents_allow_use": "Luba agentide kasutamine",
"com_ui_all": "kõik",
"com_ui_all_proper": "Kõik",
"com_ui_analyzing": "Analüüsimine",
"com_ui_analyzing_finished": "Analüüs lõpetatud",
"com_ui_api_key": "API võti",
"com_ui_archive": "Arhiveeri",
"com_ui_archive_error": "Vestluse arhiveerimine ebaõnnestus",
"com_ui_artifact_click": "Klõpsa avamiseks",
"com_ui_artifacts": "Artefaktid",
"com_ui_artifacts_toggle": "Lülita artefaktide kasutajaliides sisse/välja",
"com_ui_artifacts_toggle_agent": "Luba artefaktid",
"com_ui_ascending": "Asc",
"com_ui_assistant": "Assistent",
"com_ui_assistant_delete_error": "Assistendi kustutamisel tekkis viga",
"com_ui_assistant_deleted": "Assistendi kustutamine õnnestus",
"com_ui_assistants": "Assistendid",
"com_ui_assistants_output": "Assistentide väljund",
"com_ui_attach_error": "Faili ei saa lisada. Loo või vali vestlus või proovi lehte värskendada.",
"com_ui_attach_error_openai": "Assistendi faile ei saa teistele otspunktidele lisada",
"com_ui_attach_error_size": "Failisuuruse limiit on otspunkti jaoks ületatud:",
"com_ui_attach_error_type": "Otspunkti jaoks toetamatu failitüüp:",
"com_ui_attach_warn_endpoint": "Sobiva tööriista puudumisel võidakse mitte-assistendi faile ignoreerida",
"com_ui_attachment": "Manus",
"com_ui_auth_type": "Autentimise tüüp",
"com_ui_auth_url": "Autentimise URL",
"com_ui_authentication": "Autentimine",
"com_ui_authentication_type": "Autentimise tüüp",
"com_ui_avatar": "Avatar",
"com_ui_azure": "Azure",
"com_ui_back_to_chat": "Tagasi vestlusesse",
"com_ui_back_to_prompts": "Tagasi sisendite juurde",
"com_ui_basic": "Põhiline",
"com_ui_basic_auth_header": "Põhiline autentimise päis",
"com_ui_bearer": "Bearer",
"com_ui_bookmark_delete_confirm": "Oled sa kindel, et sa soovid selle järjehoidja kustutada?",
"com_ui_bookmarks": "Järjehoidjad",
"com_ui_bookmarks_add": "Lisa järjehoidjaid",
"com_ui_bookmarks_add_to_conversation": "Lisa praegusesse vestlusse",
"com_ui_bookmarks_count": "Hulk",
"com_ui_bookmarks_create_error": "Järjehoidja loomisel tekkis viga",
"com_ui_bookmarks_create_exists": "See järjehoidja on juba olemas",
"com_ui_bookmarks_create_success": "Järjehoidja loomine õnnestus",
"com_ui_bookmarks_delete": "Kustuta järjehoidja",
"com_ui_bookmarks_delete_error": "Järjehoidja kustutamisel tekkis viga",
"com_ui_bookmarks_delete_success": "Järjehoidja kustutamine õnnestus",
"com_ui_bookmarks_description": "Kirjeldus",
"com_ui_bookmarks_edit": "Muuda järjehoidjat",
"com_ui_bookmarks_filter": "Filtreeri järjehoidjaid...",
"com_ui_bookmarks_new": "Uus järjehoidja",
"com_ui_bookmarks_title": "Pealkiri",
"com_ui_bookmarks_update_error": "Järjehoidja uuendamisel tekkis viga",
"com_ui_bookmarks_update_success": "Järjehoidja uuendamine õnnestus",
"com_ui_bulk_delete_error": "Jagatud linkide kustutamine ebaõnnestus",
"com_ui_callback_url": "Tagasikutsumise URL",
"com_ui_cancel": "Tühista",
"com_ui_chat": "Vestlus",
"com_ui_chat_history": "Vestluse ajalugu",
"com_ui_clear": "Tühjenda",
"com_ui_clear_all": "Tühjenda kõik",
"com_ui_client_id": "Kliendi ID",
"com_ui_client_secret": "Kliendi saladus",
"com_ui_close": "Sulge",
"com_ui_close_menu": "Sulge menüü",
"com_ui_code": "Kood",
"com_ui_collapse_chat": "Ahenda vestlus",
"com_ui_command_placeholder": "Valikuline: sisesta sisendi jaoks käsk või kasutatakse nime",
"com_ui_command_usage_placeholder": "Vali sisend käsu või nime järgi",
"com_ui_confirm_action": "Kinnita tegevus",
"com_ui_confirm_admin_use_change": "Selle seadistuse muutmine blokeerib juurdepääsu administraatoritele, sealhulgas sinule endale. Oled sa kindel, et sa soovid jätkata?",
"com_ui_confirm_change": "Kinnita muudatus",
"com_ui_context": "Kontekst",
"com_ui_continue": "Jätka",
"com_ui_controls": "Juhtelemendid",
"com_ui_copied": "Kopeeritud!",
"com_ui_copied_to_clipboard": "Kopeeritud lõikepuhvrisse",
"com_ui_copy_code": "Kopeeri kood",
"com_ui_copy_link": "Kopeeri link",
"com_ui_copy_to_clipboard": "Kopeeri lõikepuhvrisse",
"com_ui_create": "Loo",
"com_ui_create_link": "Loo link",
"com_ui_create_prompt": "Loo sisend",
"com_ui_currently_production": "Praegu tootmises",
"com_ui_custom": "Kohandatud",
"com_ui_custom_header_name": "Kohandatud päise nimi",
"com_ui_custom_prompt_mode": "Kohandatud viiparežiim",
"com_ui_dashboard": "Armatuurlaud",
"com_ui_date": "Kuupäev",
"com_ui_date_april": "Aprill",
"com_ui_date_august": "August",
"com_ui_date_december": "Detsember",
"com_ui_date_february": "Veebruar",
"com_ui_date_january": "Jaanuar",
"com_ui_date_july": "Juuli",
"com_ui_date_june": "Juuni",
"com_ui_date_march": "Märts",
"com_ui_date_may": "Mai",
"com_ui_date_november": "November",
"com_ui_date_october": "Oktoober",
"com_ui_date_previous_30_days": "Eelmised 30 päeva",
"com_ui_date_previous_7_days": "Eelmised 7 päeva",
"com_ui_date_september": "September",
"com_ui_date_today": "Täna",
"com_ui_date_yesterday": "Eile",
"com_ui_decline": "Ma ei nõustu",
"com_ui_default_post_request": "Vaikimisi (POST päring)",
"com_ui_delete": "Kustuta",
"com_ui_delete_action": "Kustuta tegevus",
"com_ui_delete_action_confirm": "Oled sa kindel, et sa soovid selle tegevuse kustutada?",
"com_ui_delete_agent_confirm": "Oled sa kindel, et sa soovid selle agendi kustutada?",
"com_ui_delete_assistant_confirm": "Oled sa kindel, et sa soovid selle assistendi kustutada? Seda ei saa tagasi võtta.",
"com_ui_delete_confirm": "See kustutab",
"com_ui_delete_confirm_prompt_version_var": "See kustutab valitud versiooni \"{{0}}\" jaoks. Kui muid versioone ei eksisteeri, kustutatakse sisend.",
"com_ui_delete_conversation": "Kustuta vestlus?",
"com_ui_delete_prompt": "Kustuta sisend?",
"com_ui_delete_shared_link": "Kustuta jagatud link?",
"com_ui_delete_tool": "Kustuta tööriist",
"com_ui_delete_tool_confirm": "Oled sa kindel, et sa soovid selle tööriista kustutada?",
"com_ui_descending": "Desc",
"com_ui_description": "Kirjeldus",
"com_ui_description_placeholder": "Valikuline: sisesta sisendi jaoks kuvatav kirjeldus",
"com_ui_download": "Laadi alla",
"com_ui_download_artifact": "Laadi artefakt alla",
"com_ui_download_error": "Viga faili allalaadimisel. Fail võib olla kustutatud.",
"com_ui_drag_drop": "Lohistage",
"com_ui_dropdown_variables": "Rippmenüü muutujad:",
"com_ui_dropdown_variables_info": "Loo sisendite jaoks kohandatud rippmenüüd: `{{muutuja_nimi:valik1|valik2|valik3}}`",
"com_ui_duplicate": "Dubleeri",
"com_ui_duplication_error": "Vestluse dubleerimisel tekkis viga",
"com_ui_duplication_processing": "Vestlust dubleeritakse...",
"com_ui_duplication_success": "Vestluse dubleerimine õnnestus",
"com_ui_edit": "Muuda",
"com_ui_empty_category": "-",
"com_ui_endpoint": "Otspunkt",
"com_ui_endpoint_menu": "LLM otspunkti menüü",
"com_ui_endpoints_available": "Saadaolevad otspunktid",
"com_ui_enter": "Sisesta",
"com_ui_enter_api_key": "Sisesta API võti",
"com_ui_enter_openapi_schema": "Sisesta siia oma OpenAPI skeem",
"com_ui_enter_var": "Sisesta {{0}}",
"com_ui_error": "Viga",
"com_ui_error_connection": "Viga serveriga ühendamisel, proovi lehte värskendada.",
"com_ui_error_save_admin_settings": "Administraatori seadete salvestamisel tekkis viga.",
"com_ui_examples": "Näited",
"com_ui_export_convo_modal": "Ekspordi vestluse modaal",
"com_ui_field_required": "See väli on kohustuslik",
"com_ui_filter_prompts": "Filtreeri sisendid",
"com_ui_filter_prompts_name": "Filtreeri sisendeid nime järgi",
"com_ui_finance": "Raha",
"com_ui_fork": "Hargne",
"com_ui_fork_all_target": "Kaasa kõik siia/siit",
"com_ui_fork_branches": "Kaasa seotud harud",
"com_ui_fork_change_default": "Vaikimisi hargnemise valik",
"com_ui_fork_default": "Kasuta vaikimisi hargnemise valikut",
"com_ui_fork_error": "Vestluse hargnemisel tekkis viga",
"com_ui_fork_from_message": "Vali hargnemise valik",
"com_ui_fork_info_1": "Kasuta seda seadistust sõnumite hargnemiseks soovitud käitumisega.",
"com_ui_fork_info_2": "\"Hargnemine\" viitab uue vestluse loomisele, mis algab/lõpeb praeguse vestluse konkreetsetest sõnumitest, luues koopia vastavalt valitud valikutele.",
"com_ui_fork_info_3": "\"Sihtsõnum\" viitab kas sõnumile, millest see hüpikaken avati, või, kui märgid \"{{0}}\", vestluse viimasele sõnumile.",
"com_ui_fork_info_branches": "See valik hargneb nähtavad sõnumid koos seotud harudega; teisisõnu, otsene tee sihtsõnumini, sealhulgas harud mööda teed.",
"com_ui_fork_info_remember": "Märgi see, et jätta meelde valitud valikud edaspidiseks kasutamiseks, muutes vestluste hargnemise eelistatud viisil kiiremaks.",
"com_ui_fork_info_start": "Kui see on märgitud, algab hargnemine sellest sõnumist vestluse viimase sõnumini vastavalt ülalvalitud käitumisele.",
"com_ui_fork_info_target": "See valik hargneb kõik sõnumid, mis viivad sihtsõnumini, kaasa arvatud selle naabrid; teisisõnu, kõik sõnumiharud, olenemata sellest, kas need on nähtavad või samal teel, on kaasatud.",
"com_ui_fork_info_visible": "See valik hargneb ainult nähtavad sõnumid; teisisõnu, otsene tee sihtsõnumini, ilma harudeta.",
"com_ui_fork_processing": "Vestlust hargnetakse...",
"com_ui_fork_remember": "Jäta meelde",
"com_ui_fork_remember_checked": "Sinu valik jäetakse pärast kasutamist meelde. Muuda seda igal ajal seadetes.",
"com_ui_fork_split_target": "Alusta hargnemist siit",
"com_ui_fork_split_target_setting": "Alusta vaikimisi sihtsõnumist hargnemist",
"com_ui_fork_success": "Vestluse hargnemine õnnestus",
"com_ui_fork_visible": "Ainult nähtavad sõnumid",
"com_ui_global_group": "Ülene grupp",
"com_ui_go_back": "Mine tagasi",
"com_ui_go_to_conversation": "Mine vestlusesse",
"com_ui_happy_birthday": "Mul on 1. sünnipäev!",
"com_ui_hide_qr": "Peida QR-kood",
"com_ui_host": "Host",
"com_ui_idea": "Ideed",
"com_ui_image_gen": "Pildi genereerimine",
"com_ui_import_conversation_error": "Vestluste importimisel tekkis viga",
"com_ui_import_conversation_file_type_error": "Toetamatu imporditüüp",
"com_ui_import_conversation_info": "Impordi vestlused JSON-failist",
"com_ui_import_conversation_success": "Vestluste importimine õnnestus",
"com_ui_include_shadcnui": "Kaasa shadcn/ui komponentide juhised",
"com_ui_include_shadcnui_agent": "Kaasa shadcn/ui juhised",
"com_ui_input": "Sisend",
"com_ui_instructions": "Juhised",
"com_ui_latest_footer": "Igaühele oma AI.",
"com_ui_latest_production_version": "Viimane tootmisversioon",
"com_ui_latest_version": "Viimane versioon",
"com_ui_librechat_code_api_key": "Hangi oma LibreChati koodiinterpreteerimise API võti",
"com_ui_librechat_code_api_subtitle": "Turvaline. Mitmekeelne. Sisend-/väljundfailid.",
"com_ui_librechat_code_api_title": "Käivita AI koodi",
"com_ui_llm_menu": "LLM menüü",
"com_ui_llms_available": "Saadaolevad LLM-id",
"com_ui_loading": "Laeb...",
"com_ui_locked": "Lukus",
"com_ui_logo": "{{0}} logo",
"com_ui_manage": "Halda",
"com_ui_max_tags": "Maksimaalne lubatud arv on {{0}}, kasutades viimaseid väärtusi.",
"com_ui_mention": "Maini otspunkti, assistenti või eelseadistust, et sellele kiiresti üle minna",
"com_ui_min_tags": "Rohkem väärtusi ei saa eemaldada, vaja on vähemalt {{0}}.",
"com_ui_misc": "Muu",
"com_ui_model": "Mudel",
"com_ui_model_parameters": "Mudeli parameetrid",
"com_ui_more_info": "Rohkem infot",
"com_ui_my_prompts": "Minu sisendid",
"com_ui_name": "Nimi",
"com_ui_new_chat": "Uus vestlus",
"com_ui_next": "Järgmine",
"com_ui_no": "Ei",
"com_ui_no_bookmarks": "Tundub, et sul pole veel järjehoidjaid. Klõpsa vestlusele ja lisa uus",
"com_ui_no_category": "Kategooriat pole",
"com_ui_no_changes": "Uuendamiseks pole muudatusi",
"com_ui_no_data": "Andmed puuduvad!",
"com_ui_no_terms_content": "Kuvamiseks puudub kasutustingimuste sisu",
"com_ui_no_valid_items": "Sobivad üksused puuduvad!",
"com_ui_none": "Puudub",
"com_ui_none_selected": "Ühtegi pole valitud",
"com_ui_nothing_found": "Midagi ei leitud",
"com_ui_oauth": "OAuth",
"com_ui_of": "kohta",
"com_ui_off": "Väljas",
"com_ui_on": "Sees",
"com_ui_openai": "OpenAI",
"com_ui_page": "Leht",
"com_ui_prev": "Eelmine",
"com_ui_preview": "Eelvaade",
"com_ui_privacy_policy": "Privaatsuspoliitika",
"com_ui_privacy_policy_url": "Privaatsuspoliitika URL",
"com_ui_prompt": "Sisend",
"com_ui_prompt_already_shared_to_all": "See sisend on juba kõigile kasutajatele jagatud",
"com_ui_prompt_name": "Sisendi nimi",
"com_ui_prompt_name_required": "Sisendi nimi on kohustuslik",
"com_ui_prompt_preview_not_shared": "Autor ei ole selle sisendi jaoks koostööd lubanud.",
"com_ui_prompt_text": "Tekst",
"com_ui_prompt_text_required": "Tekst on kohustuslik",
"com_ui_prompt_update_error": "Sisendi uuendamisel tekkis viga",
"com_ui_prompts": "Sisendid",
"com_ui_prompts_allow_create": "Luba sisendite loomine",
"com_ui_prompts_allow_share_global": "Luba sisendite jagamine kõigile kasutajatele",
"com_ui_prompts_allow_use": "Luba sisendite kasutamine",
"com_ui_provider": "Teenusepakkuja",
"com_ui_read_aloud": "Loe valjusti",
"com_ui_refresh_link": "Värskenda linki",
"com_ui_regenerate": "Genereeri uuesti",
"com_ui_region": "Piirkond",
"com_ui_rename": "Nimeta ümber",
"com_ui_rename_prompt": "Nimeta sisend ümber",
"com_ui_requires_auth": "Vajab autentimist",
"com_ui_reset_var": "Lähtesta {{0}}",
"com_ui_result": "Tulemus",
"com_ui_revoke": "Tühista",
"com_ui_revoke_info": "Tühista kõik kasutaja esitatud mandaadid",
"com_ui_revoke_key_confirm": "Oled sa kindel, et sa soovid selle võtme tühistada?",
"com_ui_revoke_key_endpoint": "Tühista võti {{0}} jaoks",
"com_ui_revoke_keys": "Tühista võtmed",
"com_ui_revoke_keys_confirm": "Oled sa kindel, et sa soovid kõik võtmed tühistada?",
"com_ui_role_select": "Roll",
"com_ui_roleplay": "Rollimäng",
"com_ui_run_code": "Käivita kood",
"com_ui_run_code_error": "Koodi käivitamisel tekkis viga",
"com_ui_save": "Salvesta",
"com_ui_save_submit": "Salvesta ja esita",
"com_ui_saved": "Salvestatud!",
"com_ui_schema": "Skeem",
"com_ui_scope": "Ulatus",
"com_ui_search": "Otsi",
"com_ui_select": "Vali",
"com_ui_select_file": "Vali fail",
"com_ui_select_model": "Vali mudel",
"com_ui_select_provider": "Vali teenusepakkuja",
"com_ui_select_provider_first": "Vali esmalt teenusepakkuja",
"com_ui_select_region": "Vali piirkond",
"com_ui_select_search_model": "Otsi mudelit nime järgi",
"com_ui_select_search_plugin": "Otsi pistikprogrammi nime järgi",
"com_ui_select_search_provider": "Otsi teenusepakkujat nime järgi",
"com_ui_select_search_region": "Otsi piirkonda nime järgi",
"com_ui_share": "Jaga",
"com_ui_share_create_message": "Sinu nimi ja kõik sõnumid, mille sa pärast jagamist lisad, jäävad privaatseks.",
"com_ui_share_delete_error": "Jagatud lingi kustutamisel tekkis viga",
"com_ui_share_error": "Vestluslingi jagamisel tekkis viga",
"com_ui_share_form_description": "Jaga kasutamist.",
"com_ui_share_link_to_chat": "Jaga linki vestlusele",
"com_ui_share_to_all_users": "Jaga kõigile kasutajatele",
"com_ui_share_update_message": "Sinu nimi, kohandatud juhised ja kõik sõnumid, mille sa pärast jagamist lisad, jäävad privaatseks.",
"com_ui_share_var": "Jaga {{0}}",
"com_ui_shared_link_bulk_delete_success": "Jagatud linkide kustutamine õnnestus",
"com_ui_shared_link_delete_success": "Jagatud lingi kustutamine õnnestus",
"com_ui_shared_link_not_found": "Jagatud linki ei leitud",
"com_ui_shared_prompts": "Jagatud sisendid",
"com_ui_shop": "Ostlemine",
"com_ui_show_all": "Näita kõiki",
"com_ui_show_qr": "Näita QR-koodi",
"com_ui_sign_in_to_domain": "Logi sisse {{0}}",
"com_ui_simple": "Lihtne",
"com_ui_size": "Suurus",
"com_ui_special_variables": "Erilised muutujad:",
"com_ui_special_variables_info": "Kasuta `{{praegune_kuupäev}}` praeguse kuupäeva jaoks ja `{{praegune_kasutaja}}` oma konto nime jaoks.",
"com_ui_speech_while_submitting": "Kõnet ei saa esitada, kui vastust genereeritakse",
"com_ui_stop": "Peata",
"com_ui_storage": "Salvestusruum",
"com_ui_submit": "Esita",
"com_ui_teach_or_explain": "Õppimine",
"com_ui_temporary_chat": "Ajutine vestlus",
"com_ui_terms_and_conditions": "Kasutustingimused",
"com_ui_terms_of_service": "Teenuse tingimused",
"com_ui_thinking": "Mõtleb...",
"com_ui_thoughts": "Mõtted",
"com_ui_token_exchange_method": "Märgi vahetamise meetod",
"com_ui_token_url": "Märgi URL",
"com_ui_tools": "Tööriistad",
"com_ui_travel": "Reisimine",
"com_ui_unarchive": "Arhiveeri lahti",
"com_ui_unarchive_error": "Vestluse arhiveerimine lahti ebaõnnestus",
"com_ui_unknown": "Tundmatu",
"com_ui_update": "Uuenda",
"com_ui_upload": "Laadi üles",
"com_ui_upload_code_files": "Laadi üles koodiinterpreteerija jaoks",
"com_ui_upload_delay": "Faili \"{{0}}\" üleslaadimine võtab oodatust kauem aega. Palun oota, kuni faili indekseerimine hankimiseks lõpeb.",
"com_ui_upload_error": "Faili üleslaadimisel tekkis viga",
"com_ui_upload_file_search": "Laadi üles failiotsingu jaoks",
"com_ui_upload_files": "Laadi faile üles",
"com_ui_upload_image": "Laadi pilt üles",
"com_ui_upload_image_input": "Laadi pilt üles",
"com_ui_upload_invalid": "Fail on üleslaadimiseks vigane. Peab olema pilt, mis ei ületa piirangut",
"com_ui_upload_invalid_var": "Fail on üleslaadimiseks vigane. Peab olema pilt, mis ei ületa {{0}} MB",
"com_ui_upload_success": "Faili üleslaadimine õnnestus",
"com_ui_upload_type": "Vali üleslaadimise tüüp",
"com_ui_use_micrphone": "Kasuta mikrofoni",
"com_ui_use_prompt": "Kasuta sisendit",
"com_ui_variables": "Muutujad",
"com_ui_variables_info": "Kasuta oma tekstis topelt sulgusid, et luua muutujaid, nt `{{näidismuutuja}}`, et hiljem sisendi kasutamisel täita.",
"com_ui_version_var": "Versioon {{0}}",
"com_ui_versions": "Versioonid",
"com_ui_view_source": "Vaata algset vestlust",
"com_ui_write": "Kirjutamine",
"com_ui_yes": "Jah",
"com_ui_zoom": "Suumi",
"com_user_message": "Sina",
"com_warning_resubmit_unsupported": "AI sõnumi uuesti esitamine pole selle otspunkti jaoks toetatud."
}

View file

@ -149,7 +149,6 @@
"com_endpoint_google_temp": "Korkeampi arvo = satunnaisempi; matalampi arvo = keskittyneempi ja deterministisempi. Suosittelemme, että muokkaat tätä tai Top P:tä, mutta ei molempia.",
"com_endpoint_google_topk": "Top-k vaikuttaa siihen, miten malli valitsee tokeineita tulokseen. Jos Top-k on 1, valitaan se token, joka on kaikkien todennäköisen mallin sanastossa (tunnetaan myös nimellä ahne dekoodaus), kun taas top-k 3 tarkoittaisi, että seuraavat token valitaan 3 todennäköisimmän tokenin joukosta, lämpötilaa hyödyntäen.",
"com_endpoint_google_topp": "Top-P vaikuttaa siihen kuinka malli valitsee tokeneita tulokseen. Tokenit valitaan top-k:sta (ks. Top-k -parametri) todennäköisimmistä vähiten todennäköseen, kunnes niiden todennäköisyyksien summa ylittää Top-P -arvon.",
"com_endpoint_import": "Tuo",
"com_endpoint_instructions_assistants": "Yliaja ohjeet",
"com_endpoint_instructions_assistants_placeholder": "Yliajaa Avustajan ohjeet. Tätä voi hyödyntää käytöksen muuttamiseen keskustelukohtaisesti.",
"com_endpoint_max_output_tokens": "Tulos-tokeneiden maksimimäärä",
@ -220,7 +219,6 @@
"com_nav_archive_name": "Nimi",
"com_nav_archived_chats": "Arkistoidut keskustelut",
"com_nav_archived_chats_empty": "Sinulla ei ole arkistoituja keskusteluita.",
"com_nav_archived_chats_manage": "Hallinnoi",
"com_nav_audio_play_error": "Virhe ääntä toistaessa: {{0}}",
"com_nav_audio_process_error": "Virhe ääntä käsitellessä: {{0}}",
"com_nav_auto_scroll": "Vieritä automaattisesti viimeisimpään viestiin keskustelua avatessa",
@ -273,6 +271,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -282,10 +281,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Kieli",
@ -313,7 +313,6 @@
"com_nav_setting_speech": "Puhe",
"com_nav_settings": "Asetukset",
"com_nav_shared_links": "Jaetut linkit",
"com_nav_shared_links_manage": "Hallinnoi",
"com_nav_show_code": "Kooditulkkia käyttäessä näytä aina koodi",
"com_nav_speech_to_text": "Puheesta tekstiksi",
"com_nav_text_to_speech": "Tekstistä puheeksi",
@ -459,7 +458,6 @@
"com_ui_happy_birthday": "On 1. syntymäpäiväni!",
"com_ui_host": "Host",
"com_ui_image_gen": "Kuvanluonti",
"com_ui_import_conversation": "Tuo",
"com_ui_import_conversation_error": "Keskustelujesi tuonnissa tapahtui virhe",
"com_ui_import_conversation_file_type_error": "Tiedostotyyppi ei ole tuettu tuonnissa",
"com_ui_import_conversation_info": "Tuo keskusteluja JSON-tiedostosta",

View file

@ -179,7 +179,6 @@
"com_endpoint_google_temp": "Des valeurs plus élevées = plus aléatoires, tandis que des valeurs plus faibles = plus concentrées et déterministes. Nous vous recommandons de modifier ceci ou Top P mais pas les deux.",
"com_endpoint_google_topk": "Top-k change la façon dont le modèle sélectionne les jetons pour la sortie. Un top-k de 1 signifie que le jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle (également appelé décodage glouton), tandis qu'un top-k de 3 signifie que le jeton suivant est sélectionné parmi les 3 jetons les plus probables (en utilisant la température).",
"com_endpoint_google_topp": "Top-p change la façon dont le modèle sélectionne les jetons pour la sortie. Les jetons sont sélectionnés du plus K (voir le paramètre topK) probable au moins jusqu'à ce que la somme de leurs probabilités égale la valeur top-p.",
"com_endpoint_import": "Importer",
"com_endpoint_instructions_assistants": "Instructions de remplacement",
"com_endpoint_instructions_assistants_placeholder": "Remplace les instructions de l'assistant. Cela est utile pour modifier le comportement au cas par cas.",
"com_endpoint_max_output_tokens": "Nombre maximum de jetons en sortie",
@ -265,7 +264,6 @@
"com_nav_archive_name": "Nom",
"com_nav_archived_chats": "Conversations archivées",
"com_nav_archived_chats_empty": "Vous n'avez aucune conversation archivée.",
"com_nav_archived_chats_manage": "Gérer",
"com_nav_at_command": "Commande-@",
"com_nav_at_command_description": "Basculer la commande \"@\" pour changer d'endpoints, de modèles, de préréglages, etc.",
"com_nav_audio_play_error": "Erreur de lecture audio : {{0}}",
@ -340,6 +338,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -349,10 +348,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Langue",
@ -386,7 +386,6 @@
"com_nav_setting_speech": "Parole",
"com_nav_settings": "Paramètres",
"com_nav_shared_links": "Liens partagés",
"com_nav_shared_links_manage": "Gérer",
"com_nav_show_code": "Toujours afficher le code lors de l'utilisation de l'interpréteur de code",
"com_nav_show_thinking": "Ovrir les menus déroulants de réflexion par défaut",
"com_nav_slash_command": "/-Commande",
@ -600,7 +599,6 @@
"com_ui_hide_qr": "Cacher le code QR",
"com_ui_host": "Hôte",
"com_ui_image_gen": "Génération d'image",
"com_ui_import_conversation": "Importer",
"com_ui_import_conversation_error": "Une erreur s'est produite lors de l'importation de vos conversations",
"com_ui_import_conversation_file_type_error": "Type de fichier non pris en charge pour l'importation",
"com_ui_import_conversation_info": "Importer des conversations à partir d'un fichier JSON",

View file

@ -1,24 +1,71 @@
{
"chat_direction_left_to_right": "חייב להיות כאן תוכן, אין אפשרות להשאיר ריק",
"chat_direction_right_to_left": "חייב להיות כאן תוכן, אין אפשרות להשאיר ריק",
"com_a11y_ai_composing": "הבינה המלאכותית (AI) עדיין יוצרת",
"com_a11y_end": "הבינה המלאכותית (AI) סיימה להשיב.",
"com_a11y_start": "הבינה המלאכותית (AI) מתחילה להשיב.",
"com_agents_allow_editing": "אפשר למשתמשים אחרים לערוך את הסוכן שלך",
"com_agents_by_librechat": "על ידי LibreChat",
"com_agents_code_interpreter": "כאשר מופעל, מאפשר לסוכן שלך למנף את ה-API של מפענח הקוד כדי להריץ את הקוד שנוצר, כולל עיבוד קבצים, בצורה מאובטחת. דורש מפתח API חוקי.",
"com_agents_code_interpreter_title": "מפענח קוד API",
"com_agents_create_error": "אירעה שגיאה ביצירת הסוכן שלך.",
"com_agents_description_placeholder": "אופציונלי: תאר את הסוכן שלך כאן",
"com_agents_enable_file_search": "אפשר חיפוש בקבצים",
"com_agents_file_search_disabled": "יש ליצור את הסוכן לפני העלאת קבצים לחיפוש",
"com_agents_file_search_info": "כאשר הסוכן מופעל הוא יקבל מידע על שמות הקבצים המפורטים להלן, כדי שהוא יוכל לאחזר את הקשר רלוונטי.",
"com_agents_instructions_placeholder": "הוראות המערכת שבהן ישתמש הסוכן",
"com_agents_missing_provider_model": "אנא בחר את הספק ואת הדגם לפני יצירת הסוכן.",
"com_agents_name_placeholder": "אופציונלי: שם הסוכן",
"com_agents_no_access": "אין לך גישה לערוך את הסוכן הזה.",
"com_agents_not_available": "הסוכן לא זמין",
"com_agents_search_name": "חפש סוכן לפי שם",
"com_agents_update_error": "אירעה שגיאה בעדכון הסוכן שלך.",
"com_assistants_action_attempt": "הסייען מעוניין לתקשר עם {{0}}",
"com_assistants_actions": "פעולות",
"com_assistants_actions_disabled": "עליך ליצור סייען לפני הוספת פעולות.",
"com_assistants_actions_info": "אפשר לסייען לאחזר מידע או לבצע פעולות באמצעות API",
"com_assistants_add_actions": "הוסף פעולות",
"com_assistants_add_tools": "הוסף כלים",
"com_assistants_allow_sites_you_trust": "אפשר רק אתרים שאתה סומך עליהם.",
"com_assistants_append_date": "הוסף תאריך ושעה נוכחיים",
"com_assistants_append_date_tooltip": "כשמופעל, תאריך ושעה נוכחיים של הלקוח יוספים להוראות מערכת הסייען.",
"com_assistants_code_interpreter": "מתורגמן קוד",
"com_assistants_code_interpreter_files": "הקבצים הבאים זמינים רק עבור מתורגמן קוד:",
"com_assistants_attempt_info": "הסייען רוצה לשלוח את הדברים הבאים:",
"com_assistants_available_actions": "פעולות זמינות",
"com_assistants_capabilities": "יכולות",
"com_assistants_code_interpreter": "מפענח קוד",
"com_assistants_code_interpreter_files": "הקבצים הבאים זמינים רק עבור מפענח קוד:",
"com_assistants_code_interpreter_info": "מתורגמן קוד מאפשר לסייען לכתוב ולהריץ קוד. כלי זה יכול לעבד קבצים עם נתונים ועיצוב מגוונים, וליצור קבצים כגון גרפים.",
"com_assistants_completed_action": "תקשר עם {{0}}",
"com_assistants_completed_function": "מריץ {{0}}",
"com_assistants_conversation_starters": "התחלת שיחות",
"com_assistants_conversation_starters_placeholder": "הכנס פתיח לשיחה",
"com_assistants_create_error": "אירעה שגיאה ביצירת הסייען שלך.",
"com_assistants_create_success": "נוצר בהצלחה",
"com_assistants_description_placeholder": "אופציונלי: תאר את ה-סייען שלך כאן",
"com_assistants_delete_actions_error": "אירעה שגיאה במחיקת הפעולה.",
"com_assistants_delete_actions_success": "הפעולה נמחקה בהצלחה מהסייען",
"com_assistants_description_placeholder": "אופציונלי: תאר את הסייען שלך כאן",
"com_assistants_domain_info": "הסייען שלח את המידע ל{{0}}",
"com_assistants_file_search": "חיפוש קבצים",
"com_assistants_file_search_info": "חיפוש קבצים מאפשר לסייען לקבל ידע מהקבצים שאתה או המשתמשים שלך מעלים. לאחר העלאת קובץ, העוזר מחליט באופן אוטומטי מתי לאחזר תוכן על סמך בקשות המשתמש. אין תמיכה בצירוף מאגרי וקטורים לחיפוש קבצים. אתה יכול לצרף אותם ממגרש החול או לצרף קבצים להודעות לחיפוש קבצים על בסיס שרשור.",
"com_assistants_function_use": "הסייען השתמש ב{{0}}",
"com_assistants_image_vision": "מציג תמונות",
"com_assistants_instructions_placeholder": "הוראות המערכת שהסייען משתמש בהן",
"com_assistants_knowledge": "ידע",
"com_assistants_knowledge_disabled": "יש ליצור סייען, ויש להפעיל ולשמור את מתורגמן קוד או אחזור לפני העלאת קבצים כ-ידע.",
"com_assistants_knowledge_info": "אם אתה מעלה קבצים תחת ידע, שיחות עם ה-סייען שלך עשויות לכלול תוכן מהקובץ.",
"com_assistants_max_starters_reached": "הגעת למספר המקסימלי של תווים לפתיח לשיחות",
"com_assistants_name_placeholder": "אופציונלי: שם הסייען",
"com_assistants_non_retrieval_model": "חיפוש בקבצים אינו מופעל במודל הזה. אנא בחר מודל אחר",
"com_assistants_retrieval": "אחזור",
"com_assistants_running_action": "פעולות ריצה",
"com_assistants_search_name": "חפש סייען לפי שם",
"com_assistants_update_actions_error": "אירעה שגיאה ביצירה או העדכון של הפעולה.",
"com_assistants_update_actions_success": "הפעולה נוצרה או עודכנה בהצלחה",
"com_assistants_update_error": "אירעה שגיאה בעדכון הסייען שלך.",
"com_assistants_update_success": "עודכן בהצלחה",
"com_auth_already_have_account": "כבר יש לך חשבון?",
"com_auth_back_to_login": "חזרה לכניסה",
"com_auth_apple_login": "היכנס באמצעות חשבון אפל",
"com_auth_back_to_login": "חזור להתחברות",
"com_auth_click": "קליק",
"com_auth_click_here": "לחץ כאן",
"com_auth_continue": "המשך",
@ -30,12 +77,23 @@
"com_auth_email_min_length": "אימייל (דוא\"ל) חייב להיות בן 6 תווים לפחות",
"com_auth_email_pattern": "עליך להזין כתובת אימייל (דוא\"ל) חוקית",
"com_auth_email_required": "נדרש דוא\"ל",
"com_auth_email_resend_link": "שלח שוב דוא\"ל",
"com_auth_email_resent_failed": "נכשלה שליחת דוא\"ל לאימות מחדש",
"com_auth_email_resent_success": "דוא\"ל לאימות נשלח שוב בהצלחה",
"com_auth_email_verification_failed": "אימות הדוא\"ל נכשל",
"com_auth_email_verification_failed_token_missing": "האימות נכשל, חסר טוקן",
"com_auth_email_verification_in_progress": "מאמת את הדוא\"ל שלך, אנא המתן",
"com_auth_email_verification_invalid": "אימות הדוא\"ל נכשל",
"com_auth_email_verification_redirecting": "מפנה מחדש בעוד {{0}} שניות...",
"com_auth_email_verification_resend_prompt": "לא קיבלת את הדוא\"ל?",
"com_auth_email_verification_success": "הדוא\"ל אומת בהצלחה",
"com_auth_error_create": "אירעה שגיאה בניסיון לרשום את החשבון שלך. בבקשה נסה שוב.",
"com_auth_error_invalid_reset_token": "אסימון איפוס הסיסמה הזה אינו תקף עוד.",
"com_auth_error_login": "לא ניתן להתחבר עם המידע שסופק. אנא בדוק את האישורים שלך ונסה שוב.",
"com_auth_error_login_ban": "החשבון שלך נחסם באופן זמני עקב הפרות של השירות שלנו.",
"com_auth_error_login_rl": "יותר מדי ניסיונות כניסה בזמן קצר. בבקשה נסה שוב מאוחר יותר.",
"com_auth_error_login_server": "הייתה שגיאת שרת פנימית. אנא המתן מספר רגעים ונסה שוב.",
"com_auth_error_login_unverified": "הדוא\"ל שלך לא אומת. אנא חפש בדוא\"ל שלך קישור לאימות.",
"com_auth_facebook_login": "המשך עם פייסבוק",
"com_auth_full_name": "שם מלא",
"com_auth_github_login": "המשך עם Github",
@ -54,7 +112,10 @@
"com_auth_password_min_length": "הסיסמה חייבת להיות בת 8 תווים לפחות",
"com_auth_password_not_match": "הסיסמאות אינן תואמות",
"com_auth_password_required": "נדרשת סיסמה",
"com_auth_registration_success_generic": "אנא בדוק את הדוא\"ל שלך כדי לאמת את כתובת הדוא\"ל שלך.",
"com_auth_registration_success_insecure": "ההרשמה הצליחה",
"com_auth_reset_password": "אפס את הסיסמה שלך",
"com_auth_reset_password_if_email_exists": "אם קיים חשבון עם דוא\"ל זה, נשלח דוא\"ל עם הוראות לאיפוס סיסמה. אנא הקפד לבדוק גם בתיקיית הספאם שלך.",
"com_auth_reset_password_link_sent": "אימייל (דוא\"ל) נשלח",
"com_auth_reset_password_success": "איפוס סיסמה הצליח",
"com_auth_sign_in": "כניסה",
@ -66,15 +127,21 @@
"com_auth_username_max_length": "שם המשתמש חייב להיות פחות מ-20 תווים",
"com_auth_username_min_length": "שם משתמש חייב להיות לפחות 2 תווים",
"com_auth_welcome_back": "ברוכים הבאים",
"com_click_to_download": "(לחץ כאן להורדה)",
"com_download_expired": "(פג תוקף ההורדה)",
"com_download_expires": "(לחץ כאן כדי להוריד - יפוג בעוד {{0}}) ",
"com_endpoint": "נקודת קצה",
"com_endpoint_agent": "סוכן",
"com_endpoint_agent_model": "מודל סוכן (מומלץ: GPT-3.5)",
"com_endpoint_agent_placeholder": "אנא בחר סוכן",
"com_endpoint_anthropic_maxoutputtokens": "מספר האסימונים המרבי שניתן להפיק בתגובה. ציין ערך נמוך יותר עבור תגובות קצרות יותר וערך גבוה יותר עבור תגובות ארוכות יותר.",
"com_endpoint_anthropic_prompt_cache": "שמירת מטמון מהירה מאפשרת שימוש חוזר בהקשר גדול או בהוראות בקריאות API, תוך הפחתת העלויות וההשהייה",
"com_endpoint_anthropic_temp": "נע בין 0 ל-1. השתמש בטמפ' הקרובה יותר ל-0 עבור בחירה אנליטית / מרובה, וקרוב יותר ל-1 עבור משימות יצירתיות ויצירתיות. אנו ממליצים לשנות את זה או את Top P אבל לא את שניהם.",
"com_endpoint_anthropic_topk": "Top-k משנה את האופן שבו המודל בוחר אסימונים לפלט. Top-k של 1 פירושו שהאסימון שנבחר הוא הסביר ביותר מבין כל האסימונים באוצר המילים של הדגם (נקרא גם פענוח חמדן), בעוד ש-top-k של 3 פירושו שהאסימון הבא נבחר מבין 3 הכי הרבה. אסימונים סבירים (באמצעות טמפרטורה).",
"com_endpoint_anthropic_topp": "Top-p משנה את האופן שבו המודל בוחר אסימונים לפלט. אסימונים נבחרים מבין רוב K (ראה פרמטר topK) הסביר לפחות עד שסכום ההסתברויות שלהם שווה לערך העליון-p.",
"com_endpoint_assistant": "סייען",
"com_endpoint_assistant_model": "מודל סייען",
"com_endpoint_assistant_placeholder": "אנא בחר סייען מלוח הצד הימני",
"com_endpoint_completion": "השלמה",
"com_endpoint_completion_model": "מודל השלמה (מומלץ: GPT-4)",
"com_endpoint_config_click_here": "לחץ כאן",
@ -95,16 +162,20 @@
"com_endpoint_config_key_import_json_key_invalid": "מפתח JSON חשבון שירות לא חוקי, האם ייבאת את הקובץ הנכון?",
"com_endpoint_config_key_import_json_key_success": "מפתח JSON של חשבון שירות יובא בהצלחה",
"com_endpoint_config_key_name": "מפתח",
"com_endpoint_config_key_never_expires": "המפתח שלך לא יפוג לעולם",
"com_endpoint_config_placeholder": "הגדר את המפתח שלך בתפריט הכותרת לצאט.",
"com_endpoint_config_value": "הזן ערך עבור",
"com_endpoint_context": "הקשר",
"com_endpoint_context_info": "המספר המרבי של הטוקנים שניתן להשתמש בהם בחלון ההקשר. השתמש בזה כדי לשלוט בכמה טוקנים ישלחו בכל בקשה. אם לא צוין, יתבצע שימוש בברירת המחדל של המערכת המבוססות על גודל חלון ההקשר ברירת המחדל של המודלים. הגדרת ערכים גבוהים יותר עלולה לגרום לשגיאות ו/או עלות טוקנים גבוהה יותר.",
"com_endpoint_context_tokens": "מקסימום טוקנים בחלון ההקשר",
"com_endpoint_custom_name": "שם מותאם אישית",
"com_endpoint_default": "default",
"com_endpoint_default": "ברירת מחדל",
"com_endpoint_default_blank": "ברירת מחדל: ריק",
"com_endpoint_default_empty": "ברירת מחדל: ריקה",
"com_endpoint_default_with_num": "ברירת מחדל: {{0}}",
"com_endpoint_examples": "הגדרות קבועות מראש",
"com_endpoint_export": "ייצוא",
"com_endpoint_export_share": "ייצא/שתף",
"com_endpoint_frequency_penalty": "עונש תדירות",
"com_endpoint_func_hover": "אפשר שימוש בפלאגינים כפונקציות OpenAI",
"com_endpoint_google_custom_name_placeholder": "הגדר שם מותאם אישית עבור Google",
@ -116,6 +187,7 @@
"com_endpoint_instructions_assistants_placeholder": "עובר את הוראות הסייען. זה שימושי לשינוי ההתנהגות על בסיס ריצה.",
"com_endpoint_max_output_tokens": "אסימוני פלט מרבי",
"com_endpoint_message": "הודעה",
"com_endpoint_message_new": "הודעה {{0}}",
"com_endpoint_message_not_appendable": "ערוך את ההודעה שלך או צור מחדש.",
"com_endpoint_my_preset": "ההגדרה המוגדרת מראש שלי",
"com_endpoint_no_presets": "אין עדיין הגדרות מוגדרות מראש, השתמש בלחצן ההגדרות כדי ליצור אחת",
@ -124,19 +196,25 @@
"com_endpoint_openai_detail": "ההחלטה לבקשות חזון. \"נמוך\" זול ומהיר יותר, \"גבוה\" מפורט ויקר יותר, ו\"אוטומטי\" יבחר אוטומטית בין השניים על סמך רזולוציית התמונה.",
"com_endpoint_openai_freq": "מספר בין -2.0 ל-2.0. ערכים חיוביים מענישים אסימונים חדשים בהתבסס על התדירות הקיימת שלהם בטקסט עד כה, ומקטינים את הסבירות של המודל לחזור על אותה שורה מילה במילה.",
"com_endpoint_openai_max": "האסימונים המקסימליים להפיק. האורך הכולל של אסימוני קלט ואסימונים שנוצרו מוגבל על ידי אורך ההקשר של המודל.",
"com_endpoint_openai_max_tokens": "שדה 'max_tokens' אופציונלי, הוא מייצג את המספר המרבי של טוקנים שניתן ליצור בהשלמת הצ'אט. האורך הכולל של טוקני קלט והטוקנים שנוצרו מוגבל על ידי אורך ההקשר של המודל. אתה עלול להיתקל בשגיאות אם המספר הזה חורג מטוקני ההקשר המקסימליים.",
"com_endpoint_openai_pres": "מספר בין -2.0 ל-2.0. ערכים חיוביים מענישים אסימונים חדשים על סמך האם הם מופיעים בטקסט עד כה, ומגדילים את הסבירות של המודל לדבר על נושאים חדשים.",
"com_endpoint_openai_prompt_prefix_placeholder": "הגדר הוראות מותאמות אישית לכלול בהודעת המערכת. ברירת מחדל: אין",
"com_endpoint_openai_reasoning_effort": "במודלים o1 בלבד: מגביל את מאמץ ההנמקה במודלים של הגיון. הפחתת מאמץ החשיבה יכולה לגרום לתגובות מהירות יותר ולפחות טוקנים בשימוש בהנמקה בתגובה.",
"com_endpoint_openai_resend": "שלח שוב את כל התמונות שצורפו בעבר. הערה: זה יכול להגדיל משמעותית את עלות האסימונים ואתה עלול להיתקל בשגיאות עם קבצים מצורפים רבים של תמונות.",
"com_endpoint_openai_resend_files": "שלח שוב את כל הקבצים שצורפו בעבר. הערה: זה יגדיל את עלות הטוקנים, ואתה עלול להיתקל בשגיאות עם קבצים מצורפים רבים.",
"com_endpoint_openai_stop": "עד 4 רצפים שבהם ה-API יפסיק לייצר טוקנים נוספים.",
"com_endpoint_openai_temp": "ערכים גבוהים יותר = יותר אקראיים, בעוד שערכים נמוכים יותר = יותר ממוקד ודטרמיניסטי. אנו ממליצים לשנות את זה או את Top P אבל לא את שניהם.",
"com_endpoint_openai_topp": "חלופה לדגימה עם טמפרטורה, הנקראת דגימת גרעין, שבה המודל מחשיב את תוצאות האסימונים עם מסת ההסתברות top_p. אז 0.1 אומר שרק האסימונים המהווים את מסת ההסתברות העליונה של 10% נחשבים. אנו ממליצים לשנות את זה או את הטמפרטורה אבל לא את שניהם.",
"com_endpoint_output": "פלט",
"com_endpoint_plug_image_detail": "פרטי תמונה",
"com_endpoint_plug_resend_files": "שלח שוב את הקובץ",
"com_endpoint_plug_set_custom_instructions_for_gpt_placeholder": "הגדר הוראות מותאמות אישית לכלול בהודעת המערכת. ברירת מחדל: אין",
"com_endpoint_plug_skip_completion": "השלמת דילוג",
"com_endpoint_plug_use_functions": "השתמש בפונקציות",
"com_endpoint_presence_penalty": "עונש נוכחות",
"com_endpoint_preset": "preset",
"com_endpoint_preset_default": "הוא כעת ברירת המחדל המוגדרת מראש.",
"com_endpoint_preset": "הגדרה קבועה מראש",
"com_endpoint_preset_custom_name_placeholder": "אין אפשרות להשאיר את השדה הזה ריק, חייב לביות כאן ערך",
"com_endpoint_preset_default": "מוגדר כמו הגדרות ברירת המחדל המוגדרת מראש.",
"com_endpoint_preset_default_item": "ברירת מחדל:",
"com_endpoint_preset_default_none": "אין ברירת מחדל פעילה.",
"com_endpoint_preset_default_removed": "איננו עוד ברירת המחדל המוגדרת מראש.",
@ -151,32 +229,87 @@
"com_endpoint_preset_title": "הגדרה מראש",
"com_endpoint_presets": "presets",
"com_endpoint_presets_clear_warning": "האם אתה בטוח שאתה רוצה לנקות את כל הקביעות המוגדרות מראש? זה בלתי הפיך.",
"com_endpoint_prompt_cache": "השתמש בשמירה במטמון של הנחיות (פרומפטים)",
"com_endpoint_prompt_prefix": "הוראות מותאמות אישית",
"com_endpoint_prompt_prefix_assistants": "הוראות נוספות",
"com_endpoint_prompt_prefix_assistants_placeholder": "הגדר הוראות נוספות או הקשר על גבי ההנחיות הראשיות של ה-סייען. התעלמו אם ריק.",
"com_endpoint_prompt_prefix_placeholder": "הגדר הוראות מותאמות אישית או הקשר. התעלמו אם ריק.",
"com_endpoint_save_as_preset": "שמור כ-preset",
"com_endpoint_reasoning_effort": "מאמץ בתהליך החשיבה",
"com_endpoint_save_as_preset": "שמור כתבנית",
"com_endpoint_search": "חפש נקודת קצה לפי שם",
"com_endpoint_set_custom_name": "הגדר שם מותאם אישית, למקרה שתוכל למצוא את הקביעה המוגדרת מראש",
"com_endpoint_skip_hover": "אפשר דילוג על שלב ההשלמה, הסוקר את התשובה הסופית ואת השלבים שנוצרו",
"com_endpoint_stop": "רצף לעצירה",
"com_endpoint_stop_placeholder": "הפרד ערכים על ידי לחיצה על 'Enter'",
"com_endpoint_temperature": "טמפרטורה",
"com_endpoint_top_k": "Top K",
"com_endpoint_top_p": "Top P",
"com_endpoint_use_active_assistant": "השתמש ב-סייען פעיל",
"com_error_expired_user_key": "המפתח שסופק עבור {{0}} פג ב-{{1}}. אנא ספק מפתח חדש ונסה שוב.",
"com_error_files_dupe": "זוהה קובץ כפול",
"com_error_files_empty": "אין אפשרות לקבצים ריקים",
"com_error_files_process": "אירעה שגיאה במהלך עיבוד הקובץ.",
"com_error_files_unsupported_capability": "לא הופעלו התכונות התומכות בסוג קובץ זה.",
"com_error_files_upload": "אירעה שגיאה בעת העלאת הקובץ",
"com_error_files_upload_canceled": "בקשת העלאת הקובץ בוטלה. הערה: ייתכן שהעלאת הקובץ עדיין בעיבוד ותצטרך למחוק אותו בצורה ידנית.",
"com_error_files_validation": "אירעה שגיאה במהלך אימות הקובץ.",
"com_error_input_length": "מספר הטוקנים של ההודעות האחרונות גבוה מדי, והוא חורג ממגבלת האסימונים ({{0}} בהתאמה). אנא קצר את ההודעה שלך, שנה את גודל ההקשר המקסימלי בפרמטרי השיחה, או התחל שיחה חדשה.",
"com_error_invalid_user_key": "מפתח שסופק אינו חוקי. אנא ספק מפתח חוקי ונסה שוב.",
"com_error_moderation": "נראה שהתוכן שנשלח סומן על ידי מערכת הניהול שלנו בגלל שהוא אינו תואם את הנחיות הקהילה שלנו. אנחנו לא יכולים להמשיך עם הנושא הספציפי הזה. אם יש לך שאלות או נושאים אחרים שתרצה לחקור, אנא ערוך את ההודעה שלך, או צור שיחה חדשה.",
"com_error_no_base_url": "לא נמצאה כתובת URL. אנא ספק כתובת ונסה שוב.",
"com_error_no_user_key": "לא נמצא מפתח. אנא ספק מפתח ונסה שוב.",
"com_files_filter": "סינון קבצים...",
"com_files_no_results": "אין תוצאות",
"com_files_number_selected": "{{0}} מתוך {{1}} פריטים נבחרו",
"com_files_table": "השדה חייב להכיל תוכן, הוא אינו יכול להישאר ריק",
"com_generated_files": "קבצים שנוצרו:",
"com_hide_examples": "הסתר דוגמאות",
"com_nav_archive_created_at": "תאריך יצרן",
"com_nav_account_settings": "הגדרות חשבון",
"com_nav_always_make_prod": "ייצר תמיד גרסאות חדשות",
"com_nav_archive_created_at": "תאריך ייצור",
"com_nav_archive_name": "שם",
"com_nav_archived_chats": "שיחות מארכיון",
"com_nav_archived_chats_empty": "אין שיחות מארכיון.",
"com_nav_archived_chats_manage": "ניהול",
"com_nav_at_command": "@-פקודה",
"com_nav_at_command_description": "הפקודה \"@\" משמשת כמנגנון הפעלה/החלפה של נקודות קצה, מודלים, הגדרות קבועות מראש וכו'.",
"com_nav_audio_play_error": "שגיאה בהפעלת האודיו: {{0}}",
"com_nav_audio_process_error": "שגיאה בעיבוד האודיו: {{0}}",
"com_nav_auto_scroll": "Auto-s גלול אל הכי חדש בפתיחה",
"com_nav_auto_send_prompts": "הנחיות (פרומפטים) לשליחה אוטומטית",
"com_nav_auto_send_text": "טקסט לשליחה אוטומטית",
"com_nav_auto_send_text_disabled": "הגדר -1 כדי להשבית",
"com_nav_auto_transcribe_audio": "תמלול אוטומטי של אודיו",
"com_nav_automatic_playback": "הפעלה אוטומטית של ההודעה האחרונה",
"com_nav_balance": "לְאַזֵן",
"com_nav_browser": "דפדפן",
"com_nav_buffer_append_error": "בעיה בהזרמת אודיו. ההשמעה עשויה להיות מקוטעת.",
"com_nav_change_picture": "שנה תמונה",
"com_nav_chat_commands": "פקודות צ'אט",
"com_nav_chat_commands_info": "פקודות אלו מופעלות על ידי הקלדת תווים ספציפיים בתחילת ההודעה. כל פקודה מופעלת על ידי הקידומת המיועדת לה. אתה יכול להשבית אותם אם אתה משתמש בתווים אלה לעתים קרובות כדי להתחיל הודעות.",
"com_nav_chat_direction": "כיוונון צ'אט",
"com_nav_clear_all_chats": "נקה את כל השיחות",
"com_nav_clear_cache_confirm_message": "האם אתה בטוח שברצונך לנקות את המטמון?",
"com_nav_clear_conversation": "נקה שיחות",
"com_nav_clear_conversation_confirm_message": "אתה בטוח שאתה רוצה לנקות את כל השיחות? זה בלתי הפיך.",
"com_nav_close_sidebar": "סגור סרגל צד",
"com_nav_confirm_clear": "אשר נקה",
"com_nav_commands": "פקודות",
"com_nav_confirm_clear": "אשר ניקוי",
"com_nav_conversation_mode": "ביקורות בהמתנה",
"com_nav_convo_menu_options": "אפשרויות מצב שיחה",
"com_nav_db_sensitivity": "רגישות דציבלים",
"com_nav_delete_account": "מחק חשבון",
"com_nav_delete_account_button": "מחק את החשבון שלי לצמיתות",
"com_nav_delete_account_confirm": "מחק חשבון - אתה בטוח?",
"com_nav_delete_account_email_placeholder": "אנא הזן את כתובת הדוא\"ל של החשבון שלך",
"com_nav_delete_cache_storage": "מחק אחסון מטמון TTS",
"com_nav_delete_data_info": "כל הנתונים שלך יימחקו",
"com_nav_delete_warning": "אזהרה: פעולה זו תמחק לצמיתות את חשבונך.",
"com_nav_edge": "נקודת קצה",
"com_nav_enable_cache_tts": "אפשר מטמון ב- TTS",
"com_nav_enable_cloud_browser_voice": "השתמש בקולות מבוססי ענן",
"com_nav_enabled": "מופעל",
"com_nav_engine": "מנוע",
"com_nav_enter_to_send": "הקש Enter כדי לשלוח את ההודעה",
"com_nav_export": "ייצא",
"com_nav_export_all_message_branches": "ייצא את כל ענפי ההודעות",
"com_nav_export_conversation": "ייצא שיחה",
@ -186,149 +319,405 @@
"com_nav_export_recursive": "רקורסיבי",
"com_nav_export_recursive_or_sequential": "רקורסיבי או רציף?",
"com_nav_export_type": "סוג",
"com_nav_external": "חיצוני",
"com_nav_font_size": "גודל גופן",
"com_nav_font_size_base": "בינוני",
"com_nav_font_size_lg": "גדול",
"com_nav_font_size_sm": "קטן",
"com_nav_font_size_xl": "גדול מאוד",
"com_nav_font_size_xs": "קטן מאוד",
"com_nav_help_faq": "עזרה ושאלות נפוצות",
"com_nav_hide_panel": "הסתר לוח הצד הימני ביותר",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
"com_nav_info_custom_prompt_mode": "כאשר אפשרות זו מופעלת, הנחיית ברירת המחדל של מערכת רכיבי תצוגה לא תיכלל. כל ההוראות ליצירת רכיבי תצוגה יהיו חייבות להינתן באופן ידני במצב זה.",
"com_nav_info_enter_to_send": "כאשר מופעל, לחיצה על \"ENTER\" תשלח את ההודעה שלך, כאשר מושבת לחיצה על \"Enter\" תוסיף שורה חדשה, ותצטרך ללחוץ על \"CTRL + ENTER\" כדי לשלוח את ההודעה.",
"com_nav_info_fork_change_default": "'הודעות ישירות בלבד' כולל רק את הנתיב הישיר להודעה שנבחרה. 'כלול הסתעפויות קשורות' מוסיף את כל ההסתעפויות הקשורות לאורך הנתיב. 'כלול הכל עד כאן/מכאן' כולל את כל ההודעות וההסתעפויות המחוברות.",
"com_nav_info_fork_split_target_setting": "כאשר אפשרות זו מופעלת, הפיצול יתחיל מהודעת היעד ועד להודעה האחרונה בשיחה, בהתאם להתנהגות שנבחרה",
"com_nav_info_include_shadcnui": "כאשר אפשרות זו מופעלת, ייכללו הוראות לשימוש ברכיבי shadcn/ui. shadcn/ui הוא אוסף של רכיבים לשימוש חוזר שנבנו באמצעות Radix UI ו-Tailwind CSS.\nהערה: ההוראות הללו ארוכות, ולכן כדאי להפעיל אותן רק אם חשוב לך ליידע את מודל ה-LLM (מודל השפה) על הייבוא והרכיבים הנכונים.\nלמידע נוסף על רכיבים אלה, בקר בכתובת: https://ui.shadcn.com/",
"com_nav_info_latex_parsing": "כאשר אפשרות זו מופעלת, קוד LaTeX בהודעות יעובד ויוצג כמשוואות מתמטיות. השבתת אפשרות זו עשויה לשפר את הביצועים אם אינך זקוק לעיבוד LaTeX.",
"com_nav_info_save_draft": "כאשר אפשרות זו מופעלת, הטקסט והקבצים המצורפים שאתה מזין בטופס הצ'אט יישמרו באופן אוטומטי כטיוטות במכשיר שלך. טיוטות אלו יהיו זמינות גם אם תטען מחדש את הדף או תעבור לשיחה אחרת. הטיוטות נשמרות באופן מקומי במכשיר שלך ונמחקות לאחר שליחת ההודעה.",
"com_nav_info_show_thinking": "כאשר אפשרות זו מופעלת, תיבות תצוגה שמציגות את תהליך החשיבה של הבינה המלאכותית יופיעו פתוחות כברירת מחדל, כך שתוכל לראות את תהליך הניתוח בזמן אמת. כאשר האפשרות מושבתת, תיבות הבחירה יישארו סגורות כברירת מחדל, מה שיוצר ממשק נקי וזורם יותר.",
"com_nav_info_user_name_display": "כאשר אפשרות זו מופעלת, שם המשתמש של השולח יוצג מעל כל הודעה שאתה שולח. כאשר האפשרות מושבתת, יוצג רק הכיתוב \"אתה\" מעל ההודעות שלך.",
"com_nav_lang_arabic": "ערבית (العربية)",
"com_nav_lang_auto": "זיהוי אוטומטי",
"com_nav_lang_brazilian_portuguese": "פורטוגזית ברזילאית (Português Brasileiro)",
"com_nav_lang_chinese": "סינית (中文)",
"com_nav_lang_dutch": "הולנדית (Nederlands)",
"com_nav_lang_english": "אנגלית (English)",
"com_nav_lang_estonian": "אסטונית (Eesti keel)",
"com_nav_lang_finnish": "פינית (Suomi)",
"com_nav_lang_french": "צרפתית (Français)",
"com_nav_lang_german": "גרמנית (Deutsch)",
"com_nav_lang_hebrew": "עברית",
"com_nav_lang_indonesia": "Indonesia",
"com_nav_lang_italian": "Italiano",
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_lang_indonesia": "אינדונזית (Indonesia)",
"com_nav_lang_italian": "איטלקית (Italiano)",
"com_nav_lang_japanese": "יפנית (日本語)",
"com_nav_lang_korean": "קוראנית (한국어)",
"com_nav_lang_polish": "פולנית (Polski)",
"com_nav_lang_portuguese": "פורטוגזית (Português)",
"com_nav_lang_russian": "רוסית (Русский)",
"com_nav_lang_spanish": "ספרדית (Español)",
"com_nav_lang_swedish": "שוודית (Svenska)",
"com_nav_lang_traditional_chinese": "סינית מסורתית (繁體中文)",
"com_nav_lang_turkish": "טורקית (Türkçe)",
"com_nav_lang_vietnamese": "וייטנאמית (Tiếng Việt)",
"com_nav_language": "שפה",
"com_nav_latex_parsing": "ניתוח LaTeX בהודעות (עשוי להשפיע על הביצועים)",
"com_nav_log_out": "צא",
"com_nav_long_audio_warning": "העיבוד של טקסטים ארוכים ייקח יותר זמן.",
"com_nav_maximize_chat_space": "הגדל את שטח הצ'אט",
"com_nav_modular_chat": "אפשר החלפת נקודות קצה באמצע שיחה",
"com_nav_my_files": "הקבצים שלי",
"com_nav_no_search_results": "לא נמצאו תוצאות בחיפוש",
"com_nav_not_supported": "לא נתמך",
"com_nav_open_sidebar": "פתח סרגל צד",
"com_nav_playback_rate": "קצב השמעת אודיו",
"com_nav_plugin_auth_error": "אירעה שגיאה בניסיון לאמת את הפלאגין הזה. בבקשה נסה שוב.",
"com_nav_plugin_install": "התקן",
"com_nav_plugin_search": "תוספי חיפוש",
"com_nav_plugin_store": "חנות פלאגין",
"com_nav_plugin_uninstall": "הסר התקנה",
"com_nav_plus_command": "פקודת+-",
"com_nav_plus_command_description": "הפעל או בטל את הפקודה '+' כדי להוסיף הגדרת תגובות מרובות",
"com_nav_profile_picture": "תמונת פרופיל",
"com_nav_save_drafts": "שמיר את האפצה באותו מחשב",
"com_nav_scroll_button": "לחצן לגלילה עד הסוף",
"com_nav_search_placeholder": "חפש הודעות",
"com_nav_send_message": "שלח הודעה",
"com_nav_setting_account": "חשבון",
"com_nav_setting_beta": "תכונות ביטא",
"com_nav_setting_chat": "צ'אט",
"com_nav_setting_data": "בקרות נתונים",
"com_nav_setting_general": "כללי",
"com_nav_setting_speech": "דיבור",
"com_nav_settings": "הגדרות",
"com_nav_shared_links": "קישורים משותפים",
"com_nav_shared_links_manage": "ניהול",
"com_nav_show_code": "הצג תמיד את הקוד בעת שימוש במפענח הקוד.",
"com_nav_show_thinking": "פתח תצוגות חשיבה כברירת מחדל",
"com_nav_slash_command": "פקודת/-",
"com_nav_slash_command_description": "הפעל/כבה את הפקודה '/' לבחירת הנחיה (פרומפט) באמצעות המקלדת.",
"com_nav_source_buffer_error": "שגיאה בהגדרת השמעת האודיו. אנא רענן את הדף",
"com_nav_speech_cancel_error": "לא ניתן להפסיק את השמעת האודיו. ייתכן שתצטרך לרענן את הדף.",
"com_nav_speech_to_text": "דיבור לטקסט",
"com_nav_stop_generating": "עצור את היצירה",
"com_nav_text_to_speech": "טקסט לדיבור",
"com_nav_theme": "נושא",
"com_nav_theme_dark": "כהה",
"com_nav_theme_light": "אור",
"com_nav_theme_system": "מערכת",
"com_nav_tool_dialog": "כלי סייען",
"com_nav_tool_dialog_agents": "כלי סוכנים",
"com_nav_tool_dialog_description": "יש לשמור את האסיסטנט כדי להמשיך בבחירת הכלים.",
"com_nav_tool_remove": "הסר",
"com_nav_tool_search": "כלי חיפוש",
"com_nav_user": "USER",
"com_nav_tts_init_error": "כשל ניסיון אתחול ההמרה מטקסט לדיבור: {{0}}",
"com_nav_tts_unsupported_error": "המרה מטקסט לדיבור עבור המנוע הנבחר אינה נתמכת בדפדפן זה.",
"com_nav_user": "משתמש",
"com_nav_user_msg_markdown": "הצגת הודעות משתמש כ-Markdown",
"com_nav_user_name_display": "הצג שם משתמש בהודעות",
"com_nav_welcome_message": "איך אני יכול לעזור לך היום?",
"com_nav_voice_select": "קול",
"com_nav_voices_fetch_error": "לא ניתן לאחזר אפשרויות קול. אנא בדוק את חיבור האינטרנט שלך.",
"com_nav_welcome_agent": "אנא בחר סוכן",
"com_nav_welcome_assistant": "אנא בחר סיייען",
"com_nav_welcome_message": "?איך אני יכול לעזור לך היום",
"com_show_agent_settings": "הצג הגדרות סוכן",
"com_show_completion_settings": "הצג הגדרות השלמה",
"com_show_examples": "הצג דוגמאות",
"com_sidepanel_agent_builder": "בניית סוכן",
"com_sidepanel_assistant_builder": "בניית סייען",
"com_sidepanel_attach_files": "צרף קבצים",
"com_sidepanel_conversation_tags": "סימניות",
"com_sidepanel_hide_panel": "הסתר פאנל",
"com_sidepanel_manage_files": "נהל קבצים",
"com_sidepanel_parameters": "פרמטרים",
"com_sidepanel_select_agent": "בחר סוכן",
"com_sidepanel_select_assistant": "בחר סייען",
"com_ui_accept": "אני מקבל",
"com_ui_add": "הוסף",
"com_ui_add_model_preset": "הוספת מודל או הגדרה קבועה לתגובה נוספת",
"com_ui_add_multi_conversation": "הוספת תמיכה בשיחות מרובות",
"com_ui_admin": "אדמין",
"com_ui_admin_access_warning": "השבתת גישת המנהל לתכונה זו עלולה לגרום לבעיות בלתי צפויות בממשק המשתמש שידרשו רענון. אם השינוי נשמר, הדרך היחידה להחזיר את ההגדרה היא דרך הגדרת הממשק בקובץ librechat.yaml, שמשפיעה על כל התפקידים.",
"com_ui_admin_settings": "הגדרות אדמין",
"com_ui_advanced": "מתקדם",
"com_ui_agent": "סוכן",
"com_ui_agent_delete_error": "אירעה שגיאה בעת מחיקת הסוכן.",
"com_ui_agent_deleted": "הסוכן נמחק בהצלחה.",
"com_ui_agent_duplicate_error": "אירעה שגיאה בעת שכפול הסוכן",
"com_ui_agent_duplicated": "הסוכן שוכפל בהצלחה",
"com_ui_agent_editing_allowed": "משתמשים אחרים יכולים כבר לערוך את הסוכן.",
"com_ui_agent_shared_to_all": "השדה חייב להכיל תוכן, אי אפשר להשאיר אותו ריק",
"com_ui_agents": "סוכנים",
"com_ui_agents_allow_create": "אפשר יצירת סוכנים",
"com_ui_agents_allow_share_global": "אפשר שיתוף סוכנים לכל המשתמשים",
"com_ui_agents_allow_use": "אפשר שימוש בסוכנים",
"com_ui_all": "הכל",
"com_ui_all_proper": "הכל",
"com_ui_analyzing": "ניתוח",
"com_ui_analyzing_finished": "סיים ניתוח",
"com_ui_api_key": "מפתח API",
"com_ui_archive": "ארכיון",
"com_ui_archive_error": "אירעה שגיאה בארכיון השיחה",
"com_ui_archive_error": "אירעה שגיאה באירכוב השיחה",
"com_ui_artifact_click": "לחץ לפתיחה",
"com_ui_artifacts": "רכיבי תצוגה",
"com_ui_artifacts_toggle": "הפעל/כבה רכיבי תצוגה",
"com_ui_artifacts_toggle_agent": "אפשר רכיבי תצוגה",
"com_ui_assistant": "סייען",
"com_ui_assistant_delete_error": "אירעה שגיאה בעת מחיקת הסייען",
"com_ui_assistant_deleted": "הסייען נמחק בהצלחה",
"com_ui_assistants": "סייענים",
"com_ui_assistants_output": "פלט סייענים",
"com_ui_attach_error": "לא ניתן לצרף קובץ. צור או בחר שיחה, או נסה לרענן את הדף.",
"com_ui_attach_error_openai": "לא ניתן לצרף את קבצי הסייען לנקודות קצה אחרות",
"com_ui_attach_error_size": "חרגת ממגבלת גודל הקובץ עבור נקודת הקצה:",
"com_ui_attach_error_type": "סוג קובץ לא נתמך עבור נקודת קצה:",
"com_ui_attach_warn_endpoint": "עשוי להתעלם מקבצים שאינם של הסייען שאין להם כלי תואם",
"com_ui_attachment": "קובץ מצורף",
"com_ui_auth_type": "סוג אישור",
"com_ui_auth_url": "כתובת URL לאימות",
"com_ui_authentication": "אימות",
"com_ui_authentication_type": "סוג אימות",
"com_ui_avatar": "אווטאר",
"com_ui_back_to_chat": "חזור לצ'אט",
"com_ui_back_to_prompts": "חזור להנחיות (פרומפטים)",
"com_ui_backup_codes": "קודי גיבוי",
"com_ui_backup_codes_regenerate_error": "אירעה שגיאה בעת יצירת קודי הגיבוי מחדש",
"com_ui_backup_codes_regenerated": "קודי הגיבוי נוצרו מחדש בהצלחה",
"com_ui_basic": "בסיסי",
"com_ui_basic_auth_header": "כותרת אימות בסיסי",
"com_ui_bearer": "נושא הרשאה",
"com_ui_bookmark_delete_confirm": "האם אתה בטוח שברצונך למחוק את הסימניה הזו?",
"com_ui_bookmarks": "סימניות",
"com_ui_bookmarks_add": "הוסף סימניות",
"com_ui_bookmarks_add_to_conversation": "הוסף לשיחה הנוכחית",
"com_ui_bookmarks_count": "ספירה",
"com_ui_bookmarks_create_error": "אירעה שגיאה בעת יצירת הסימניה",
"com_ui_bookmarks_create_exists": "סימניה זו כבר קיימת",
"com_ui_bookmarks_create_success": "הסימניה נוצרה בהצלחה",
"com_ui_bookmarks_delete": "מחק סימ",
"com_ui_bookmarks_delete_error": "אירעה שגיאה בעת מחיקת הסימניה",
"com_ui_bookmarks_delete_success": "הסימניה נמחקה בהצלחה",
"com_ui_bookmarks_description": "תיאור",
"com_ui_bookmarks_edit": "ערוך סימניה",
"com_ui_bookmarks_filter": "סינון סימניות...",
"com_ui_bookmarks_new": "סימניה חדשה",
"com_ui_bookmarks_title": "כותרת",
"com_ui_bookmarks_update_error": "אירעה שגיאה בעת עדכון הסימניה",
"com_ui_bookmarks_update_success": "הסימניה עודכנה בהצלחה",
"com_ui_bulk_delete_error": "מחיקת קישורים משותפים נכשלה",
"com_ui_callback_url": "כתובת URL להחזרת המידע",
"com_ui_cancel": "בטל",
"com_ui_chat": "צ'אט",
"com_ui_chat_history": "נקה היסטוריה",
"com_ui_clear": "נקה",
"com_ui_clear_all": "נקה הכל",
"com_ui_client_id": "מזהה לקוח",
"com_ui_client_secret": "ב",
"com_ui_close": "סגור",
"com_ui_close_menu": "סגור תפריט",
"com_ui_code": "קוד",
"com_ui_collapse_chat": "כווץ צ'אט",
"com_ui_command_placeholder": "אופציונלי: הזן פקודה להנחיה (פרומפט), או שיעשה שימוש בשם",
"com_ui_command_usage_placeholder": "בחר הנחיה (פרומפט) לפי פקודה או שם",
"com_ui_complete_setup": "ההגדרה הושלמה",
"com_ui_confirm_action": "אשר פעולה",
"com_ui_confirm_admin_use_change": "שינוי הגדרה זו יחסום גישה למנהלים, כולל אותך. האם אתה בטוח שברצונך להמשיך?",
"com_ui_confirm_change": "אשר את השינוי",
"com_ui_context": "הקשר",
"com_ui_continue": "המשך",
"com_ui_controls": "פקדים",
"com_ui_copied": "הועתק!",
"com_ui_copied_to_clipboard": "הועתק ללוח",
"com_ui_copy_code": "העתק קוד",
"com_ui_copy_link": "העתק קישור",
"com_ui_copy_to_clipboard": "העתק ללוח",
"com_ui_create": "צור",
"com_ui_create_link": "צור קישור",
"com_ui_create_prompt": "צור הנחיה (פרומפט)",
"com_ui_currently_production": "נוצר עכשיו",
"com_ui_custom": "מותאם אישית",
"com_ui_custom_header_name": "שם כותרת מותאם אישית",
"com_ui_custom_prompt_mode": "מצב הנחיה (פרומפט) מותאם אישית",
"com_ui_dashboard": "לוח מחוונים",
"com_ui_date": "תאריך",
"com_ui_date_april": "אפריל",
"com_ui_date_august": "אוגוסט",
"com_ui_date_december": "דצמבר",
"com_ui_date_february": "פברואר",
"com_ui_date_january": "ינואר",
"com_ui_date_july": "יולי",
"com_ui_date_june": "יוני",
"com_ui_date_march": "מרץ",
"com_ui_date_may": "מאי",
"com_ui_date_november": "נובמבר",
"com_ui_date_october": "אוקטובר",
"com_ui_date_previous_30_days": "30 ימים אחרונים",
"com_ui_date_previous_7_days": "7 ימים אחרונים",
"com_ui_date_september": "ספטמבר",
"com_ui_date_today": "היום",
"com_ui_date_yesterday": "אתמול",
"com_ui_decline": "אני לא מקבל",
"com_ui_default_post_request": "ברירת המחדל (בקשת POST)",
"com_ui_delete": "מחק",
"com_ui_delete_action": "מחק פעולה",
"com_ui_delete_action_confirm": "האם אתה בטוח שברצונך למחוק פעולה זו?",
"com_ui_delete_agent_confirm": "האם אתה בטוח שברצונך למחוק את הסייען הזה?",
"com_ui_delete_assistant_confirm": "האם אתה בטוח שאתה רוצה למחוק את הסייען הזה? אי אפשר לבטל את זה.",
"com_ui_delete_confirm": "זה ימחק",
"com_ui_delete_confirm_prompt_version_var": "פעולה זו תמחק את הגרסה שנבחרה עבור \"{{0}}\". אם לא קיימות גרסאות נוספות, ההנחיה תימחק.",
"com_ui_delete_conversation": "למחוק את השיחה (צאט)?",
"com_ui_delete_prompt": "מחק הנחיה (פרומפט)",
"com_ui_delete_shared_link": "מחק קישור שיתוף",
"com_ui_delete_tool": "מחק כלי",
"com_ui_delete_tool_confirm": "האת אתה בטוח שאתה רוצה למחוק את הכלי הזה?",
"com_ui_descending": "תיאור",
"com_ui_description": "תיאור",
"com_ui_description_placeholder": "אופציונלי: הזן תיאור שיוצג עבור ההנחיה (פרומפט)",
"com_ui_disabling": "מבטל הפעלה...",
"com_ui_download": "הורדה",
"com_ui_download_artifact": "רכיב תצוגת הורדות",
"com_ui_download_backup": "הורד קודי גיבוי",
"com_ui_download_backup_tooltip": "לפני שתמשיך, הורד את קודי הגיבוי שלך. תזדקק להם כדי לשחזר גישה במקרה שתאבד את מכשיר האימות שלך",
"com_ui_download_error": "וזה: שגיאה בהורדת הקובץ. ייתכן שהקובץ נמחק",
"com_ui_drag_drop": "השדה חייב להכיל תוכן, הוא אינו יכול להישאר ריק",
"com_ui_dropdown_variables": "רשימה נפתחת של משתנים",
"com_ui_dropdown_variables_info": "צור תפריטי רשימה נפתחת מותאמים אישית עבור ההנחיות שלך:\n{{variable_name:option1|option2|option3}}",
"com_ui_duplicate": "שכפל",
"com_ui_duplication_error": "אירעה שגיאה בעת שכפול השיחה",
"com_ui_duplication_processing": "משכפל את השיחה...",
"com_ui_duplication_success": "השיחה שוכפלה בהצלחה",
"com_ui_edit": "ערוך",
"com_ui_empty_category": "-",
"com_ui_endpoint": "נקודת קצה",
"com_ui_endpoint_menu": "תפריט נקודת קצה LLM",
"com_ui_endpoints_available": "נקודות קצה זמינות",
"com_ui_enter": "Enter",
"com_ui_enter_api_key": "הכנס מפתח API",
"com_ui_enter_openapi_schema": "הזן כאן את סכימת OpenAPI שלך",
"com_ui_enter_var": "הכנס {{0}}",
"com_ui_error": "שגיאה",
"com_ui_error_connection": "שגיאה בחיבור לשרת, נסה לרענן את הדף",
"com_ui_error_save_admin_settings": "אירעה שגיאה בשמירת הגדרות הניהול שלך",
"com_ui_examples": "דוגמאות",
"com_ui_export_convo_modal": "חלון ייצוא שיחה",
"com_ui_field_required": "שדה זה נדרש",
"com_ui_filter_prompts": "סינון הנחיות (פרומפטים)",
"com_ui_filter_prompts_name": "סינון הנחיות (פרומפטים) לפי שם",
"com_ui_finance": "פיננסי",
"com_ui_fork": "הסתעפות",
"com_ui_fork_all_target": "כלול את כל ההודעות שנשלחו/התקבלו מכאן.",
"com_ui_fork_branches": "כלול הסתעפויות קשורות",
"com_ui_fork_change_default": "הגדרות הסתעפויות ברירת מחדל",
"com_ui_fork_default": "השתמש בהגדרות הסתעפויות ברירת מחדל",
"com_ui_fork_error": "אירעה שגיאה בעת פיצול השיחה",
"com_ui_fork_from_message": "בחר הגדרת הסתעפויות",
"com_ui_fork_remember": "זכור",
"com_ui_go_back": "חזור",
"com_ui_happy_birthday": "זה יום ההולדת הראשון שלי!",
"com_ui_import_conversation": "יבוא",
"com_ui_host": "מארח",
"com_ui_import_conversation_error": "אירעה שגיאה בעת ייבוא השיחות שלך",
"com_ui_import_conversation_info": "ייבא שיחות מקובץ JSON",
"com_ui_import_conversation_success": "השיחות יובאו בהצלחה",
"com_ui_input": "קלט",
"com_ui_instructions": "הוראות",
"com_ui_latest_version": "גרסה אחרונה",
"com_ui_loading": "טוען...",
"com_ui_locked": "נעול",
"com_ui_manage": "נהל",
"com_ui_model": "דגם",
"com_ui_more_info": "מידע נוסף",
"com_ui_name": "שם",
"com_ui_new_chat": "שיחה חדשה",
"com_ui_next": "הבא",
"com_ui_no": "לא",
"com_ui_no_category": "אין קטגוריה",
"com_ui_no_terms_content": "אין תוכן תנאים והגבלות להצגה",
"com_ui_of": "של",
"com_ui_off": "של",
"com_ui_page": "עמוד",
"com_ui_prev": "הקודם",
"com_ui_preview": "תצוגה מקדימה",
"com_ui_privacy_policy": "מדיניות פרטיות",
"com_ui_prompt": "הנחיה (פרומפט)",
"com_ui_prompt_name": "שם הנחיה (פרומפט)",
"com_ui_prompt_name_required": "נדרש שם הנחיה (פרומפט)",
"com_ui_prompt_text": "טקסט",
"com_ui_prompt_text_required": "נדרש טקסט",
"com_ui_prompts": "הנחיות (פרומפטים)",
"com_ui_regenerate": "לחדש",
"com_ui_rename": "שם מחדש",
"com_ui_rename": "שנה שם",
"com_ui_rename_prompt": "שנה שם הנחיה (פרומפט)",
"com_ui_revoke": "בטל",
"com_ui_revoke_info": "בטל את כל האישורים שסופקו על ידי המשתמש",
"com_ui_save": "שמור",
"com_ui_save_submit": "שמור ושלח",
"com_ui_saved": "שמור!",
"com_ui_schema": "סכמה",
"com_ui_scope": "תחום",
"com_ui_search": "חיפוש",
"com_ui_select": "בחר",
"com_ui_select_model": "בחר דגם",
"com_ui_select_file": "בחר קובץ",
"com_ui_select_model": "בחר מודל",
"com_ui_select_provider": "בחר ספק",
"com_ui_select_provider_first": "ראשית בחר ספק",
"com_ui_select_region": "בחר איזור",
"com_ui_select_search_model": "חפש מודל לפי שם",
"com_ui_select_search_plugin": "חפש פאלגין לפי שם",
"com_ui_select_search_provider": "חפש ספק לפי שם",
"com_ui_select_search_region": "חפש איזור לפי שם",
"com_ui_share": "שתף",
"com_ui_share_create_message": "שמך וכל הודעה שתוסיף לאחר השיתוף יישארו פרטיים.",
"com_ui_share_delete_error": "אירעה שגיאה בעת מחיקת הקישור המשותף.",
"com_ui_share_error": "אירעה שגיאה בעת שיתוף קישור הצ'אט",
"com_ui_share_link_to_chat": "שתף קישור בצ'אט",
"com_ui_share_update_message": "Your name, custom instructions, and any messages you add after sharing stay private.",
"com_ui_shared_link_not_found": "Shared link not found",
"com_ui_share_to_all_users": "שתף עם כל המשתמשים",
"com_ui_share_update_message": "השם שלך, ההוראות המותאמות אישית וכל ההודעות שתוסיף לאחר השיתוף יישארו פרטיים.",
"com_ui_share_var": "שתף {{0}}",
"com_ui_shared_link_bulk_delete_success": "הקישורים המשותפים נמחקו בהצלחה",
"com_ui_shared_link_delete_success": "הקישור המשותף נמחק בהצלחה",
"com_ui_shared_link_not_found": "הקישור המשותף לא נמצא",
"com_ui_shared_prompts": "הנחיות (פרומפטים) משותפות",
"com_ui_shop": "קניות",
"com_ui_show_all": "הראה הכל",
"com_ui_show_qr": "הראה קוד QR",
"com_ui_sign_in_to_domain": "היכנס אל {{0}}",
"com_ui_simple": "פשוט",
"com_ui_size": "סוג",
"com_ui_special_variables": "משתנים מיוחדים:",
"com_ui_speech_while_submitting": "לא ניתן לשלוח אודיו בזמן שנוצרת תגובה",
"com_ui_stop": "עצור",
"com_ui_storage": "אחסון",
"com_ui_submit": "שלח",
"com_ui_teach_or_explain": "למידה",
"com_ui_temporary_chat": "צ'אט זמני",
"com_ui_terms_and_conditions": "תנאים והגבלות",
"com_ui_terms_of_service": "תנאי השירות",
"com_ui_thinking": "חושב...",
"com_ui_thoughts": "מחשבות",
"com_ui_token_exchange_method": "שיטת החלפת טוקנים",
"com_ui_token_url": "קישור URL לטוקן",
"com_ui_tools": "כלים",
"com_ui_unarchive": "לארכיון",
"com_ui_unarchive_error": "אירעה שגיאה בארכיון השיחה",
"com_ui_unknown": "לא ידוע",
"com_ui_update": "עדכון",
"com_ui_upload": "העלה",
"com_ui_upload_error": "אירעה שגיאה בהעלאת הקובץ שלך",
"com_ui_upload_files": "העלה קבצים",
"com_ui_upload_success": "קובץ שהועלה בהצלחה",
"com_ui_use_prompt": "השתמש בהודעת",
"com_user_message": "אתה"
"com_ui_upload_image": "העלה תמונה",
"com_ui_upload_image_input": "העלה תמונה",
"com_ui_upload_invalid": "אין אפשרות להעלות את הקובץ. התמונה חורגת מהמגבלה",
"com_ui_upload_invalid_var": "אין אפשרות להעלות את הקובץ. התמונה צריכה להיות בגודל של עד {{0}} MB",
"com_ui_upload_success": "הקובץ הועלה בהצלחה",
"com_ui_upload_type": "בחר סוג העלאה",
"com_ui_use_micrphone": "שימוש במיקורפון",
"com_ui_use_prompt": "השתמש בהנחיה (פרומפט)",
"com_ui_variables": "משתנים",
"com_ui_version_var": "גרסה {{0}}",
"com_ui_versions": "גרסה",
"com_ui_view_source": "הצג צ'אט מקורי",
"com_ui_write": "כתיבה",
"com_ui_yes": "כן",
"com_ui_zoom": "זום",
"com_user_message": "אתה",
"com_warning_resubmit_unsupported": "שליחת הודעה מחדש אינה נתמכת עבור נקודת קצה זו."
}

View file

@ -1,45 +1,50 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
// Import your JSON translations
import translationEn from './en/translation.json';
import translationAr from './ar/translation.json';
import translationZh from './zh/translation.json';
import translationDe from './de/translation.json';
import translationEs from './es/translation.json';
import translationEt from './et/translation.json';
import translationFr from './fr/translation.json';
import translationIt from './it/translation.json';
import translationPl from './pl/translation.json';
import translationPt from './pt/translation.json';
import translationPt_BR from './pt-BR/translation.json';
import translationPt_PT from './pt-PT/translation.json';
import translationRu from './ru/translation.json';
import translationJa from './ja/translation.json';
import translationSv from './sv/translation.json';
import translationKo from './ko/translation.json';
import translationZh_Hant from './zh-Hant/translation.json';
import translationVi from './vi/translation.json';
import translationTr from './tr/translation.json';
import translationNl from './nl/translation.json';
import translationId from './id/translation.json';
import translationHe from './he/translation.json';
import translationFi from './fi/translation.json';
import translationZh_Hans from './zh-Hans/translation.json';
import translationZh_Hant from './zh-Hant/translation.json';
export const defaultNS = 'translation';
export const resources = {
en: { translation: translationEn },
ar: { translation: translationAr },
zh: { translation: translationZh },
'zh-Hans': { translation: translationZh_Hans },
'zh-Hant': { translation: translationZh_Hant },
de: { translation: translationDe },
es: { translation: translationEs },
et: { translation: translationEt },
fr: { translation: translationFr },
it: { translation: translationIt },
pl: { translation: translationPl },
pt: { translation: translationPt },
'pt-BR': { translation: translationPt_BR },
'pt-PT': { translation: translationPt_PT },
ru: { translation: translationRu },
ja: { translation: translationJa },
sv: { translation: translationSv },
ko: { translation: translationKo },
'zh-Hant': { translation: translationZh_Hant },
vi: { translation: translationVi },
tr: { translation: translationTr },
nl: { translation: translationNl },
@ -49,15 +54,21 @@ export const resources = {
} as const;
i18n
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'en',
fallbackLng: {
'zh-TW': ['zh-Hant'],
'zh-HK': ['zh-Hant'],
'zh': ['zh-Hans'],
default: ['en'],
},
fallbackNS: 'translation',
ns: ['translation'],
debug: false,
defaultNS,
resources,
interpolation: { escapeValue: false },
// Return an empty string for missing keys rather than the key itself
parseMissingKeyHandler: () => '',
});
export default i18n;

View file

@ -91,7 +91,6 @@
"com_endpoint_google_temp": "Nilai yang lebih tinggi = lebih acak, sedangkan nilai yang lebih rendah = lebih fokus dan deterministik. Kami merekomendasikan untuk mengubah ini atau Top P tetapi tidak keduanya.",
"com_endpoint_google_topk": "Top-k mengubah cara model memilih token untuk output. Top-k 1 berarti token yang dipilih adalah yang paling mungkin di antara semua token dalam kosakata model (juga disebut decoding serakah), sedangkan top-k 3 berarti token berikutnya dipilih dari antara 3 token yang paling mungkin (menggunakan temperatur).",
"com_endpoint_google_topp": "Top-p mengubah cara model memilih token untuk output. Token dipilih dari yang paling mungkin (lihat parameter topK) hingga yang paling tidak mungkin sampai jumlah probabilitas mereka sama dengan nilai top-p.",
"com_endpoint_import": "Impor",
"com_endpoint_max_output_tokens": "Token Output Maks",
"com_endpoint_message": "Pesan",
"com_endpoint_message_not_appendable": "Edit pesan Anda atau Regenerasi.",
@ -142,7 +141,6 @@
"com_nav_archive_name": "Nama",
"com_nav_archived_chats": "Percakapan Arsip",
"com_nav_archived_chats_empty": "Tidak ada percakapan yang diarsipkan.",
"com_nav_archived_chats_manage": "Pengelolaan",
"com_nav_auto_scroll": "Otomatis gulir ke Baru saat Buka",
"com_nav_balance": "Keseimbangan",
"com_nav_change_picture": "Ubah foto",
@ -169,6 +167,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -178,10 +177,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Bahasa",
@ -203,7 +203,6 @@
"com_nav_setting_general": "Umum",
"com_nav_settings": "Pengaturan",
"com_nav_shared_links": "Link berbagi",
"com_nav_shared_links_manage": "Pengeluaran",
"com_nav_theme": "Tema",
"com_nav_theme_dark": "Gelap",
"com_nav_theme_light": "Terang",
@ -248,7 +247,6 @@
"com_ui_enter": "Masuk",
"com_ui_examples": "Contoh",
"com_ui_happy_birthday": "Ini ulang tahun pertamaku!",
"com_ui_import_conversation": "Impor",
"com_ui_import_conversation_error": "Terjadi kesalahan saat mengimpor percakapan Anda",
"com_ui_import_conversation_info": "Impor percakapan dari file JSON",
"com_ui_import_conversation_success": "Percakapan berhasil diimpor",

View file

@ -179,7 +179,6 @@
"com_endpoint_google_temp": "Valori più alti = più casualità, mentre valori più bassi = più focalizzati e deterministici. Consigliamo di modificare questo o Top P ma non entrambi.",
"com_endpoint_google_topk": "Top-k cambia il modo in cui il modello seleziona i token per l'output. Un top-k di 1 significa che il token selezionato è il più probabile tra tutti i token nel vocabolario del modello (anche chiamato greedy decoding), mentre un top-k di 3 significa che il prossimo token è selezionato tra i 3 più probabili (usando la temperatura).",
"com_endpoint_google_topp": "Top-p cambia il modo in cui il modello seleziona i token per l'output. I token vengono selezionati dai più probabili K (vedi parametro topK) ai meno probabili fino a quando la somma delle loro probabilità eguaglia il valore top-p.",
"com_endpoint_import": "Importa",
"com_endpoint_instructions_assistants": "Sovrascrivi istruzioni",
"com_endpoint_instructions_assistants_placeholder": "Sovrascrive le istruzioni dell'assistente. Utile per modificare il comportamento su base singola.",
"com_endpoint_max_output_tokens": "Token di output massimi",
@ -265,7 +264,6 @@
"com_nav_archive_name": "Nome",
"com_nav_archived_chats": "Chat archiviate",
"com_nav_archived_chats_empty": "Non hai chat archiviate.",
"com_nav_archived_chats_manage": "Gestisci",
"com_nav_at_command": "Comando @",
"com_nav_at_command_description": "Attiva il comando \"@\" per cambiare endpoint, modelli, preset e altro",
"com_nav_audio_play_error": "Errore durante la riproduzione audio: {{0}}",
@ -340,6 +338,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -349,10 +348,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Lingua",
@ -386,7 +386,6 @@
"com_nav_setting_speech": "Voce",
"com_nav_settings": "Impostazioni",
"com_nav_shared_links": "Link condivisi",
"com_nav_shared_links_manage": "Gestisci",
"com_nav_show_code": "Mostra sempre il codice quando si usa l'interprete di codice",
"com_nav_show_thinking": "Apri i menu a tendina del ragionamento per impostazione predefinita",
"com_nav_slash_command": "/-Comando",
@ -601,7 +600,6 @@
"com_ui_hide_qr": "Nascondi codice QR",
"com_ui_host": "Host",
"com_ui_image_gen": "Generazione immagine",
"com_ui_import_conversation": "Importa",
"com_ui_import_conversation_error": "Si è verificato un errore durante l'importazione delle conversazioni",
"com_ui_import_conversation_file_type_error": "Tipo di importazione non supportato",
"com_ui_import_conversation_info": "Importa conversazioni da un file JSON",

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "大きい値 = ランダム性が増します。低い値 = より決定論的になります。この値を変更するか、Top P の変更をおすすめしますが、両方を変更はおすすめしません。",
"com_endpoint_google_topk": "Top-k はモデルがトークンをどのように選択して出力するかを変更します。top-kが1の場合はモデルの語彙に含まれるすべてのトークンの中で最も確率が高い1つが選択されます(greedy decodingと呼ばれている)。top-kが3の場合は上位3つのトークンの中から選択されます。(temperatureを使用)",
"com_endpoint_google_topp": "Top-p はモデルがトークンをどのように選択して出力するかを変更します。K(topKを参照)の確率の合計がtop-pの確率と等しくなるまでのトークンが選択されます。",
"com_endpoint_import": "インポート",
"com_endpoint_instructions_assistants": "指示をオーバーライドする",
"com_endpoint_instructions_assistants_placeholder": "アシスタントの指示を上書きします。これは、実行ごとに動作を変更する場合に便利です。",
"com_endpoint_max_output_tokens": "最大出力トークン数",
@ -262,7 +261,6 @@
"com_nav_archive_name": "名前",
"com_nav_archived_chats": "アーカイブされたチャット",
"com_nav_archived_chats_empty": "アーカイブされたチャットはありません",
"com_nav_archived_chats_manage": "管理",
"com_nav_at_command": "@-Command",
"com_nav_at_command_description": "コマンド\"@\"でエンドポイント、モデル、プリセットを切り替える",
"com_nav_audio_play_error": "オーディオの再生エラー: {{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "言語",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "スピーチ",
"com_nav_settings": "設定",
"com_nav_shared_links": "共有リンク",
"com_nav_shared_links_manage": "管理",
"com_nav_show_code": "Code Interpreter を使用する際は常にコードを表示する",
"com_nav_slash_command": "/-Command",
"com_nav_slash_command_description": "コマンド\"/\"でキーボードでプロンプトを選択する",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "初めての誕生日です!",
"com_ui_host": "ホスト",
"com_ui_image_gen": "画像生成",
"com_ui_import_conversation": "インポート",
"com_ui_import_conversation_error": "会話のインポート時にエラーが発生しました",
"com_ui_import_conversation_file_type_error": "サポートされていないインポート形式です",
"com_ui_import_conversation_info": "JSONファイルから会話をインポートする",

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "높은 값 = 더 무작위, 낮은 값 = 더 집중적이고 결정적입니다. 이 값을 변경하거나 Top P 중 하나만 변경하는 것을 권장합니다.",
"com_endpoint_google_topk": "Top-k는 모델이 출력에 사용할 토큰을 선택하는 방식을 변경합니다. top-k가 1인 경우 모델의 어휘 중 가장 확률이 높은 토큰이 선택됩니다(greedy decoding). top-k가 3인 경우 다음 토큰은 가장 확률이 높은 3개의 토큰 중에서 선택됩니다(temperature 사용).",
"com_endpoint_google_topp": "Top-p는 모델이 출력에 사용할 토큰을 선택하는 방식을 변경합니다. 토큰은 가장 높은 확률부터 가장 낮은 확률까지 선택됩니다. 선택된 토큰의 확률의 합이 top-p 값과 같아질 때까지 선택됩니다.",
"com_endpoint_import": "가져오기",
"com_endpoint_instructions_assistants": "에이전트 지침 재정의",
"com_endpoint_instructions_assistants_placeholder": "어시스턴트의 지침을 재정의합니다. 이를 통해 실행마다 동작을 수정할 수 있습니다.",
"com_endpoint_max_output_tokens": "최대 출력 토큰 수",
@ -262,7 +261,6 @@
"com_nav_archive_name": "이름",
"com_nav_archived_chats": "아카이브된 채팅",
"com_nav_archived_chats_empty": "아카이브된 채팅이 없습니다",
"com_nav_archived_chats_manage": "관리",
"com_nav_at_command": "@ 명령어",
"com_nav_at_command_description": "엔드포인트, 모델, 프리셋 등을 전환하는 \"@\" 명령어 토글",
"com_nav_audio_play_error": "오디오 재생 오류: {{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "언어",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "음성",
"com_nav_settings": "설정",
"com_nav_shared_links": "공유 링크",
"com_nav_shared_links_manage": "관리",
"com_nav_show_code": "코드 인터프리터 사용 시 항상 코드 표시",
"com_nav_slash_command": "슬래시 명령어",
"com_nav_slash_command_description": "키보드로 프롬프트를 선택하려면 \"/\" 명령어 토글",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "내 첫 생일이야!",
"com_ui_host": "호스트",
"com_ui_image_gen": "이미지 생성",
"com_ui_import_conversation": "가져오기",
"com_ui_import_conversation_error": "대화를 가져오는 동안 오류가 발생했습니다",
"com_ui_import_conversation_file_type_error": "가져올 수 없는 파일 형식입니다",
"com_ui_import_conversation_info": "JSON 파일에서 대화 가져오기",

View file

@ -93,7 +93,6 @@
"com_endpoint_google_temp": "Hogere waarden = meer willekeurig, terwijl lagere waarden = meer gericht en deterministisch. We raden aan dit of Top P te wijzigen, maar niet beide.",
"com_endpoint_google_topk": "Top-k verandert hoe het model tokens selecteert voor uitvoer. Een top-k van 1 betekent dat het geselecteerde token het meest waarschijnlijk is van alle tokens in de vocabulaire van het model (ook wel 'greedy decoding' genoemd), terwijl een top-k van 3 betekent dat het volgende token wordt geselecteerd uit de 3 meest waarschijnlijke tokens (met behulp van temperatuur).",
"com_endpoint_google_topp": "Top-p verandert hoe het model tokens selecteert voor uitvoer. Tokens worden geselecteerd van meest K (zie topK-parameter) waarschijnlijk tot minst waarschijnlijk totdat de som van hun kansen gelijk is aan de top-p-waarde.",
"com_endpoint_import": "Importeren",
"com_endpoint_max_output_tokens": "Max. uitvoertokens",
"com_endpoint_my_preset": "Mijn voorinstelling",
"com_endpoint_no_presets": "Nog geen voorinstellingen, gebruik de instellingenknop om er een te maken",
@ -127,7 +126,6 @@
"com_nav_archive_name": "Naam",
"com_nav_archived_chats": "Gearchiveerde chats",
"com_nav_archived_chats_empty": "Geen gearchiveerde chats",
"com_nav_archived_chats_manage": "Beheren",
"com_nav_auto_scroll": "Automatisch scrollen naar Nieuwste bij openen",
"com_nav_balance": "Evenwicht",
"com_nav_clear_all_chats": "Alle chats wissen",
@ -148,10 +146,12 @@
"com_nav_font_size": "Lettertypegrootte",
"com_nav_help_faq": "Help & FAQ",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Automatisch detecteren",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -161,10 +161,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_log_out": "Uitloggen",
@ -179,7 +180,6 @@
"com_nav_setting_general": "Algemeen",
"com_nav_settings": "Instellingen",
"com_nav_shared_links": "Gedeelde links",
"com_nav_shared_links_manage": "Beheren",
"com_nav_theme": "Thema",
"com_nav_theme_dark": "Donker",
"com_nav_theme_light": "Licht",
@ -219,7 +219,6 @@
"com_ui_enter": "Invoeren",
"com_ui_examples": "Voorbeelden",
"com_ui_happy_birthday": "Het is mijn eerste verjaardag!",
"com_ui_import_conversation": "Importeren",
"com_ui_import_conversation_error": "Er is een fout opgetreden bij het importeren van je gesprekken",
"com_ui_import_conversation_info": "Gesprekken importeren vanuit een JSON-bestand",
"com_ui_import_conversation_success": "Gesprekken succesvol geïmporteerd",

View file

@ -161,7 +161,6 @@
"com_endpoint_google_temp": "Wyższe wartości oznaczają większą losowość, natomiast niższe wartości prowadzą do bardziej skoncentrowanych i deterministycznych wyników. Zalecamy dostosowanie tej wartości lub Top P, ale nie obu jednocześnie.",
"com_endpoint_google_topk": "Top-k wpływa na sposób, w jaki model wybiera tokeny do wygenerowania odpowiedzi. Top-k 1 oznacza, że wybrany token jest najbardziej prawdopodobny spośród wszystkich tokenów w słowniku modelu (nazywane też dekodowaniem zachłannym), podczas gdy top-k 3 oznacza, że następny token jest wybierany spośród 3 najbardziej prawdopodobnych tokenów (z uwzględnieniem temperatury).",
"com_endpoint_google_topp": "Top-p wpływa na sposób, w jaki model wybiera tokeny do wygenerowania odpowiedzi. Tokeny są wybierane od najbardziej prawdopodobnych do najmniej, aż suma ich prawdopodobieństw osiągnie wartość top-p.",
"com_endpoint_import": "Importuj",
"com_endpoint_instructions_assistants": "Nadpisz instrukcje",
"com_endpoint_max_output_tokens": "Maksymalna liczba tokenów wyjściowych",
"com_endpoint_message": "Wiadomość",
@ -238,7 +237,6 @@
"com_nav_archive_name": "Nazwa",
"com_nav_archived_chats": "Zarchiwizowane rozmowy",
"com_nav_archived_chats_empty": "Nie masz żadnych zarchiwizowanych rozmów.",
"com_nav_archived_chats_manage": "Zarządzaj",
"com_nav_at_command": "Polecenie @",
"com_nav_at_command_description": "Przełącz polecenie \"@\" do przełączania punktów końcowych, modeli, presetów, itp.",
"com_nav_audio_play_error": "Błąd odtwarzania audio: {0}",
@ -308,6 +306,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -317,10 +316,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Język",
@ -353,7 +353,6 @@
"com_nav_setting_speech": "Mowa",
"com_nav_settings": "Ustawienia",
"com_nav_shared_links": "Linki udostępnione",
"com_nav_shared_links_manage": "Beheren",
"com_nav_show_code": "Zawsze pokazuj kod podczas używania interpretera kodu",
"com_nav_show_thinking": "Domyślnie otwieraj rozwijane menu myślenia",
"com_nav_slash_command": "Polecenie /",
@ -563,7 +562,6 @@
"com_ui_hide_qr": "Ukryj kod QR",
"com_ui_host": "Host",
"com_ui_image_gen": "Generowanie obrazu",
"com_ui_import_conversation": "Importuj",
"com_ui_import_conversation_error": "Wystąpił błąd podczas importowania konwersacji",
"com_ui_import_conversation_file_type_error": "Nieobsługiwany typ importu",
"com_ui_import_conversation_info": "Importuj konwersacje z pliku JSON",

View file

@ -163,7 +163,6 @@
"com_endpoint_google_temp": "Valores mais altos = mais aleatório, enquanto valores mais baixos = mais focado e determinístico. Recomendamos alterar isso ou Top P, mas não ambos.",
"com_endpoint_google_topk": "Top-k altera como o modelo seleciona tokens para saída. Um top-k de 1 significa que o token selecionado é o mais provável entre todos os tokens no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto um top-k de 3 significa que o próximo token é selecionado entre os 3 tokens mais prováveis (usando temperatura).",
"com_endpoint_google_topp": "Top-p altera como o modelo seleciona tokens para saída. Os tokens são selecionados dos mais prováveis (veja o parâmetro topK) até os menos prováveis até que a soma de suas probabilidades atinja o valor top-p.",
"com_endpoint_import": "Importar",
"com_endpoint_instructions_assistants": "Substituir Instruções",
"com_endpoint_instructions_assistants_placeholder": "Substitui as instruções do assistente. Isso é útil para modificar o comportamento em uma base por execução.",
"com_endpoint_max_output_tokens": "Máximo de Tokens de Saída",
@ -237,7 +236,6 @@
"com_nav_archive_name": "Nome",
"com_nav_archived_chats": "Chats Arquivados",
"com_nav_archived_chats_empty": "Você não tem conversas arquivadas.",
"com_nav_archived_chats_manage": "Gerenciar",
"com_nav_at_command": "Comando @",
"com_nav_at_command_description": "Alternar comando \"@\" para alternar endpoints, modelos, predefinições, etc.",
"com_nav_audio_play_error": "Erro ao reproduzir áudio: {{0}}",
@ -308,6 +306,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -317,10 +316,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Idioma",
@ -351,7 +351,6 @@
"com_nav_setting_speech": "Fala",
"com_nav_settings": "Configurações",
"com_nav_shared_links": "Links compartilhados",
"com_nav_shared_links_manage": "Gerenciar",
"com_nav_show_code": "Sempre mostrar código ao usar o interpretador de código",
"com_nav_slash_command": "Comando /",
"com_nav_slash_command_description": "Alternar comando \"/\" para selecionar um prompt via teclado",
@ -528,7 +527,6 @@
"com_ui_happy_birthday": "É meu 1º aniversário!",
"com_ui_host": "Host",
"com_ui_image_gen": "Geração de Imagem",
"com_ui_import_conversation": "Importar",
"com_ui_import_conversation_error": "Houve um erro ao importar suas conversas",
"com_ui_import_conversation_file_type_error": "Tipo de importação não suportado",
"com_ui_import_conversation_info": "Importar conversas de um arquivo JSON",

View file

@ -0,0 +1,785 @@
{
"com_a11y_ai_composing": "A IA ainda está a escrever.",
"com_a11y_end": "A IA terminou de responder.",
"com_a11y_start": "A IA começou a responder.",
"com_agents_allow_editing": "Permitir que outros utilizadores editem o seu agente",
"com_agents_by_librechat": "por LibreChat",
"com_agents_code_interpreter": "Quando ativo, permite que os seus agentes usem a API de Interpretação de código do LibreChat para correr código gerado, inclusivé processamento de ficheiros em segurança. Requer uma chave API válida.",
"com_agents_code_interpreter_title": "API de Interpretação de Código",
"com_agents_create_error": "Houve um erro ao criar seu agente.",
"com_agents_description_placeholder": "Opcional: Descreva seu Agente aqui",
"com_agents_enable_file_search": "Permitir Pesquisa de Ficheiros.",
"com_agents_file_search_disabled": "O Agente deve ser criado antes carregar ficheiros para Pesquisar.",
"com_agents_file_search_info": "Quando ativo, os agentes serão informados dos nomes de ficheiros listados abaixo, permitindo aos mesmos a extração de contexto relevante.",
"com_agents_instructions_placeholder": "As instruções do sistema que o agente usa",
"com_agents_missing_provider_model": "Por favor, escolhe um provedor e modelo antes de criar um agente.",
"com_agents_name_placeholder": "Opcional: O nome do agente",
"com_agents_no_access": "Não tens permissões para editar este agente.",
"com_agents_not_available": "Agente não disponível.",
"com_agents_search_name": "Pesquisar agentes por nome",
"com_agents_update_error": "Houve um erro ao atualizar seu agente.",
"com_assistants_action_attempt": "Assistente quer falar com {{0}}",
"com_assistants_actions": "Ações",
"com_assistants_actions_disabled": "Você precisa criar um assistente antes de adicionar ações.",
"com_assistants_actions_info": "Permita que seu Assistente recupere informações ou execute ações via API's",
"com_assistants_add_actions": "Adicionar Ações",
"com_assistants_add_tools": "Adicionar Ferramentas",
"com_assistants_allow_sites_you_trust": "Apenas permitir sites que confia.",
"com_assistants_append_date": "Anexar Data e Hora Atual",
"com_assistants_append_date_tooltip": "Quando ativado, a data e hora atual do cliente serão anexadas às instruções do sistema do assistente.",
"com_assistants_attempt_info": "O Assistente quer enviar o seguinte:",
"com_assistants_available_actions": "Ações Disponíveis",
"com_assistants_capabilities": "Capacidades",
"com_assistants_code_interpreter": "Interpretador de Código",
"com_assistants_code_interpreter_files": "Os arquivos abaixo são apenas para o Interpretador de Código:",
"com_assistants_code_interpreter_info": "O Interpretador de Código permite que o assistente escreva e execute código. Esta ferramenta pode processar arquivos com dados e formatações diversas, e gerar arquivos como gráficos.",
"com_assistants_completed_action": "Conversou com {{0}}",
"com_assistants_completed_function": "Executou {{0}}",
"com_assistants_conversation_starters": "Iniciadores de Conversa",
"com_assistants_conversation_starters_placeholder": "Digite um iniciador de conversa",
"com_assistants_create_error": "Houve um erro ao criar seu assistente.",
"com_assistants_create_success": "Criado com sucesso",
"com_assistants_delete_actions_error": "Houve um erro ao excluir a ação.",
"com_assistants_delete_actions_success": "Ação excluída com sucesso do Assistente",
"com_assistants_description_placeholder": "Opcional: Descreva seu Assistente aqui",
"com_assistants_domain_info": "Assistente enviou esta informação para {{0}}",
"com_assistants_file_search": "Pesquisa de Arquivos",
"com_assistants_file_search_info": "A pesquisa de arquivos permite que o assistente tenha conhecimento dos arquivos que você ou seus usuários carregam. Uma vez que um arquivo é carregado, o assistente decide automaticamente quando recuperar o conteúdo com base nas solicitações do usuário. Anexar armazenamentos vetoriais para Pesquisa de Arquivos ainda não é suportado. Você pode anexá-los no Playground do Provedor ou anexar arquivos às mensagens para pesquisa de arquivos em uma base de thread.",
"com_assistants_function_use": "Assistente usou {{0}}",
"com_assistants_image_vision": "Visão de Imagem",
"com_assistants_instructions_placeholder": "As instruções do sistema que o assistente usa",
"com_assistants_knowledge": "Conhecimento",
"com_assistants_knowledge_disabled": "O assistente deve ser criado, e o Interpretador de Código ou Recuperação deve ser habilitado e salvo antes de carregar arquivos como Conhecimento.",
"com_assistants_knowledge_info": "Se você carregar arquivos em Conhecimento, as conversas com seu Assistente podem incluir o conteúdo dos arquivos.",
"com_assistants_max_starters_reached": "Número máximo de iniciadores de conversa atingido",
"com_assistants_name_placeholder": "Opcional: O nome do assistente",
"com_assistants_non_retrieval_model": "A pesquisa de arquivos não está habilitada neste modelo. Por favor, selecione outro modelo.",
"com_assistants_retrieval": "Recuperação",
"com_assistants_running_action": "Executando ação",
"com_assistants_search_name": "Pesquisar assistentes por nome",
"com_assistants_update_actions_error": "Houve um erro ao criar ou atualizar a ação.",
"com_assistants_update_actions_success": "Ação criada ou atualizada com sucesso",
"com_assistants_update_error": "Houve um erro ao atualizar seu assistente.",
"com_assistants_update_success": "Atualizado com sucesso",
"com_auth_already_have_account": "Já tem uma conta?",
"com_auth_apple_login": "Autenticar com a Apple.",
"com_auth_back_to_login": "Voltar para Login",
"com_auth_click": "Clique",
"com_auth_click_here": "Clique aqui",
"com_auth_continue": "Continuar",
"com_auth_create_account": "Criar sua conta",
"com_auth_discord_login": "Continuar com Discord",
"com_auth_email": "E-mail",
"com_auth_email_address": "Endereço de e-mail",
"com_auth_email_max_length": "O e-mail não deve ter mais de 120 caracteres",
"com_auth_email_min_length": "O e-mail deve ter pelo menos 6 caracteres",
"com_auth_email_pattern": "Você deve inserir um endereço de e-mail válido",
"com_auth_email_required": "E-mail é obrigatório",
"com_auth_email_resend_link": "Reenviar E-mail",
"com_auth_email_resent_failed": "Falha ao reenviar e-mail de verificação",
"com_auth_email_resent_success": "E-mail de verificação reenviado com sucesso",
"com_auth_email_verification_failed": "Falha na verificação de e-mail",
"com_auth_email_verification_failed_token_missing": "Falha na verificação, token ausente",
"com_auth_email_verification_in_progress": "Verificando seu e-mail, por favor, aguarde",
"com_auth_email_verification_invalid": "Verificação de e-mail inválida",
"com_auth_email_verification_redirecting": "Redirecionando em {{0}} segundos...",
"com_auth_email_verification_resend_prompt": "Não recebeu o e-mail?",
"com_auth_email_verification_success": "E-mail verificado com sucesso",
"com_auth_error_create": "Houve um erro ao tentar registrar sua conta. Por favor, tente novamente.",
"com_auth_error_invalid_reset_token": "Este token de redefinição de senha não é mais válido.",
"com_auth_error_login": "Não foi possível fazer login com as informações fornecidas. Por favor, verifique suas credenciais e tente novamente.",
"com_auth_error_login_ban": "Sua conta foi temporariamente banida devido a violações do nosso serviço.",
"com_auth_error_login_rl": "Muitas tentativas de login em um curto período de tempo. Por favor, tente novamente mais tarde.",
"com_auth_error_login_server": "Houve um erro interno no servidor. Por favor, aguarde alguns momentos e tente novamente.",
"com_auth_error_login_unverified": "Sua conta não foi verificada. Por favor, verifique seu e-mail para um link de verificação.",
"com_auth_facebook_login": "Continuar com Facebook",
"com_auth_full_name": "Nome completo",
"com_auth_github_login": "Continuar com Github",
"com_auth_google_login": "Continuar com Google",
"com_auth_here": "AQUI",
"com_auth_login": "Entrar",
"com_auth_login_with_new_password": "Agora você pode fazer login com sua nova senha.",
"com_auth_name_max_length": "O nome deve ter menos de 80 caracteres",
"com_auth_name_min_length": "O nome deve ter pelo menos 3 caracteres",
"com_auth_name_required": "Nome é obrigatório",
"com_auth_no_account": "Não tem uma conta?",
"com_auth_password": "Senha",
"com_auth_password_confirm": "Confirmar senha",
"com_auth_password_forgot": "Esqueceu a senha?",
"com_auth_password_max_length": "A senha deve ter menos de 128 caracteres",
"com_auth_password_min_length": "A senha deve ter pelo menos 8 caracteres",
"com_auth_password_not_match": "As senhas não coincidem",
"com_auth_password_required": "Senha é obrigatória",
"com_auth_registration_success_generic": "Por favor, verifique seu e-mail para verificar seu endereço de e-mail.",
"com_auth_registration_success_insecure": "Registro bem-sucedido.",
"com_auth_reset_password": "Redefinir sua senha",
"com_auth_reset_password_if_email_exists": "Se uma conta com esse e-mail existir, um e-mail com instruções para redefinir a senha foi enviado. Certifique-se de verificar sua pasta de spam.",
"com_auth_reset_password_link_sent": "E-mail enviado",
"com_auth_reset_password_success": "Senha redefinida com sucesso",
"com_auth_sign_in": "Entrar",
"com_auth_sign_up": "Inscrever-se",
"com_auth_submit_registration": "Enviar registro",
"com_auth_to_reset_your_password": "para redefinir sua senha.",
"com_auth_to_try_again": "para tentar novamente.",
"com_auth_username": "Nome de usuário (opcional)",
"com_auth_username_max_length": "O nome de usuário deve ter menos de 20 caracteres",
"com_auth_username_min_length": "O nome de usuário deve ter pelo menos 2 caracteres",
"com_auth_welcome_back": "Bem-vindo de volta",
"com_click_to_download": "(Carrega aqui para descarregar)",
"com_download_expired": "(Ficheiro expirado)",
"com_download_expires": "(carrega aqui para descarregar - expira a {{0}})",
"com_endpoint": "Endpoint",
"com_endpoint_agent": "Agente",
"com_endpoint_agent_model": "Modelo de Agente (Recomendado: GPT-3.5)",
"com_endpoint_agent_placeholder": "Por favor, seleciona um Agente.",
"com_endpoint_ai": "IA",
"com_endpoint_anthropic_maxoutputtokens": "Número máximo de tokens que podem ser gerados na resposta. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. Nota: os modelos podem parar antes de atingir esse máximo.",
"com_endpoint_anthropic_prompt_cache": "O cache de prompt permite reutilizar um grande contexto ou instruções em chamadas de API, reduzindo custos e latência",
"com_endpoint_anthropic_temp": "Varia de 0 a 1. Use temperatura mais próxima de 0 para tarefas analíticas / de múltipla escolha, e mais próxima de 1 para tarefas criativas e generativas. Recomendamos alterar isso ou Top P, mas não ambos.",
"com_endpoint_anthropic_topk": "Top-k altera como o modelo seleciona tokens para saída. Um top-k de 1 significa que o token selecionado é o mais provável entre todos os tokens no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto um top-k de 3 significa que o próximo token é selecionado entre os 3 tokens mais prováveis (usando temperatura).",
"com_endpoint_anthropic_topp": "Top-p altera como o modelo seleciona tokens para saída. Os tokens são selecionados dos mais prováveis (veja o parâmetro topK) até os menos prováveis até que a soma de suas probabilidades atinja o valor top-p.",
"com_endpoint_assistant": "Assistente",
"com_endpoint_assistant_model": "Modelo de Assistente",
"com_endpoint_assistant_placeholder": "Por favor, selecione um Assistente no Painel Lateral Direito",
"com_endpoint_completion": "Conclusão",
"com_endpoint_completion_model": "Modelo de Conclusão (Recomendado: GPT-4)",
"com_endpoint_config_click_here": "Clique Aqui",
"com_endpoint_config_google_api_info": "Para obter sua chave API de Linguagem Generativa (para Gemini),",
"com_endpoint_config_google_api_key": "Chave API do Google",
"com_endpoint_config_google_cloud_platform": "(do Google Cloud Platform)",
"com_endpoint_config_google_gemini_api": "(API Gemini)",
"com_endpoint_config_google_service_key": "Chave de Conta de Serviço do Google",
"com_endpoint_config_key": "Definir Chave API",
"com_endpoint_config_key_encryption": "Sua chave será criptografada e excluída em",
"com_endpoint_config_key_for": "Definir Chave API para",
"com_endpoint_config_key_google_need_to": "Você precisa",
"com_endpoint_config_key_google_service_account": "Criar uma Conta de Serviço",
"com_endpoint_config_key_google_vertex_ai": "Habilitar Vertex AI",
"com_endpoint_config_key_google_vertex_api": "API no Google Cloud, então",
"com_endpoint_config_key_google_vertex_api_role": "Certifique-se de clicar em \"Criar e Continuar\" para dar pelo menos o papel de \"Usuário do Vertex AI\". Por fim, crie uma chave JSON para importar aqui.",
"com_endpoint_config_key_import_json_key": "Importar Chave JSON da Conta de Serviço.",
"com_endpoint_config_key_import_json_key_invalid": "Chave JSON da Conta de Serviço Inválida, Você importou o arquivo correto?",
"com_endpoint_config_key_import_json_key_success": "Chave JSON da Conta de Serviço Importada com Sucesso",
"com_endpoint_config_key_name": "Chave",
"com_endpoint_config_key_never_expires": "Sua chave nunca expira",
"com_endpoint_config_placeholder": "Defina sua Chave no menu do Cabeçalho para conversar.",
"com_endpoint_config_value": "Insira o valor para",
"com_endpoint_context": "Contexto",
"com_endpoint_context_info": "O número máximo de tokens que podem ser usados para contexto. Use isso para controlar quantos tokens são enviados por solicitação. Se não especificado, usará os padrões do sistema com base no tamanho do contexto dos modelos conhecidos. Definir valores mais altos pode resultar em erros e/ou maior custo de tokens.",
"com_endpoint_context_tokens": "Máximo de Tokens de Contexto",
"com_endpoint_custom_name": "Nome Personalizado",
"com_endpoint_default": "padrão",
"com_endpoint_default_blank": "padrão: em branco",
"com_endpoint_default_empty": "padrão: vazio",
"com_endpoint_default_with_num": "padrão: {{0}}",
"com_endpoint_examples": "Presets",
"com_endpoint_export": "Exportar",
"com_endpoint_export_share": "Exportar/Compartilhar",
"com_endpoint_frequency_penalty": "Penalidade de Frequência",
"com_endpoint_func_hover": "Habilitar uso de Plugins como Funções OpenAI",
"com_endpoint_google_custom_name_placeholder": "Defina um nome personalizado para o Google",
"com_endpoint_google_maxoutputtokens": "Número máximo de tokens que podem ser gerados na resposta. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. Nota: os modelos podem parar antes de atingir esse máximo.",
"com_endpoint_google_temp": "Valores mais altos = mais aleatório, enquanto valores mais baixos = mais focado e determinístico. Recomendamos alterar isso ou Top P, mas não ambos.",
"com_endpoint_google_topk": "Top-k altera como o modelo seleciona tokens para saída. Um top-k de 1 significa que o token selecionado é o mais provável entre todos os tokens no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto um top-k de 3 significa que o próximo token é selecionado entre os 3 tokens mais prováveis (usando temperatura).",
"com_endpoint_google_topp": "Top-p altera como o modelo seleciona tokens para saída. Os tokens são selecionados dos mais prováveis (veja o parâmetro topK) até os menos prováveis até que a soma de suas probabilidades atinja o valor top-p.",
"com_endpoint_instructions_assistants": "Substituir Instruções",
"com_endpoint_instructions_assistants_placeholder": "Substitui as instruções do assistente. Isso é útil para modificar o comportamento em uma base por execução.",
"com_endpoint_max_output_tokens": "Máximo de Tokens de Saída",
"com_endpoint_message": "Mensagem",
"com_endpoint_message_new": "Mensagem {{0}}",
"com_endpoint_message_not_appendable": "Edite sua mensagem ou Regenerar.",
"com_endpoint_my_preset": "Meu Preset",
"com_endpoint_no_presets": "Ainda não há presets, use o botão de configurações para criar um",
"com_endpoint_open_menu": "Abrir Menu",
"com_endpoint_openai_custom_name_placeholder": "Defina um nome personalizado para a IA",
"com_endpoint_openai_detail": "A resolução para solicitações de Visão. \"Baixa\" é mais barata e rápida, \"Alta\" é mais detalhada e cara, e \"Auto\" escolherá automaticamente entre as duas com base na resolução da imagem.",
"com_endpoint_openai_freq": "Número entre -2.0 e 2.0. Valores positivos penalizam novos tokens com base em sua frequência existente no texto até agora, diminuindo a probabilidade do modelo de repetir a mesma linha literalmente.",
"com_endpoint_openai_max": "O máximo de tokens para gerar. O comprimento total dos tokens de entrada e dos tokens gerados é limitado pelo comprimento do contexto do modelo.",
"com_endpoint_openai_max_tokens": "Campo opcional `max_tokens`, representando o número máximo de tokens que podem ser gerados na conclusão do chat. O comprimento total dos tokens de entrada e dos tokens gerados é limitado pelo comprimento do contexto dos modelos. Você pode experimentar erros se esse número exceder o máximo de tokens de contexto.",
"com_endpoint_openai_pres": "Número entre -2.0 e 2.0. Valores positivos penalizam novos tokens com base em sua presença no texto até agora, aumentando a probabilidade do modelo de falar sobre novos tópicos.",
"com_endpoint_openai_prompt_prefix_placeholder": "Defina instruções personalizadas para incluir na Mensagem do Sistema. Padrão: nenhuma",
"com_endpoint_openai_reasoning_effort": "Apenas para modelos o1: Restringir o esforço de raciocínio. Isto poderá resultar em respostas mais rápidas e menos tokens usados na lógica da resposta.",
"com_endpoint_openai_resend": "Reenviar todas as imagens anexadas anteriormente. Nota: isso pode aumentar significativamente o custo de tokens e você pode experimentar erros com muitos anexos de imagem.",
"com_endpoint_openai_resend_files": "Reenviar todos os arquivos anexados anteriormente. Nota: isso aumentará o custo de tokens e você pode experimentar erros com muitos anexos.",
"com_endpoint_openai_stop": "Até 4 sequências onde a API parará de gerar mais tokens.",
"com_endpoint_openai_temp": "Valores mais altos = mais aleatório, enquanto valores mais baixos = mais focado e determinístico. Recomendamos alterar isso ou Top P, mas não ambos.",
"com_endpoint_openai_topp": "Uma alternativa à amostragem com temperatura, chamada amostragem de núcleo, onde o modelo considera os resultados dos tokens com massa de probabilidade top_p. Então, 0.1 significa que apenas os tokens que compreendem os 10% principais da massa de probabilidade são considerados. Recomendamos alterar isso ou a temperatura, mas não ambos.",
"com_endpoint_output": "Saída",
"com_endpoint_plug_image_detail": "Detalhe da Imagem",
"com_endpoint_plug_resend_files": "Reenviar Arquivos",
"com_endpoint_plug_set_custom_instructions_for_gpt_placeholder": "Defina instruções personalizadas para incluir na Mensagem do Sistema. Padrão: nenhuma",
"com_endpoint_plug_skip_completion": "Pular Conclusão",
"com_endpoint_plug_use_functions": "Usar Funções",
"com_endpoint_presence_penalty": "Penalidade de Presença",
"com_endpoint_preset": "preset",
"com_endpoint_preset_default": "é agora o preset padrão.",
"com_endpoint_preset_default_item": "Padrão:",
"com_endpoint_preset_default_none": "Nenhum preset padrão ativo.",
"com_endpoint_preset_default_removed": "não é mais o preset padrão.",
"com_endpoint_preset_delete_confirm": "Tem certeza de que deseja excluir este preset?",
"com_endpoint_preset_delete_error": "Houve um erro ao excluir seu preset. Por favor, tente novamente.",
"com_endpoint_preset_import": "Preset Importado!",
"com_endpoint_preset_import_error": "Houve um erro ao importar seu preset. Por favor, tente novamente.",
"com_endpoint_preset_name": "Nome do Preset",
"com_endpoint_preset_save_error": "Houve um erro ao salvar seu preset. Por favor, tente novamente.",
"com_endpoint_preset_selected": "Preset Ativo!",
"com_endpoint_preset_selected_title": "Ativo!",
"com_endpoint_preset_title": "Preset",
"com_endpoint_presets": "presets",
"com_endpoint_presets_clear_warning": "Tem certeza de que deseja limpar todos os presets? Isso é irreversível.",
"com_endpoint_prompt_cache": "Usar Cache de Prompt",
"com_endpoint_prompt_prefix": "Instruções Personalizadas",
"com_endpoint_prompt_prefix_assistants": "Instruções Adicionais",
"com_endpoint_prompt_prefix_assistants_placeholder": "Defina instruções ou contexto adicionais além das instruções principais do Assistente. Ignorado se vazio.",
"com_endpoint_prompt_prefix_placeholder": "Defina instruções ou contexto personalizados. Ignorado se vazio.",
"com_endpoint_reasoning_effort": "Esforço de raciocínio",
"com_endpoint_save_as_preset": "Salvar Como Preset",
"com_endpoint_search": "Procurar endereço por nome",
"com_endpoint_set_custom_name": "Defina um nome personalizado, caso você possa encontrar este preset",
"com_endpoint_skip_hover": "Habilitar pular a etapa de conclusão, que revisa a resposta final e os passos gerados",
"com_endpoint_stop": "Sequências de Parada",
"com_endpoint_stop_placeholder": "Separe os valores pressionando `Enter`",
"com_endpoint_temperature": "Temperatura",
"com_endpoint_top_k": "Top K",
"com_endpoint_top_p": "Top P",
"com_endpoint_use_active_assistant": "Usar Assistente Ativo",
"com_error_expired_user_key": "A chave fornecida para {{0}} expirou em {{1}}. Por favor, forneça uma nova chave e tente novamente.",
"com_error_files_dupe": "Ficheiro duplicado detectado",
"com_error_files_empty": "Ficheiros vazios não são permitidos.",
"com_error_files_process": "Ocorreu um erro ao processar o ficheiro.",
"com_error_files_unsupported_capability": "Não existem funcionalidades ativas que suportem este tipo de ficheiro.",
"com_error_files_upload": "Ocorreu um erro ao enviar o ficheiro.",
"com_error_files_upload_canceled": "O enviar do ficheiro foi cancelado. Nota: O envio pode estar ainda a ser processado e poderá necessitar de ser apagado manualmente.",
"com_error_files_validation": "Ocorreu um erro ao validar o ficheiro.",
"com_error_input_length": "A contagem de tokens da última mensagem é muito longa, excedendo o limite de tokens ({{0}} respectivamente). Por favor, encurte sua mensagem, ajuste o tamanho máximo do contexto nos parâmetros da conversa ou divida a conversa para continuar.",
"com_error_invalid_user_key": "Chave fornecida inválida. Por favor, forneça uma chave válida e tente novamente.",
"com_error_moderation": "Parece que o conteúdo enviado foi sinalizado pelo nosso sistema de moderação por não estar alinhado com nossas diretrizes da comunidade. Não podemos prosseguir com este tópico específico. Se você tiver outras perguntas ou tópicos que gostaria de explorar, edite sua mensagem ou crie uma nova conversa.",
"com_error_no_base_url": "Nenhuma URL base encontrada. Por favor, forneça uma e tente novamente.",
"com_error_no_user_key": "Nenhuma chave encontrada. Por favor, forneça uma chave e tente novamente.",
"com_files_filter": "Filtrar arquivos...",
"com_files_no_results": "Nenhum resultado.",
"com_files_number_selected": "{{0}} de {{1}} arquivo(s) selecionado(s)",
"com_generated_files": "Ficheiros gerados:",
"com_hide_examples": "Ocultar Exemplos",
"com_nav_account_settings": "Configurações da Conta",
"com_nav_always_make_prod": "Sempre tornar novas versões produção",
"com_nav_archive_created_at": "Data de Arquivamento",
"com_nav_archive_name": "Nome",
"com_nav_archived_chats": "Chats Arquivados",
"com_nav_archived_chats_empty": "Você não tem conversas arquivadas.",
"com_nav_at_command": "Comando @",
"com_nav_at_command_description": "Alternar comando \"@\" para alternar endpoints, modelos, predefinições, etc.",
"com_nav_audio_play_error": "Erro ao reproduzir áudio: {{0}}",
"com_nav_audio_process_error": "Erro ao processar áudio: {{0}}",
"com_nav_auto_scroll": "Rolagem Automática para a última mensagem ao abrir o chat",
"com_nav_auto_send_prompts": "Enviar prompts automaticamente",
"com_nav_auto_send_text": "Enviar texto automaticamente",
"com_nav_auto_send_text_disabled": "definir -1 para desativar",
"com_nav_auto_transcribe_audio": "Transcrever áudio automaticamente",
"com_nav_automatic_playback": "Reprodução Automática da Última Mensagem",
"com_nav_balance": "Equilíbrio",
"com_nav_browser": "Navegador",
"com_nav_buffer_append_error": "Problema com o streaming de áudio. A reprodução pode ser interrompida.",
"com_nav_change_picture": "Mudar foto",
"com_nav_chat_commands": "Comandos de conversa",
"com_nav_chat_commands_info": "Estes comandos são ativados ao escrever caracteres específicos no início da sua mensagem. Cada comando corre segundo o seu prefixo. Poderá desligar os mesmos se usa esses caracteres no início das suas mensagens com alguma frequência.",
"com_nav_chat_direction": "Direção do chat",
"com_nav_clear_all_chats": "Limpar todos os chats",
"com_nav_clear_cache_confirm_message": "Tem a certeza que pretende apagar a cache?",
"com_nav_clear_conversation": "Limpar conversas",
"com_nav_clear_conversation_confirm_message": "Tem certeza de que deseja limpar todas as conversas? Isso é irreversível.",
"com_nav_close_sidebar": "Fechar barra lateral",
"com_nav_commands": "Comandos",
"com_nav_confirm_clear": "Confirmar Limpeza",
"com_nav_conversation_mode": "Modo de Conversa",
"com_nav_convo_menu_options": "Opções do Menu de Conversa",
"com_nav_db_sensitivity": "Sensibilidade de decibéis",
"com_nav_delete_account": "Excluir conta",
"com_nav_delete_account_button": "Excluir minha conta permanentemente",
"com_nav_delete_account_confirm": "Excluir conta - você tem certeza?",
"com_nav_delete_account_email_placeholder": "Por favor, insira o e-mail da sua conta",
"com_nav_delete_cache_storage": "Excluir armazenamento de cache TTS",
"com_nav_delete_data_info": "Todos os seus dados serão excluídos.",
"com_nav_delete_warning": "AVISO: Isso excluirá permanentemente sua conta.",
"com_nav_edge": "Edge",
"com_nav_enable_cache_tts": "Habilitar cache TTS",
"com_nav_enable_cloud_browser_voice": "Usar vozes baseadas na nuvem",
"com_nav_enabled": "Habilitado",
"com_nav_engine": "Motor",
"com_nav_enter_to_send": "Pressione Enter para enviar mensagens",
"com_nav_export": "Exportar",
"com_nav_export_all_message_branches": "Exportar todos os ramos de mensagens",
"com_nav_export_conversation": "Exportar conversa",
"com_nav_export_filename": "Nome do arquivo",
"com_nav_export_filename_placeholder": "Definir o nome do arquivo",
"com_nav_export_include_endpoint_options": "Incluir opções de endpoint",
"com_nav_export_recursive": "Recursivo",
"com_nav_export_recursive_or_sequential": "Recursivo ou sequencial?",
"com_nav_export_type": "Tipo",
"com_nav_external": "Externo",
"com_nav_font_size": "Tamanho da Fonte da Mensagem",
"com_nav_font_size_base": "Médio",
"com_nav_font_size_lg": "Grande",
"com_nav_font_size_sm": "Pequeno",
"com_nav_font_size_xl": "Extra Grande",
"com_nav_font_size_xs": "Extra Pequeno",
"com_nav_help_faq": "Ajuda & FAQ",
"com_nav_hide_panel": "Ocultar painel mais à direita",
"com_nav_info_code_artifacts": "Habilita a exibição de artefatos de código experimental ao lado do chat",
"com_nav_info_code_artifacts_agent": "Permitir o uso de artefactos de código por este agente. Por defeito, instruções adicionais específicas ao uso de artefactos são adicionadas, caso o \"Modo de comando personalizado\" esteja ativo.",
"com_nav_info_custom_prompt_mode": "Quando habilitado, o prompt padrão do sistema de artefatos não será incluído. Todas as instruções de geração de artefatos devem ser fornecidas manualmente neste modo.",
"com_nav_info_enter_to_send": "Quando habilitado, pressionar `ENTER` enviará sua mensagem. Quando desabilitado, pressionar Enter adicionará uma nova linha, e você precisará pressionar `CTRL + ENTER` / `⌘ + ENTER` para enviar sua mensagem.",
"com_nav_info_fork_change_default": "`Apenas mensagens visíveis` inclui apenas o caminho direto para a mensagem selecionada. `Incluir ramos relacionados` adiciona ramos ao longo do caminho. `Incluir tudo de/para aqui` inclui todas as mensagens e ramos conectados.",
"com_nav_info_fork_split_target_setting": "Quando habilitado, a bifurcação começará da mensagem alvo até a última mensagem na conversa, de acordo com o comportamento selecionado.",
"com_nav_info_include_shadcnui": "Quando habilitado, as instruções para usar componentes shadcn/ui serão incluídas. shadcn/ui é uma coleção de componentes reutilizáveis construídos usando Radix UI e Tailwind CSS. Nota: estas são instruções longas, você deve habilitar apenas se for importante informar o LLM sobre as importações e componentes corretos. Para mais informações sobre esses componentes, visite: https://ui.shadcn.com/",
"com_nav_info_latex_parsing": "Quando habilitado, o código LaTeX nas mensagens será renderizado como equações matemáticas. Desabilitar isso pode melhorar o desempenho se você não precisar de renderização LaTeX.",
"com_nav_info_save_draft": "Quando habilitado, o texto e os anexos que você inserir no formulário de chat serão salvos automaticamente localmente como rascunhos. Esses rascunhos estarão disponíveis mesmo se você recarregar a página ou mudar para uma conversa diferente. Os rascunhos são armazenados localmente no seu dispositivo e são excluídos uma vez que a mensagem é enviada.",
"com_nav_info_user_name_display": "Quando habilitado, o nome de usuário do remetente será mostrado acima de cada mensagem que você enviar. Quando desabilitado, você verá apenas \"Você\" acima de suas mensagens.",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Detecção automática",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
"com_nav_lang_hebrew": "עברית",
"com_nav_lang_indonesia": "Indonesia",
"com_nav_lang_italian": "Italiano",
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Idioma",
"com_nav_latex_parsing": "Análise de LaTeX em mensagens (pode afetar o desempenho)",
"com_nav_log_out": "Sair",
"com_nav_long_audio_warning": "Textos mais longos levarão mais tempo para processar.",
"com_nav_maximize_chat_space": "Maximizar espaço de conversa",
"com_nav_modular_chat": "Habilitar troca de Endpoints no meio da conversa",
"com_nav_my_files": "Meus Arquivos",
"com_nav_no_search_results": "0 Resultados encontrados",
"com_nav_not_supported": "Não Suportado",
"com_nav_open_sidebar": "Abrir barra lateral",
"com_nav_playback_rate": "Taxa de Reprodução de Áudio",
"com_nav_plugin_auth_error": "Houve um erro ao tentar autenticar este plugin. Por favor, tente novamente.",
"com_nav_plugin_install": "Instalar",
"com_nav_plugin_search": "Buscar plugins",
"com_nav_plugin_store": "Loja de Plugins",
"com_nav_plugin_uninstall": "Desinstalar",
"com_nav_plus_command": "Comando +",
"com_nav_plus_command_description": "Alternar comando \"+\" para adicionar uma configuração de resposta múltipla",
"com_nav_profile_picture": "Foto de Perfil",
"com_nav_save_drafts": "Salvar rascunhos localmente",
"com_nav_scroll_button": "Botão de ir para o fim",
"com_nav_search_placeholder": "Buscar mensagens",
"com_nav_send_message": "Enviar mensagem",
"com_nav_setting_account": "Conta",
"com_nav_setting_beta": "Recursos beta",
"com_nav_setting_chat": "Chat",
"com_nav_setting_data": "Controles de dados",
"com_nav_setting_general": "Geral",
"com_nav_setting_speech": "Fala",
"com_nav_settings": "Configurações",
"com_nav_shared_links": "Links compartilhados",
"com_nav_show_code": "Sempre mostrar código ao usar o interpretador de código",
"com_nav_show_thinking": "Abrir Dropdown de lógica por defeito.",
"com_nav_slash_command": "Comando /",
"com_nav_slash_command_description": "Alternar comando \"/\" para selecionar um prompt via teclado",
"com_nav_source_buffer_error": "Erro ao configurar a reprodução de áudio. Por favor, atualize a página.",
"com_nav_speech_cancel_error": "Não foi possível parar a reprodução de áudio. Você pode precisar atualizar a página.",
"com_nav_speech_to_text": "Fala para Texto",
"com_nav_stop_generating": "Parar de gerar",
"com_nav_text_to_speech": "Texto para Fala",
"com_nav_theme": "Tema",
"com_nav_theme_dark": "Escuro",
"com_nav_theme_light": "Claro",
"com_nav_theme_system": "Sistema",
"com_nav_tool_dialog": "Ferramentas do Assistente",
"com_nav_tool_dialog_agents": "Ferramentas do Agente",
"com_nav_tool_dialog_description": "O assistente deve ser salvo para persistir as seleções de ferramentas.",
"com_nav_tool_remove": "Remover",
"com_nav_tool_search": "Buscar ferramentas",
"com_nav_tts_init_error": "Falha ao inicializar texto-para-fala: {{0}}",
"com_nav_tts_unsupported_error": "Texto-para-fala para o mecanismo selecionado não é suportado neste navegador.",
"com_nav_user": "USUÁRIO",
"com_nav_user_msg_markdown": "Mostrar as mensagens do utilizador como markdown",
"com_nav_user_name_display": "Exibir nome de usuário nas mensagens",
"com_nav_voice_select": "Voz",
"com_nav_voices_fetch_error": "Não foi possível recuperar as opções de voz. Por favor, verifique sua conexão com a internet.",
"com_nav_welcome_agent": "Por favor, seleciona um Agente.",
"com_nav_welcome_assistant": "Por favor, Selecione um Assistente",
"com_nav_welcome_message": "Como posso ajudar você hoje?",
"com_show_agent_settings": "Mostrar Configurações do Agente",
"com_show_completion_settings": "Mostrar Configurações de Conclusão",
"com_show_examples": "Mostrar Exemplos",
"com_sidepanel_agent_builder": "Construtor de Agente",
"com_sidepanel_assistant_builder": "Construtor de Assistente",
"com_sidepanel_attach_files": "Anexar Arquivos",
"com_sidepanel_conversation_tags": "Marcadores",
"com_sidepanel_hide_panel": "Ocultar Painel",
"com_sidepanel_manage_files": "Gerenciar Arquivos",
"com_sidepanel_parameters": "Parâmetros",
"com_sidepanel_select_agent": "Seleciona um Agente.",
"com_sidepanel_select_assistant": "Selecionar um Assistente",
"com_ui_accept": "Eu aceito",
"com_ui_add": "Adicionar",
"com_ui_add_model_preset": "Adicionar um modelo ou predefinição para uma resposta adicional",
"com_ui_add_multi_conversation": "Adicionar conversação múltiplca",
"com_ui_admin": "Admin",
"com_ui_admin_access_warning": "Desligar o acesso administrativo a esta funcionalidade poderá causar problemas inesperados na UI que precisem de atualizar. Se salvo, a única maneira de reverter será pela configuração do librechat.yaml que afecta todos os cargos.",
"com_ui_admin_settings": "Configurações de Admin",
"com_ui_advanced": "Avançado",
"com_ui_agent": "Agente",
"com_ui_agent_delete_error": "Houve um erro ao excluir o agente",
"com_ui_agent_deleted": "Agente excluído com sucesso",
"com_ui_agent_duplicate_error": "Ocorreu um erro ao duplicar o agente.",
"com_ui_agent_duplicated": "Agente duplicado com sucesso",
"com_ui_agent_editing_allowed": "Este agente já pode ser editado por outros utilizadores.",
"com_ui_agents": "Agentes",
"com_ui_agents_allow_create": "Permitir a criação de Agentes",
"com_ui_agents_allow_share_global": "Permitir a partilha de Agentes com todos os utilizadores",
"com_ui_agents_allow_use": "Permitir o uso de Agentes",
"com_ui_all": "todos",
"com_ui_all_proper": "Todos",
"com_ui_analyzing": "A Analisar",
"com_ui_analyzing_finished": "Análise concluída",
"com_ui_api_key": "Chave da API",
"com_ui_archive": "Arquivar",
"com_ui_archive_error": "Falha ao arquivar conversa",
"com_ui_artifact_click": "Clique para abrir",
"com_ui_artifacts": "Artefatos",
"com_ui_artifacts_toggle": "Alternar UI de Artefatos",
"com_ui_artifacts_toggle_agent": "Permitir Artefactos",
"com_ui_ascending": "Asc",
"com_ui_assistant": "Assistente",
"com_ui_assistant_delete_error": "Houve um erro ao excluir o assistente",
"com_ui_assistant_deleted": "Assistente excluído com sucesso",
"com_ui_assistants": "Assistentes",
"com_ui_assistants_output": "Saída dos Assistentes",
"com_ui_attach_error": "Não é possível anexar o arquivo. Crie ou selecione uma conversa, ou tente atualizar a página.",
"com_ui_attach_error_openai": "Não é possível anexar arquivos de Assistente a outros endpoints",
"com_ui_attach_error_size": "Limite de tamanho de arquivo excedido para o endpoint:",
"com_ui_attach_error_type": "Tipo de arquivo não suportado para o endpoint:",
"com_ui_attach_warn_endpoint": "Arquivos não compatíveis podem ser ignorados sem uma ferramenta compatível",
"com_ui_attachment": "Anexo",
"com_ui_auth_type": "Tipo de Autenticação",
"com_ui_auth_url": "Endereço de Autorização",
"com_ui_authentication": "Autenticação",
"com_ui_authentication_type": "Tipo de Autenticação",
"com_ui_avatar": "Avatar",
"com_ui_azure": "Azure",
"com_ui_back_to_chat": "Voltar ao Chat",
"com_ui_back_to_prompts": "Voltar aos Prompts",
"com_ui_basic": "Basic",
"com_ui_basic_auth_header": "Cabeçalho de Autorização Basic",
"com_ui_bearer": "Bearer",
"com_ui_bookmark_delete_confirm": "Tem certeza de que deseja excluir este favorito?",
"com_ui_bookmarks": "Favoritos",
"com_ui_bookmarks_add": "Adicionar Bookmarks",
"com_ui_bookmarks_add_to_conversation": "Adicionar à conversa atual",
"com_ui_bookmarks_count": "Contagem",
"com_ui_bookmarks_create_error": "Houve um erro ao criar o favorito",
"com_ui_bookmarks_create_exists": "Este favorito já existe",
"com_ui_bookmarks_create_success": "Favorito criado com sucesso",
"com_ui_bookmarks_delete": "Apagar Favorito",
"com_ui_bookmarks_delete_error": "Houve um erro ao excluir o favorito",
"com_ui_bookmarks_delete_success": "Favorito excluído com sucesso",
"com_ui_bookmarks_description": "Descrição",
"com_ui_bookmarks_edit": "Editar Favorito",
"com_ui_bookmarks_filter": "Filtrar favoritos...",
"com_ui_bookmarks_new": "Novo Favorito",
"com_ui_bookmarks_title": "Título",
"com_ui_bookmarks_update_error": "Houve um erro ao atualizar o favorito",
"com_ui_bookmarks_update_success": "Favorito atualizado com sucesso",
"com_ui_bulk_delete_error": "Falha ao apagar ligações partilhadas",
"com_ui_callback_url": "Endereço de Callback",
"com_ui_cancel": "Cancelar",
"com_ui_chat": "Chat",
"com_ui_chat_history": "Histórico de Chat",
"com_ui_clear": "Limpar",
"com_ui_clear_all": "Limpar tudo",
"com_ui_client_id": "ID de Cliente",
"com_ui_client_secret": "Client Secret",
"com_ui_close": "Fechar",
"com_ui_close_menu": "Fechar Menu",
"com_ui_code": "Código",
"com_ui_collapse_chat": "Colapsar Conversa",
"com_ui_command_placeholder": "Opcional: Insira um comando para o prompt ou o nome será usado.",
"com_ui_command_usage_placeholder": "Selecione um Prompt por comando ou nome",
"com_ui_confirm_action": "Confirmar Ação",
"com_ui_confirm_admin_use_change": "Mudar esta configuração irá bloquear acessos para administradores, você inclusivé. Tem a certeza que pretende avançar?",
"com_ui_confirm_change": "Confirmar alteração",
"com_ui_context": "Contexto",
"com_ui_continue": "Continuar",
"com_ui_controls": "Controles",
"com_ui_copied": "Copiado!",
"com_ui_copied_to_clipboard": "Copiado para a área de transferência",
"com_ui_copy_code": "Copiar código",
"com_ui_copy_link": "Copiar link",
"com_ui_copy_to_clipboard": "Copiar para a área de transferência",
"com_ui_create": "Criar",
"com_ui_create_link": "Criar link",
"com_ui_create_prompt": "Criar Prompt",
"com_ui_currently_production": "Atualmente em produção",
"com_ui_custom": "Costumizar",
"com_ui_custom_header_name": "Nome de Cabeçalho Customizado",
"com_ui_custom_prompt_mode": "Modo de Prompt Personalizado",
"com_ui_dashboard": "Painel",
"com_ui_date": "Data",
"com_ui_date_april": "Abril",
"com_ui_date_august": "Agosto",
"com_ui_date_december": "Dezembro",
"com_ui_date_february": "Fevereiro",
"com_ui_date_january": "Janeiro",
"com_ui_date_july": "Julho",
"com_ui_date_june": "Junho",
"com_ui_date_march": "Março",
"com_ui_date_may": "Maio",
"com_ui_date_november": "Novembro",
"com_ui_date_october": "Outubro",
"com_ui_date_previous_30_days": "Últimos 30 dias",
"com_ui_date_previous_7_days": "Últimos 7 dias",
"com_ui_date_september": "Setembro",
"com_ui_date_today": "Hoje",
"com_ui_date_yesterday": "Ontem",
"com_ui_decline": "Eu não aceito",
"com_ui_default_post_request": "Default (Pedido POST)",
"com_ui_delete": "Excluir",
"com_ui_delete_action": "Excluir Ação",
"com_ui_delete_action_confirm": "Tem certeza de que deseja excluir esta ação?",
"com_ui_delete_agent_confirm": "Tem certeza de que deseja excluir este agente?",
"com_ui_delete_assistant_confirm": "Tem certeza de que deseja excluir este Assistente? Isso não pode ser desfeito.",
"com_ui_delete_confirm": "Isso excluirá",
"com_ui_delete_confirm_prompt_version_var": "Isso excluirá a versão selecionada para \"{{0}}\". Se não houver outras versões, o prompt será excluído.",
"com_ui_delete_conversation": "Excluir chat?",
"com_ui_delete_prompt": "Excluir Prompt?",
"com_ui_delete_shared_link": "Apagar endereço partilhado?",
"com_ui_delete_tool": "Excluir Ferramenta",
"com_ui_delete_tool_confirm": "Tem certeza de que deseja excluir esta ferramenta?",
"com_ui_descending": "Desc",
"com_ui_description": "Descrição",
"com_ui_description_placeholder": "Opcional: Insira uma descrição para exibir para o prompt",
"com_ui_download": "Descarregar",
"com_ui_download_artifact": "Descarregar Artefacto",
"com_ui_download_error": "Erro ao baixar o arquivo. O arquivo pode ter sido excluído.",
"com_ui_dropdown_variables": "Variáveis de dropdown:",
"com_ui_dropdown_variables_info": "Crie menus dropdown personalizados para seus prompts: `{{nome_da_variável:opção1|opção2|opção3}}`",
"com_ui_duplicate": "Duplicar",
"com_ui_duplication_error": "Ocorreu um erro ao duplicar esta conversa",
"com_ui_duplication_processing": "A duplicar conversa...",
"com_ui_duplication_success": "Conversa duplicada com sucesso",
"com_ui_edit": "Editar",
"com_ui_empty_category": "-",
"com_ui_endpoint": "Endpoint",
"com_ui_endpoint_menu": "Menu de Endereços do LLM",
"com_ui_endpoints_available": "Endereços Disponíveis",
"com_ui_enter": "Entrar",
"com_ui_enter_api_key": "Inserir Chave da API",
"com_ui_enter_openapi_schema": "Insira o seu schema da OpenAPI aqui",
"com_ui_enter_var": "Inserir {{0}}",
"com_ui_error": "Erro",
"com_ui_error_connection": "Erro ao conectar ao servidor, tente atualizar a página.",
"com_ui_error_save_admin_settings": "Houve um erro ao salvar suas configurações de admin.",
"com_ui_examples": "Exemplos",
"com_ui_export_convo_modal": "Exportar Modal da Conversa",
"com_ui_field_required": "Este campo é obrigatório",
"com_ui_filter_prompts": "Filtro de Comando",
"com_ui_filter_prompts_name": "Filtrar prompts por nome",
"com_ui_finance": "Finanças",
"com_ui_fork": "Bifurcar",
"com_ui_fork_all_target": "Incluir todos para/de aqui",
"com_ui_fork_branches": "Incluir ramificações relacionadas",
"com_ui_fork_change_default": "Opção de bifurcação padrão",
"com_ui_fork_default": "Usar opção de bifurcação padrão",
"com_ui_fork_error": "Houve um erro ao bifurcar a conversa",
"com_ui_fork_from_message": "Selecione uma opção de bifurcação",
"com_ui_fork_info_1": "Use esta configuração para bifurcar mensagens com o comportamento desejado.",
"com_ui_fork_info_2": "\"Bifurcação\" refere-se à criação de uma nova conversa que começa/termina a partir de mensagens específicas na conversa atual, criando uma cópia de acordo com as opções selecionadas.",
"com_ui_fork_info_3": "A \"mensagem alvo\" refere-se à mensagem da qual este popup foi aberto, ou, se você marcar \"{{0}}\", a última mensagem na conversa.",
"com_ui_fork_info_branches": "Esta opção bifurca as mensagens visíveis, junto com ramificações relacionadas; em outras palavras, o caminho direto para a mensagem alvo, incluindo ramificações ao longo do caminho.",
"com_ui_fork_info_remember": "Marque isto para lembrar as opções que você seleciona para uso futuro, tornando mais rápido bifurcar conversas conforme preferido.",
"com_ui_fork_info_start": "Se marcado, a bifurcação começará desta mensagem até a última mensagem na conversa, de acordo com o comportamento selecionado acima.",
"com_ui_fork_info_target": "Esta opção bifurca todas as mensagens até a mensagem alvo, incluindo seus vizinhos; em outras palavras, todos os ramos de mensagens, estejam ou não visíveis ou ao longo do mesmo caminho, estão incluídos.",
"com_ui_fork_info_visible": "Esta opção bifurca apenas as mensagens visíveis; em outras palavras, o caminho direto para a mensagem alvo, sem quaisquer ramificações.",
"com_ui_fork_processing": "Bifurcando conversa...",
"com_ui_fork_remember": "Lembrar",
"com_ui_fork_remember_checked": "Sua seleção será lembrada após o uso. Altere isso a qualquer momento nas configurações.",
"com_ui_fork_split_target": "Iniciar bifurcação aqui",
"com_ui_fork_split_target_setting": "Iniciar bifurcação a partir da mensagem alvo por padrão",
"com_ui_fork_success": "Conversa bifurcada com sucesso",
"com_ui_fork_visible": "Apenas mensagens visíveis",
"com_ui_go_back": "Para trás",
"com_ui_go_to_conversation": "Ir para a conversa",
"com_ui_happy_birthday": "É meu 1º aniversário!",
"com_ui_hide_qr": "Esconder QR Code",
"com_ui_host": "Host",
"com_ui_idea": "Ideias",
"com_ui_image_gen": "Geração de Imagem",
"com_ui_import_conversation_error": "Houve um erro ao importar suas conversas",
"com_ui_import_conversation_file_type_error": "Tipo de importação não suportado",
"com_ui_import_conversation_info": "Importar conversas de um arquivo JSON",
"com_ui_import_conversation_success": "Conversas importadas com sucesso",
"com_ui_include_shadcnui": "Incluir instruções de componentes shadcn/ui",
"com_ui_include_shadcnui_agent": "Incluir instruções shadcn/ui",
"com_ui_input": "Entrada",
"com_ui_instructions": "Instruções",
"com_ui_latest_footer": "Toda IA para Todos.",
"com_ui_latest_production_version": "Última versão produtiva",
"com_ui_latest_version": "Última versão",
"com_ui_librechat_code_api_key": "Obtem a tua chave da API do Interpretador de código Librechat",
"com_ui_librechat_code_api_subtitle": "Seguro. Multilíngua. Entrada/Saída de Ficheiros.",
"com_ui_librechat_code_api_title": "Correr código AI",
"com_ui_llm_menu": "Menu LLM",
"com_ui_llms_available": "LLMs disponíveis",
"com_ui_loading": "A Carregar....",
"com_ui_locked": "Bloqueado",
"com_ui_logo": "Logotipo {{0}}",
"com_ui_manage": "Gerenciar",
"com_ui_max_tags": "O número máximo permitido é {{0}}, usando os valores mais recentes.",
"com_ui_mention": "Mencione um endpoint, assistente ou predefinição para alternar rapidamente para ele",
"com_ui_min_tags": "Não é possível remover mais valores, um mínimo de {{0}} é necessário.",
"com_ui_misc": "Outros",
"com_ui_model": "Modelo",
"com_ui_model_parameters": "Parâmetros do Modelo",
"com_ui_more_info": "Mais informação",
"com_ui_my_prompts": "Meus Prompts",
"com_ui_name": "Nome",
"com_ui_new_chat": "Novo chat",
"com_ui_next": "Próximo",
"com_ui_no": "Não",
"com_ui_no_bookmarks": "Parece que você ainda não tem favoritos. Clique em um chat e adicione um novo",
"com_ui_no_category": "Sem categoria",
"com_ui_no_changes": "Sem alterações para atualizar",
"com_ui_no_terms_content": "Nenhum conteúdo de termos e condições para exibir",
"com_ui_none": "Nenhum",
"com_ui_none_selected": "Nenhum selecionado",
"com_ui_nothing_found": "Nada encontrado",
"com_ui_oauth": "OAuth",
"com_ui_of": "de",
"com_ui_off": "Desligado",
"com_ui_on": "Ligado",
"com_ui_openai": "OpenAI",
"com_ui_page": "Página",
"com_ui_prev": "Anterior",
"com_ui_preview": "Pré-visualizar",
"com_ui_privacy_policy": "Política de Privacidade",
"com_ui_privacy_policy_url": "Endereço de política de privacidade",
"com_ui_prompt": "Prompt",
"com_ui_prompt_already_shared_to_all": "Este prompt já está compartilhado com todos os usuários",
"com_ui_prompt_name": "Nome do Prompt",
"com_ui_prompt_name_required": "Nome do Prompt é obrigatório",
"com_ui_prompt_preview_not_shared": "O autor não permitiu colaboração para este prompt.",
"com_ui_prompt_text": "Texto",
"com_ui_prompt_text_required": "Texto é obrigatório",
"com_ui_prompt_update_error": "Houve um erro ao atualizar o prompt",
"com_ui_prompts": "Prompts",
"com_ui_prompts_allow_create": "Permitir criação de Prompts",
"com_ui_prompts_allow_share_global": "Permitir compartilhamento de Prompts com todos os usuários",
"com_ui_prompts_allow_use": "Permitir uso de Prompts",
"com_ui_provider": "Provedor",
"com_ui_read_aloud": "Ler em voz alta",
"com_ui_refresh_link": "Atualizar endereço",
"com_ui_regenerate": "Regenerar",
"com_ui_region": "Região",
"com_ui_rename": "Renomear",
"com_ui_rename_prompt": "Renomear comando",
"com_ui_requires_auth": "Requer autenticação",
"com_ui_reset_var": "Reiniciar {{0}}",
"com_ui_result": "Resultado",
"com_ui_revoke": "Revogar",
"com_ui_revoke_info": "Revogar todas as credenciais fornecidas pelo usuário",
"com_ui_revoke_key_confirm": "Tem a certeza que pretende revogar esta chave?",
"com_ui_revoke_key_endpoint": "Revogar chave para {{0}}",
"com_ui_revoke_keys": "Revogar chaves",
"com_ui_revoke_keys_confirm": "Tem a certeza que pretende revogar todas as chaves?",
"com_ui_role_select": "Papel",
"com_ui_roleplay": "Roleplay",
"com_ui_run_code": "Correr código",
"com_ui_run_code_error": "Ocorreu um erro ao correr o código",
"com_ui_save": "Salvar",
"com_ui_save_submit": "Salvar & Enviar",
"com_ui_saved": "Salvo!",
"com_ui_schema": "Schema",
"com_ui_scope": "Scope",
"com_ui_search": "Procurar",
"com_ui_select": "Selecionar",
"com_ui_select_file": "Selecionar um arquivo",
"com_ui_select_model": "Selecionar um modelo",
"com_ui_select_provider": "Selecionar um provedor",
"com_ui_select_provider_first": "Selecione um provedor primeiro",
"com_ui_select_region": "Escolha uma região",
"com_ui_select_search_model": "Pesquisar modelo por nome",
"com_ui_select_search_plugin": "Pesquisar plugin por nome",
"com_ui_select_search_provider": "Procurar provedor por nome",
"com_ui_select_search_region": "Procurar região por nome",
"com_ui_share": "Compartilhar",
"com_ui_share_create_message": "Seu nome e quaisquer mensagens que você adicionar após o compartilhamento permanecerão privadas.",
"com_ui_share_delete_error": "Houve um erro ao excluir o link compartilhado",
"com_ui_share_error": "Houve um erro ao compartilhar o link do chat",
"com_ui_share_link_to_chat": "Compartilhar link para o chat",
"com_ui_share_to_all_users": "Compartilhar com todos os usuários",
"com_ui_share_update_message": "Seu nome, instruções personalizadas e quaisquer mensagens que você adicionar após o compartilhamento permanecerão privadas.",
"com_ui_share_var": "Compartilhar {{0}}",
"com_ui_shared_link_bulk_delete_success": "Endereços partilhados apagados com sucesso",
"com_ui_shared_link_delete_success": "Endereço partilhado apagado com sucesso",
"com_ui_shared_link_not_found": "Link compartilhado não encontrado",
"com_ui_shared_prompts": "Prompts Compartilhados",
"com_ui_shop": "Compras",
"com_ui_show_all": "Mostrar Todos",
"com_ui_show_qr": "Mostrar QR Code",
"com_ui_sign_in_to_domain": "Autenticar em {{0}}",
"com_ui_simple": "Simples",
"com_ui_size": "Tamanho",
"com_ui_special_variables": "Variáveis especiais:",
"com_ui_special_variables_info": "Use `{{current_date}}` para a data atual, e `{{current_user}}` para o nome da sua conta.",
"com_ui_speech_while_submitting": "Não é possível submeter fala enquanto a resposta está a ser gerada.",
"com_ui_stop": "Parar",
"com_ui_storage": "Armazenamento",
"com_ui_submit": "Enviar",
"com_ui_teach_or_explain": "A aprender",
"com_ui_temporary_chat": "Conversa temporária",
"com_ui_terms_and_conditions": "Termos e Condições",
"com_ui_terms_of_service": "Termos de Serviço",
"com_ui_thinking": "A pensar...",
"com_ui_thoughts": "Raciocínio",
"com_ui_token_exchange_method": "Método de troca de Token",
"com_ui_token_url": "Endereço do Token",
"com_ui_tools": "Ferramentas",
"com_ui_travel": "Viajar",
"com_ui_unarchive": "Desarquivar",
"com_ui_unarchive_error": "Falha ao desarquivar conversa",
"com_ui_unknown": "Desconhecido",
"com_ui_update": "Atualizar",
"com_ui_upload": "Carregar",
"com_ui_upload_code_files": "Enviar para o interpretador de código",
"com_ui_upload_delay": "O upload de \"{{0}}\" está demorando mais do que o esperado. Por favor, aguarde enquanto o arquivo termina de ser indexado para recuperação.",
"com_ui_upload_error": "Houve um erro ao carregar seu arquivo",
"com_ui_upload_file_search": "Enviar para a pesquisa de Ficheiro",
"com_ui_upload_files": "Carregar arquivos",
"com_ui_upload_image": "Carregar uma imagem",
"com_ui_upload_image_input": "Inserir Imagem",
"com_ui_upload_invalid": "Arquivo inválido para upload. Deve ser uma imagem não excedendo o limite",
"com_ui_upload_invalid_var": "Arquivo inválido para upload. Deve ser uma imagem não excedendo {{0}} MB",
"com_ui_upload_success": "Arquivo carregado com sucesso",
"com_ui_upload_type": "Escolher tipo de Carregamento",
"com_ui_use_micrphone": "Usar microfone",
"com_ui_use_prompt": "Usar prompt",
"com_ui_variables": "Variáveis",
"com_ui_variables_info": "Use chaves duplas no seu texto para criar variáveis, por exemplo, `{{exemplo de variável}}`, para preencher posteriormente ao usar o prompt.",
"com_ui_version_var": "Versão {{0}}",
"com_ui_versions": "Versões",
"com_ui_view_source": "Ver fonte da conversa",
"com_ui_write": "A escrever",
"com_ui_yes": "Sim",
"com_ui_zoom": "Ampliar",
"com_user_message": "Você",
"com_warning_resubmit_unsupported": "O reenvio da mensagem de IA não é suportado por este endereço."
}

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "Более высокие значения = более случайные результаты, более низкие значения = более фокусированные и детерминированные результаты. Мы рекомендуем изменять это или Top P, но не оба значения одновременно.",
"com_endpoint_google_topk": "Top-k изменяет то, как модель выбирает токены для вывода. Top-k равное 1 означает, что выбирается наиболее вероятный токен из всего словаря модели (так называемое жадное декодирование), а Top-k равное 3 означает, что следующий токен выбирается из трех наиболее вероятных токенов (с использованием температуры).",
"com_endpoint_google_topp": "Top-p изменяет то, как модель выбирает токены для вывода. Токены выбираются из наиболее вероятных K (см. параметр topK) до наименее вероятных, пока сумма их вероятностей не достигнет значения top-p.",
"com_endpoint_import": "Импорт",
"com_endpoint_instructions_assistants": "Инструкции для ассистентов",
"com_endpoint_instructions_assistants_placeholder": "Переопределяет инструкции для ассистента. Это полезно для изменения поведения для отдельного запуска.",
"com_endpoint_max_output_tokens": "Максимальное количество выводимых токенов",
@ -262,7 +261,6 @@
"com_nav_archive_name": "Имя",
"com_nav_archived_chats": "Архивированные чаты",
"com_nav_archived_chats_empty": "У вас нет архивированных чатов.",
"com_nav_archived_chats_manage": "Управление",
"com_nav_at_command": "@-команда",
"com_nav_at_command_description": "Переключение команды \"@\" для выбора эндпоинтов, моделей, пресетов и др.",
"com_nav_audio_play_error": "Ошибка воспроизведения аудио: {{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Локализация",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "Голос",
"com_nav_settings": "Настройки",
"com_nav_shared_links": "Связываемые ссылки",
"com_nav_shared_links_manage": "Управление",
"com_nav_show_code": "Всегда показывать код при использовании интерпретатора",
"com_nav_slash_command": "/-Команда",
"com_nav_slash_command_description": "Вызов командной строки клавишей '/' для выбора промта с клавиатуры",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "Это мой первый день рождения!",
"com_ui_host": "Хост",
"com_ui_image_gen": "Генератор изображений",
"com_ui_import_conversation": "Импортировать",
"com_ui_import_conversation_error": "При импорте бесед произошла ошибка",
"com_ui_import_conversation_file_type_error": "Неподдерживаемый тип импорта",
"com_ui_import_conversation_info": "Импортировать беседы из файла JSON",

View file

@ -82,7 +82,6 @@
"com_endpoint_google_temp": "Högre värden = mer slumpmässigt, medan lägre värden = mer fokuserat och bestämt. Vi rekommenderar att ändra detta eller Top P men inte båda.",
"com_endpoint_google_topk": "Top-k ändrar hur modellen väljer tokens för utdata. Ett top-k av 1 innebär att den valda token är den mest sannolika bland alla tokens i modellens vokabulär (kallas också girig avkodning), medan ett top-k av 3 innebär att nästa token väljs bland de 3 mest sannolika tokens (med temperatur).",
"com_endpoint_google_topp": "Top-p ändrar hur modellen väljer tokens för utdata. Tokens väljs från de mest K (se topK-parameter) sannolika till de minst tills summan av deras sannolikheter når top-p-värdet.",
"com_endpoint_import": "Importera",
"com_endpoint_max_output_tokens": "Max utdatatokens",
"com_endpoint_my_preset": "Min förinställning",
"com_endpoint_no_presets": "Ingen förinställning ännu",
@ -115,7 +114,6 @@
"com_nav_archive_name": "Namn",
"com_nav_archived_chats": "Arkiverade chattar",
"com_nav_archived_chats_empty": "Du har inga arkiverade chattar.",
"com_nav_archived_chats_manage": "Hantera",
"com_nav_balance": "Balans",
"com_nav_clear_all_chats": "Rensa alla chattar",
"com_nav_clear_conversation": "Rensa konversationer",
@ -135,10 +133,12 @@
"com_nav_font_size": "Textstorlek",
"com_nav_help_faq": "Hjälp & Vanliga frågor",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Automatisk detektering",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -148,10 +148,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_log_out": "Logga ut",
@ -166,7 +167,6 @@
"com_nav_setting_general": "Allmänt",
"com_nav_settings": "Inställningar",
"com_nav_shared_links": "Delade länkar",
"com_nav_shared_links_manage": "Hantera",
"com_nav_theme": "Tema",
"com_nav_theme_dark": "Mörkt",
"com_nav_theme_light": "Ljust",
@ -206,7 +206,6 @@
"com_ui_enter": "Ange",
"com_ui_examples": "Exempel",
"com_ui_happy_birthday": "Det är min första födelsedag!",
"com_ui_import_conversation": "Importera",
"com_ui_import_conversation_error": "Det uppstod ett fel vid import av dina konversationer",
"com_ui_import_conversation_info": "Importera konversationer från en JSON-fil",
"com_ui_import_conversation_success": "Konversationer har importerats framgångsrikt",

View file

@ -179,7 +179,6 @@
"com_endpoint_google_temp": "Yüksek değerler = daha rastgele, düşük değerler = daha odaklı ve belirleyici. Bu parametre ile Olasılık Kütüphanesini değiştirmeyi öneririz (ikisini birden değiştirmemek).",
"com_endpoint_google_topk": "Top-k, modelin çıktı için token seçimini nasıl yaptığını değiştirir. 1 olan bir top-k, modelin kelime haznesindeki en olası tokenin seçildiği (açgözlü kod çözme olarak da adlandırılır) anlamına gelirken, 3 olan bir top-k, bir sonraki tokenin en olası üç token arasından (sıcaklık kullanılarak) seçileceği anlamına gelir.",
"com_endpoint_google_topp": "Olasılık Kütüphanesi, modelin çıktı için token seçme şeklini değiştirir. Tokenler, en olasılıktan (bkz. topK parametresi) en az olasıya kadar seçilir ve olasılıkları toplamı, top-p değerine eşit olana kadar devam eder.",
"com_endpoint_import": "İthal et",
"com_endpoint_instructions_assistants": "Talimatları Geçersiz Kıl",
"com_endpoint_instructions_assistants_placeholder": "Asistanın talimatlarını geçersiz kılar. Bu, davranışı tek tek çalışma bazında değiştirmek için yararlıdır.",
"com_endpoint_max_output_tokens": "Maksimum Çıktı Tokenleri",
@ -265,7 +264,6 @@
"com_nav_archive_name": "Ad",
"com_nav_archived_chats": "Arşivlenmiş sohbetler",
"com_nav_archived_chats_empty": "Arşivlenmiş konuşmanız yok.",
"com_nav_archived_chats_manage": "Yönet",
"com_nav_at_command": "@-Komutu",
"com_nav_at_command_description": "Uç noktaları, modelleri, ön ayarları vb. değiştirmek için \"@\" komutunu aç/kapat",
"com_nav_audio_play_error": "Ses oynatma hatası: {{0}}",
@ -340,6 +338,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -349,10 +348,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "Dil",
@ -386,7 +386,6 @@
"com_nav_setting_speech": "Konuşma",
"com_nav_settings": "Ayarlar",
"com_nav_shared_links": "Paylaşılan bağlantılar",
"com_nav_shared_links_manage": "Yönet",
"com_nav_show_code": "Kod yorumlayıcı kullanırken her zaman kodu göster",
"com_nav_show_thinking": "Düşünme Açılır Menülerini Varsayılan Olarak Aç",
"com_nav_slash_command": "/-Komutu",
@ -603,7 +602,6 @@
"com_ui_hide_qr": "QR Kodunu Gizle",
"com_ui_host": "Host",
"com_ui_image_gen": "Görüntü Oluştur",
"com_ui_import_conversation": "İçe Aktar",
"com_ui_import_conversation_error": "Konuşmalarınızı içe aktarma sırasında bir hata oluştu",
"com_ui_import_conversation_file_type_error": "Desteklenmeyen içe aktarma türü",
"com_ui_import_conversation_info": "JSON dosyasından konuşmaları içe aktar",

View file

@ -84,7 +84,6 @@
"com_endpoint_google_temp": "Giá trị cao = ngẫu nhiên hơn, trong khi giá trị thấp = tập trung và xác định hơn. Chúng tôi khuyến nghị thay đổi giá trị này hoặc Top P nhưng không phải cả hai.",
"com_endpoint_google_topk": "Top-k thay đổi cách mô hình chọn mã thông báo để xuất. Top-k là 1 có nghĩa là mã thông báo được chọn là phổ biến nhất trong tất cả các mã thông báo trong bảng từ vựng của mô hình (còn được gọi là giải mã tham lam), trong khi top-k là 3 có nghĩa là mã thông báo tiếp theo được chọn từ giữa 3 mã thông báo phổ biến nhất (sử dụng nhiệt độ).",
"com_endpoint_google_topp": "Top-p thay đổi cách mô hình chọn mã thông báo để xuất. Mã thông báo được chọn từ căn cứ có xác suất cao nhất đến thấp nhất cho đến khi tổng xác suất của chúng bằng giá trị top-p.",
"com_endpoint_import": "Nhập",
"com_endpoint_max_output_tokens": "Số mã thông báo tối đa",
"com_endpoint_my_preset": "Đặt sẵn của tôi",
"com_endpoint_no_presets": "Chưa có đặt sẵn",
@ -133,10 +132,12 @@
"com_nav_font_size": "Cỡ chữ",
"com_nav_help_faq": "Trợ giúp & Câu hỏi thường gặp",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "Tự động phát hiện",
"com_nav_lang_brazilian_portuguese": "Português Brasileiro",
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -146,10 +147,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_log_out": "Đăng xuất",
@ -164,7 +166,6 @@
"com_nav_setting_general": "Chung",
"com_nav_settings": "Cài đặt",
"com_nav_shared_links": "Liên kết được chia sẻ",
"com_nav_shared_links_manage": "Quản l",
"com_nav_theme": "Chủ đề",
"com_nav_theme_dark": "Tối",
"com_nav_theme_light": "Sáng",
@ -204,7 +205,6 @@
"com_ui_enter": "Nhập",
"com_ui_examples": "Ví dụ",
"com_ui_happy_birthday": "Đây là sinh nhật đầu tiên của tôi!",
"com_ui_import_conversation": "Nhập khẩu",
"com_ui_import_conversation_error": "Đã xảy ra lỗi khi nhập khẩu cuộc trò chuyện của bạn",
"com_ui_import_conversation_info": "Nhập khẩu cuộc trò chuyện từ một tệp JSON",
"com_ui_import_conversation_success": "Đã nhập khẩu cuộc trò chuyện thành công",

View file

@ -18,13 +18,16 @@
"com_agents_not_available": "助手不可用",
"com_agents_search_name": "根据名称搜索代理",
"com_agents_update_error": "更新代理时出现错误。",
"com_assistants_action_attempt": "助理想要和 {{0}} 对话",
"com_assistants_actions": "操作",
"com_assistants_actions_disabled": "您需要先创建助手,然后才能添加操作。",
"com_assistants_actions_info": "让您的助手通过 API 检索信息或执行操作",
"com_assistants_add_actions": "添加操作",
"com_assistants_add_tools": "添加工具",
"com_assistants_allow_sites_you_trust": "只允许您信任的网站",
"com_assistants_append_date": "添加当前日期和时间",
"com_assistants_append_date_tooltip": "启用后,当前客户的日期和时间将附加到助手的系统指令中。",
"com_assistants_attempt_info": "助理想要发送以下内容:",
"com_assistants_available_actions": "可用操作",
"com_assistants_capabilities": "功能",
"com_assistants_code_interpreter": "代码解释器",
@ -46,7 +49,7 @@
"com_assistants_image_vision": "识图",
"com_assistants_instructions_placeholder": "助手使用的系统指令",
"com_assistants_knowledge": "知识",
"com_assistants_knowledge_disabled": "必须创建助手,且启用并保存代码解释器或检索,才能将文件作为知识上传。",
"com_assistants_knowledge_disabled": "必须创建助手,且启用并保存代码解释器或检索,才能将文件作为知识上传。",
"com_assistants_knowledge_info": "如果您在 “知识” 中上传文件,与助手的对话可能包括文件内容。",
"com_assistants_max_starters_reached": "已达到对话启动器的最大数量",
"com_assistants_name_placeholder": "(选填)助手的名称",
@ -59,6 +62,7 @@
"com_assistants_update_error": "更新助手时出现错误。",
"com_assistants_update_success": "更新成功",
"com_auth_already_have_account": "已有账户?",
"com_auth_apple_login": "使用Apple账户登录",
"com_auth_back_to_login": "返回登录",
"com_auth_click": "点击",
"com_auth_click_here": "点击这里",
@ -126,11 +130,11 @@
"com_download_expires": "(点击此处下载 - {{0}}后过期)",
"com_endpoint": "渠道",
"com_endpoint_agent": "代理",
"com_endpoint_agent_model": "代理模型(推荐: GPT-3.5",
"com_endpoint_agent_model": "Agent 模型(推荐: GPT-3.5",
"com_endpoint_agent_placeholder": "请选择代理",
"com_endpoint_ai": "人工智能",
"com_endpoint_anthropic_maxoutputtokens": "响应中可以生成的最大令牌数。指定较低的值以获得较短的响应,指定较高的值以获得较长的响应。注意:模型可能会在达到此最大值之前停止。",
"com_endpoint_anthropic_prompt_cache": "提示词缓存允许在 API 调用中用大型上下文或指令,从而降低成本和延迟",
"com_endpoint_anthropic_prompt_cache": "提示词缓存允许在 API 调用中用大型上下文或指令,从而降低成本和延迟",
"com_endpoint_anthropic_temp": "值介于 0 到 1 之间。对于分析性/选择性任务,值应更接近 0对于创造性和生成性任务值应更接近 1。我们建议更改该参数或 Top P但不要同时更改这两个参数。",
"com_endpoint_anthropic_topk": "top-k 会改变模型选择输出词元的方式。top-k 为 1 意味着所选词是模型词汇中概率最大的(也称为贪心解码),而 top-k 为 3 意味着下一个词是从 3 个概率最大的词中选出的(使用随机性)。",
"com_endpoint_anthropic_topp": "top-p核采样会改变模型选择输出词元的方式。从概率最大的 K参见topK参数向最小的 K 选择,直到它们的概率之和等于 top-p 值。",
@ -178,7 +182,6 @@
"com_endpoint_google_temp": "值越高表示输出越随机,值越低表示输出越确定。建议不要同时改变此值和 Top-p。",
"com_endpoint_google_topk": "top-k 会改变模型选择输出词的方式。top-k 为 1 意味着所选词是模型词汇中概率最大的(也称为贪心解码),而 top-k 为 3 意味着下一个词是从 3 个概率最大的词中选出的(使用随机性)。",
"com_endpoint_google_topp": "top-p核采样会改变模型选择输出词的方式。从概率最大的 K参见topK参数向最小的 K 选择,直到它们的概率之和等于 top-p 值。",
"com_endpoint_import": "导入",
"com_endpoint_instructions_assistants": "覆写指令",
"com_endpoint_instructions_assistants_placeholder": "覆盖助手的指令。这对于需要逐次修改行为非常有用。",
"com_endpoint_max_output_tokens": "最大输出词元数",
@ -228,6 +231,7 @@
"com_endpoint_prompt_prefix_assistants": "额外指令",
"com_endpoint_prompt_prefix_assistants_placeholder": "在助手的主要指令之上设置额外的指令或上下文。如果为空,则忽略。",
"com_endpoint_prompt_prefix_placeholder": "自定义指令和上下文,默认为空。",
"com_endpoint_reasoning_effort": "推理强度",
"com_endpoint_save_as_preset": "保存为预设",
"com_endpoint_search": "按名称搜索渠道",
"com_endpoint_set_custom_name": "设置一个自定义名称,以便您检索此预设",
@ -262,7 +266,6 @@
"com_nav_archive_name": "名称",
"com_nav_archived_chats": "归档的对话",
"com_nav_archived_chats_empty": "您没有归档的对话。",
"com_nav_archived_chats_manage": "管理",
"com_nav_at_command": "@-命令",
"com_nav_at_command_description": "切换至命令 “@” 以更改端点、模型、预设等",
"com_nav_audio_play_error": "播放音频时发生错误:{{0}}",
@ -329,6 +332,7 @@
"com_nav_info_include_shadcnui": "启用后,将包含使用 shadcn/ui 组件的指令。shadcn/ui 是一组使用 Radix UI 和 Tailwind CSS 构建的可重复使用的组件。注意:这些指令较长,仅在您需要向 LLM 提供正确的导入和组件信息时才应启用。有关这些组件的更多信息请访问https://ui.shadcn.com/",
"com_nav_info_latex_parsing": "启用后,消息中的 LaTeX 代码将呈现为数学公式。如果您不需要 LaTeX 渲染,禁用此功能可能会提高性能。",
"com_nav_info_save_draft": "启用后,您在聊天表单中输入的文本和附件将自动本地保存为草稿。即使您重新加载页面或切换到不同的对话,这些草稿也将可用。草稿存储在您设备的本地,并在消息发送后删除。",
"com_nav_info_show_thinking": "启用后,聊天界面将默认展开“深度思考下拉框”,让您能够实时查看人工智能的推理过程。禁用后,深度思考下拉框将默认保持关闭状态,以提供更简洁、更流畅的界面。",
"com_nav_info_user_name_display": "启用后,发送者的用户名将显示在您发送的每条消息上方。禁用后,您只会在自己的消息上方看到 “您”。",
"com_nav_lang_arabic": "العربية",
"com_nav_lang_auto": "自动检测语言",
@ -336,6 +340,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +350,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "语言",
@ -371,6 +377,7 @@
"com_nav_plus_command_description": "切换至命令 “+” 以添加多响应设置",
"com_nav_profile_picture": "个人资料头像",
"com_nav_save_drafts": "在本地保存草稿",
"com_nav_scroll_button": "滚动到末尾按钮",
"com_nav_search_placeholder": "搜索消息",
"com_nav_send_message": "发送消息",
"com_nav_setting_account": "账户",
@ -381,7 +388,6 @@
"com_nav_setting_speech": "语音",
"com_nav_settings": "设置",
"com_nav_shared_links": "共享链接",
"com_nav_shared_links_manage": "管理",
"com_nav_show_code": "使用代码解释器时始终显示代码",
"com_nav_slash_command": "/-命令",
"com_nav_slash_command_description": "切换至命令 “/” 以通过键盘选择提示词",
@ -458,10 +464,14 @@
"com_ui_attach_error_type": "渠道不支持的文件类型:",
"com_ui_attach_warn_endpoint": "不兼容的工具可能会忽略非助手文件",
"com_ui_attachment": "附件",
"com_ui_auth_type": "认证类型",
"com_ui_auth_url": "认证 URL",
"com_ui_authentication": "认证",
"com_ui_authentication_type": "认证类型",
"com_ui_avatar": "头像",
"com_ui_back_to_chat": "返回对话",
"com_ui_back_to_prompts": "返回提示词",
"com_ui_basic": "基本",
"com_ui_bookmark_delete_confirm": "您确定要删除此书签吗?",
"com_ui_bookmarks": "书签",
"com_ui_bookmarks_add": "添加书签",
@ -480,17 +490,22 @@
"com_ui_bookmarks_title": "标题",
"com_ui_bookmarks_update_error": "更新书签时出现错误",
"com_ui_bookmarks_update_success": "书签更新成功",
"com_ui_bulk_delete_error": "删除分享链接时失败",
"com_ui_callback_url": "回调 URL",
"com_ui_cancel": "取消",
"com_ui_chat": "对话",
"com_ui_chat_history": "对话历史",
"com_ui_clear": "清除",
"com_ui_clear_all": "全部清除",
"com_ui_close": "关闭",
"com_ui_close_menu": "关闭菜单",
"com_ui_code": "代码",
"com_ui_collapse_chat": "收起聊天",
"com_ui_command_placeholder": "可选:输入提示词的命令,否则将使用名称",
"com_ui_command_usage_placeholder": "通过命令或名称选择提示词",
"com_ui_confirm_action": "确认执行",
"com_ui_confirm_admin_use_change": "更改此设置将阻止包括您的在内的所有管理员的权限。您确定要继续吗?",
"com_ui_confirm_change": "确认更改",
"com_ui_context": "上下文",
"com_ui_continue": "继续",
"com_ui_controls": "管理",
@ -502,6 +517,8 @@
"com_ui_create": "创建",
"com_ui_create_link": "创建链接",
"com_ui_create_prompt": "创建提示词",
"com_ui_custom": "自定义",
"com_ui_custom_header_name": "自定义 Header 名称",
"com_ui_custom_prompt_mode": "自定义提示词模式",
"com_ui_dashboard": "仪表板",
"com_ui_date": "日期",
@ -522,6 +539,7 @@
"com_ui_date_today": "今天",
"com_ui_date_yesterday": "昨天",
"com_ui_decline": "我不接受",
"com_ui_default_post_request": "默认 POST 请求)",
"com_ui_delete": "删除",
"com_ui_delete_action": "删除操作",
"com_ui_delete_action_confirm": "您确定要删除此操作吗?",
@ -537,6 +555,8 @@
"com_ui_descending": "降序",
"com_ui_description": "描述",
"com_ui_description_placeholder": "可选:输入要显示的提示词描述",
"com_ui_download": "下载",
"com_ui_download_artifact": "下载 Artifact",
"com_ui_download_error": "下载文件时出现错误,该文件可能已被删除。",
"com_ui_dropdown_variables": "下拉变量:",
"com_ui_dropdown_variables_info": "为您的提示词创建自定义下拉菜单:`{{variable_name:option1|option2|option3}}`",
@ -558,6 +578,7 @@
"com_ui_examples": "示例",
"com_ui_export_convo_modal": "导出对话窗口",
"com_ui_field_required": "此字段为必填项",
"com_ui_filter_prompts": "过滤 Prompts",
"com_ui_filter_prompts_name": "根据名称筛选提示词",
"com_ui_fork": "分叉",
"com_ui_fork_all_target": "包含所有目标",
@ -581,11 +602,12 @@
"com_ui_fork_split_target_setting": "默认以目标消息开始分叉",
"com_ui_fork_success": "对话分叉成功",
"com_ui_fork_visible": "仅可见消息",
"com_ui_go_back": "返回",
"com_ui_go_to_conversation": "转到对话",
"com_ui_happy_birthday": "这是我的第一个生日!",
"com_ui_hide_qr": "隐藏二维码",
"com_ui_host": "主机",
"com_ui_image_gen": "图片生成",
"com_ui_import_conversation": "导入",
"com_ui_import_conversation_error": "导入对话时发生错误",
"com_ui_import_conversation_file_type_error": "不支持的导入类型",
"com_ui_import_conversation_info": "从 JSON 文件导入对话",
@ -594,6 +616,8 @@
"com_ui_input": "输入",
"com_ui_instructions": "指令",
"com_ui_latest_footer": "Every AI for Everyone.",
"com_ui_latest_production_version": "最新的生产版本",
"com_ui_latest_version": "最新版本",
"com_ui_librechat_code_api_key": "获取您的 LibreChat 代码解释器 API 密钥",
"com_ui_librechat_code_api_subtitle": "安全可靠。多语言支持。文件输入/输出。",
"com_ui_librechat_code_api_title": "运行AI代码",
@ -644,6 +668,8 @@
"com_ui_regenerate": "重新生成",
"com_ui_region": "区域",
"com_ui_rename": "重命名",
"com_ui_rename_prompt": "重命名 Prompt",
"com_ui_requires_auth": "需要认证",
"com_ui_reset_var": "重置{{0}}",
"com_ui_result": "结果",
"com_ui_revoke": "撤销",
@ -659,6 +685,7 @@
"com_ui_save_submit": "保存并提交",
"com_ui_saved": "保存成功!",
"com_ui_schema": "架构",
"com_ui_search": "搜索",
"com_ui_select": "选择",
"com_ui_select_file": "选择文件",
"com_ui_select_model": "模型选择",
@ -673,13 +700,18 @@
"com_ui_share_create_message": "您的姓名以及您在共享后添加的任何消息将保持私密。",
"com_ui_share_delete_error": "删除共享链接时出现错误",
"com_ui_share_error": "共享聊天链接时发生错误",
"com_ui_share_form_description": "未找到描述。",
"com_ui_share_link_to_chat": "共享链接到聊天",
"com_ui_share_to_all_users": "共享给所有用户",
"com_ui_share_update_message": "您的姓名、自定义指令以及您在共享后添加的任何消息将保持私密。",
"com_ui_share_var": "共享 {{0}}",
"com_ui_shared_link_bulk_delete_success": "成功删除分享链接",
"com_ui_shared_link_delete_success": "成功删除分享链接",
"com_ui_shared_link_not_found": "未找到共享链接",
"com_ui_shared_prompts": "共享提示词",
"com_ui_show_all": "展开全部",
"com_ui_show_qr": "显示二维码",
"com_ui_sign_in_to_domain": "登录到 {{0}}",
"com_ui_simple": "基本",
"com_ui_size": "大小",
"com_ui_special_variables": "特殊变量:",
@ -688,8 +720,11 @@
"com_ui_stop": "停止",
"com_ui_storage": "存储",
"com_ui_submit": "提交",
"com_ui_temporary_chat": "临时对话",
"com_ui_terms_and_conditions": "条款和条件",
"com_ui_terms_of_service": "服务政策",
"com_ui_thinking": "思考中",
"com_ui_thoughts": "思考内容",
"com_ui_tools": "工具",
"com_ui_unarchive": "取消归档",
"com_ui_unarchive_error": "取消归档对话失败",
@ -713,6 +748,7 @@
"com_ui_variables_info": "在您的文本中使用双大括号创建变量,例如 `{{example variable}}`,以便在使用提示词时填充。",
"com_ui_version_var": "版本 {{0}}",
"com_ui_versions": "版本",
"com_ui_view_source": "查看来源对话",
"com_ui_yes": "是的",
"com_ui_zoom": "缩放",
"com_user_message": "您",

View file

@ -178,7 +178,6 @@
"com_endpoint_google_temp": "較高的值表示更隨機,而較低的值表示更集中和確定。我們建議修改這個或 Top P但不建議兩者都修改。",
"com_endpoint_google_topk": "Top-k 調整模型如何選取輸出的 token。當 Top-k 設為 1 時,模型會選取在其詞彙庫中機率最高的 token 進行輸出(這也被稱為貪婪解碼)。相對地,當 Top-k 設為 3 時,模型會從機率最高的三個 token 中選取下一個輸出 token這會涉及到所謂的「溫度」調整",
"com_endpoint_google_topp": "Top-p 調整模型在輸出 token 時的選擇機制。從最可能的 K見 topK 參數)開始選擇 token直到它們的機率之和達到 top-p 值。",
"com_endpoint_import": "匯入",
"com_endpoint_instructions_assistants": "覆寫提示指令",
"com_endpoint_instructions_assistants_placeholder": "覆寫助理的提示指令。這對於在每次執行時修改行為很有用。",
"com_endpoint_max_output_tokens": "最大輸出 token 數",
@ -262,7 +261,6 @@
"com_nav_archive_name": "名稱",
"com_nav_archived_chats": "封存的對話",
"com_nav_archived_chats_empty": "您沒有任何封存的對話。",
"com_nav_archived_chats_manage": "管理",
"com_nav_at_command": "@-指令",
"com_nav_at_command_description": "使用「@」指令切換端點、模型和預設值等",
"com_nav_audio_play_error": "播放音訊時發生錯誤:{{0}}",
@ -336,6 +334,7 @@
"com_nav_lang_chinese": "中文",
"com_nav_lang_dutch": "Nederlands",
"com_nav_lang_english": "English",
"com_nav_lang_estonian": "Eesti keel",
"com_nav_lang_finnish": "Suomi",
"com_nav_lang_french": "Français ",
"com_nav_lang_german": "Deutsch",
@ -345,10 +344,11 @@
"com_nav_lang_japanese": "日本語",
"com_nav_lang_korean": "한국어",
"com_nav_lang_polish": "Polski",
"com_nav_lang_portuguese": "Português",
"com_nav_lang_russian": "Русский",
"com_nav_lang_spanish": "Español",
"com_nav_lang_swedish": "Svenska",
"com_nav_lang_traditionalchinese": "繁體中文",
"com_nav_lang_traditional_chinese": "繁體中文",
"com_nav_lang_turkish": "Türkçe",
"com_nav_lang_vietnamese": "Tiếng Việt",
"com_nav_language": "語言",
@ -381,7 +381,6 @@
"com_nav_setting_speech": "語音",
"com_nav_settings": "設定",
"com_nav_shared_links": "共享連結",
"com_nav_shared_links_manage": "管理",
"com_nav_show_code": "一律顯示使用程式碼解譯器時的程式碼",
"com_nav_slash_command": "/指令",
"com_nav_slash_command_description": "使用鍵盤按下 \"/\" 快速選擇提示詞",
@ -585,7 +584,6 @@
"com_ui_happy_birthday": "這是我的第一個生日!",
"com_ui_host": "主機",
"com_ui_image_gen": "影像生成",
"com_ui_import_conversation": "匯入",
"com_ui_import_conversation_error": "匯入對話時發生錯誤",
"com_ui_import_conversation_file_type_error": "不支援的匯入檔案類型",
"com_ui_import_conversation_info": "從 JSON 文件匯入對話",

View file

@ -10,6 +10,7 @@ const headerMap: Record<string, TranslationKeys> = {
'/register': 'com_auth_create_account',
'/forgot-password': 'com_auth_reset_password',
'/reset-password': 'com_auth_reset_password',
'/login/2fa': 'com_auth_verify_your_identity',
};
export default function StartupLayout({ isAuthenticated }: { isAuthenticated?: boolean }) {

View file

@ -6,6 +6,7 @@ import {
ResetPassword,
VerifyEmail,
ApiErrorWatcher,
TwoFactorScreen,
} from '~/components/Auth';
import { AuthContextProvider } from '~/hooks/AuthContext';
import RouteErrorBoundary from './RouteErrorBoundary';
@ -66,6 +67,10 @@ export const router = createBrowserRouter([
path: 'login',
element: <Login />,
},
{
path: 'login/2fa',
element: <TwoFactorScreen />,
},
],
},
dashboardRoutes,

View file

@ -8,14 +8,14 @@ import type { TConversation } from 'librechat-data-provider';
import { getLocalStorageItems } from './localStorage';
const buildDefaultConvo = ({
models,
conversation,
endpoint = null,
models,
lastConversationSetup,
}: {
conversation: TConversation;
endpoint: EModelEndpoint | null;
models: string[];
conversation: TConversation;
endpoint?: EModelEndpoint | null;
lastConversationSetup: TConversation | null;
}): TConversation => {
const { lastSelectedModel, lastSelectedTools } = getLocalStorageItems();
@ -33,7 +33,7 @@ const buildDefaultConvo = ({
const model = lastConversationSetup?.model ?? lastSelectedModel?.[endpoint] ?? '';
const secondaryModel: string | null =
endpoint === EModelEndpoint.gptPlugins
? lastConversationSetup?.agentOptions?.model ?? lastSelectedModel?.secondaryModel ?? null
? (lastConversationSetup?.agentOptions?.model ?? lastSelectedModel?.secondaryModel ?? null)
: null;
let possibleModels: string[], secondaryModels: string[];

View file

@ -1,6 +1,13 @@
import { excelMimeTypes, QueryKeys } from 'librechat-data-provider';
import {
megabyte,
QueryKeys,
excelMimeTypes,
codeTypeMapping,
fileConfig as defaultFileConfig,
} from 'librechat-data-provider';
import type { TFile, EndpointFileConfig } from 'librechat-data-provider';
import type { QueryClient } from '@tanstack/react-query';
import type { TFile } from 'librechat-data-provider';
import type { ExtendedFile } from '~/common';
import SheetPaths from '~/components/svg/Files/SheetPaths';
import TextPaths from '~/components/svg/Files/TextPaths';
import FilePaths from '~/components/svg/Files/FilePaths';
@ -190,3 +197,92 @@ export function formatBytes(bytes: number, decimals = 2) {
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm));
}
const { checkType } = defaultFileConfig;
export const validateFiles = ({
files,
fileList,
setError,
endpointFileConfig,
}: {
fileList: File[];
files: Map<string, ExtendedFile>;
setError: (error: string) => void;
endpointFileConfig: EndpointFileConfig;
}) => {
const { fileLimit, fileSizeLimit, totalSizeLimit, supportedMimeTypes } = endpointFileConfig;
const existingFiles = Array.from(files.values());
const incomingTotalSize = fileList.reduce((total, file) => total + file.size, 0);
if (incomingTotalSize === 0) {
setError('com_error_files_empty');
return false;
}
const currentTotalSize = existingFiles.reduce((total, file) => total + file.size, 0);
if (fileLimit && fileList.length + files.size > fileLimit) {
setError(`You can only upload up to ${fileLimit} files at a time.`);
return false;
}
for (let i = 0; i < fileList.length; i++) {
let originalFile = fileList[i];
let fileType = originalFile.type;
const extension = originalFile.name.split('.').pop() ?? '';
const knownCodeType = codeTypeMapping[extension];
// Infer MIME type for Known Code files when the type is empty or a mismatch
if (knownCodeType && (!fileType || fileType !== knownCodeType)) {
fileType = knownCodeType;
}
// Check if the file type is still empty after the extension check
if (!fileType) {
setError('Unable to determine file type for: ' + originalFile.name);
return false;
}
// Replace empty type with inferred type
if (originalFile.type !== fileType) {
const newFile = new File([originalFile], originalFile.name, { type: fileType });
originalFile = newFile;
fileList[i] = newFile;
}
if (!checkType(originalFile.type, supportedMimeTypes)) {
console.log(originalFile);
setError('Currently, unsupported file type: ' + originalFile.type);
return false;
}
if (fileSizeLimit && originalFile.size >= fileSizeLimit) {
setError(`File size exceeds ${fileSizeLimit / megabyte} MB.`);
return false;
}
}
if (totalSizeLimit && currentTotalSize + incomingTotalSize > totalSizeLimit) {
setError(`The total size of the files cannot exceed ${totalSizeLimit / megabyte} MB.`);
return false;
}
const combinedFilesInfo = [
...existingFiles.map(
(file) =>
`${file.file?.name ?? file.filename}-${file.size}-${file.type?.split('/')[0] ?? 'file'}`,
),
...fileList.map(
(file: File | undefined) =>
`${file?.name}-${file?.size}-${file?.type.split('/')[0] ?? 'file'}`,
),
];
const uniqueFilesSet = new Set(combinedFilesInfo);
if (uniqueFilesSet.size !== combinedFilesInfo.length) {
setError('com_error_files_dupe');
return false;
}
return true;
};

View file

@ -4,12 +4,17 @@ const loggerFilter = import.meta.env.VITE_LOGGER_FILTER || '';
type LogFunction = (...args: unknown[]) => void;
const createLogFunction = (consoleMethod: LogFunction): LogFunction => {
const createLogFunction = (
consoleMethod: LogFunction,
type?: 'log' | 'warn' | 'error' | 'info' | 'debug' | 'dir',
): LogFunction => {
return (...args: unknown[]) => {
if (isDevelopment || isLoggerEnabled) {
const tag = typeof args[0] === 'string' ? args[0] : '';
if (shouldLog(tag)) {
if (tag && args.length > 1) {
if (tag && typeof args[1] === 'string' && type === 'error') {
consoleMethod(`[${tag}] ${args[1]}`, ...args.slice(2));
} else if (tag && args.length > 1) {
consoleMethod(`[${tag}]`, ...args.slice(1));
} else {
consoleMethod(...args);
@ -20,12 +25,12 @@ const createLogFunction = (consoleMethod: LogFunction): LogFunction => {
};
const logger = {
log: createLogFunction(console.log),
warn: createLogFunction(console.warn),
error: createLogFunction(console.error),
info: createLogFunction(console.info),
debug: createLogFunction(console.debug),
dir: createLogFunction(console.dir),
log: createLogFunction(console.log, 'log'),
dir: createLogFunction(console.dir, 'dir'),
warn: createLogFunction(console.warn, 'warn'),
info: createLogFunction(console.info, 'info'),
error: createLogFunction(console.error, 'error'),
debug: createLogFunction(console.debug, 'debug'),
};
function shouldLog(tag: string): boolean {