From aa2b72e5e741ab6c07830e79b9abba524197c96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=AD=20Santos?= <140329135+itzraiss@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:48:15 -0300 Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=91=A4add:=20Username=20instead=20of?= =?UTF-8?q?=20'You'=20when=20sending=20messages.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/Chat/Messages/Message.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index 658e7fa5a46..651cd35728a 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -2,7 +2,7 @@ import { Plugin } from '~/components/Messages/Content'; import MessageContent from './Content/MessageContent'; import type { TMessageProps } from '~/common'; import SiblingSwitch from './SiblingSwitch'; -import { useMessageHelpers } from '~/hooks'; +import { useAuthContext, useMessageHelpers } from '~/hooks'; // eslint-disable-next-line import/no-cycle import MultiMessage from './MultiMessage'; import HoverButtons from './HoverButtons'; @@ -29,6 +29,7 @@ export default function Message(props: TMessageProps) { } = useMessageHelpers(props); const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; + const { user } = useAuthContext(); if (!message) { return null; @@ -60,7 +61,7 @@ export default function Message(props: TMessageProps) { className={cn('relative flex w-full flex-col', isCreatedByUser ? '' : 'agent-turn')} >
- {isCreatedByUser ? 'You' : message.sender} + {isCreatedByUser ? user?.name || 'You' : message.sender}
From 56a65d30b0165a2d4e20d89d4d28d7ecabdb98dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=AD=20Santos?= <140329135+itzraiss@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:37:38 -0300 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=8C=8E:=20Added=20a=20new=20translati?= =?UTF-8?q?on=20for=20'You'=20and=20updated=20the=20existing=20translation?= =?UTF-8?q?=20for=20Spanish.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/Chat/Messages/Message.tsx | 6 +- client/src/localization/languages/Br.tsx | 1 + client/src/localization/languages/Eng.tsx | 1 + client/src/localization/languages/Es.tsx | 202 +++++++++--------- 4 files changed, 110 insertions(+), 100 deletions(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index 651cd35728a..16d24880158 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -2,7 +2,7 @@ import { Plugin } from '~/components/Messages/Content'; import MessageContent from './Content/MessageContent'; import type { TMessageProps } from '~/common'; import SiblingSwitch from './SiblingSwitch'; -import { useAuthContext, useMessageHelpers } from '~/hooks'; +import { useAuthContext, useMessageHelpers, useLocalize } from '~/hooks'; // eslint-disable-next-line import/no-cycle import MultiMessage from './MultiMessage'; import HoverButtons from './HoverButtons'; @@ -30,6 +30,7 @@ export default function Message(props: TMessageProps) { const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; const { user } = useAuthContext(); + const localize = useLocalize(); if (!message) { return null; @@ -61,7 +62,8 @@ export default function Message(props: TMessageProps) { className={cn('relative flex w-full flex-col', isCreatedByUser ? '' : 'agent-turn')} >
- {isCreatedByUser ? user?.name || 'You' : message.sender} + {isCreatedByUser ? (user?.name || localize('com_user_message')) : message.sender}! +
diff --git a/client/src/localization/languages/Br.tsx b/client/src/localization/languages/Br.tsx index edb51686d95..1761a7cbc59 100644 --- a/client/src/localization/languages/Br.tsx +++ b/client/src/localization/languages/Br.tsx @@ -40,6 +40,7 @@ export default { com_ui_cancel: 'Cancelar', com_ui_save: 'Salvar', com_ui_save_submit: 'Salvar e Enviar', + com_user_message: 'Você', com_ui_copy_to_clipboard: 'Copiar para a área de transferência', com_ui_copied_to_clipboard: 'Copiado para a área de transferência', com_ui_regenerate: 'Regenerar', diff --git a/client/src/localization/languages/Eng.tsx b/client/src/localization/languages/Eng.tsx index 296fe6833d2..1c8d48c2758 100644 --- a/client/src/localization/languages/Eng.tsx +++ b/client/src/localization/languages/Eng.tsx @@ -39,6 +39,7 @@ export default { com_ui_cancel: 'Cancel', com_ui_save: 'Save', com_ui_save_submit: 'Save & Submit', + com_user_message: 'You', com_ui_copy_to_clipboard: 'Copy to clipboard', com_ui_copied_to_clipboard: 'Copied to clipboard', com_ui_regenerate: 'Regenerate', diff --git a/client/src/localization/languages/Es.tsx b/client/src/localization/languages/Es.tsx index 40136b32116..e64869a3ada 100644 --- a/client/src/localization/languages/Es.tsx +++ b/client/src/localization/languages/Es.tsx @@ -2,195 +2,200 @@ export default { com_ui_examples: 'Ejemplos', - com_ui_new_chat: 'Nuevo chat', - com_ui_example_quantum_computing: 'Explica la computación cuántica en términos simples', + com_ui_new_chat: 'Nuevo Chat', + com_ui_example_quantum_computing: 'Explicar la computación cuántica en términos simples', com_ui_example_10_year_old_b_day: '¿Tienes alguna idea creativa para el cumpleaños de un niño de 10 años?', com_ui_example_http_in_js: '¿Cómo hago una solicitud HTTP en Javascript?', com_ui_capabilities: 'Capacidades', com_ui_capability_remember: 'Recuerda lo que el usuario dijo anteriormente en la conversación', - com_ui_capability_correction: 'Permite al usuario proporcionar correcciones de seguimiento', + com_ui_capability_correction: 'Permite que el usuario proporcione correcciones de seguimiento', com_ui_capability_decline_requests: 'Entrenado para rechazar solicitudes inapropiadas', com_ui_limitations: 'Limitaciones', com_ui_limitation_incorrect_info: 'Puede generar ocasionalmente información incorrecta', com_ui_limitation_harmful_biased: - 'Puede producir ocasionalmente instrucciones dañinas o contenido sesgado', - com_ui_limitation_limited_2021: 'Conocimiento limitado del mundo y los eventos después de 2021', + 'Puede ocasionalmente producir instrucciones perjudiciales o contenido sesgado', + com_ui_limitation_limited_2021: 'Conocimiento limitado del mundo y eventos después de 2021', + com_ui_experimental: 'Experimental', com_ui_input: 'Entrada', com_ui_close: 'Cerrar', com_ui_model: 'Modelo', - com_ui_select_model: 'Selecciona un modelo', - com_ui_use_prompt: 'Usar indicación', + com_ui_select_model: 'Seleccione un modelo', + com_ui_use_prompt: 'Usar el prompt', com_ui_prev: 'Anterior', com_ui_next: 'Siguiente', com_ui_stop: 'Detener', - com_ui_prompt_templates: 'Plantillas de indicación', - com_ui_hide_prompt_templates: 'Ocultar plantillas de indicación', + com_ui_prompt_templates: 'Plantillas de Prompt', + com_ui_hide_prompt_templates: 'Ocultar Plantillas de Prompt', com_ui_showing: 'Mostrando', com_ui_of: 'de', com_ui_entries: 'Entradas', - com_ui_pay_per_call: - 'Todas las conversaciones de IA en un solo lugar. Paga por llamada y no por mes', + com_ui_pay_per_call: 'Todas las conversaciones de IA en un solo lugar. Pague por llamada y no por mes', + com_ui_new_footer: 'Todas las conversaciones de IA en un solo lugar.', com_ui_enter: 'Entrar', com_ui_submit: 'Enviar', - com_ui_upload_success: 'Archivo subido con éxito', - com_ui_upload_invalid: 'Archivo inválido para subir', + com_ui_upload_success: 'Archivo cargado con éxito', + com_ui_upload_error: 'Hubo un error al cargar su archivo', + com_ui_upload_invalid: 'Archivo no válido para cargar. Debe ser una imagen que no exceda los 2 MB', com_ui_cancel: 'Cancelar', com_ui_save: 'Guardar', - com_ui_save_submit: 'Guardar y enviar', + com_ui_save_submit: 'Guardar y Enviar', + com_user_message: 'Tú', + com_user_message: 'Usted', com_ui_copy_to_clipboard: 'Copiar al portapapeles', com_ui_copied_to_clipboard: 'Copiado al portapapeles', com_ui_regenerate: 'Regenerar', com_ui_continue: 'Continuar', com_ui_edit: 'Editar', com_ui_success: 'Éxito', - com_ui_all: 'todo', + com_ui_all: 'todos', com_ui_clear: 'Limpiar', com_ui_revoke: 'Revocar', - com_ui_revoke_info: 'Revoca todas las credenciales proporcionadas por el usuario', - com_ui_confirm_action: 'Confirmar acción', + com_ui_revoke_info: 'Revocar todas las credenciales proporcionadas por el usuario', + com_ui_confirm_action: 'Confirmar Acción', com_ui_chats: 'chats', com_ui_delete: 'Eliminar', com_ui_delete_conversation: '¿Eliminar chat?', com_ui_delete_conversation_confirm: 'Esto eliminará', + com_ui_preview: 'Vista previa', + com_ui_upload: 'Cargar', + com_ui_connect: 'Conectar', com_auth_error_login: - 'No se pudo iniciar sesión con la información proporcionada. Por favor, comprueba tus credenciales e inténtalo de nuevo.', + 'No se pudo iniciar sesión con la información proporcionada. Por favor, verifique sus credenciales e inténtelo de nuevo.', com_auth_error_login_rl: - 'Demasiados intentos de inicio de sesión en poco tiempo. Por favor, inténtalo de nuevo más tarde.', - com_auth_error_login_ban: 'Tu cuenta ha sido temporalmente baneada por violar nuestro servicio.', + 'Demasiados intentos de inicio de sesión en un corto período de tiempo. Por favor, inténtelo nuevamente más tarde.', + com_auth_error_login_ban: + 'Su cuenta ha sido temporalmente suspendida debido a violaciones de nuestro servicio.', com_auth_error_login_server: - 'Hubo un error interno del servidor. Por favor, espera unos momentos e inténtalo de nuevo.', - com_auth_no_account: '¿No tienes una cuenta?', - com_auth_sign_up: 'Regístrate', + 'Hubo un error interno del servidor. Por favor, espere unos momentos e inténtelo nuevamente.', + com_auth_no_account: '¿No tiene una cuenta?', + com_auth_sign_up: 'Registrarse', com_auth_sign_in: 'Iniciar sesión', - com_auth_google_login: 'Iniciar sesión con Google', - com_auth_facebook_login: 'Iniciar sesión con Facebook', - com_auth_github_login: 'Iniciar sesión con Github', - com_auth_discord_login: 'Iniciar sesión con Discord', + com_auth_google_login: 'Inicio de sesión con Google', + com_auth_facebook_login: 'Inicio de sesión con Facebook', + com_auth_github_login: 'Inicio de sesión con Github', + com_auth_discord_login: 'Inicio de sesión con Discord', com_auth_email: 'Correo electrónico', - com_auth_email_required: 'Se requiere correo electrónico', + com_auth_email_required: 'El correo electrónico es obligatorio', com_auth_email_min_length: 'El correo electrónico debe tener al menos 6 caracteres', com_auth_email_max_length: 'El correo electrónico no debe tener más de 120 caracteres', - com_auth_email_pattern: 'Debes introducir una dirección de correo electrónico válida', + com_auth_email_pattern: 'Debe ingresar una dirección de correo electrónico válida', com_auth_email_address: 'Dirección de correo electrónico', com_auth_password: 'Contraseña', - com_auth_password_required: 'Se requiere contraseña', + com_auth_password_required: 'La contraseña es obligatoria', com_auth_password_min_length: 'La contraseña debe tener al menos 8 caracteres', com_auth_password_max_length: 'La contraseña debe tener menos de 128 caracteres', - com_auth_password_forgot: '¿Olvidaste la contraseña?', + com_auth_password_forgot: '¿Olvidó la contraseña?', com_auth_password_confirm: 'Confirmar contraseña', com_auth_password_not_match: 'Las contraseñas no coinciden', com_auth_continue: 'Continuar', - com_auth_create_account: 'Crea tu cuenta', - com_auth_error_create: - 'Hubo un error al intentar registrar tu cuenta. Por favor, inténtalo de nuevo.', + com_auth_create_account: 'Crear su cuenta', + com_auth_error_create: 'Hubo un error al intentar registrar su cuenta. Por favor, inténtelo nuevamente.', com_auth_full_name: 'Nombre completo', - com_auth_name_required: 'Se requiere nombre', + com_auth_name_required: 'El nombre es obligatorio', com_auth_name_min_length: 'El nombre debe tener al menos 3 caracteres', - com_auth_name_max_length: 'El nombre debe tener menos de 80 caracteres', + com_auth_name_max_length: 'El nombre no debe tener más de 80 caracteres', com_auth_username: 'Nombre de usuario (opcional)', - com_auth_username_required: 'Se requiere nombre de usuario', + com_auth_username_required: 'El nombre de usuario es obligatorio', com_auth_username_min_length: 'El nombre de usuario debe tener al menos 2 caracteres', com_auth_username_max_length: 'El nombre de usuario debe tener menos de 20 caracteres', - com_auth_already_have_account: '¿Ya tienes una cuenta?', + com_auth_already_have_account: '¿Ya tiene una cuenta?', com_auth_login: 'Iniciar sesión', - com_auth_reset_password: 'Restablece tu contraseña', - com_auth_click: 'Haz clic', + com_auth_reset_password: 'Restablecer su contraseña', + com_auth_click: 'Haga clic', com_auth_here: 'AQUÍ', - com_auth_to_reset_your_password: 'para restablecer tu contraseña.', + com_auth_to_reset_your_password: 'para restablecer su contraseña.', com_auth_reset_password_link_sent: 'Correo electrónico enviado', com_auth_reset_password_email_sent: - 'Se te ha enviado un correo electrónico con más instrucciones para restablecer tu contraseña.', + 'Se ha enviado un correo electrónico con más instrucciones para restablecer su contraseña.', com_auth_error_reset_password: - 'Hubo un problema al restablecer tu contraseña. No se encontró ningún usuario con la dirección de correo electrónico proporcionada. Por favor, inténtalo de nuevo.', - com_auth_reset_password_success: 'Contraseña restablecida con éxito', - com_auth_login_with_new_password: 'Ahora puedes iniciar sesión con tu nueva contraseña.', - com_auth_error_invalid_reset_token: - 'Este token de restablecimiento de contraseña ya no es válido.', - com_auth_click_here: 'Haz clic aquí', + 'Hubo un problema al restablecer su contraseña. No se encontró ningún usuario con la dirección de correo electrónico proporcionada. Por favor, inténtelo nuevamente.', + com_auth_reset_password_success: 'Restablecimiento de contraseña exitoso', + com_auth_login_with_new_password: 'Ahora puede iniciar sesión con su nueva contraseña.', + com_auth_error_invalid_reset_token: 'Este token de restablecimiento de contraseña ya no es válido.', + com_auth_click_here: 'Haga clic aquí', com_auth_to_try_again: 'para intentarlo de nuevo.', com_auth_submit_registration: 'Enviar registro', com_auth_welcome_back: 'Bienvenido de nuevo', - com_endpoint_open_menu: 'Abrir menú', - com_endpoint_bing_enable_sydney: 'Activar Sydney', - com_endpoint_bing_to_enable_sydney: 'Para activar Sydney', + com_endpoint_open_menu: 'Abrir Menú', + com_endpoint_bing_enable_sydney: 'Habilitar Sydney', + com_endpoint_bing_to_enable_sydney: 'Para habilitar Sydney', com_endpoint_bing_jailbreak: 'Jailbreak', com_endpoint_bing_context_placeholder: - 'Bing puede usar hasta 7k tokens para el "contexto", al que puede hacer referencia para la conversación. El límite específico no se conoce, pero puede dar errores al superar los 7k tokens', + 'Bing puede usar hasta 7k tokens para "contexto", que puede referenciar en la conversación. El límite específico no se conoce, pero puede haber errores al exceder los 7k tokens.', com_endpoint_bing_system_message_placeholder: - 'ADVERTENCIA: ¡El uso indebido de esta función puede hacer que te BANEEN de usar Bing! Haz clic en "Mensaje del sistema" para ver las instrucciones completas y el mensaje predeterminado si se omite, que es el preajuste de "Sydney" que se considera seguro.', - com_endpoint_system_message: 'Mensaje del sistema', + 'ADVERTENCIA: El uso indebido de esta función puede provocar que sea EXPULSADO de usar Bing. Haga clic en \'System Message\' para obtener instrucciones completas y el mensaje predeterminado si se omite, que es el preajuste \'Sydney\' que se considera seguro.', + com_endpoint_system_message: 'Mensaje del Sistema', + com_endpoint_message: 'Conversar con', + com_endpoint_message_not_appendable: 'Edite su mensaje o Regenere.', com_endpoint_default_blank: 'predeterminado: en blanco', com_endpoint_default_false: 'predeterminado: falso', com_endpoint_default_creative: 'predeterminado: creativo', com_endpoint_default_empty: 'predeterminado: vacío', com_endpoint_default_with_num: 'predeterminado: {0}', com_endpoint_context: 'Contexto', - com_endpoint_tone_style: 'Estilo de tono', - com_endpoint_token_count: 'Recuento de tokens', + com_endpoint_tone_style: 'Estilo de Tono', + com_endpoint_token_count: 'Recuento de Tokens', com_endpoint_output: 'Salida', com_endpoint_google_temp: - 'Valores más altos = más aleatorios, mientras que valores más bajos = más enfocados y deterministas. Recomendamos alterar esto o Top P pero no ambos.', + 'Valores más altos = más aleatorio, mientras que valores más bajos = más enfocado y determinista. Recomendamos cambiar esto o Top P, pero no ambos.', com_endpoint_google_topp: - 'Top-p cambia cómo el modelo selecciona tokens para la salida. Los tokens se seleccionan desde el más K (ver parámetro topK) probable al menos hasta que la suma de sus probabilidades sea igual al valor de top-p.', + 'Top-p cambia cómo el modelo selecciona tokens para la salida. Los tokens se seleccionan desde el más K (ver el parámetro topK) probable hasta el menos, hasta que la suma de sus probabilidades sea igual al valor de top-p.', com_endpoint_google_topk: - 'Top K cambia cómo el modelo selecciona los 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 conocido como 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_prompt_prefix_placeholder: - 'Establece instrucciones o contexto personalizado. Ignorado si está vacío.', + 'Top-k cambia cómo 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 próximo token se selecciona entre los 3 tokens más probables (usando temperatura).', com_endpoint_google_maxoutputtokens: - 'Número máximo de tokens que se pueden generar en la respuesta. Especifica un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', - com_endpoint_google_custom_name_placeholder: 'Establece un nombre personalizado para Google', + 'Número máximo de tokens que pueden generarse en la respuesta. Especifique un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', + com_endpoint_google_custom_name_placeholder: 'Defina un nombre personalizado para Google', com_endpoint_prompt_prefix_placeholder: - 'Establece instrucciones o contexto personalizados. Se ignora si está vacío.', - com_endpoint_custom_name: 'Nombre personalizado', - com_endpoint_prompt_prefix: 'Prefijo de indicación', + 'Defina instrucciones personalizadas o contexto. Se ignora si está vacío.', + com_endpoint_custom_name: 'Nombre Personalizado', + com_endpoint_prompt_prefix: 'Prefijo del Prompt', com_endpoint_temperature: 'Temperatura', com_endpoint_default: 'predeterminado', com_endpoint_top_p: 'Top P', com_endpoint_top_k: 'Top K', - com_endpoint_max_output_tokens: 'Tokens máximos de salida', + com_endpoint_max_output_tokens: 'Máximo de Tokens de Salida', com_endpoint_openai_temp: - 'Valores más altos = más aleatorios, mientras que valores más bajos = más enfocados y deterministas. Recomendamos alterar esto o Top P pero no ambos.', + 'Valores más altos = más aleatorio, mientras que valores más bajos = más enfocado y determinista. Recomendamos cambiar esto o Top P, pero no ambos.', com_endpoint_openai_max: - 'Los tokens máximos a generar. La longitud total de los tokens de entrada y los tokens generados está limitada por la longitud de contexto del modelo.', + 'Tokens máximos para generar. La longitud total de los tokens de entrada y los tokens generados está limitada por la longitud del contexto del modelo.', com_endpoint_openai_topp: - 'Una alternativa al muestreo con temperatura, llamada muestreo de núcleo, donde el modelo considera los resultados de los tokens con masa de probabilidad top_p. Así que 0.1 significa que solo se consideran los tokens que comprenden la masa de probabilidad del 10% superior. Recomendamos alterar esto o la temperatura pero no ambos.', + 'Una alternativa para el muestreo con temperatura, llamada muestreo de núcleo, donde el modelo considera los resultados de los tokens con masa de probabilidad top_p. Entonces, 0.1 significa que solo se consideran los tokens que comprenden la masa de probabilidad de los 10% principales. Recomendamos cambiar esto o la temperatura, pero no ambos.', com_endpoint_openai_freq: - 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens en función de su frecuencia existente en el texto hasta el momento, disminuyendo la probabilidad del modelo de repetir la misma línea textualmente.', + 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según su frecuencia existente en el texto hasta ahora, disminuyendo la probabilidad de que el modelo repita la misma línea literalmente.', com_endpoint_openai_pres: - 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens en función de si aparecen en el texto hasta el momento, aumentando la probabilidad del modelo de hablar de nuevos temas.', - com_endpoint_openai_custom_name_placeholder: 'Establece un nombre personalizado para ChatGPT', + 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según si aparecen en el texto hasta ahora, aumentando la probabilidad de que el modelo hable sobre nuevos temas.', + com_endpoint_openai_custom_name_placeholder: 'Defina un nombre personalizado para ChatGPT', com_endpoint_openai_prompt_prefix_placeholder: - 'Establece instrucciones personalizadas para incluir en el mensaje del sistema. Predeterminado: ninguno', + 'Defina instrucciones personalizadas para incluir en el Mensaje del Sistema. Predeterminado: ninguno', com_endpoint_anthropic_temp: - 'Varía de 0 a 1. Usa una temperatura más cercana a 0 para analítico / opción múltiple, y más cercana a 1 para tareas creativas y generativas. Recomendamos alterar esto o Top P pero no ambos.', + 'Varía de 0 a 1. Use temp más cercano a 0 para analítico / opción múltiple, y más cercano a 1 para tareas creativas y generativas. Recomendamos cambiar esto o Top P, pero no ambos.', com_endpoint_anthropic_topp: - 'Top-p cambia cómo el modelo selecciona tokens para la salida. Los tokens se seleccionan desde el más K (ver parámetro topK) probable al menos hasta que la suma de sus probabilidades sea igual al valor de top-p.', + 'Top-p cambia cómo el modelo selecciona tokens para la salida. Los tokens se seleccionan desde el más K (ver el parámetro topK) probable hasta el menos, hasta que la suma de sus probabilidades sea igual al valor de top-p.', com_endpoint_anthropic_topk: - 'Top-k cambia cómo 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 del 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 la temperatura).', + 'Top-k cambia cómo 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 próximo token se selecciona entre los 3 tokens más probables (usando temperatura).', com_endpoint_anthropic_maxoutputtokens: - 'Número máximo de tokens que se pueden generar en la respuesta. Especifica un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', - com_endpoint_anthropic_custom_name_placeholder: - 'Establece un nombre personalizado para Anthropic', - com_endpoint_frequency_penalty: 'Penalización de frecuencia', + 'Número máximo de tokens que pueden generarse en la respuesta. Especifique un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', + com_endpoint_anthropic_custom_name_placeholder: 'Defina un nombre personalizado para Anthropic', + com_endpoint_frequency_penalty: 'Penalización de Frecuencia', com_endpoint_presence_penalty: 'Penalización de presencia', com_endpoint_plug_use_functions: 'Usar funciones', com_endpoint_plug_skip_completion: 'Saltar completación', - com_endpoint_disabled_with_tools: 'desactivado con herramientas', + com_endpoint_disabled_with_tools: 'Desactivado con herramientas', com_endpoint_disabled_with_tools_placeholder: 'Desactivado con herramientas seleccionadas', com_endpoint_plug_set_custom_instructions_for_gpt_placeholder: - 'Establece instrucciones personalizadas para incluir en el mensaje del sistema. Predeterminado: ninguno', + 'Establecer instrucciones personalizadas para incluir en el mensaje del sistema. Predeterminado: ninguno', com_endpoint_import: 'Importar', com_endpoint_set_custom_name: - 'Establece un nombre personalizado, en caso de que puedas encontrar este preajuste', - com_endpoint_preset: 'preajuste', - com_endpoint_presets: 'preajustes', + 'Establecer un nombre personalizado, en caso de que puedas encontrar este preajuste', + com_endpoint_preset: 'Preajuste', + com_endpoint_presets: 'Preajustes', com_endpoint_preset_name: 'Nombre del preajuste', com_endpoint_new_topic: 'Nuevo tema', com_endpoint: 'Punto final', com_endpoint_hide: 'Ocultar', com_endpoint_show: 'Mostrar', - com_endpoint_examples: ' Preajustes', + com_endpoint_examples: 'Ejemplos', com_endpoint_completion: 'Completación', com_endpoint_agent: 'Agente', com_endpoint_show_what_settings: 'Mostrar {0} ajustes', @@ -198,7 +203,7 @@ export default { com_endpoint_export: 'Exportar', com_endpoint_save_as_preset: 'Guardar como preajuste', com_endpoint_presets_clear_warning: - '¿Estás seguro de que quieres borrar todos los preajustes? Esto es irreversible.', + '¿Estás seguro de que quieres borrar todos los preajustes? Esto es irreversible.', com_endpoint_not_implemented: 'No implementado', com_endpoint_no_presets: 'Aún no hay preajustes, usa el botón de ajustes para crear uno', com_endpoint_not_available: 'No hay punto final disponible', @@ -209,7 +214,7 @@ export default { com_endpoint_completion_model: 'Modelo de completación (Recomendado: GPT-4)', com_endpoint_func_hover: 'Habilitar el uso de plugins como funciones de OpenAI', com_endpoint_skip_hover: - 'Habilitar el salto del paso de completación, que revisa la respuesta final y los pasos generados', + 'Habilitar el salto del paso de completación, que revisa la respuesta final y los pasos generados', com_endpoint_config_key: 'Establecer clave de API', com_endpoint_config_key_for: 'Establecer clave de API para', com_endpoint_config_key_name: 'Clave', @@ -219,18 +224,18 @@ export default { com_endpoint_config_key_expiry: 'la hora de caducidad', com_endpoint_config_key_import_json_key: 'Importar clave JSON de cuenta de servicio.', com_endpoint_config_key_import_json_key_success: - 'Clave JSON de cuenta de servicio importada con éxito', + 'Clave JSON de cuenta de servicio importada con éxito', com_endpoint_config_key_import_json_key_invalid: - 'Clave JSON de cuenta de servicio inválida, ¿importaste el archivo correcto?', + 'Clave JSON de cuenta de servicio inválida, ¿importaste el archivo correcto?', com_endpoint_config_key_get_edge_key: - 'Para obtener tu token de acceso para Bing, inicia sesión en', + 'Para obtener tu token de acceso para Bing, inicia sesión en', com_endpoint_config_key_get_edge_key_dev_tool: - 'Usa las herramientas de desarrollo o una extensión mientras estás conectado al sitio para copiar el contenido de la cookie _U. Si esto falla, sigue estas', + 'Usa las herramientas de desarrollo o una extensión mientras estás conectado al sitio para copiar el contenido de la cookie _U. Si esto falla, sigue estas', com_endpoint_config_key_edge_instructions: 'instrucciones', com_endpoint_config_key_edge_full_key_string: - 'para proporcionar las cadenas de cookies completas.', + 'para proporcionar las cadenas de cookies completas.', com_endpoint_config_key_chatgpt: - 'Para obtener tu token de acceso para ChatGPT "Versión gratuita", inicia sesión en', + 'Para obtener tu token de acceso para ChatGPT "Versión gratuita", inicia sesión en', com_endpoint_config_key_chatgpt_then_visit: 'luego visita', com_endpoint_config_key_chatgpt_copy_token: 'Copia el token de acceso.', com_endpoint_config_key_google_need_to: 'Necesitas', @@ -238,12 +243,12 @@ export default { com_endpoint_config_key_google_vertex_api: 'API en Google Cloud, luego', com_endpoint_config_key_google_service_account: 'Crear una cuenta de servicio', com_endpoint_config_key_google_vertex_api_role: - 'Asegúrate de hacer clic en "Crear y continuar" para dar al menos el rol de "Usuario de Vertex AI". Por último, crea una clave JSON para importarla aquí.', + 'Asegúrate de hacer clic en "Crear y continuar" para dar al menos el rol de "Usuario de Vertex AI". Por último, crea una clave JSON para importarla aquí.', com_nav_auto_scroll: 'Desplazamiento automático al más reciente al abrir', com_nav_plugin_store: 'Tienda de plugins', com_nav_plugin_search: 'Buscar plugins', com_nav_plugin_auth_error: - 'Hubo un error al intentar autenticar este plugin. Por favor, inténtalo de nuevo.', + 'Hubo un error al intentar autenticar este plugin. Por favor, inténtalo de nuevo.', com_nav_export_filename: 'Nombre de archivo', com_nav_export_filename_placeholder: 'Establece el nombre de archivo', com_nav_export_type: 'Tipo', @@ -267,10 +272,11 @@ export default { com_nav_user: 'USUARIO', com_nav_clear_conversation: 'Borrar conversaciones', com_nav_clear_conversation_confirm_message: - '¿Estás seguro de que quieres borrar todas las conversaciones? Esto es irreversible.', + '¿Estás seguro de que quieres borrar todas las conversaciones? Esto es irreversible.', com_nav_help_faq: 'Ayuda y preguntas frecuentes', com_nav_settings: 'Ajustes', com_nav_search_placeholder: 'Buscar mensajes', com_nav_setting_general: 'General', com_nav_setting_data: 'Controles de datos', + com_nav_lang_spanish: 'Español', }; From b5adf84b432306789a645d2302ed6fbd9324d7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=AD=20Santos?= <140329135+itzraiss@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:38:27 -0300 Subject: [PATCH 3/8] fix: remove "!" --- client/src/components/Chat/Messages/Message.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index 16d24880158..57084e9c97c 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -62,7 +62,7 @@ export default function Message(props: TMessageProps) { className={cn('relative flex w-full flex-col', isCreatedByUser ? '' : 'agent-turn')} >
- {isCreatedByUser ? (user?.name || localize('com_user_message')) : message.sender}! + {isCreatedByUser ? (user?.name || localize('com_user_message')) : message.sender}
From 14b05e302ce966b42dfd1766b8c85205fad5a8e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=AD=20Santos?= <140329135+itzraiss@users.noreply.github.com> Date: Thu, 18 Jan 2024 22:03:35 -0300 Subject: [PATCH 4/8] Added: New setting Account for show username in messages chore (StopButon and SendButon): Updated to new style of ChatGPT chore Update and Added news translations: Spanish, English and Portuguese Brazilian --- .../src/components/Chat/Input/SendButton.tsx | 3 +- .../src/components/Chat/Messages/Message.tsx | 31 ++- .../Nav/SettingsTabs/Account/Account.tsx | 22 ++ client/src/localization/languages/Br.tsx | 1 + client/src/localization/languages/Eng.tsx | 1 + client/src/localization/languages/Es.tsx | 236 ++++++++++-------- client/src/store/settings.ts | 20 ++ 7 files changed, 211 insertions(+), 103 deletions(-) diff --git a/client/src/components/Chat/Input/SendButton.tsx b/client/src/components/Chat/Input/SendButton.tsx index 0751dd51eb0..549363dc139 100644 --- a/client/src/components/Chat/Input/SendButton.tsx +++ b/client/src/components/Chat/Input/SendButton.tsx @@ -6,8 +6,7 @@ export default function SendButton({ text, disabled }) {
+ {} (store.UsernameDisplay); + const localize = useLocalize(); + + const handleCheckedChange = (value: boolean) => { + setUsernameDisplay(value); + localStorage.setItem('UsernameDisplay', value.toString()); + }; + return (
+
+
{localize('com_nav_user_name_display')}
+ +
diff --git a/client/src/localization/languages/Br.tsx b/client/src/localization/languages/Br.tsx index 1761a7cbc59..552a272766b 100644 --- a/client/src/localization/languages/Br.tsx +++ b/client/src/localization/languages/Br.tsx @@ -293,6 +293,7 @@ export default { com_nav_theme_system: 'Sistema', com_nav_theme_dark: 'Escuro', com_nav_theme_light: 'Claro', + com_nav_user_name_display: 'Mostrar nome de usuário nas mensagens', com_nav_clear_all_chats: 'Limpar todos os chats', com_nav_confirm_clear: 'Confirmar Limpeza', com_nav_close_sidebar: 'Fechar barra lateral', diff --git a/client/src/localization/languages/Eng.tsx b/client/src/localization/languages/Eng.tsx index 1c8d48c2758..9a94c2ba01f 100644 --- a/client/src/localization/languages/Eng.tsx +++ b/client/src/localization/languages/Eng.tsx @@ -292,6 +292,7 @@ export default { com_nav_theme_system: 'System', com_nav_theme_dark: 'Dark', com_nav_theme_light: 'Light', + com_nav_user_name_display: 'Display username in messages', com_nav_clear_all_chats: 'Clear all chats', com_nav_confirm_clear: 'Confirm Clear', com_nav_close_sidebar: 'Close sidebar', diff --git a/client/src/localization/languages/Es.tsx b/client/src/localization/languages/Es.tsx index e64869a3ada..5934c2874d8 100644 --- a/client/src/localization/languages/Es.tsx +++ b/client/src/localization/languages/Es.tsx @@ -20,7 +20,7 @@ export default { com_ui_input: 'Entrada', com_ui_close: 'Cerrar', com_ui_model: 'Modelo', - com_ui_select_model: 'Seleccione un modelo', + com_ui_select_model: 'Selecciona un modelo', com_ui_use_prompt: 'Usar el prompt', com_ui_prev: 'Anterior', com_ui_next: 'Siguiente', @@ -30,18 +30,19 @@ export default { com_ui_showing: 'Mostrando', com_ui_of: 'de', com_ui_entries: 'Entradas', - com_ui_pay_per_call: 'Todas las conversaciones de IA en un solo lugar. Pague por llamada y no por mes', + com_ui_pay_per_call: + 'Todas las conversaciones de IA en un solo lugar. Paga por llamada y no por mes', com_ui_new_footer: 'Todas las conversaciones de IA en un solo lugar.', com_ui_enter: 'Entrar', com_ui_submit: 'Enviar', - com_ui_upload_success: 'Archivo cargado con éxito', - com_ui_upload_error: 'Hubo un error al cargar su archivo', - com_ui_upload_invalid: 'Archivo no válido para cargar. Debe ser una imagen que no exceda los 2 MB', + com_ui_upload_success: 'Archivo cargado exitosamente', + com_ui_upload_error: 'Hubo un error al cargar tu archivo', + com_ui_upload_invalid: + 'Archivo no válido para cargar. Debe ser una imagen que no exceda los 2 MB', com_ui_cancel: 'Cancelar', com_ui_save: 'Guardar', com_ui_save_submit: 'Guardar y Enviar', com_user_message: 'Tú', - com_user_message: 'Usted', com_ui_copy_to_clipboard: 'Copiar al portapapeles', com_ui_copied_to_clipboard: 'Copiado al portapapeles', com_ui_regenerate: 'Regenerar', @@ -61,73 +62,75 @@ export default { com_ui_upload: 'Cargar', com_ui_connect: 'Conectar', com_auth_error_login: - 'No se pudo iniciar sesión con la información proporcionada. Por favor, verifique sus credenciales e inténtelo de nuevo.', + 'No se pudo iniciar sesión con la información proporcionada. Verifica tus credenciales e inténtalo de nuevo.', com_auth_error_login_rl: - 'Demasiados intentos de inicio de sesión en un corto período de tiempo. Por favor, inténtelo nuevamente más tarde.', + 'Demasiados intentos de inicio de sesión en un corto período de tiempo. Por favor, inténtalo nuevamente más tarde.', com_auth_error_login_ban: - 'Su cuenta ha sido temporalmente suspendida debido a violaciones de nuestro servicio.', + 'Tu cuenta ha sido temporalmente suspendida debido a violaciones de nuestro servicio.', com_auth_error_login_server: - 'Hubo un error interno del servidor. Por favor, espere unos momentos e inténtelo nuevamente.', - com_auth_no_account: '¿No tiene una cuenta?', + 'Hubo un error interno del servidor. Por favor, espera unos momentos e inténtalo de nuevo.', + com_auth_no_account: '¿No tienes una cuenta?', com_auth_sign_up: 'Registrarse', com_auth_sign_in: 'Iniciar sesión', - com_auth_google_login: 'Inicio de sesión con Google', - com_auth_facebook_login: 'Inicio de sesión con Facebook', - com_auth_github_login: 'Inicio de sesión con Github', - com_auth_discord_login: 'Inicio de sesión con Discord', + com_auth_google_login: 'Iniciar sesión con Google', + com_auth_facebook_login: 'Iniciar sesión con Facebook', + com_auth_github_login: 'Iniciar sesión con Github', + com_auth_discord_login: 'Iniciar sesión con Discord', com_auth_email: 'Correo electrónico', com_auth_email_required: 'El correo electrónico es obligatorio', com_auth_email_min_length: 'El correo electrónico debe tener al menos 6 caracteres', com_auth_email_max_length: 'El correo electrónico no debe tener más de 120 caracteres', - com_auth_email_pattern: 'Debe ingresar una dirección de correo electrónico válida', + com_auth_email_pattern: 'Debes ingresar una dirección de correo electrónico válida', com_auth_email_address: 'Dirección de correo electrónico', com_auth_password: 'Contraseña', com_auth_password_required: 'La contraseña es obligatoria', com_auth_password_min_length: 'La contraseña debe tener al menos 8 caracteres', com_auth_password_max_length: 'La contraseña debe tener menos de 128 caracteres', - com_auth_password_forgot: '¿Olvidó la contraseña?', + com_auth_password_forgot: '¿Olvidaste la contraseña?', com_auth_password_confirm: 'Confirmar contraseña', com_auth_password_not_match: 'Las contraseñas no coinciden', com_auth_continue: 'Continuar', - com_auth_create_account: 'Crear su cuenta', - com_auth_error_create: 'Hubo un error al intentar registrar su cuenta. Por favor, inténtelo nuevamente.', + com_auth_create_account: 'Crear tu cuenta', + com_auth_error_create: + 'Hubo un error al intentar registrar tu cuenta. Por favor, inténtalo nuevamente.', com_auth_full_name: 'Nombre completo', com_auth_name_required: 'El nombre es obligatorio', com_auth_name_min_length: 'El nombre debe tener al menos 3 caracteres', - com_auth_name_max_length: 'El nombre no debe tener más de 80 caracteres', + com_auth_name_max_length: 'El nombre debe tener menos de 80 caracteres', com_auth_username: 'Nombre de usuario (opcional)', com_auth_username_required: 'El nombre de usuario es obligatorio', com_auth_username_min_length: 'El nombre de usuario debe tener al menos 2 caracteres', com_auth_username_max_length: 'El nombre de usuario debe tener menos de 20 caracteres', - com_auth_already_have_account: '¿Ya tiene una cuenta?', + com_auth_already_have_account: '¿Ya tienes una cuenta?', com_auth_login: 'Iniciar sesión', - com_auth_reset_password: 'Restablecer su contraseña', - com_auth_click: 'Haga clic', + com_auth_reset_password: 'Restablecer tu contraseña', + com_auth_click: 'Haz clic', com_auth_here: 'AQUÍ', - com_auth_to_reset_your_password: 'para restablecer su contraseña.', + com_auth_to_reset_your_password: 'para restablecer tu contraseña.', com_auth_reset_password_link_sent: 'Correo electrónico enviado', com_auth_reset_password_email_sent: - 'Se ha enviado un correo electrónico con más instrucciones para restablecer su contraseña.', + 'Se ha enviado un correo electrónico con más instrucciones para restablecer tu contraseña.', com_auth_error_reset_password: - 'Hubo un problema al restablecer su contraseña. No se encontró ningún usuario con la dirección de correo electrónico proporcionada. Por favor, inténtelo nuevamente.', + 'Hubo un problema al restablecer tu contraseña. No se encontró ningún usuario con la dirección de correo electrónico proporcionada. Por favor, inténtalo de nuevo.', com_auth_reset_password_success: 'Restablecimiento de contraseña exitoso', - com_auth_login_with_new_password: 'Ahora puede iniciar sesión con su nueva contraseña.', - com_auth_error_invalid_reset_token: 'Este token de restablecimiento de contraseña ya no es válido.', - com_auth_click_here: 'Haga clic aquí', + com_auth_login_with_new_password: 'Ahora puedes iniciar sesión con tu nueva contraseña.', + com_auth_error_invalid_reset_token: + 'Este token de restablecimiento de contraseña ya no es válido.', + com_auth_click_here: 'Haz clic aquí', com_auth_to_try_again: 'para intentarlo de nuevo.', com_auth_submit_registration: 'Enviar registro', com_auth_welcome_back: 'Bienvenido de nuevo', - com_endpoint_open_menu: 'Abrir Menú', + com_endpoint_open_menu: 'Abrir menú', com_endpoint_bing_enable_sydney: 'Habilitar Sydney', com_endpoint_bing_to_enable_sydney: 'Para habilitar Sydney', com_endpoint_bing_jailbreak: 'Jailbreak', com_endpoint_bing_context_placeholder: - 'Bing puede usar hasta 7k tokens para "contexto", que puede referenciar en la conversación. El límite específico no se conoce, pero puede haber errores al exceder los 7k tokens.', + 'Bing puede usar hasta 7k tokens para "contexto", que puede referenciar en la conversación. El límite específico no se conoce, pero puede haber errores al superar los 7k tokens', com_endpoint_bing_system_message_placeholder: - 'ADVERTENCIA: El uso indebido de esta función puede provocar que sea EXPULSADO de usar Bing. Haga clic en \'System Message\' para obtener instrucciones completas y el mensaje predeterminado si se omite, que es el preajuste \'Sydney\' que se considera seguro.', + 'ADVERTENCIA: El uso indebido de esta función puede resultar en una PROHIBICIÓN del uso de Bing. Haga clic en \'System Message\' para obtener instrucciones completas y el mensaje predeterminado si se omite, que es el ajuste preestablecido \'Sydney\', considerado seguro.', com_endpoint_system_message: 'Mensaje del Sistema', com_endpoint_message: 'Conversar con', - com_endpoint_message_not_appendable: 'Edite su mensaje o Regenere.', + com_endpoint_message_not_appendable: 'Edita tu mensaje o Regenera.', com_endpoint_default_blank: 'predeterminado: en blanco', com_endpoint_default_false: 'predeterminado: falso', com_endpoint_default_creative: 'predeterminado: creativo', @@ -135,7 +138,7 @@ export default { com_endpoint_default_with_num: 'predeterminado: {0}', com_endpoint_context: 'Contexto', com_endpoint_tone_style: 'Estilo de Tono', - com_endpoint_token_count: 'Recuento de Tokens', + com_endpoint_token_count: 'Conteo de Tokens', com_endpoint_output: 'Salida', com_endpoint_google_temp: 'Valores más altos = más aleatorio, mientras que valores más bajos = más enfocado y determinista. Recomendamos cambiar esto o Top P, pero no ambos.', @@ -144,10 +147,10 @@ export default { com_endpoint_google_topk: 'Top-k cambia cómo 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 próximo token se selecciona entre los 3 tokens más probables (usando temperatura).', com_endpoint_google_maxoutputtokens: - 'Número máximo de tokens que pueden generarse en la respuesta. Especifique un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', - com_endpoint_google_custom_name_placeholder: 'Defina un nombre personalizado para Google', + 'Número máximo de tokens que se pueden generar en la respuesta. Especifica un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', + com_endpoint_google_custom_name_placeholder: 'Establece un nombre personalizado para Google', com_endpoint_prompt_prefix_placeholder: - 'Defina instrucciones personalizadas o contexto. Se ignora si está vacío.', + 'Establece instrucciones personalizadas o contexto. Ignorado si está vacío.', com_endpoint_custom_name: 'Nombre Personalizado', com_endpoint_prompt_prefix: 'Prefijo del Prompt', com_endpoint_temperature: 'Temperatura', @@ -160,101 +163,134 @@ export default { com_endpoint_openai_max: 'Tokens máximos para generar. La longitud total de los tokens de entrada y los tokens generados está limitada por la longitud del contexto del modelo.', com_endpoint_openai_topp: - 'Una alternativa para el muestreo con temperatura, llamada muestreo de núcleo, donde el modelo considera los resultados de los tokens con masa de probabilidad top_p. Entonces, 0.1 significa que solo se consideran los tokens que comprenden la masa de probabilidad de los 10% principales. Recomendamos cambiar esto o la temperatura, pero no ambos.', + 'Una alternativa para el muestreo con temperatura, llamada muestreo de núcleo, donde el modelo considera los resultados de los tokens con masa de probabilidad top_p. Entonces, 0.1 significa que solo se consideran los tokens que comprenden la masa de probabilidad del 10% superior. Recomendamos cambiar esto o la temperatura, pero no ambos.', com_endpoint_openai_freq: - 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según su frecuencia existente en el texto hasta ahora, disminuyendo la probabilidad de que el modelo repita la misma línea literalmente.', + 'Número entre -2.0 y 2.0. Los valores positivos penalizan nuevos tokens en función de su frecuencia existente en el texto hasta ahora, disminuyendo la probabilidad de que el modelo repita la misma línea literalmente.', com_endpoint_openai_pres: - 'Número entre -2.0 y 2.0. Los valores positivos penalizan los nuevos tokens según si aparecen en el texto hasta ahora, aumentando la probabilidad de que el modelo hable sobre nuevos temas.', - com_endpoint_openai_custom_name_placeholder: 'Defina un nombre personalizado para ChatGPT', + 'Número entre -2.0 y 2.0. Los valores positivos penalizan nuevos tokens en función de si aparecen en el texto hasta ahora, aumentando la probabilidad de que el modelo hable sobre nuevos temas.', + com_endpoint_openai_custom_name_placeholder: 'Establece un nombre personalizado para ChatGPT', com_endpoint_openai_prompt_prefix_placeholder: - 'Defina instrucciones personalizadas para incluir en el Mensaje del Sistema. Predeterminado: ninguno', + 'Establece instrucciones personalizadas para incluir en el Mensaje del Sistema. Predeterminado: ninguno', com_endpoint_anthropic_temp: - 'Varía de 0 a 1. Use temp más cercano a 0 para analítico / opción múltiple, y más cercano a 1 para tareas creativas y generativas. Recomendamos cambiar esto o Top P, pero no ambos.', + 'Varía de 0 a 1. Usa temp más cercano a 0 para analítico / opción múltiple, y más cercano a 1 para tareas creativas y generativas. Recomendamos cambiar esto o Top P, pero no ambos.', com_endpoint_anthropic_topp: 'Top-p cambia cómo el modelo selecciona tokens para la salida. Los tokens se seleccionan desde el más K (ver el parámetro topK) probable hasta el menos, hasta que la suma de sus probabilidades sea igual al valor de top-p.', com_endpoint_anthropic_topk: 'Top-k cambia cómo 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 próximo token se selecciona entre los 3 tokens más probables (usando temperatura).', com_endpoint_anthropic_maxoutputtokens: - 'Número máximo de tokens que pueden generarse en la respuesta. Especifique un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', - com_endpoint_anthropic_custom_name_placeholder: 'Defina un nombre personalizado para Anthropic', + 'Número máximo de tokens que se pueden generar en la respuesta. Especifica un valor menor para respuestas más cortas y un valor mayor para respuestas más largas.', + com_endpoint_anthropic_custom_name_placeholder: + 'Establece un nombre personalizado para Anthropic', com_endpoint_frequency_penalty: 'Penalización de Frecuencia', - com_endpoint_presence_penalty: 'Penalización de presencia', - com_endpoint_plug_use_functions: 'Usar funciones', - com_endpoint_plug_skip_completion: 'Saltar completación', - com_endpoint_disabled_with_tools: 'Desactivado con herramientas', - com_endpoint_disabled_with_tools_placeholder: 'Desactivado con herramientas seleccionadas', + com_endpoint_plug_use_functions: 'Usar Funciones', + com_endpoint_plug_skip_completion: 'Omitir Completado', + com_endpoint_disabled_with_tools: 'desactivado con herramientas', + com_endpoint_disabled_with_tools_placeholder: 'Desactivado con Herramientas Seleccionadas', com_endpoint_plug_set_custom_instructions_for_gpt_placeholder: - 'Establecer instrucciones personalizadas para incluir en el mensaje del sistema. Predeterminado: ninguno', + 'Establecer instrucciones personalizadas para incluir en el Mensaje del Sistema. Predeterminado: ninguno', com_endpoint_import: 'Importar', com_endpoint_set_custom_name: - 'Establecer un nombre personalizado, en caso de que puedas encontrar este preajuste', - com_endpoint_preset: 'Preajuste', - com_endpoint_presets: 'Preajustes', - com_endpoint_preset_name: 'Nombre del preajuste', - com_endpoint_new_topic: 'Nuevo tema', - com_endpoint: 'Punto final', + 'Establecer un nombre personalizado, en caso de que quieras encontrar este preset', + com_endpoint_preset_delete_confirm: '¿Estás seguro de que quieres eliminar este preset?', + com_endpoint_preset_clear_all_confirm: '¿Estás seguro de que quieres eliminar todos tus presets?', + com_endpoint_preset_import: 'Preset Importado!', + com_endpoint_preset_import_error: + 'Hubo un error al importar tu preset. Por favor, inténtalo de nuevo.', + com_endpoint_preset_save_error: + 'Hubo un error al guardar tu preset. Por favor, inténtalo de nuevo.', + com_endpoint_preset_delete_error: + 'Hubo un error al eliminar tu preset. Por favor, inténtalo de nuevo.', + com_endpoint_preset_default_removed: 'ya no es el preset predeterminado.', + com_endpoint_preset_default_item: 'Predeterminado:', + com_endpoint_preset_default_none: 'Ningún preset predeterminado activo.', + com_endpoint_preset_title: 'Preset', + com_endpoint_preset_saved: 'Guardado!', + com_endpoint_preset_default: 'es ahora el preset predeterminado.', + com_endpoint_preset: 'preset', + com_endpoint_presets: 'presets', + com_endpoint_preset_selected: 'Preset Activo!', + com_endpoint_preset_selected_title: 'Activo!', + com_endpoint_preset_name: 'Nombre del Preset', + com_endpoint_new_topic: 'Nuevo Tema', + com_endpoint: 'Endpoint', com_endpoint_hide: 'Ocultar', com_endpoint_show: 'Mostrar', - com_endpoint_examples: 'Ejemplos', - com_endpoint_completion: 'Completación', + com_endpoint_examples: ' Presets', + com_endpoint_completion: 'Completado', com_endpoint_agent: 'Agente', - com_endpoint_show_what_settings: 'Mostrar {0} ajustes', + com_endpoint_show_what_settings: 'Mostrar Configuraciones de {0}', com_endpoint_save: 'Guardar', com_endpoint_export: 'Exportar', - com_endpoint_save_as_preset: 'Guardar como preajuste', + com_endpoint_save_as_preset: 'Guardar como Preset', com_endpoint_presets_clear_warning: - '¿Estás seguro de que quieres borrar todos los preajustes? Esto es irreversible.', + '¿Estás seguro de que quieres borrar todos los presets? Esto es irreversible.', com_endpoint_not_implemented: 'No implementado', - com_endpoint_no_presets: 'Aún no hay preajustes, usa el botón de ajustes para crear uno', - com_endpoint_not_available: 'No hay punto final disponible', - com_endpoint_view_options: 'Ver opciones', - com_endpoint_save_convo_as_preset: 'Guardar conversación como preajuste', - com_endpoint_my_preset: 'Mi preajuste', - com_endpoint_agent_model: 'Modelo de agente (Recomendado: GPT-3.5)', - com_endpoint_completion_model: 'Modelo de completación (Recomendado: GPT-4)', - com_endpoint_func_hover: 'Habilitar el uso de plugins como funciones de OpenAI', + com_endpoint_no_presets: 'Aún no hay presets, utiliza el botón de configuración para crear uno', + com_endpoint_not_available: 'Ningún endpoint disponible', + com_endpoint_view_options: 'Ver Opciones', + com_endpoint_save_convo_as_preset: 'Guardar Conversación como Preset', + com_endpoint_my_preset: 'Mi Preset', + com_endpoint_agent_model: 'Modelo del Agente (Recomendado: GPT-3.5)', + com_endpoint_completion_model: 'Modelo de Completado (Recomendado: GPT-4)', + com_endpoint_func_hover: 'Habilitar uso de Plugins como Funciones OpenAI', com_endpoint_skip_hover: - 'Habilitar el salto del paso de completación, que revisa la respuesta final y los pasos generados', - com_endpoint_config_key: 'Establecer clave de API', - com_endpoint_config_key_for: 'Establecer clave de API para', + 'Habilitar la etapa de salto de completado, que revisa la respuesta final y las etapas generadas', + com_endpoint_config_key: 'Establecer Clave API', + com_endpoint_config_placeholder: 'Establece tu Clave en el menú Cabecera para conversar.', + com_endpoint_config_key_for: 'Establecer Clave API para', com_endpoint_config_key_name: 'Clave', - com_endpoint_config_value: 'Introducir valor para', - com_endpoint_config_key_name_placeholder: 'Establecer clave de API primero', - com_endpoint_config_key_encryption: 'Tu clave será encriptada y borrada a las', - com_endpoint_config_key_expiry: 'la hora de caducidad', - com_endpoint_config_key_import_json_key: 'Importar clave JSON de cuenta de servicio.', + com_endpoint_config_value: 'Insertar valor para', + com_endpoint_config_key_name_placeholder: 'Establece la clave API primero', + com_endpoint_config_key_encryption: 'Tu clave será encriptada y eliminada en', + com_endpoint_config_key_expiry: 'el tiempo de expiración', + com_endpoint_config_click_here: 'Haz clic Aquí', + com_endpoint_config_google_service_key: 'Clave de la Cuenta de Servicio de Google', + com_endpoint_config_google_cloud_platform: '(de Google Cloud Platform)', + com_endpoint_config_google_api_key: 'Clave API de Google', + com_endpoint_config_google_gemini_api: '(API Gemini)', + com_endpoint_config_google_api_info: + 'Para obtener tu clave API de Lenguaje Generativo (para Gemini),', + com_endpoint_config_key_import_json_key: 'Importar Clave JSON de la Cuenta de Servicio.', com_endpoint_config_key_import_json_key_success: - 'Clave JSON de cuenta de servicio importada con éxito', + 'Clave JSON de la Cuenta de Servicio importada con éxito', com_endpoint_config_key_import_json_key_invalid: - 'Clave JSON de cuenta de servicio inválida, ¿importaste el archivo correcto?', + 'Clave JSON de la Cuenta de Servicio inválida, ¿importaste el archivo correcto?', com_endpoint_config_key_get_edge_key: - 'Para obtener tu token de acceso para Bing, inicia sesión en', + 'Para obtener tu token de acceso para Bing, inicia sesión en', com_endpoint_config_key_get_edge_key_dev_tool: - 'Usa las herramientas de desarrollo o una extensión mientras estás conectado al sitio para copiar el contenido de la cookie _U. Si esto falla, sigue estas', + 'Utiliza las herramientas de desarrollo o una extensión mientras estás conectado al sitio para copiar el contenido de la cookie _U. Si esto falla, sigue estas', com_endpoint_config_key_edge_instructions: 'instrucciones', com_endpoint_config_key_edge_full_key_string: - 'para proporcionar las cadenas de cookies completas.', + 'para proporcionar las cadenas completas de la cookie.', com_endpoint_config_key_chatgpt: - 'Para obtener tu token de acceso para ChatGPT "Versión gratuita", inicia sesión en', + 'Para obtener tu token de acceso para ChatGPT \'Versión Gratuita\', inicia sesión en', com_endpoint_config_key_chatgpt_then_visit: 'luego visita', com_endpoint_config_key_chatgpt_copy_token: 'Copia el token de acceso.', com_endpoint_config_key_google_need_to: 'Necesitas', com_endpoint_config_key_google_vertex_ai: 'Habilitar Vertex AI', com_endpoint_config_key_google_vertex_api: 'API en Google Cloud, luego', - com_endpoint_config_key_google_service_account: 'Crear una cuenta de servicio', + com_endpoint_config_key_google_service_account: 'Crea una Cuenta de Servicio', com_endpoint_config_key_google_vertex_api_role: - 'Asegúrate de hacer clic en "Crear y continuar" para dar al menos el rol de "Usuario de Vertex AI". Por último, crea una clave JSON para importarla aquí.', - com_nav_auto_scroll: 'Desplazamiento automático al más reciente al abrir', + 'Asegúrate de hacer clic en \'Crear y Continuar\' para dar al menos el rol \'Usuario de Vertex AI\'. Finalmente, crea una clave JSON para importar aquí.', + com_nav_welcome_message: '¿Cómo puedo ayudarte hoy?', + com_nav_auto_scroll: 'Desplazamiento Automático al Más Nuevo al Abrir', + com_nav_modular_chat: 'Activar el cambio de Endpoints en medio de la conversación', + com_nav_profile_picture: 'Foto de Perfil', + com_nav_change_picture: 'Cambiar foto', com_nav_plugin_store: 'Tienda de plugins', + com_show_agent_settings: 'Mostrar Configuraciones del Agente', + com_show_completion_settings: 'Mostrar Configuraciones de Completado', + com_hide_examples: 'Ocultar Ejemplos', + com_show_examples: 'Mostrar Ejemplos', com_nav_plugin_search: 'Buscar plugins', com_nav_plugin_auth_error: - 'Hubo un error al intentar autenticar este plugin. Por favor, inténtalo de nuevo.', - com_nav_export_filename: 'Nombre de archivo', - com_nav_export_filename_placeholder: 'Establece el nombre de archivo', + 'Hubo un error al intentar autenticar este plugin. Por favor, inténtalo de nuevo.', + com_nav_export_filename: 'Nombre del archivo', + com_nav_export_filename_placeholder: 'Establecer el nombre del archivo', com_nav_export_type: 'Tipo', - com_nav_export_include_endpoint_options: 'Incluir opciones de punto final', + com_nav_export_include_endpoint_options: 'Incluir opciones de endpoint', com_nav_enabled: 'Habilitado', - com_nav_not_supported: 'No compatible', + com_nav_not_supported: 'No soportado', com_nav_export_all_message_branches: 'Exportar todas las ramas de mensajes', com_nav_export_recursive_or_sequential: '¿Recursivo o secuencial?', com_nav_export_recursive: 'Recursivo', @@ -263,20 +299,24 @@ export default { com_nav_theme_system: 'Sistema', com_nav_theme_dark: 'Oscuro', com_nav_theme_light: 'Claro', - com_nav_clear_all_chats: 'Borrar todos los chats', - com_nav_confirm_clear: 'Confirmar borrado', + com_nav_user_name_display: 'Mostrar nombre de usuario en los mensajes', + com_nav_clear_all_chats: 'Limpiar todos los chats', + com_nav_confirm_clear: 'Confirmar Limpieza', com_nav_close_sidebar: 'Cerrar barra lateral', com_nav_open_sidebar: 'Abrir barra lateral', com_nav_send_message: 'Enviar mensaje', com_nav_log_out: 'Cerrar sesión', com_nav_user: 'USUARIO', - com_nav_clear_conversation: 'Borrar conversaciones', + com_nav_clear_conversation: 'Limpiar conversaciones', com_nav_clear_conversation_confirm_message: - '¿Estás seguro de que quieres borrar todas las conversaciones? Esto es irreversible.', - com_nav_help_faq: 'Ayuda y preguntas frecuentes', - com_nav_settings: 'Ajustes', + '¿Estás seguro de que quieres limpiar todas las conversaciones? Esto es irreversible.', + com_nav_help_faq: 'Ayuda y Preguntas Frecuentes', + com_nav_settings: 'Configuraciones', com_nav_search_placeholder: 'Buscar mensajes', com_nav_setting_general: 'General', com_nav_setting_data: 'Controles de datos', + com_nav_setting_account: 'Cuenta', + com_nav_language: 'Idioma', + com_nav_lang_auto: 'Detección automática', com_nav_lang_spanish: 'Español', }; diff --git a/client/src/store/settings.ts b/client/src/store/settings.ts index 9c1b572b5e1..7446313565b 100644 --- a/client/src/store/settings.ts +++ b/client/src/store/settings.ts @@ -88,6 +88,25 @@ const LaTeXParsing = atom({ ] as const, }); +const UsernameDisplay = atom({ + key: 'UsernameDisplay', + default: localStorage.getItem('UsernameDisplay') === 'true', + effects: [ + ({ setSelf, onSet }) => { + const savedValue = localStorage.getItem('UsernameDisplay'); + if (savedValue != null) { + setSelf(savedValue === 'true'); + } + + onSet((newValue: unknown) => { + if (typeof newValue === 'boolean') { + localStorage.setItem('autoScroll', newValue.toString()); + } + }); + }, + ] as const, +}); + export default { abortScroll, optionSettings, @@ -98,4 +117,5 @@ export default { autoScroll, modularChat, LaTeXParsing, + UsernameDisplay, }; From becc39f80eeba5332fdd8136df6caf9b4521cf49 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 19 Jan 2024 03:31:46 -0500 Subject: [PATCH 5/8] fix: message component definition and imports order, remove unnecessary useEffect and localStorage set, fix localStorage key in store --- .../src/components/Chat/Messages/Message.tsx | 51 +++++++------------ .../Nav/SettingsTabs/Account/Account.tsx | 6 ++- client/src/store/settings.ts | 2 +- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index 55756cfaa7d..2b2d223892a 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -1,20 +1,20 @@ +import { useRecoilValue } from 'recoil'; +import { useAuthContext, useMessageHelpers, useLocalize } from '~/hooks'; +import type { TMessageProps } from '~/common'; import { Plugin } from '~/components/Messages/Content'; import MessageContent from './Content/MessageContent'; -import type { TMessageProps } from '~/common'; import SiblingSwitch from './SiblingSwitch'; -import { useAuthContext, useMessageHelpers, useLocalize } from '~/hooks'; // eslint-disable-next-line import/no-cycle import MultiMessage from './MultiMessage'; import HoverButtons from './HoverButtons'; import SubRow from './SubRow'; import { cn } from '~/utils'; -import { useRecoilState } from 'recoil'; import store from '~/store'; -import { useEffect } from 'react'; export default function Message(props: TMessageProps) { - const { message, siblingIdx, siblingCount, setSiblingIdx, currentEditId, setCurrentEditId } = - props; + const UsernameDisplay = useRecoilValue(store.UsernameDisplay); + const { user } = useAuthContext(); + const localize = useLocalize(); const { ask, @@ -31,25 +31,20 @@ export default function Message(props: TMessageProps) { regenerateMessage, } = useMessageHelpers(props); - const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; - - const { user } = useAuthContext(); - - const localize = useLocalize(); - - const [UsernameDisplay, setUsernameDisplay] = useRecoilState(store.UsernameDisplay); - - useEffect(() => { - const savedValue = localStorage.getItem('UsernameDisplay'); - if (savedValue != null) { - setUsernameDisplay(savedValue === 'true'); - } - }, []); + const { message, siblingIdx, siblingCount, setSiblingIdx, currentEditId, setCurrentEditId } = + props; if (!message) { return null; } + const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; + + let messageLabel = UsernameDisplay ? user?.name : localize('com_user_message'); + if (!isCreatedByUser) { + messageLabel = message.sender; + } + return ( <>
-
- {} - {UsernameDisplay - ? isCreatedByUser - ? user?.name - : message.sender - : isCreatedByUser - ? localize('com_user_message') - : message.sender} -
+
{messageLabel}
- {} + {/* Legacy Plugins */} {message?.plugin && } - {}
- {} {isLast && isSubmitting ? null : (
- {} void }) { const [UsernameDisplay, setUsernameDisplay] = useRecoilState(store.UsernameDisplay); const localize = useLocalize(); const handleCheckedChange = (value: boolean) => { setUsernameDisplay(value); - localStorage.setItem('UsernameDisplay', value.toString()); + if (onCheckedChange) { + onCheckedChange(value); + } }; return ( diff --git a/client/src/store/settings.ts b/client/src/store/settings.ts index 7446313565b..92824984b5c 100644 --- a/client/src/store/settings.ts +++ b/client/src/store/settings.ts @@ -100,7 +100,7 @@ const UsernameDisplay = atom({ onSet((newValue: unknown) => { if (typeof newValue === 'boolean') { - localStorage.setItem('autoScroll', newValue.toString()); + localStorage.setItem('UsernameDisplay', newValue.toString()); } }); }, From 9f2b9fe9c4c4e53bf70581f4b5db056e6bd643c2 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 19 Jan 2024 03:36:16 -0500 Subject: [PATCH 6/8] chore: update readme.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e590f1cbc66..f00a8391e04 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,10 @@ Please consult the breaking changes before updating. ## ⭐ Star History +

+danny-avila%2FLibreChat | Trendshift +

+ Star History Chart From c1d45d58f1e10218ca234da524fc1e9dbeb3a982 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 19 Jan 2024 03:39:04 -0500 Subject: [PATCH 7/8] chore: optimize condition for messageLabel --- client/src/components/Chat/Messages/Message.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index 2b2d223892a..e93c9166db4 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -40,8 +40,10 @@ export default function Message(props: TMessageProps) { const { text, children, messageId = null, isCreatedByUser, error, unfinished } = message ?? {}; - let messageLabel = UsernameDisplay ? user?.name : localize('com_user_message'); - if (!isCreatedByUser) { + let messageLabel = ''; + if (isCreatedByUser) { + messageLabel = UsernameDisplay ? user?.name : localize('com_user_message'); + } else { messageLabel = message.sender; } From 42207d0b94e85a319b40725a9b4a9226b52381ec Mon Sep 17 00:00:00 2001 From: Danny Avila <110412045+danny-avila@users.noreply.github.com> Date: Fri, 19 Jan 2024 03:42:19 -0500 Subject: [PATCH 8/8] chore(Message.tsx): remove empty blocks --- client/src/components/Chat/Messages/Message.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/src/components/Chat/Messages/Message.tsx b/client/src/components/Chat/Messages/Message.tsx index e93c9166db4..4054a8f7542 100644 --- a/client/src/components/Chat/Messages/Message.tsx +++ b/client/src/components/Chat/Messages/Message.tsx @@ -60,7 +60,6 @@ export default function Message(props: TMessageProps) {
- {} {typeof icon === 'string' && /[^\\x00-\\x7F]+/.test(icon as string) ? ( {icon} ) : ( @@ -70,7 +69,6 @@ export default function Message(props: TMessageProps) {
- {}