diff --git a/.chainlit/config.toml b/.chainlit/config.toml new file mode 100755 index 00000000..bb4a667f --- /dev/null +++ b/.chainlit/config.toml @@ -0,0 +1,157 @@ +[project] +# List of environment variables to be provided by each user to use the app. +user_env = [] + +# Duration (in seconds) during which the session is saved when the connection is lost +session_timeout = 3600 + +# Duration (in seconds) of the user session expiry +user_session_timeout = 1296000 # 15 days + +# Enable third parties caching (e.g., LangChain cache) +cache = false + +# Whether to persist user environment variables (API keys) to the database +# Set to true to store user env vars in DB, false to exclude them for security +persist_user_env = false + +# Whether to mask user environment variables (API keys) in the UI with password type +# Set to true to show API keys as ***, false to show them as plain text +mask_user_env = false + +# Authorized origins +allow_origins = ["*"] + +[features] +# Process and display HTML in messages. This can be a security risk (see https://stackoverflow.com/questions/19603097/why-is-it-dangerous-to-render-user-generated-html-or-javascript) +unsafe_allow_html = false + +# Process and display mathematical expressions. This can clash with "$" characters in messages. +latex = false + +# Autoscroll new user messages at the top of the window +user_message_autoscroll = true + +# Automatically tag threads with the current chat profile (if a chat profile is used) +auto_tag_thread = true + +# Allow users to edit their own messages +edit_message = true + +# Allow users to share threads (backend + UI). Requires an app-defined on_shared_thread_view callback. +allow_thread_sharing = false + +[features.slack] +# Add emoji reaction when message is received (requires reactions:write OAuth scope) +reaction_on_message_received = false + +# Authorize users to spontaneously upload files with messages +[features.spontaneous_file_upload] + enabled = true + # Define accepted file types using MIME types + # Examples: + # 1. For specific file types: + # accept = ["image/jpeg", "image/png", "application/pdf"] + # 2. For all files of certain type: + # accept = ["image/*", "audio/*", "video/*"] + # 3. For specific file extensions: + # accept = { "application/octet-stream" = [".xyz", ".pdb"] } + # Note: Using "*/*" is not recommended as it may cause browser warnings + accept = ["*/*"] + max_files = 20 + max_size_mb = 500 + +[features.audio] + # Enable audio features + enabled = false + # Sample rate of the audio + sample_rate = 24000 + +[features.mcp] + # Enable Model Context Protocol (MCP) features + enabled = false + +[features.mcp.sse] + enabled = true + +[features.mcp.streamable-http] + enabled = true + +[features.mcp.stdio] + enabled = true + # Only the executables in the allow list can be used for MCP stdio server. + # Only need the base name of the executable, e.g. "npx", not "/usr/bin/npx". + # Please don't comment this line for now, we need it to parse the executable name. + allowed_executables = [ "npx", "uvx" ] + +[UI] +# Name of the assistant. +name = "Assistant" + +# default_theme = "dark" + +# Force a specific language for all users (e.g., "en-US", "he-IL", "fr-FR") +# If not set, the browser's language will be used +# language = "en-US" + +# layout = "wide" + +# default_sidebar_state = "open" + +# Description of the assistant. This is used for HTML tags. +# description = "" + +# Chain of Thought (CoT) display mode. Can be "hidden", "tool_call" or "full". +cot = "full" + +# Specify a CSS file that can be used to customize the user interface. +# The CSS file can be served from the public directory or via an external link. +# custom_css = "/public/test.css" + +# Specify additional attributes for a custom CSS file +# custom_css_attributes = "media=\"print\"" + +# Specify a JavaScript file that can be used to customize the user interface. +# The JavaScript file can be served from the public directory. +# custom_js = "/public/test.js" + +# The style of alert boxes. Can be "classic" or "modern". +alert_style = "classic" + +# Specify additional attributes for custom JS file +# custom_js_attributes = "async type = \"module\"" + +# Custom login page image, relative to public directory or external URL +# login_page_image = "/public/custom-background.jpg" + +# Custom login page image filter (Tailwind internal filters, no dark/light variants) +# login_page_image_filter = "brightness-50 grayscale" +# login_page_image_dark_filter = "contrast-200 blur-sm" + +# Specify a custom meta URL (used for meta tags like og:url) +# custom_meta_url = "https://github.com/Chainlit/chainlit" + +# Specify a custom meta image url. +# custom_meta_image_url = "https://chainlit-cloud.s3.eu-west-3.amazonaws.com/logo/chainlit_banner.png" + +# Load assistant logo directly from URL. +logo_file_url = "" + +# Load assistant avatar image directly from URL. +default_avatar_file_url = "" + +# Specify a custom build directory for the frontend. +# This can be used to customize the frontend code. +# Be careful: If this is a relative path, it should not start with a slash. +# custom_build = "./public/build" + +# Specify optional one or more custom links in the header. +# [[UI.header_links]] +# name = "Issues" +# display_name = "Report Issue" +# icon_url = "https://avatars.githubusercontent.com/u/128686189?s=200&v=4" +# url = "https://github.com/Chainlit/chainlit/issues" +# target = "_blank" (default) # Optional: "_self", "_parent", "_top". + +[meta] +generated_by = "2.9.3" diff --git a/.chainlit/translations/bn.json b/.chainlit/translations/bn.json new file mode 100755 index 00000000..50353d98 --- /dev/null +++ b/.chainlit/translations/bn.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u09ac\u09be\u09a4\u09bf\u09b2 \u0995\u09b0\u09c1\u09a8", + "confirm": "\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8", + "continue": "\u099a\u09be\u09b2\u09bf\u09af\u09bc\u09c7 \u09af\u09be\u09a8", + "goBack": "\u09aa\u09bf\u099b\u09a8\u09c7 \u09af\u09be\u09a8", + "reset": "\u09b0\u09bf\u09b8\u09c7\u099f \u0995\u09b0\u09c1\u09a8", + "submit": "\u099c\u09ae\u09be \u09a6\u09bf\u09a8" + }, + "status": { + "loading": "\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...", + "error": { + "default": "\u098f\u0995\u099f\u09bf \u09a4\u09cd\u09b0\u09c1\u099f\u09bf \u0998\u099f\u09c7\u099b\u09c7", + "serverConnection": "\u09b8\u09be\u09b0\u09cd\u09ad\u09be\u09b0\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u09b8\u0982\u09af\u09cb\u0997 \u0995\u09b0\u09be \u09af\u09be\u099a\u09cd\u099b\u09c7 \u09a8\u09be" + } + } + }, + "auth": { + "login": { + "title": "\u0985\u09cd\u09af\u09be\u09aa\u09cd\u09b2\u09bf\u0995\u09c7\u09b6\u09a8 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u09b2\u0997\u0987\u09a8 \u0995\u09b0\u09c1\u09a8", + "form": { + "email": { + "label": "\u0987\u09ae\u09c7\u0987\u09b2 \u09a0\u09bf\u0995\u09be\u09a8\u09be", + "required": "\u0987\u09ae\u09c7\u0987\u09b2 \u098f\u0995\u099f\u09bf \u0986\u09ac\u09b6\u09cd\u09af\u0995 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u09aa\u09be\u09b8\u0993\u09af\u09bc\u09be\u09b0\u09cd\u09a1", + "required": "\u09aa\u09be\u09b8\u0993\u09af\u09bc\u09be\u09b0\u09cd\u09a1 \u098f\u0995\u099f\u09bf \u0986\u09ac\u09b6\u09cd\u09af\u0995 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0" + }, + "actions": { + "signin": "\u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09c1\u09a8" + }, + "alternativeText": { + "or": "\u0985\u09a5\u09ac\u09be" + } + }, + "errors": { + "default": "\u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be \u09b8\u09ae\u09cd\u09ad\u09ac \u09b9\u099a\u09cd\u099b\u09c7 \u09a8\u09be", + "signin": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "oauthSignin": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "redirectUriMismatch": "\u09b0\u09bf\u09a1\u09be\u0987\u09b0\u09c7\u0995\u09cd\u099f URI \u0993\u0986\u09a5 \u0985\u09cd\u09af\u09be\u09aa \u0995\u09a8\u09ab\u09bf\u0997\u09be\u09b0\u09c7\u09b6\u09a8\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u09ae\u09bf\u09b2\u099b\u09c7 \u09a8\u09be", + "oauthCallback": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "oauthCreateAccount": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "emailCreateAccount": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "callback": "\u0985\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8", + "oauthAccountNotLinked": "\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09b0\u09bf\u099a\u09af\u09bc \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09a4\u09c7, \u0986\u09aa\u09a8\u09bf \u09af\u09c7 \u0985\u09cd\u09af\u09be\u0995\u09be\u0989\u09a8\u09cd\u099f\u099f\u09bf \u09ae\u09c2\u09b2\u09a4 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8 \u09b8\u09c7\u099f\u09bf \u09a6\u09bf\u09af\u09bc\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09c1\u09a8", + "emailSignin": "\u0987\u09ae\u09c7\u0987\u09b2 \u09aa\u09be\u09a0\u09be\u09a8\u09cb \u09af\u09be\u09af\u09bc\u09a8\u09bf", + "emailVerify": "\u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9 \u0995\u09b0\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u0987\u09ae\u09c7\u0987\u09b2 \u09af\u09be\u099a\u09be\u0987 \u0995\u09b0\u09c1\u09a8, \u098f\u0995\u099f\u09bf \u09a8\u09a4\u09c1\u09a8 \u0987\u09ae\u09c7\u0987\u09b2 \u09aa\u09be\u09a0\u09be\u09a8\u09cb \u09b9\u09af\u09bc\u09c7\u099b\u09c7", + "credentialsSignin": "\u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09af\u09bc\u09c7\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09be\u09b0 \u09a6\u09c7\u0993\u09af\u09bc\u09be \u09a4\u09a5\u09cd\u09af \u09b8\u09a0\u09bf\u0995 \u0995\u09bf\u09a8\u09be \u09af\u09be\u099a\u09be\u0987 \u0995\u09b0\u09c1\u09a8", + "sessionRequired": "\u098f\u0987 \u09aa\u09c3\u09b7\u09cd\u09a0\u09be \u09a6\u09c7\u0996\u09a4\u09c7 \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9 \u0995\u09b0\u09c7 \u09b8\u09be\u0987\u09a8 \u0987\u09a8 \u0995\u09b0\u09c1\u09a8" + } + }, + "provider": { + "continue": "{{provider}} \u09a6\u09bf\u09af\u09bc\u09c7 \u099a\u09be\u09b2\u09bf\u09af\u09bc\u09c7 \u09af\u09be\u09a8" + } + }, + "chat": { + "input": { + "placeholder": "\u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09be\u09b0\u09cd\u09a4\u09be \u098f\u0996\u09be\u09a8\u09c7 \u099f\u09be\u0987\u09aa \u0995\u09b0\u09c1\u09a8...", + "actions": { + "send": "\u09ac\u09be\u09b0\u09cd\u09a4\u09be \u09aa\u09be\u09a0\u09be\u09a8", + "stop": "\u0995\u09be\u099c \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09c1\u09a8", + "attachFiles": "\u09ab\u09be\u0987\u09b2 \u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4 \u0995\u09b0\u09c1\u09a8" + } + }, + "speech": { + "start": "\u09b0\u09c7\u0995\u09b0\u09cd\u09a1\u09bf\u0982 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c1\u09a8", + "stop": "\u09b0\u09c7\u0995\u09b0\u09cd\u09a1\u09bf\u0982 \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09c1\u09a8", + "connecting": "\u09b8\u0982\u09af\u09cb\u0997 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7" + }, + "commands": { + "button": "\u099f\u09c1\u09b2\u09b8", + "changeTool": "\u099f\u09c1\u09b2 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09c1\u09a8", + "availableTools": "\u0989\u09aa\u09b2\u09ac\u09cd\u09a7 \u099f\u09c1\u09b2\u09b8" + }, + "fileUpload": { + "dragDrop": "\u098f\u0996\u09be\u09a8\u09c7 \u09ab\u09be\u0987\u09b2 \u099f\u09c7\u09a8\u09c7 \u0986\u09a8\u09c1\u09a8", + "browse": "\u09ab\u09be\u0987\u09b2 \u09ac\u09cd\u09b0\u09be\u0989\u099c \u0995\u09b0\u09c1\u09a8", + "sizeLimit": "\u09b8\u09c0\u09ae\u09be:", + "errors": { + "failed": "\u0986\u09aa\u09b2\u09cb\u09a1 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09af\u09bc\u09c7\u099b\u09c7", + "cancelled": "\u0986\u09aa\u09b2\u09cb\u09a1 \u09ac\u09be\u09a4\u09bf\u09b2 \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7" + }, + "actions": { + "cancelUpload": "\u0986\u09aa\u09b2\u09cb\u09a1 \u09ac\u09be\u09a4\u09bf\u09b2 \u0995\u09b0\u09c1\u09a8", + "removeAttachment": "\u09b8\u0982\u09af\u09c1\u0995\u09cd\u09a4\u09bf \u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09c1\u09a8" + } + }, + "messages": { + "status": { + "using": "\u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u099b\u09c7", + "used": "\u09ac\u09cd\u09af\u09ac\u09b9\u09c3\u09a4" + }, + "actions": { + "copy": { + "button": "\u0995\u09cd\u09b2\u09bf\u09aa\u09ac\u09cb\u09b0\u09cd\u09a1\u09c7 \u0995\u09aa\u09bf \u0995\u09b0\u09c1\u09a8", + "success": "\u0995\u09aa\u09bf \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7!" + } + }, + "feedback": { + "positive": "\u09b8\u09b9\u09be\u09af\u09bc\u0995", + "negative": "\u09b8\u09b9\u09be\u09af\u09bc\u0995 \u09a8\u09af\u09bc", + "edit": "\u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", + "dialog": { + "title": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af \u09af\u09cb\u0997 \u0995\u09b0\u09c1\u09a8", + "submit": "\u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u099c\u09ae\u09be \u09a6\u09bf\u09a8", + "yourFeedback": "\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09cd\u09b0\u09bf\u09af\u09bc\u09be..." + }, + "status": { + "updating": "\u09b9\u09be\u09b2\u09a8\u09be\u0997\u09be\u09a6 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7", + "updated": "\u09aa\u09cd\u09b0\u09a4\u09bf\u0995\u09cd\u09b0\u09bf\u09af\u09bc\u09be \u09b9\u09be\u09b2\u09a8\u09be\u0997\u09be\u09a6 \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7" + } + } + }, + "history": { + "title": "\u09b8\u09b0\u09cd\u09ac\u09b6\u09c7\u09b7 \u0987\u09a8\u09aa\u09c1\u099f", + "empty": "\u0995\u09cb\u09a8\u09cb \u09a4\u09a5\u09cd\u09af \u09a8\u09c7\u0987...", + "show": "\u0987\u09a4\u09bf\u09b9\u09be\u09b8 \u09a6\u09c7\u0996\u09c1\u09a8" + }, + "settings": { + "title": "\u09b8\u09c7\u099f\u09bf\u0982\u09b8 \u09aa\u09cd\u09af\u09be\u09a8\u09c7\u09b2", + "customize": "\u098f\u0996\u09be\u09a8\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u099a\u09cd\u09af\u09be\u099f \u09b8\u09c7\u099f\u09bf\u0982\u09b8 \u0995\u09be\u09b8\u09cd\u099f\u09ae\u09be\u0987\u099c \u0995\u09b0\u09c1\u09a8" + }, + "watermark": "\u098f\u09b2\u098f\u09b2\u098f\u09ae \u09ad\u09c1\u09b2 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u0964 \u0997\u09c1\u09b0\u09c1\u09a4\u09cd\u09ac\u09aa\u09c2\u09b0\u09cd\u09a3 \u09a4\u09a5\u09cd\u09af \u09af\u09be\u099a\u09be\u0987 \u0995\u09b0\u09be\u09b0 \u0995\u09a5\u09be \u09ac\u09bf\u09ac\u09c7\u099a\u09a8\u09be \u0995\u09b0\u09c1\u09a8\u0964" + }, + "threadHistory": { + "sidebar": { + "title": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0 \u099a\u09cd\u09af\u09be\u099f", + "filters": { + "search": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0986\u099c", + "yesterday": "\u0997\u09a4\u0995\u09be\u09b2", + "previous7days": "\u0997\u09a4 \u09ed \u09a6\u09bf\u09a8", + "previous30days": "\u0997\u09a4 \u09e9\u09e6 \u09a6\u09bf\u09a8" + }, + "empty": "\u0995\u09cb\u09a8\u09cb \u09a5\u09cd\u09b0\u09c7\u09a1 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf", + "actions": { + "close": "\u09b8\u09be\u0987\u09a1\u09ac\u09be\u09b0 \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09c1\u09a8", + "open": "\u09b8\u09be\u0987\u09a1\u09ac\u09be\u09b0 \u0996\u09c1\u09b2\u09c1\u09a8" + } + }, + "thread": { + "untitled": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae\u09b9\u09c0\u09a8 \u0986\u09b2\u09cb\u099a\u09a8\u09be", + "menu": { + "rename": "\u09aa\u09c1\u09a8\u0983\u09a8\u09be\u09ae\u0995\u09b0\u09a3", + "share": "\u09b6\u09c7\u09af\u09bc\u09be\u09b0", + "delete": "Delete" + }, + "actions": { + "share": { + "title": "\u099a\u09cd\u09af\u09be\u099f\u09c7\u09b0 \u09b2\u09bf\u0999\u09cd\u0995 \u09b6\u09c7\u09af\u09bc\u09be\u09b0 \u0995\u09b0\u09c1\u09a8", + "button": "\u09b6\u09c7\u09af\u09bc\u09be\u09b0", + "status": { + "copied": "\u09b2\u09bf\u0999\u09cd\u0995 \u0995\u09aa\u09bf \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7", + "created": "\u09b6\u09c7\u09af\u09bc\u09be\u09b0 \u09b2\u09bf\u0999\u09cd\u0995 \u09a4\u09c8\u09b0\u09bf \u09b9\u09af\u09bc\u09c7\u099b\u09c7!", + "unshared": "\u098f\u0987 \u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09b6\u09c7\u09af\u09bc\u09be\u09b0\u09bf\u0982 \u0985\u0995\u09cd\u09b7\u09ae \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7" + }, + "error": { + "create": "\u09b6\u09c7\u09af\u09bc\u09be\u09b0 \u09b2\u09bf\u0999\u09cd\u0995 \u09a4\u09c8\u09b0\u09bf \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5", + "unshare": "\u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u09b6\u09c7\u09af\u09bc\u09be\u09b0\u09bf\u0982 \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5" + } + }, + "delete": { + "title": "\u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09be \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8", + "description": "\u098f\u099f\u09bf \u09a5\u09cd\u09b0\u09c7\u09a1 \u098f\u09ac\u0982 \u098f\u09b0 \u09ac\u09be\u09b0\u09cd\u09a4\u09be \u0993 \u0989\u09aa\u09be\u09a6\u09be\u09a8\u0997\u09c1\u09b2\u09bf \u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09ac\u09c7\u0964 \u098f\u0987 \u0995\u09be\u099c\u099f\u09bf \u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09ac\u09b8\u09cd\u09a5\u09be\u09af\u09bc \u09ab\u09c7\u09b0\u09be\u09a8\u09cb \u09af\u09be\u09ac\u09c7 \u09a8\u09be", + "success": "\u099a\u09cd\u09af\u09be\u099f \u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7", + "inProgress": "\u099a\u09cd\u09af\u09be\u099f \u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09be \u09b9\u099a\u09cd\u099b\u09c7" + }, + "rename": { + "title": "\u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u09a8\u09be\u09ae \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09c1\u09a8", + "description": "\u098f\u0987 \u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u098f\u0995\u099f\u09bf \u09a8\u09a4\u09c1\u09a8 \u09a8\u09be\u09ae \u09a6\u09bf\u09a8", + "form": { + "name": { + "label": "\u09a8\u09be\u09ae", + "placeholder": "\u09a8\u09a4\u09c1\u09a8 \u09a8\u09be\u09ae \u09b2\u09bf\u0996\u09c1\u09a8" + } + }, + "success": "\u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u09a8\u09be\u09ae \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7!", + "inProgress": "\u09a5\u09cd\u09b0\u09c7\u09a1\u09c7\u09b0 \u09a8\u09be\u09ae \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09be \u09b9\u099a\u09cd\u099b\u09c7" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u099a\u09cd\u09af\u09be\u099f", + "readme": "\u09b0\u09bf\u09a1\u09ae\u09bf", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u09a8\u09a4\u09c1\u09a8 \u099a\u09cd\u09af\u09be\u099f", + "dialog": { + "title": "\u09a8\u09a4\u09c1\u09a8 \u099a\u09cd\u09af\u09be\u099f \u09a4\u09c8\u09b0\u09bf \u0995\u09b0\u09c1\u09a8", + "description": "\u098f\u099f\u09bf \u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8 \u099a\u09cd\u09af\u09be\u099f \u0987\u09a4\u09bf\u09b9\u09be\u09b8 \u09ae\u09c1\u099b\u09c7 \u09ab\u09c7\u09b2\u09ac\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u099a\u09be\u09b2\u09bf\u09af\u09bc\u09c7 \u09af\u09c7\u09a4\u09c7 \u099a\u09be\u09a8?", + "tooltip": "\u09a8\u09a4\u09c1\u09a8 \u099a\u09cd\u09af\u09be\u099f" + } + }, + "user": { + "menu": { + "settings": "\u09b8\u09c7\u099f\u09bf\u0982\u09b8", + "settingsKey": "S", + "apiKeys": "\u098f\u09aa\u09bf\u0986\u0987 \u0995\u09c0", + "logout": "\u09b2\u0997\u0986\u0989\u099f" + } + } + }, + "apiKeys": { + "title": "\u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc \u098f\u09aa\u09bf\u0986\u0987 \u0995\u09c0", + "description": "\u098f\u0987 \u0985\u09cd\u09af\u09be\u09aa\u09cd\u09b2\u09bf\u0995\u09c7\u09b6\u09a8 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u09a8\u09bf\u09ae\u09cd\u09a8\u09b2\u09bf\u0996\u09bf\u09a4 \u098f\u09aa\u09bf\u0986\u0987 \u0995\u09c0 \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u0964 \u0995\u09c0\u0997\u09c1\u09b2\u09bf \u0986\u09aa\u09a8\u09be\u09b0 \u09a1\u09bf\u09ad\u09be\u0987\u09b8\u09c7\u09b0 \u09b2\u09cb\u0995\u09be\u09b2 \u09b8\u09cd\u099f\u09cb\u09b0\u09c7\u099c\u09c7 \u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09bf\u09a4 \u09a5\u09be\u0995\u09c7\u0964", + "success": { + "saved": "\u09b8\u09ab\u09b2\u09ad\u09be\u09ac\u09c7 \u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09bf\u09a4 \u09b9\u09af\u09bc\u09c7\u099b\u09c7" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u09ac\u09c7\u099b\u09c7 \u09a8\u09bf\u09a8..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/de-DE.json b/.chainlit/translations/de-DE.json new file mode 100755 index 00000000..5153df6b --- /dev/null +++ b/.chainlit/translations/de-DE.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Abbrechen", + "confirm": "Best\u00e4tigen", + "continue": "Fortfahren", + "goBack": "Zur\u00fcck", + "reset": "Zur\u00fccksetzen", + "submit": "Absenden" + }, + "status": { + "loading": "L\u00e4dt...", + "error": { + "default": "Ein Fehler ist aufgetreten", + "serverConnection": "Server konnte nicht erreicht werden" + } + } + }, + "auth": { + "login": { + "title": "Melde dich an, um auf die App zuzugreifen", + "form": { + "email": { + "label": "E-Mail Adresse", + "required": "E-Mail Adresse ist ein Pflichtfeld", + "placeholder": "me@example.com" + }, + "password": { + "label": "Passwort", + "required": "Passwort ist ein Pflichtfeld" + }, + "actions": { + "signin": "Anmelden" + }, + "alternativeText": { + "or": "ODER" + } + }, + "errors": { + "default": "Anmeldung fehlgeschlagen", + "signin": "Versuche dich mit einem anderen Konto anzumelden", + "oauthSignin": "Versuche dich mit einem anderen Konto anzumelden", + "redirectUriMismatch": "Der Redirect-URI stimmt nicht mit der Konfiguration der Oauth-Anwendung \u00fcberein", + "oauthCallback": "Versuche dich mit einem anderen Konto anzumelden", + "oauthCreateAccount": "Versuche dich mit einem anderen Konto anzumelden", + "emailCreateAccount": "Versuche dich mit einem anderen Konto anzumelden", + "callback": "Versuche dich mit einem anderen Konto anzumelden", + "oauthAccountNotLinked": "Um die Identit\u00e4t zu best\u00e4tigen, melde dich mit demselben Konto an, das du urspr\u00fcnglich verwendet hast", + "emailSignin": "Die E-Mail konnte nicht gesendet werden", + "emailVerify": "Es wurde eine neue E-Mail versandt. Bitte \u00fcberpr\u00fcfe dein E-Mail Postfach", + "credentialsSignin": "Anmeldung fehlgeschlagen. \u00dcberpr\u00fcfe, ob die angegebenen Benutzerdaten korrekt sind", + "sessionRequired": "Bitte melde dich an, um auf diese Seite zuzugreifen" + } + }, + "provider": { + "continue": "Fortfahren mit {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Nachricht eingeben...", + "actions": { + "send": "Nachricht senden", + "stop": "Aufgabe stoppen", + "attachFiles": "Dateien anh\u00e4ngen" + } + }, + "commands": { + "button": "Tools", + "changeTool": "Tool wechseln", + "availableTools": "Verf\u00fcgbare Tools" + }, + "speech": { + "start": "Aufnahme starten", + "stop": "Aufnahme stoppen", + "connecting": "Verbinde" + }, + "fileUpload": { + "dragDrop": "Ziehe deine Dateien hierher", + "browse": "Dateien durchsuchen", + "sizeLimit": "Limit:", + "errors": { + "failed": "Hochladen fehlgeschlagen", + "cancelled": "Abbruch des hochladens von" + }, + "actions": { + "cancelUpload": "Upload abbrechen", + "removeAttachment": "Anhang entfernen" + } + }, + "messages": { + "status": { + "using": "Verwendet", + "used": "Verwendete" + }, + "actions": { + "copy": { + "button": "In Zwischenablage kopieren", + "success": "Kopiert!" + } + }, + "feedback": { + "positive": "Hilfreich", + "negative": "Nicht hilfreich", + "edit": "Feedback editieren", + "dialog": { + "title": "F\u00fcge einen Kommentar hinzu", + "submit": "Feedback absenden", + "yourFeedback": "Dein Feedback..." + }, + "status": { + "updating": "Aktualisiert", + "updated": "Feedback aktualisiert" + } + } + }, + "history": { + "title": "Vergangene Eingaben", + "empty": "Leer...", + "show": "Historie anzeigen" + }, + "settings": { + "title": "Einstellungen", + "customize": "Passe die Chat Einstellungen hier an" + }, + "watermark": "LLMs k\u00f6nnen Fehler machen. \u00dcberpr\u00fcfe bitte stets die Inhalte." + }, + "threadHistory": { + "sidebar": { + "title": "Vergangene Chats", + "filters": { + "search": "Suche", + "placeholder": "Suche konversationen..." + }, + "timeframes": { + "today": "Heute", + "yesterday": "Gestern", + "previous7days": "Vor 7 Tagen", + "previous30days": "Vor 30 Tagen" + }, + "empty": "Kein Chat gefunden", + "actions": { + "close": "Seitenleiste schlie\u00dfen", + "open": "Seitenleiste \u00f6ffnen" + } + }, + "thread": { + "untitled": "Unbenannter Thread", + "menu": { + "rename": "Umbenennen", + "share": "Teilen", + "delete": "L\u00f6schen" + }, + "actions": { + "share": { + "title": "Thread l\u00f6schen best\u00e4tigen", + "button": "Teilen", + "status": { + "copied": "Link kopiert", + "created": "Freigabelink erstellt!", + "unshared": "Teilen ist f\u00fcr diesen Thread deaktiviert" + }, + "error": { + "create": "Fehler beim Erstellen des Freigabelinks", + "unshare": "Freigabe des Threads konnte nicht aufgehoben werden" + } + }, + "delete": { + "title": "L\u00f6schen best\u00e4tigen", + "description": "Dies wird den Thread sowie seine Nachrichten und Elemente l\u00f6schen. Dies kann nicht r\u00fcckg\u00e4ngig gemacht werden", + "success": "Chat gel\u00f6scht", + "inProgress": "Chat wird gel\u00f6scht" + }, + "rename": { + "title": "Thread umbenennen", + "description": "Gebe einen neuen Namen f\u00fcr den Thread ein", + "form": { + "name": { + "label": "Name", + "placeholder": "Neuen Namen eingeben" + } + }, + "success": "Thread umbenannt!", + "inProgress": "Thread wird umbenannt" + } + } + } + }, + "navigation": { + "header": { + "chat": "Chat", + "readme": "Anleitung", + "theme": { + "light": "Helles Design", + "dark": "Dunkles Design", + "system": "System Design" + } + }, + "newChat": { + "button": "Neuer Chat", + "dialog": { + "title": "M\u00f6chtest du einen neuen Chat erstellen?", + "description": "Es werden die aktuellen Nachrichten gel\u00f6scht und ein neuer Chat ge\u00f6ffnet.", + "tooltip": "Neuer Chat" + } + }, + "user": { + "menu": { + "settings": "Einstellungen", + "settingsKey": "S", + "apiKeys": "API Schl\u00fcssel", + "logout": "Abmelden" + } + } + }, + "apiKeys": { + "title": "Ben\u00f6tigte API Schl\u00fcssel", + "description": "Um diese App zu nutzen, werden die folgenden API Schl\u00fcssel ben\u00f6tigt. Die Schl\u00fcssel werden im lokalen Speicher Ihres Ger\u00e4ts gespeichert.", + "success": { + "saved": "Erfolgreich gespeichert" + } + }, + "alerts": { + "info": "Info", + "note": "Hinweis", + "tip": "Tipp", + "important": "Wichtig", + "warning": "Warnung", + "caution": "Vorsicht", + "debug": "Debug", + "example": "Beispiel", + "success": "Erfolg", + "help": "Hilfe", + "idea": "Idee", + "pending": "Ausstehend", + "security": "Sicherheit", + "beta": "Beta", + "best-practice": "Bew\u00e4hrte Praxis" + }, + "components": { + "MultiSelectInput": { + "placeholder": "W\u00e4hle aus..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/el-GR.json b/.chainlit/translations/el-GR.json new file mode 100755 index 00000000..103963bd --- /dev/null +++ b/.chainlit/translations/el-GR.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0386\u03ba\u03c5\u03c1\u03bf", + "confirm": "\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7", + "continue": "\u03a3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1", + "goBack": "\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae", + "reset": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac", + "submit": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae" + }, + "status": { + "loading": "\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7...", + "error": { + "default": "\u03a0\u03b1\u03c1\u03bf\u03c5\u03c3\u03b9\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5 \u03c3\u03c6\u03ac\u03bb\u03bc\u03b1", + "serverConnection": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03af\u03b1 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae" + } + } + }, + "auth": { + "login": { + "title": "\u03a3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03ba\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae", + "form": { + "email": { + "label": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b7\u03bb\u03b5\u03ba\u03c4\u03c1\u03bf\u03bd\u03b9\u03ba\u03bf\u03cd \u03c4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b5\u03af\u03bf\u03c5", + "required": "\u03a4\u03bf email \u03b5\u03af\u03bd\u03b1\u03b9 \u03c5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03b4\u03af\u03bf", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2", + "required": "\u039f \u03ba\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c5\u03c0\u03bf\u03c7\u03c1\u03b5\u03c9\u03c4\u03b9\u03ba\u03cc \u03c0\u03b5\u03b4\u03af\u03bf" + }, + "actions": { + "signin": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7" + }, + "alternativeText": { + "or": "\u03ae" + } + }, + "errors": { + "default": "\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7", + "signin": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "oauthSignin": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "redirectUriMismatch": "\u039f \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03b1\u03bd\u03b1\u03ba\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2 \u03b4\u03b5\u03bd \u03c4\u03b1\u03b9\u03c1\u03b9\u03ac\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03c4\u03b7 \u03c1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03b1\u03c5\u03b8\u03b5\u03bd\u03c4\u03b9\u03ba\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b7\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2", + "oauthCallback": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "oauthCreateAccount": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "emailCreateAccount": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "callback": "\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03cc \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc", + "oauthAccountNotLinked": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03b9\u03ce\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c4\u03b1\u03c5\u03c4\u03cc\u03c4\u03b7\u03c4\u03ac \u03c3\u03b1\u03c2, \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03af\u03b4\u03b9\u03bf \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b1\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b9\u03ba\u03ac", + "emailSignin": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b1\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03c4\u03bf\u03c5 email", + "emailVerify": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03c0\u03b1\u03bb\u03b7\u03b8\u03b5\u03cd\u03c3\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b7\u03bb\u03b5\u03ba\u03c4\u03c1\u03bf\u03bd\u03b9\u03ba\u03bf\u03cd \u03c4\u03b1\u03c7\u03c5\u03b4\u03c1\u03bf\u03bc\u03b5\u03af\u03bf\u03c5 \u03c3\u03b1\u03c2, \u03ad\u03bd\u03b1 \u03bd\u03ad\u03bf email \u03c3\u03b1\u03c2 \u03ad\u03c7\u03b5\u03b9 \u03c3\u03c4\u03b1\u03bb\u03b5\u03af", + "credentialsSignin": "\u0397 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5. \u0395\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03cc\u03c4\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03ce\u03c3\u03b1\u03c4\u03b5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c3\u03c9\u03c3\u03c4\u03ac", + "sessionRequired": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c3\u03c5\u03bd\u03b4\u03b5\u03b8\u03b5\u03af\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03c0\u03bf\u03ba\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1" + } + }, + "provider": { + "continue": "\u03a3\u03c5\u03bd\u03ad\u03c7\u03b5\u03b9\u03b1 \u03bc\u03b5 {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "\u03a0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03bc\u03ae\u03bd\u03c5\u03bc\u03ac \u03c3\u03b1\u03c2 \u03b5\u03b4\u03ce...", + "actions": { + "send": "\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03bf\u03c2", + "stop": "\u0394\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2", + "attachFiles": "\u0395\u03c0\u03b9\u03c3\u03cd\u03bd\u03b1\u03c8\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd" + } + }, + "commands": { + "button": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1", + "changeTool": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03bf\u03c5", + "availableTools": "\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b1 \u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1" + }, + "speech": { + "start": "\u0388\u03bd\u03b1\u03c1\u03be\u03b7 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2", + "stop": "\u0394\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2", + "connecting": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7" + }, + "fileUpload": { + "dragDrop": "\u03a3\u03cd\u03c1\u03b5\u03c4\u03b5 \u03b1\u03c1\u03c7\u03b5\u03af\u03b1 \u03b5\u03b4\u03ce", + "browse": "\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd", + "sizeLimit": "\u038c\u03c1\u03b9\u03bf:", + "errors": { + "failed": "\u0397 \u03bc\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5", + "cancelled": "\u0391\u03ba\u03c5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5 \u03b7 \u03bc\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5" + }, + "actions": { + "cancelUpload": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03bc\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7\u03c2", + "removeAttachment": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03cd\u03bd\u03b1\u03c8\u03b7\u03c2" + } + }, + "messages": { + "status": { + "using": "\u039c\u03b5 \u03c4\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b7", + "used": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5" + }, + "actions": { + "copy": { + "button": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf", + "success": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5!" + } + }, + "feedback": { + "positive": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf\u03c2", + "negative": "\u039c\u03b7 \u03c7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf\u03c2", + "edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c7\u03bf\u03bb\u03af\u03c9\u03bd", + "dialog": { + "title": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c7\u03bf\u03bb\u03af\u03bf\u03c5", + "submit": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae \u03c3\u03c7\u03bf\u03bb\u03af\u03c9\u03bd", + "yourFeedback": "\u0397 \u03b3\u03bd\u03ce\u03bc\u03b7 \u03c3\u03b1\u03c2" + }, + "status": { + "updating": "\u0395\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03b5\u03c4\u03b1\u03b9", + "updated": "\u03a4\u03b1 \u03c3\u03c7\u03cc\u03bb\u03b9\u03b1 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03b8\u03b7\u03ba\u03b1\u03bd" + } + } + }, + "history": { + "title": "\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03b5\u03c2 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ad\u03c2", + "empty": "\u03a4\u03cc\u03c3\u03bf \u03ac\u03b4\u03b5\u03b9\u03bf...", + "show": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03b9\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03bf\u03cd" + }, + "settings": { + "title": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd", + "customize": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae" + }, + "watermark": "\u03a4\u03b1 \u039c\u0393\u039c \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03ba\u03ac\u03bd\u03bf\u03c5\u03bd \u03bb\u03ac\u03b8\u03b7. \u0395\u03bb\u03ad\u03b3\u03be\u03c4\u03b5 \u03c3\u03b7\u03bc\u03b1\u03bd\u03c4\u03b9\u03ba\u03ad\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2." + }, + "threadHistory": { + "sidebar": { + "title": "\u03a0\u03b1\u03bb\u03b1\u03b9\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b5\u03c2", + "filters": { + "search": "\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7", + "placeholder": "\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03b9\u03ce\u03bd..." + }, + "timeframes": { + "today": "\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1", + "yesterday": "\u03a7\u03b8\u03b5\u03c2", + "previous7days": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b5\u03c2 7 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2", + "previous30days": "\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b5\u03c2 30 \u03b7\u03bc\u03ad\u03c1\u03b5\u03c2" + }, + "empty": "\u0394\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bd\u03ae\u03bc\u03b1\u03c4\u03b1", + "actions": { + "close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", + "open": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c0\u03bb\u03b1\u03ca\u03bd\u03ae\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2" + } + }, + "thread": { + "untitled": "\u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c4\u03af\u03c4\u03bb\u03bf", + "menu": { + "rename": "\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1", + "share": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "delete": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae" + }, + "actions": { + "share": { + "title": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2", + "button": "\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "status": { + "copied": "\u039f \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5", + "created": "\u039f \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5!", + "unshared": "\u0397 \u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03bd\u03ae\u03bc\u03b1" + }, + "error": { + "create": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 \u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2", + "unshare": "\u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae\u03c2 \u03ba\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2 \u03bd\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2" + } + }, + "delete": { + "title": "\u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7 \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2", + "description": "\u0391\u03c5\u03c4\u03cc \u03b8\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03b9 \u03c4\u03bf \u03bd\u03ae\u03bc\u03b1 \u03ba\u03b1\u03b8\u03ce\u03c2 \u03ba\u03b1\u03b9 \u03c4\u03b1 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03b1 \u03ba\u03b1\u03b9 \u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5. \u0391\u03c5\u03c4\u03ae \u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b1\u03bd\u03b1\u03b9\u03c1\u03b5\u03b8\u03b5\u03af.", + "success": "\u0397 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5", + "inProgress": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2" + }, + "rename": { + "title": "\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1 \u039d\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2", + "description": "\u0395\u03b9\u03c3\u03b1\u03b3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03bd\u03ad\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03bd\u03ae\u03bc\u03b1", + "form": { + "name": { + "label": "\u038c\u03bd\u03bf\u03bc\u03b1", + "placeholder": "\u0395\u03b9\u03c3\u03b1\u03b3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03bd\u03ad\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1" + } + }, + "success": "\u03a4\u03bf \u03bd\u03ae\u03bc\u03b1 \u03bc\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03ac\u03c3\u03c4\u03b7\u03ba\u03b5!", + "inProgress": "\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1 \u039d\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1", + "readme": "\u0394\u03b9\u03ac\u03b2\u03b1\u03c3\u03ad \u03bc\u03b5", + "theme": { + "light": "\u03a6\u03c9\u03c4\u03b5\u03b9\u03bd\u03cc \u0398\u03ad\u03bc\u03b1", + "dark": "\u03a3\u03ba\u03bf\u03c4\u03b5\u03b9\u03bd\u03cc \u03b8\u03ad\u03bc\u03b1", + "system": "\u0391\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03c3\u03cd\u03c3\u03c4\u03b7\u03bc\u03b1" + } + }, + "newChat": { + "button": "\u039d\u03ad\u03b1 \u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1", + "dialog": { + "title": "\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u039d\u03ad\u03b1\u03c2 \u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2", + "description": "\u0391\u03c5\u03c4\u03cc \u03b8\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03b9 \u03c4\u03bf \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd \u03b9\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2 \u03c3\u03b1\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5;", + "tooltip": "\u039d\u03ad\u03b1 \u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1" + } + }, + "user": { + "menu": { + "settings": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2", + "settingsKey": "S", + "apiKeys": "\u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac API", + "logout": "\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7" + } + } + }, + "apiKeys": { + "title": "\u0391\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03b1 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac API", + "description": "\u0393\u03b9\u03b1 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03ae\u03bd \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae, \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c4\u03b1 \u03b1\u03ba\u03cc\u03bb\u03bf\u03c5\u03b8\u03b1 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac API. \u03a4\u03b1 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b1 \u03c3\u03c4\u03bf\u03bd \u03c4\u03bf\u03c0\u03b9\u03ba\u03cc \u03c7\u03ce\u03c1\u03bf \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03c3\u03ba\u03b5\u03c5\u03ae\u03c2 \u03c3\u03b1\u03c2.", + "success": { + "saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5 \u03bc\u03b5 \u03b5\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1" + } + }, + "alerts": { + "info": "\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2", + "note": "\u03a3\u03b7\u03bc\u03b5\u03af\u03c9\u03c3\u03b7", + "tip": "\u03a3\u03c5\u03bc\u03b2\u03bf\u03c5\u03bb\u03ae", + "important": "\u03a3\u03b7\u03bc\u03b1\u03bd\u03c4\u03b9\u03ba\u03cc", + "warning": "\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", + "caution": "\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae", + "debug": "\u0395\u03bd\u03c4\u03bf\u03c0\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c6\u03b1\u03bb\u03bc\u03ac\u03c4\u03c9\u03bd", + "example": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1", + "success": "\u0395\u03c0\u03b9\u03c4\u03c5\u03c7\u03af\u03b1", + "help": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1", + "idea": "\u0399\u03b4\u03ad\u03b1", + "pending": "\u03a3\u03b5 \u03b5\u03ba\u03ba\u03c1\u03b5\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1", + "security": "\u0391\u03c3\u03c6\u03ac\u03bb\u03b5\u03b9\u03b1", + "beta": "Beta", + "best-practice": "\u0392\u03ad\u03bb\u03c4\u03b9\u03c3\u03c4\u03b7 \u03a0\u03c1\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/en-US.json b/.chainlit/translations/en-US.json new file mode 100755 index 00000000..92054295 --- /dev/null +++ b/.chainlit/translations/en-US.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Cancel", + "confirm": "Confirm", + "continue": "Continue", + "goBack": "Go Back", + "reset": "Reset", + "submit": "Submit" + }, + "status": { + "loading": "Loading...", + "error": { + "default": "An error occurred", + "serverConnection": "Could not reach the server" + } + } + }, + "auth": { + "login": { + "title": "Login to access the app", + "form": { + "email": { + "label": "Email address", + "required": "email is a required field", + "placeholder": "me@example.com" + }, + "password": { + "label": "Password", + "required": "password is a required field" + }, + "actions": { + "signin": "Sign In" + }, + "alternativeText": { + "or": "OR" + } + }, + "errors": { + "default": "Unable to sign in", + "signin": "Try signing in with a different account", + "oauthSignin": "Try signing in with a different account", + "redirectUriMismatch": "The redirect URI is not matching the oauth app configuration", + "oauthCallback": "Try signing in with a different account", + "oauthCreateAccount": "Try signing in with a different account", + "emailCreateAccount": "Try signing in with a different account", + "callback": "Try signing in with a different account", + "oauthAccountNotLinked": "To confirm your identity, sign in with the same account you used originally", + "emailSignin": "The e-mail could not be sent", + "emailVerify": "Please verify your email, a new email has been sent", + "credentialsSignin": "Sign in failed. Check the details you provided are correct", + "sessionRequired": "Please sign in to access this page" + } + }, + "provider": { + "continue": "Continue with {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Type your message here...", + "actions": { + "send": "Send message", + "stop": "Stop Task", + "attachFiles": "Attach files" + } + }, + "commands": { + "button": "Tools", + "changeTool": "Change Tool", + "availableTools": "Available Tools" + }, + "speech": { + "start": "Start recording", + "stop": "Stop recording", + "connecting": "Connecting" + }, + "fileUpload": { + "dragDrop": "Drag and drop files here", + "browse": "Browse Files", + "sizeLimit": "Limit:", + "errors": { + "failed": "Failed to upload", + "cancelled": "Cancelled upload of" + }, + "actions": { + "cancelUpload": "Cancel upload", + "removeAttachment": "Remove attachment" + } + }, + "messages": { + "status": { + "using": "Using", + "used": "Used" + }, + "actions": { + "copy": { + "button": "Copy to clipboard", + "success": "Copied!" + } + }, + "feedback": { + "positive": "Helpful", + "negative": "Not helpful", + "edit": "Edit feedback", + "dialog": { + "title": "Add a comment", + "submit": "Submit feedback", + "yourFeedback": "Your feedback..." + }, + "status": { + "updating": "Updating", + "updated": "Feedback updated" + } + } + }, + "history": { + "title": "Last Inputs", + "empty": "Such empty...", + "show": "Show history" + }, + "settings": { + "title": "Settings panel", + "customize": "Customize your chat settings here" + }, + "watermark": "LLMs can make mistakes. Check important info." + }, + "threadHistory": { + "sidebar": { + "title": "Past Chats", + "filters": { + "search": "Search", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "Today", + "yesterday": "Yesterday", + "previous7days": "Previous 7 days", + "previous30days": "Previous 30 days" + }, + "empty": "No threads found", + "actions": { + "close": "Close sidebar", + "open": "Open sidebar" + } + }, + "thread": { + "untitled": "Untitled Conversation", + "menu": { + "rename": "Rename", + "share": "Share", + "delete": "Delete" + }, + "actions": { + "share": { + "title": "Share link to chat", + "button": "Share", + "status": { + "copied": "Link copied", + "created": "Share link created!", + "unshared": "Sharing disabled for this thread" + }, + "error": { + "create": "Failed to create share link", + "unshare": "Failed to unshare thread" + } + }, + "delete": { + "title": "Confirm deletion", + "description": "This will delete the thread as well as its messages and elements. This action cannot be undone", + "success": "Chat deleted", + "inProgress": "Deleting chat" + }, + "rename": { + "title": "Rename Thread", + "description": "Enter a new name for this thread", + "form": { + "name": { + "label": "Name", + "placeholder": "Enter new name" + } + }, + "success": "Thread renamed!", + "inProgress": "Renaming thread" + } + } + } + }, + "navigation": { + "header": { + "chat": "Chat", + "readme": "Readme", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "New Chat", + "dialog": { + "title": "Create New Chat", + "description": "This will clear your current chat history. Are you sure you want to continue?", + "tooltip": "New Chat" + } + }, + "user": { + "menu": { + "settings": "Settings", + "settingsKey": "S", + "apiKeys": "API Keys", + "logout": "Logout" + } + } + }, + "apiKeys": { + "title": "Required API Keys", + "description": "To use this app, the following API keys are required. The keys are stored on your device's local storage.", + "success": { + "saved": "Saved successfully" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "Select..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/es.json b/.chainlit/translations/es.json new file mode 100755 index 00000000..eb23fc22 --- /dev/null +++ b/.chainlit/translations/es.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Cancelar", + "confirm": "Confirmar", + "continue": "Continuar", + "goBack": "Volver", + "reset": "Restablecer", + "submit": "Enviar" + }, + "status": { + "loading": "Cargando...", + "error": { + "default": "Ocurri\u00f3 un error", + "serverConnection": "No se pudo conectar con el servidor" + } + } + }, + "auth": { + "login": { + "title": "Inicia sesi\u00f3n para acceder a la aplicaci\u00f3n", + "form": { + "email": { + "label": "Correo electr\u00f3nico", + "required": "el correo electr\u00f3nico es obligatorio", + "placeholder": "me@example.com" + }, + "password": { + "label": "Contrase\u00f1a", + "required": "la contrase\u00f1a es obligatoria" + }, + "actions": { + "signin": "Iniciar sesi\u00f3n" + }, + "alternativeText": { + "or": "O" + } + }, + "errors": { + "default": "No se pudo iniciar sesi\u00f3n", + "signin": "Intenta iniciar sesi\u00f3n con otra cuenta", + "oauthSignin": "Intenta iniciar sesi\u00f3n con otra cuenta", + "redirectUriMismatch": "El URI de redirecci\u00f3n no coincide con la configuraci\u00f3n de la aplicaci\u00f3n OAuth", + "oauthCallback": "Intenta iniciar sesi\u00f3n con otra cuenta", + "oauthCreateAccount": "Intenta iniciar sesi\u00f3n con otra cuenta", + "emailCreateAccount": "Intenta iniciar sesi\u00f3n con otra cuenta", + "callback": "Intenta iniciar sesi\u00f3n con otra cuenta", + "oauthAccountNotLinked": "Para confirmar tu identidad, inicia sesi\u00f3n con la misma cuenta que usaste originalmente", + "emailSignin": "No se pudo enviar el correo electr\u00f3nico", + "emailVerify": "Por favor verifica tu correo, se ha enviado un nuevo correo", + "credentialsSignin": "Error al iniciar sesi\u00f3n. Verifica que los datos proporcionados sean correctos", + "sessionRequired": "Por favor inicia sesi\u00f3n para acceder a esta p\u00e1gina" + } + }, + "provider": { + "continue": "Continuar con {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Escribe tu mensaje aqu\u00ed...", + "actions": { + "send": "Enviar mensaje", + "stop": "Detener tarea", + "attachFiles": "Adjuntar archivos" + } + }, + "commands": { + "button": "Herramientas", + "changeTool": "Cambiar herramienta", + "availableTools": "Herramientas disponibles" + }, + "speech": { + "start": "Comenzar grabaci\u00f3n", + "stop": "Detener grabaci\u00f3n", + "connecting": "Conectando" + }, + "fileUpload": { + "dragDrop": "Arrastra y suelta archivos aqu\u00ed", + "browse": "Buscar archivos", + "sizeLimit": "L\u00edmite:", + "errors": { + "failed": "Error al subir", + "cancelled": "Carga cancelada de" + }, + "actions": { + "cancelUpload": "Cancelar subida", + "removeAttachment": "Eliminar adjunto" + } + }, + "messages": { + "status": { + "using": "Usando", + "used": "Usado" + }, + "actions": { + "copy": { + "button": "Copiar al portapapeles", + "success": "\u00a1Copiado!" + } + }, + "feedback": { + "positive": "\u00datil", + "negative": "No \u00fatil", + "edit": "Editar comentario", + "dialog": { + "title": "Agregar un comentario", + "submit": "Enviar comentario", + "yourFeedback": "Tu comentario..." + }, + "status": { + "updating": "Actualizando", + "updated": "Comentario actualizado" + } + } + }, + "history": { + "title": "\u00daltimas entradas", + "empty": "Tan vac\u00edo...", + "show": "Mostrar historial" + }, + "settings": { + "title": "Panel de configuraci\u00f3n", + "customize": "Personaliza la configuraci\u00f3n de tu chat aqu\u00ed" + }, + "watermark": "Los LLM pueden cometer errores. Verifica la informaci\u00f3n importante." + }, + "threadHistory": { + "sidebar": { + "title": "Chats anteriores", + "filters": { + "search": "Buscar", + "placeholder": "Buscar conversaciones..." + }, + "timeframes": { + "today": "Hoy", + "yesterday": "Ayer", + "previous7days": "\u00daltimos 7 d\u00edas", + "previous30days": "\u00daltimos 30 d\u00edas" + }, + "empty": "No se encontraron conversaciones", + "actions": { + "close": "Cerrar barra lateral", + "open": "Abrir barra lateral" + } + }, + "thread": { + "untitled": "Conversaci\u00f3n sin t\u00edtulo", + "menu": { + "rename": "Renombrar", + "share": "Compartir", + "delete": "Eliminar" + }, + "actions": { + "share": { + "title": "Compartir enlace del chat", + "button": "Compartir", + "status": { + "copied": "Enlace copiado", + "created": "\u00a1Enlace de uso compartido creado!", + "unshared": "Uso compartido deshabilitado para este hilo" + }, + "error": { + "create": "Error al crear el enlace de uso compartido", + "unshare": "Error al dejar de compartir el hilo" + } + }, + "delete": { + "title": "Confirmar eliminaci\u00f3n", + "description": "Esto eliminar\u00e1 la conversaci\u00f3n, sus mensajes y elementos. Esta acci\u00f3n no se puede deshacer", + "success": "Chat eliminado", + "inProgress": "Eliminando chat" + }, + "rename": { + "title": "Renombrar conversaci\u00f3n", + "description": "Ingresa un nuevo nombre para esta conversaci\u00f3n", + "form": { + "name": { + "label": "Nombre", + "placeholder": "Ingresa nuevo nombre" + } + }, + "success": "\u00a1Conversaci\u00f3n renombrada!", + "inProgress": "Renombrando conversaci\u00f3n" + } + } + } + }, + "navigation": { + "header": { + "chat": "Chat", + "readme": "L\u00e9eme", + "theme": { + "light": "Tema claro", + "dark": "Tema oscuro", + "system": "Seguir sistema" + } + }, + "newChat": { + "button": "Nuevo chat", + "dialog": { + "title": "Crear nuevo chat", + "description": "Esto borrar\u00e1 tu historial de chat actual. \u00bfSeguro que quieres continuar?", + "tooltip": "Nuevo chat" + } + }, + "user": { + "menu": { + "settings": "Configuraci\u00f3n", + "settingsKey": "S", + "apiKeys": "Claves API", + "logout": "Cerrar sesi\u00f3n" + } + } + }, + "apiKeys": { + "title": "Claves API requeridas", + "description": "Para usar esta aplicaci\u00f3n, se requieren las siguientes claves API. Las claves se almacenan en el almacenamiento local de tu dispositivo.", + "success": { + "saved": "Guardado exitosamente" + } + }, + "alerts": { + "info": "Informaci\u00f3n", + "note": "Nota", + "tip": "Consejo", + "important": "Importante", + "warning": "Advertencia", + "caution": "Precauci\u00f3n", + "debug": "Depuraci\u00f3n", + "example": "Ejemplo", + "success": "\u00c9xito", + "help": "Ayuda", + "idea": "Idea", + "pending": "Pendiente", + "security": "Seguridad", + "beta": "Beta", + "best-practice": "Mejor pr\u00e1ctica" + }, + "components": { + "MultiSelectInput": { + "placeholder": "Seleccionar..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/fr-FR.json b/.chainlit/translations/fr-FR.json new file mode 100755 index 00000000..a3000fd7 --- /dev/null +++ b/.chainlit/translations/fr-FR.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Annuler", + "confirm": "Confirmer", + "continue": "Continuer", + "goBack": "Retour", + "reset": "R\u00e9initialiser", + "submit": "Envoyer" + }, + "status": { + "loading": "Chargement...", + "error": { + "default": "Une erreur est survenue", + "serverConnection": "Impossible de joindre le serveur" + } + } + }, + "auth": { + "login": { + "title": "Connectez-vous pour acc\u00e9der \u00e0 l'application", + "form": { + "email": { + "label": "Adresse e-mail", + "required": "l'e-mail est un champ obligatoire", + "placeholder": "me@example.com" + }, + "password": { + "label": "Mot de passe", + "required": "le mot de passe est un champ obligatoire" + }, + "actions": { + "signin": "Se connecter" + }, + "alternativeText": { + "or": "OU" + } + }, + "errors": { + "default": "Impossible de se connecter", + "signin": "Essayez de vous connecter avec un autre compte", + "oauthSignin": "Essayez de vous connecter avec un autre compte", + "redirectUriMismatch": "L'URI de redirection ne correspond pas \u00e0 la configuration de l'application oauth", + "oauthCallback": "Essayez de vous connecter avec un autre compte", + "oauthCreateAccount": "Essayez de vous connecter avec un autre compte", + "emailCreateAccount": "Essayez de vous connecter avec un autre compte", + "callback": "Essayez de vous connecter avec un autre compte", + "oauthAccountNotLinked": "Pour confirmer votre identit\u00e9, connectez-vous avec le m\u00eame compte que vous avez utilis\u00e9 \u00e0 l'origine", + "emailSignin": "L'e-mail n'a pas pu \u00eatre envoy\u00e9", + "emailVerify": "Veuillez v\u00e9rifier votre e-mail, un nouvel e-mail a \u00e9t\u00e9 envoy\u00e9", + "credentialsSignin": "La connexion a \u00e9chou\u00e9. V\u00e9rifiez que les informations que vous avez fournies sont correctes", + "sessionRequired": "Veuillez vous connecter pour acc\u00e9der \u00e0 cette page" + } + }, + "provider": { + "continue": "Continuer avec {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Tapez votre message ici...", + "actions": { + "send": "Envoyer le message", + "stop": "Arr\u00eater la t\u00e2che", + "attachFiles": "Joindre des fichiers" + } + }, + "commands": { + "button": "Outils", + "changeTool": "Changer d'outil", + "availableTools": "Outils disponibles" + }, + "speech": { + "start": "D\u00e9marrer l'enregistrement", + "stop": "Arr\u00eater l'enregistrement", + "connecting": "Connexion en cours" + }, + "fileUpload": { + "dragDrop": "Glissez et d\u00e9posez des fichiers ici", + "browse": "Parcourir les fichiers", + "sizeLimit": "Limite :", + "errors": { + "failed": "\u00c9chec du t\u00e9l\u00e9versement", + "cancelled": "T\u00e9l\u00e9versement annul\u00e9 de" + }, + "actions": { + "cancelUpload": "Annuler le t\u00e9l\u00e9versement", + "removeAttachment": "Supprimer la pi\u00e8ce jointe" + } + }, + "messages": { + "status": { + "using": "Utilise", + "used": "Utilis\u00e9" + }, + "actions": { + "copy": { + "button": "Copier dans le presse-papiers", + "success": "Copi\u00e9 !" + } + }, + "feedback": { + "positive": "Utile", + "negative": "Pas utile", + "edit": "Modifier le commentaire", + "dialog": { + "title": "Ajouter un commentaire", + "submit": "Envoyer le commentaire", + "yourFeedback": "Votre avis..." + }, + "status": { + "updating": "Mise \u00e0 jour", + "updated": "Commentaire mis \u00e0 jour" + } + } + }, + "history": { + "title": "Derni\u00e8res entr\u00e9es", + "empty": "Tellement vide...", + "show": "Afficher l'historique" + }, + "settings": { + "title": "Panneau des param\u00e8tres", + "customize": "Personnalisez vos param\u00e8tres de chat ici" + }, + "watermark": "Les LLMs peuvent se tromper. V\u00e9rifiez les r\u00e9ponses." + }, + "threadHistory": { + "sidebar": { + "title": "Discussions pass\u00e9es", + "filters": { + "search": "Rechercher", + "placeholder": "Rechercher des conversations..." + }, + "timeframes": { + "today": "Aujourd'hui", + "yesterday": "Hier", + "previous7days": "Les 7 derniers jours", + "previous30days": "Les 30 derniers jours" + }, + "empty": "Aucun fil de discussion trouv\u00e9", + "actions": { + "close": "Fermer la barre lat\u00e9rale", + "open": "Ouvrir la barre lat\u00e9rale" + } + }, + "thread": { + "untitled": "Conversation sans titre", + "menu": { + "rename": "Renommer", + "share": "Partager", + "delete": "Supprimer" + }, + "actions": { + "share": { + "title": "Partager le lien de la discussion", + "button": "Partager", + "status": { + "copied": "Lien copi\u00e9", + "created": "Lien de partage cr\u00e9\u00e9 !", + "unshared": "Partage d\u00e9sactiv\u00e9 pour ce fil" + }, + "error": { + "create": "\u00c9chec de la cr\u00e9ation du lien de partage", + "unshare": "\u00c9chec de la d\u00e9sactivation du partage du fil" + } + }, + "delete": { + "title": "Confirmer la suppression", + "description": "Cela supprimera le fil de discussion ainsi que ses messages et \u00e9l\u00e9ments. Cette action ne peut pas \u00eatre annul\u00e9e", + "success": "Discussion supprim\u00e9e", + "inProgress": "Suppression de la discussion" + }, + "rename": { + "title": "Renommer le fil de discussion", + "description": "Entrez un nouveau nom pour ce fil de discussion", + "form": { + "name": { + "label": "Nom", + "placeholder": "Entrez le nouveau nom" + } + }, + "success": "Fil de discussion renomm\u00e9 !", + "inProgress": "Renommage du fil de discussion" + } + } + } + }, + "navigation": { + "header": { + "chat": "Discussion", + "readme": "Lisez-moi", + "theme": { + "light": "Th\u00e8me clair", + "dark": "Th\u00e8me sombre", + "system": "Suivre le syst\u00e8me" + } + }, + "newChat": { + "button": "Nouvelle discussion", + "dialog": { + "title": "Cr\u00e9er une nouvelle discussion", + "description": "Cela effacera votre historique de discussion actuel. \u00cates-vous s\u00fbr de vouloir continuer ?", + "tooltip": "Nouvelle discussion" + } + }, + "user": { + "menu": { + "settings": "Param\u00e8tres", + "settingsKey": "S", + "apiKeys": "Cl\u00e9s API", + "logout": "Se d\u00e9connecter" + } + } + }, + "apiKeys": { + "title": "Cl\u00e9s API requises", + "description": "Pour utiliser cette application, les cl\u00e9s API suivantes sont requises. Les cl\u00e9s sont stock\u00e9es dans le stockage local de votre appareil.", + "success": { + "saved": "Enregistr\u00e9 avec succ\u00e8s" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Astuce", + "important": "Important", + "warning": "Avertissement", + "caution": "Attention", + "debug": "D\u00e9bogage", + "example": "Exemple", + "success": "Succ\u00e8s", + "help": "Aide", + "idea": "Id\u00e9e", + "pending": "En attente", + "security": "S\u00e9curit\u00e9", + "beta": "B\u00eata", + "best-practice": "Meilleure pratique" + }, + "components": { + "MultiSelectInput": { + "placeholder": "S\u00e9lectionner..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/gu.json b/.chainlit/translations/gu.json new file mode 100755 index 00000000..2cd12fdd --- /dev/null +++ b/.chainlit/translations/gu.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0ab0\u0aa6 \u0a95\u0ab0\u0acb", + "confirm": "\u0aaa\u0ac1\u0ab7\u0acd\u0a9f\u0abf \u0a95\u0ab0\u0acb", + "continue": "\u0a9a\u0abe\u0ab2\u0ac1 \u0ab0\u0abe\u0a96\u0acb", + "goBack": "\u0aaa\u0abe\u0a9b\u0abe \u0a9c\u0abe\u0a93", + "reset": "\u0ab0\u0ac0\u0ab8\u0ac7\u0a9f \u0a95\u0ab0\u0acb", + "submit": "\u0ab8\u0aac\u0aae\u0abf\u0a9f \u0a95\u0ab0\u0acb" + }, + "status": { + "loading": "\u0ab2\u0acb\u0aa1 \u0aa5\u0a88 \u0ab0\u0ab9\u0acd\u0aaf\u0ac1\u0a82 \u0a9b\u0ac7...", + "error": { + "default": "\u0a8f\u0a95 \u0aad\u0ac2\u0ab2 \u0aa5\u0a88", + "serverConnection": "\u0ab8\u0ab0\u0acd\u0ab5\u0ab0 \u0ab8\u0ac1\u0aa7\u0ac0 \u0aaa\u0ab9\u0acb\u0a82\u0a9a\u0ac0 \u0ab6\u0a95\u0abe\u0aaf\u0ac1\u0a82 \u0aa8\u0aa5\u0ac0" + } + } + }, + "auth": { + "login": { + "title": "\u0a8f\u0aaa\u0acd\u0ab2\u0abf\u0a95\u0ac7\u0ab6\u0aa8 \u0a8d\u0a95\u0acd\u0ab8\u0ac7\u0ab8 \u0a95\u0ab0\u0ab5\u0abe \u0aae\u0abe\u0a9f\u0ac7 \u0ab2\u0ac9\u0a97\u0abf\u0aa8 \u0a95\u0ab0\u0acb", + "form": { + "email": { + "label": "\u0a88\u0aae\u0ac7\u0ab2 \u0a8f\u0aa1\u0acd\u0ab0\u0ac7\u0ab8", + "required": "\u0a88\u0aae\u0ac7\u0ab2 \u0a86\u0ab5\u0ab6\u0acd\u0aaf\u0a95 \u0a9b\u0ac7", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u0aaa\u0abe\u0ab8\u0ab5\u0ab0\u0acd\u0aa1", + "required": "\u0aaa\u0abe\u0ab8\u0ab5\u0ab0\u0acd\u0aa1 \u0a86\u0ab5\u0ab6\u0acd\u0aaf\u0a95 \u0a9b\u0ac7" + }, + "actions": { + "signin": "\u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0acb" + }, + "alternativeText": { + "or": "\u0a85\u0aa5\u0ab5\u0abe" + } + }, + "errors": { + "default": "\u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ac0 \u0ab6\u0a95\u0abe\u0aaf\u0ac1\u0a82 \u0aa8\u0aa5\u0ac0", + "signin": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "oauthSignin": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "redirectUriMismatch": "\u0ab0\u0ac0\u0aa1\u0abe\u0aaf\u0ab0\u0ac7\u0a95\u0acd\u0a9f URI oauth \u0a8d\u0aaa \u0a95\u0aa8\u0acd\u0aab\u0abf\u0a97\u0ab0\u0ac7\u0ab6\u0aa8 \u0ab8\u0abe\u0aa5\u0ac7 \u0aae\u0ac7\u0ab3 \u0a96\u0abe\u0aa4\u0acb \u0aa8\u0aa5\u0ac0", + "oauthCallback": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "oauthCreateAccount": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "emailCreateAccount": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "callback": "\u0a85\u0ab2\u0a97 \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0ab5\u0abe\u0aa8\u0acb \u0aaa\u0acd\u0ab0\u0aaf\u0abe\u0ab8 \u0a95\u0ab0\u0acb", + "oauthAccountNotLinked": "\u0aa4\u0aae\u0abe\u0ab0\u0ac0 \u0a93\u0ab3\u0a96\u0aa8\u0ac0 \u0aaa\u0ac1\u0ab7\u0acd\u0a9f\u0abf \u0a95\u0ab0\u0ab5\u0abe \u0aae\u0abe\u0a9f\u0ac7, \u0aae\u0ac2\u0ab3 \u0ab0\u0ac2\u0aaa\u0ac7 \u0ab5\u0abe\u0aaa\u0ab0\u0ac7\u0ab2\u0abe \u0a8f\u0a95\u0abe\u0a89\u0aa8\u0acd\u0a9f\u0aa5\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0acb", + "emailSignin": "\u0a88\u0aae\u0ac7\u0ab2 \u0aae\u0acb\u0a95\u0ab2\u0ac0 \u0ab6\u0a95\u0abe\u0aaf\u0acb \u0aa8\u0aa5\u0ac0", + "emailVerify": "\u0a95\u0ac3\u0aaa\u0abe \u0a95\u0ab0\u0ac0 \u0aa4\u0aae\u0abe\u0ab0\u0acb \u0a88\u0aae\u0ac7\u0ab2 \u0a9a\u0a95\u0abe\u0ab8\u0acb, \u0aa8\u0ab5\u0acb \u0a88\u0aae\u0ac7\u0ab2 \u0aae\u0acb\u0a95\u0ab2\u0ab5\u0abe\u0aae\u0abe\u0a82 \u0a86\u0ab5\u0acd\u0aaf\u0acb \u0a9b\u0ac7", + "credentialsSignin": "\u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0aa8\u0abf\u0ab7\u0acd\u0aab\u0ab3. \u0a86\u0aaa\u0ac7\u0ab2\u0ac0 \u0ab5\u0abf\u0a97\u0aa4\u0acb \u0ab8\u0abe\u0a9a\u0ac0 \u0a9b\u0ac7 \u0a95\u0ac7 \u0aa8\u0ab9\u0ac0\u0a82 \u0aa4\u0ac7 \u0a9a\u0a95\u0abe\u0ab8\u0acb", + "sessionRequired": "\u0a86 \u0aaa\u0ac7\u0a9c\u0aa8\u0ac7 \u0a8d\u0a95\u0acd\u0ab8\u0ac7\u0ab8 \u0a95\u0ab0\u0ab5\u0abe \u0aae\u0abe\u0a9f\u0ac7 \u0a95\u0ac3\u0aaa\u0abe \u0a95\u0ab0\u0ac0 \u0ab8\u0abe\u0a87\u0aa8 \u0a87\u0aa8 \u0a95\u0ab0\u0acb" + } + }, + "provider": { + "continue": "{{provider}} \u0ab8\u0abe\u0aa5\u0ac7 \u0a9a\u0abe\u0ab2\u0ac1 \u0ab0\u0abe\u0a96\u0acb" + } + }, + "chat": { + "input": { + "placeholder": "\u0a85\u0ab9\u0ac0\u0a82 \u0aa4\u0aae\u0abe\u0ab0\u0acb \u0ab8\u0a82\u0aa6\u0ac7\u0ab6 \u0ab2\u0a96\u0acb...", + "actions": { + "send": "\u0ab8\u0a82\u0aa6\u0ac7\u0ab6 \u0aae\u0acb\u0a95\u0ab2\u0acb", + "stop": "\u0a95\u0abe\u0ab0\u0acd\u0aaf \u0ab0\u0acb\u0a95\u0acb", + "attachFiles": "\u0aab\u0abe\u0a87\u0ab2\u0acd\u0ab8 \u0a9c\u0acb\u0aa1\u0acb" + } + }, + "speech": { + "start": "\u0ab0\u0ac7\u0a95\u0acb\u0ab0\u0acd\u0aa1\u0abf\u0a82\u0a97 \u0ab6\u0ab0\u0ac2 \u0a95\u0ab0\u0acb", + "stop": "\u0ab0\u0ac7\u0a95\u0acb\u0ab0\u0acd\u0aa1\u0abf\u0a82\u0a97 \u0aac\u0a82\u0aa7 \u0a95\u0ab0\u0acb", + "connecting": "\u0a95\u0aa8\u0ac7\u0a95\u0acd\u0a9f \u0aa5\u0a88 \u0ab0\u0ab9\u0acd\u0aaf\u0ac1\u0a82 \u0a9b\u0ac7" + }, + "commands": { + "button": "\u0a9f\u0ac2\u0ab2\u0acd\u0ab8", + "changeTool": "\u0a9f\u0ac2\u0ab2 \u0aac\u0aa6\u0ab2\u0acb", + "availableTools": "\u0a89\u0aaa\u0ab2\u0aac\u0acd\u0aa7 \u0a9f\u0ac2\u0ab2\u0acd\u0ab8" + }, + "fileUpload": { + "dragDrop": "\u0a85\u0ab9\u0ac0\u0a82 \u0aab\u0abe\u0a87\u0ab2\u0acd\u0ab8 \u0a96\u0ac7\u0a82\u0a9a\u0acb \u0a85\u0aa8\u0ac7 \u0a9b\u0acb\u0aa1\u0acb", + "browse": "\u0aab\u0abe\u0a87\u0ab2\u0acd\u0ab8 \u0aac\u0acd\u0ab0\u0abe\u0a89\u0a9d \u0a95\u0ab0\u0acb", + "sizeLimit": "\u0aae\u0ab0\u0acd\u0aaf\u0abe\u0aa6\u0abe:", + "errors": { + "failed": "\u0a85\u0aaa\u0ab2\u0acb\u0aa1 \u0a95\u0ab0\u0ab5\u0abe\u0aae\u0abe\u0a82 \u0aa8\u0abf\u0ab7\u0acd\u0aab\u0ab3", + "cancelled": "\u0a85\u0aaa\u0ab2\u0acb\u0aa1 \u0ab0\u0aa6 \u0a95\u0ab0\u0acd\u0aaf\u0ac1\u0a82" + }, + "actions": { + "cancelUpload": "\u0a85\u0aaa\u0ab2\u0acb\u0aa1 \u0ab0\u0aa6 \u0a95\u0ab0\u0acb", + "removeAttachment": "\u0a9c\u0acb\u0aa1\u0abe\u0aa3 \u0aa6\u0ac2\u0ab0 \u0a95\u0ab0\u0acb" + } + }, + "messages": { + "status": { + "using": "\u0ab5\u0abe\u0aaa\u0ab0\u0ac0 \u0ab0\u0ab9\u0acd\u0aaf\u0abe \u0a9b\u0ac7", + "used": "\u0ab5\u0aaa\u0ab0\u0abe\u0aaf\u0ac7\u0ab2" + }, + "actions": { + "copy": { + "button": "\u0a95\u0acd\u0ab2\u0abf\u0aaa\u0aac\u0acb\u0ab0\u0acd\u0aa1 \u0aaa\u0ab0 \u0a95\u0ac9\u0aaa\u0abf \u0a95\u0ab0\u0acb", + "success": "\u0a95\u0ac9\u0aaa\u0abf \u0aa5\u0aaf\u0ac1\u0a82!" + } + }, + "feedback": { + "positive": "\u0a89\u0aaa\u0aaf\u0acb\u0a97\u0ac0", + "negative": "\u0aac\u0abf\u0aa8\u0a89\u0aaa\u0aaf\u0acb\u0a97\u0ac0", + "edit": "\u0aaa\u0acd\u0ab0\u0aa4\u0abf\u0ab8\u0abe\u0aa6 \u0ab8\u0a82\u0aaa\u0abe\u0aa6\u0abf\u0aa4 \u0a95\u0ab0\u0acb", + "dialog": { + "title": "\u0a9f\u0abf\u0aaa\u0acd\u0aaa\u0aa3\u0ac0 \u0a89\u0aae\u0ac7\u0ab0\u0acb", + "submit": "\u0aaa\u0acd\u0ab0\u0aa4\u0abf\u0ab8\u0abe\u0aa6 \u0ab8\u0aac\u0aae\u0abf\u0a9f \u0a95\u0ab0\u0acb", + "yourFeedback": "\u0aa4\u0aae\u0abe\u0ab0\u0acb \u0aaa\u0acd\u0ab0\u0aa4\u0abf\u0ab8\u0abe\u0aa6..." + }, + "status": { + "updating": "\u0a85\u0aaa\u0aa1\u0ac7\u0a9f \u0aa5\u0a88 \u0ab0\u0ab9\u0acd\u0aaf\u0ac1\u0a82 \u0a9b\u0ac7", + "updated": "\u0aaa\u0acd\u0ab0\u0aa4\u0abf\u0ab8\u0abe\u0aa6 \u0a85\u0aaa\u0aa1\u0ac7\u0a9f \u0aa5\u0aaf\u0acb" + } + } + }, + "history": { + "title": "\u0a9b\u0ac7\u0ab2\u0acd\u0ab2\u0abe \u0a87\u0aa8\u0aaa\u0ac1\u0a9f\u0acd\u0ab8", + "empty": "\u0a96\u0abe\u0ab2\u0ac0 \u0a9b\u0ac7...", + "show": "\u0a87\u0aa4\u0abf\u0ab9\u0abe\u0ab8 \u0aac\u0aa4\u0abe\u0ab5\u0acb" + }, + "settings": { + "title": "\u0ab8\u0ac7\u0a9f\u0abf\u0a82\u0a97\u0acd\u0ab8 \u0aaa\u0ac7\u0aa8\u0ab2", + "customize": "\u0aa4\u0aae\u0abe\u0ab0\u0abe \u0a9a\u0ac7\u0a9f \u0ab8\u0ac7\u0a9f\u0abf\u0a82\u0a97\u0acd\u0ab8 \u0a85\u0ab9\u0ac0\u0a82 \u0a95\u0ab8\u0acd\u0a9f\u0aae\u0abe\u0a87\u0a9d \u0a95\u0ab0\u0acb" + }, + "watermark": "LLM \u0aad\u0ac2\u0ab2\u0acb \u0a95\u0ab0\u0ac0 \u0ab6\u0a95\u0ac7 \u0a9b\u0ac7. \u0aae\u0ab9\u0aa4\u0acd\u0ab5\u0aaa\u0ac2\u0ab0\u0acd\u0aa3 \u0aae\u0abe\u0ab9\u0abf\u0aa4\u0ac0 \u0aa4\u0aaa\u0abe\u0ab8\u0ab5\u0abe\u0aa8\u0ac1\u0a82 \u0ab5\u0abf\u0a9a\u0abe\u0ab0\u0acb." + }, + "threadHistory": { + "sidebar": { + "title": "\u0aaa\u0abe\u0a9b\u0ab2\u0ac0 \u0a9a\u0ac7\u0a9f\u0acd\u0ab8", + "filters": { + "search": "\u0ab6\u0acb\u0aa7\u0acb", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0a86\u0a9c\u0ac7", + "yesterday": "\u0a97\u0a88\u0a95\u0abe\u0ab2\u0ac7", + "previous7days": "\u0aaa\u0abe\u0a9b\u0ab2\u0abe 7 \u0aa6\u0abf\u0ab5\u0ab8", + "previous30days": "\u0aaa\u0abe\u0a9b\u0ab2\u0abe 30 \u0aa6\u0abf\u0ab5\u0ab8" + }, + "empty": "\u0a95\u0acb\u0a88 \u0aa5\u0acd\u0ab0\u0ac7\u0aa1\u0acd\u0ab8 \u0aae\u0ab3\u0acd\u0aaf\u0abe \u0aa8\u0aa5\u0ac0", + "actions": { + "close": "\u0ab8\u0abe\u0a87\u0aa1\u0aac\u0abe\u0ab0 \u0aac\u0a82\u0aa7 \u0a95\u0ab0\u0acb", + "open": "\u0ab8\u0abe\u0a87\u0aa1\u0aac\u0abe\u0ab0 \u0a96\u0acb\u0ab2\u0acb" + } + }, + "thread": { + "untitled": "\u0ab6\u0ac0\u0ab0\u0acd\u0ab7\u0a95 \u0ab5\u0a97\u0ab0\u0aa8\u0ac0 \u0ab5\u0abe\u0aa4\u0a9a\u0ac0\u0aa4", + "menu": { + "rename": "\u0aa8\u0abe\u0aae \u0aac\u0aa6\u0ab2\u0acb", + "share": "\u0ab6\u0ac7\u0ab0 \u0a95\u0ab0\u0acb", + "delete": "Delete" + }, + "actions": { + "share": { + "title": "\u0a9a\u0ac7\u0a9f\u0aa8\u0ac0 \u0ab2\u0abf\u0a82\u0a95 \u0ab6\u0ac7\u0ab0 \u0a95\u0ab0\u0acb", + "button": "\u0ab6\u0ac7\u0ab0 \u0a95\u0ab0\u0acb", + "status": { + "copied": "\u0ab2\u0abf\u0a82\u0a95 \u0a95\u0ac9\u0aaa\u0abf \u0aa5\u0a88", + "created": "\u0ab6\u0ac7\u0ab0 \u0ab2\u0abf\u0a82\u0a95 \u0aac\u0aa8\u0abe\u0ab5\u0abe\u0a88!", + "unshared": "\u0a86 \u0aa5\u0acd\u0ab0\u0ac7\u0aa1 \u0aae\u0abe\u0a9f\u0ac7 \u0ab6\u0ac7\u0ab0\u0abf\u0a82\u0a97 \u0aa8\u0abf\u0ab7\u0acd\u0a95\u0acd\u0ab0\u0abf\u0aaf \u0a9b\u0ac7" + }, + "error": { + "create": "\u0ab6\u0ac7\u0ab0 \u0ab2\u0abf\u0a82\u0a95 \u0aac\u0aa8\u0abe\u0ab5\u0ab5\u0abe\u0aae\u0abe\u0a82 \u0aa8\u0abf\u0ab7\u0acd\u0aab\u0ab3", + "unshare": "\u0aa5\u0acd\u0ab0\u0ac7\u0aa1 \u0a85\u0aa8\u0ab6\u0ac7\u0ab0 \u0a95\u0ab0\u0ab5\u0abe\u0aae\u0abe\u0a82 \u0aa8\u0abf\u0ab7\u0acd\u0aab\u0ab3" + } + }, + "delete": { + "title": "\u0a95\u0abe\u0aa2\u0ac0 \u0aa8\u0abe\u0a96\u0ab5\u0abe\u0aa8\u0ac0 \u0aaa\u0ac1\u0ab7\u0acd\u0a9f\u0abf \u0a95\u0ab0\u0acb", + "description": "\u0a86 \u0aa5\u0acd\u0ab0\u0ac7\u0aa1 \u0a85\u0aa8\u0ac7 \u0aa4\u0ac7\u0aa8\u0abe \u0ab8\u0a82\u0aa6\u0ac7\u0ab6\u0abe\u0a93 \u0a85\u0aa8\u0ac7 \u0aa4\u0aa4\u0acd\u0ab5\u0acb\u0aa8\u0ac7 \u0a95\u0abe\u0aa2\u0ac0 \u0aa8\u0abe\u0a96\u0ab6\u0ac7. \u0a86 \u0a95\u0acd\u0ab0\u0abf\u0aaf\u0abe \u0aaa\u0abe\u0a9b\u0ac0 \u0aab\u0ac7\u0ab0\u0ab5\u0ac0 \u0ab6\u0a95\u0abe\u0ab6\u0ac7 \u0aa8\u0ab9\u0ac0\u0a82", + "success": "\u0a9a\u0ac7\u0a9f \u0a95\u0abe\u0aa2\u0ac0 \u0aa8\u0abe\u0a96\u0ac0", + "inProgress": "\u0a9a\u0ac7\u0a9f \u0a95\u0abe\u0aa2\u0ac0 \u0aa8\u0abe\u0a96\u0ac0 \u0ab0\u0ab9\u0acd\u0aaf\u0abe \u0a9b\u0ac0\u0a8f" + }, + "rename": { + "title": "\u0aa5\u0acd\u0ab0\u0ac7\u0aa1\u0aa8\u0ac1\u0a82 \u0aa8\u0abe\u0aae \u0aac\u0aa6\u0ab2\u0acb", + "description": "\u0a86 \u0aa5\u0acd\u0ab0\u0ac7\u0aa1 \u0aae\u0abe\u0a9f\u0ac7 \u0aa8\u0ab5\u0ac1\u0a82 \u0aa8\u0abe\u0aae \u0aa6\u0abe\u0a96\u0ab2 \u0a95\u0ab0\u0acb", + "form": { + "name": { + "label": "\u0aa8\u0abe\u0aae", + "placeholder": "\u0aa8\u0ab5\u0ac1\u0a82 \u0aa8\u0abe\u0aae \u0aa6\u0abe\u0a96\u0ab2 \u0a95\u0ab0\u0acb" + } + }, + "success": "\u0aa5\u0acd\u0ab0\u0ac7\u0aa1\u0aa8\u0ac1\u0a82 \u0aa8\u0abe\u0aae \u0aac\u0aa6\u0ab2\u0abe\u0aaf\u0ac1\u0a82!", + "inProgress": "\u0aa5\u0acd\u0ab0\u0ac7\u0aa1\u0aa8\u0ac1\u0a82 \u0aa8\u0abe\u0aae \u0aac\u0aa6\u0ab2\u0ac0 \u0ab0\u0ab9\u0acd\u0aaf\u0abe \u0a9b\u0ac0\u0a8f" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u0a9a\u0ac7\u0a9f", + "readme": "\u0ab5\u0abe\u0a82\u0a9a\u0acb", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0aa8\u0ab5\u0ac0 \u0a9a\u0ac7\u0a9f", + "dialog": { + "title": "\u0aa8\u0ab5\u0ac0 \u0a9a\u0ac7\u0a9f \u0aac\u0aa8\u0abe\u0ab5\u0acb", + "description": "\u0a86 \u0aa4\u0aae\u0abe\u0ab0\u0acb \u0ab5\u0ab0\u0acd\u0aa4\u0aae\u0abe\u0aa8 \u0a9a\u0ac7\u0a9f \u0a87\u0aa4\u0abf\u0ab9\u0abe\u0ab8 \u0ab8\u0abe\u0aab \u0a95\u0ab0\u0ab6\u0ac7. \u0ab6\u0ac1\u0a82 \u0aa4\u0aae\u0ac7 \u0a9a\u0abe\u0ab2\u0ac1 \u0ab0\u0abe\u0a96\u0ab5\u0abe \u0aae\u0abe\u0a82\u0a97\u0acb \u0a9b\u0acb?", + "tooltip": "\u0aa8\u0ab5\u0ac0 \u0a9a\u0ac7\u0a9f" + } + }, + "user": { + "menu": { + "settings": "\u0ab8\u0ac7\u0a9f\u0abf\u0a82\u0a97\u0acd\u0ab8", + "settingsKey": "S", + "apiKeys": "API \u0a95\u0ac0", + "logout": "\u0ab2\u0ac9\u0a97\u0a86\u0a89\u0a9f" + } + } + }, + "apiKeys": { + "title": "\u0a9c\u0ab0\u0ac2\u0ab0\u0ac0 API \u0a95\u0ac0", + "description": "\u0a86 \u0a8f\u0aaa\u0acd\u0ab2\u0abf\u0a95\u0ac7\u0ab6\u0aa8 \u0ab5\u0abe\u0aaa\u0ab0\u0ab5\u0abe \u0aae\u0abe\u0a9f\u0ac7, \u0aa8\u0ac0\u0a9a\u0ac7\u0aa8\u0ac0 API \u0a95\u0ac0 \u0a9c\u0ab0\u0ac2\u0ab0\u0ac0 \u0a9b\u0ac7. \u0a95\u0ac0 \u0aa4\u0aae\u0abe\u0ab0\u0abe \u0aa1\u0abf\u0ab5\u0abe\u0a87\u0ab8\u0aa8\u0abe \u0ab2\u0acb\u0a95\u0ab2 \u0ab8\u0acd\u0a9f\u0acb\u0ab0\u0ac7\u0a9c\u0aae\u0abe\u0a82 \u0ab8\u0a82\u0a97\u0acd\u0ab0\u0ab9\u0abf\u0aa4 \u0aa5\u0ab6\u0ac7.", + "success": { + "saved": "\u0ab8\u0aab\u0ab3\u0aa4\u0abe\u0aaa\u0ac2\u0ab0\u0acd\u0ab5\u0a95 \u0ab8\u0abe\u0a9a\u0ab5\u0acd\u0aaf\u0ac1\u0a82" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0aac\u0ac7\u0a82\u0a9a\u0ac0 \u0ab2\u0acb..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/he-IL.json b/.chainlit/translations/he-IL.json new file mode 100755 index 00000000..8f6b0b3a --- /dev/null +++ b/.chainlit/translations/he-IL.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u05d1\u05d9\u05d8\u05d5\u05dc", + "confirm": "\u05d0\u05d9\u05e9\u05d5\u05e8", + "continue": "\u05d4\u05de\u05e9\u05da", + "goBack": "\u05d7\u05d6\u05d5\u05e8", + "reset": "\u05d0\u05d9\u05e4\u05d5\u05e1", + "submit": "\u05e9\u05dc\u05d7" + }, + "status": { + "loading": "\u05d8\u05d5\u05e2\u05df...", + "error": { + "default": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4", + "serverConnection": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05e9\u05e8\u05ea" + } + } + }, + "auth": { + "login": { + "title": "\u05d4\u05ea\u05d7\u05d1\u05e8 \u05db\u05d3\u05d9 \u05dc\u05d2\u05e9\u05ea \u05dc\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4", + "form": { + "email": { + "label": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05d9\u05de\u05d9\u05d9\u05dc", + "required": "\u05e9\u05d3\u05d4 \u05d4\u05d0\u05d9\u05de\u05d9\u05d9\u05dc \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u05e1\u05d9\u05e1\u05de\u05d4", + "required": "\u05e9\u05d3\u05d4 \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05d4\u05d5\u05d0 \u05e9\u05d3\u05d4 \u05d7\u05d5\u05d1\u05d4" + }, + "actions": { + "signin": "\u05d4\u05ea\u05d7\u05d1\u05e8" + }, + "alternativeText": { + "or": "\u05d0\u05d5" + } + }, + "errors": { + "default": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8", + "signin": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "oauthSignin": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "redirectUriMismatch": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d4\u05e4\u05e0\u05d9\u05d4 \u05d0\u05d9\u05e0\u05d4 \u05ea\u05d5\u05d0\u05de\u05ea \u05d0\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d9\u05ea OAuth", + "oauthCallback": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "oauthCreateAccount": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "emailCreateAccount": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "callback": "\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d7\u05e9\u05d1\u05d5\u05df \u05d0\u05d7\u05e8", + "oauthAccountNotLinked": "\u05db\u05d3\u05d9 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da, \u05d4\u05ea\u05d7\u05d1\u05e8 \u05e2\u05dd \u05d0\u05d5\u05ea\u05d5 \u05d7\u05e9\u05d1\u05d5\u05df \u05d1\u05d5 \u05d4\u05e9\u05ea\u05de\u05e9\u05ea \u05d1\u05de\u05e7\u05d5\u05e8", + "emailSignin": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05e9\u05dc\u05d5\u05d7 \u05d0\u05ea \u05d4\u05d0\u05d9\u05de\u05d9\u05d9\u05dc", + "emailVerify": "\u05d0\u05e0\u05d0 \u05d0\u05de\u05ea \u05d0\u05ea \u05d4\u05d0\u05d9\u05de\u05d9\u05d9\u05dc \u05e9\u05dc\u05da, \u05e0\u05e9\u05dc\u05d7 \u05d0\u05d9\u05de\u05d9\u05d9\u05dc \u05d7\u05d3\u05e9", + "credentialsSignin": "\u05d4\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05e0\u05db\u05e9\u05dc\u05d4. \u05d1\u05d3\u05d5\u05e7 \u05e9\u05d4\u05e4\u05e8\u05d8\u05d9\u05dd \u05e9\u05d4\u05d6\u05e0\u05ea \u05e0\u05db\u05d5\u05e0\u05d9\u05dd", + "sessionRequired": "\u05d0\u05e0\u05d0 \u05d4\u05ea\u05d7\u05d1\u05e8 \u05db\u05d3\u05d9 \u05dc\u05d2\u05e9\u05ea \u05dc\u05d3\u05e3 \u05d6\u05d4" + } + }, + "provider": { + "continue": "\u05d4\u05de\u05e9\u05da \u05e2\u05dd {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "\u05d4\u05e7\u05dc\u05d3 \u05d0\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d4 \u05e9\u05dc\u05da \u05db\u05d0\u05df...", + "actions": { + "send": "\u05e9\u05dc\u05d7 \u05d4\u05d5\u05d3\u05e2\u05d4", + "stop": "\u05e2\u05e6\u05d5\u05e8 \u05de\u05e9\u05d9\u05de\u05d4", + "attachFiles": "\u05e6\u05e8\u05e3 \u05e7\u05d1\u05e6\u05d9\u05dd" + } + }, + "speech": { + "start": "\u05d4\u05ea\u05d7\u05dc \u05d4\u05e7\u05dc\u05d8\u05d4", + "stop": "\u05e2\u05e6\u05d5\u05e8 \u05d4\u05e7\u05dc\u05d8\u05d4", + "connecting": "\u05de\u05ea\u05d7\u05d1\u05e8" + }, + "commands": { + "button": "\u05db\u05dc\u05d9\u05dd", + "changeTool": "\u05e9\u05e0\u05d4 \u05db\u05dc\u05d9", + "availableTools": "\u05db\u05dc\u05d9\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd" + }, + "fileUpload": { + "dragDrop": "\u05d2\u05e8\u05d5\u05e8 \u05d5\u05e9\u05d7\u05e8\u05e8 \u05e7\u05d1\u05e6\u05d9\u05dd \u05db\u05d0\u05df", + "browse": "\u05e2\u05d9\u05d9\u05df \u05d1\u05e7\u05d1\u05e6\u05d9\u05dd", + "sizeLimit": "\u05de\u05d2\u05d1\u05dc\u05d4:", + "errors": { + "failed": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e0\u05db\u05e9\u05dc\u05d4", + "cancelled": "\u05d4\u05e2\u05dc\u05d0\u05d4 \u05d1\u05d5\u05d8\u05dc\u05d4 \u05e9\u05dc" + }, + "actions": { + "cancelUpload": "\u05d1\u05d9\u05d8\u05d5\u05dc \u05d4\u05e2\u05dc\u05d0\u05d4", + "removeAttachment": "\u05d4\u05e1\u05e8\u05ea \u05e7\u05d5\u05d1\u05e5 \u05de\u05e6\u05d5\u05e8\u05e3" + } + }, + "messages": { + "status": { + "using": "\u05de\u05e9\u05ea\u05de\u05e9 \u05d1", + "used": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1" + }, + "actions": { + "copy": { + "button": "\u05d4\u05e2\u05ea\u05e7 \u05dc\u05dc\u05d5\u05d7", + "success": "\u05d4\u05d5\u05e2\u05ea\u05e7!" + } + }, + "feedback": { + "positive": "\u05de\u05d5\u05e2\u05d9\u05dc", + "negative": "\u05dc\u05d0 \u05de\u05d5\u05e2\u05d9\u05dc", + "edit": "\u05e2\u05e8\u05d5\u05da \u05de\u05e9\u05d5\u05d1", + "dialog": { + "title": "\u05d4\u05d5\u05e1\u05e3 \u05ea\u05d2\u05d5\u05d1\u05d4", + "submit": "\u05e9\u05dc\u05d7 \u05de\u05e9\u05d5\u05d1", + "yourFeedback": "\u05d4\u05de\u05e9\u05d5\u05d1 \u05e9\u05dc\u05da..." + }, + "status": { + "updating": "\u05de\u05e2\u05d3\u05db\u05df", + "updated": "\u05d4\u05de\u05e9\u05d5\u05d1 \u05e2\u05d5\u05d3\u05db\u05df" + } + } + }, + "history": { + "title": "\u05e7\u05dc\u05d8\u05d9\u05dd \u05d0\u05d7\u05e8\u05d5\u05e0\u05d9\u05dd", + "empty": "\u05db\u05dc \u05db\u05da \u05e8\u05d9\u05e7...", + "show": "\u05d4\u05e6\u05d2 \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4" + }, + "settings": { + "title": "\u05e4\u05d0\u05e0\u05dc \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea", + "customize": "\u05d4\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea \u05d0\u05ea \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d4\u05e6'\u05d0\u05d8 \u05e9\u05dc\u05da \u05db\u05d0\u05df" + }, + "watermark": "\u05de\u05d5\u05d3\u05dc\u05d9 \u05e9\u05e4\u05d4 \u05d2\u05d3\u05d5\u05dc\u05d9\u05dd \u05e2\u05dc\u05d5\u05dc\u05d9\u05dd \u05dc\u05e2\u05e9\u05d5\u05ea \u05d8\u05e2\u05d5\u05d9\u05d5\u05ea. \u05db\u05d3\u05d0\u05d9 \u05dc\u05d1\u05d3\u05d5\u05e7 \u05de\u05d9\u05d3\u05e2 \u05d7\u05e9\u05d5\u05d1." + }, + "threadHistory": { + "sidebar": { + "title": "\u05e6'\u05d0\u05d8\u05d9\u05dd \u05e7\u05d5\u05d3\u05de\u05d9\u05dd", + "filters": { + "search": "\u05d7\u05d9\u05e4\u05d5\u05e9", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u05d4\u05d9\u05d5\u05dd", + "yesterday": "\u05d0\u05ea\u05de\u05d5\u05dc", + "previous7days": "7 \u05d9\u05de\u05d9\u05dd \u05d0\u05d7\u05e8\u05d5\u05e0\u05d9\u05dd", + "previous30days": "30 \u05d9\u05de\u05d9\u05dd \u05d0\u05d7\u05e8\u05d5\u05e0\u05d9\u05dd" + }, + "empty": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e9\u05d9\u05d7\u05d5\u05ea", + "actions": { + "close": "\u05e1\u05d2\u05d5\u05e8 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3", + "open": "\u05e4\u05ea\u05d7 \u05e1\u05e8\u05d2\u05dc \u05e6\u05d3" + } + }, + "thread": { + "untitled": "\u05e9\u05d9\u05d7\u05d4 \u05dc\u05dc\u05d0 \u05db\u05d5\u05ea\u05e8\u05ea", + "menu": { + "rename": "\u05e9\u05d9\u05e0\u05d5\u05d9 \u05e9\u05dd", + "share": "\u05e9\u05d9\u05ea\u05d5\u05e3", + "delete": "Delete" + }, + "actions": { + "share": { + "title": "\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e9\u05d9\u05d7\u05d4", + "button": "\u05e9\u05d9\u05ea\u05d5\u05e3", + "status": { + "copied": "\u05d4\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d4\u05d5\u05e2\u05ea\u05e7", + "created": "\u05e7\u05d9\u05e9\u05d5\u05e8 \u05d4\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e0\u05d5\u05e6\u05e8!", + "unshared": "\u05d4\u05e9\u05d9\u05ea\u05d5\u05e3 \u05d1\u05d5\u05d8\u05dc \u05e2\u05d1\u05d5\u05e8 \u05e9\u05d9\u05d7\u05d4 \u05d6\u05d5" + }, + "error": { + "create": "\u05d9\u05e6\u05d9\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d4\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e0\u05db\u05e9\u05dc\u05d4", + "unshare": "\u05d1\u05d9\u05d8\u05d5\u05dc \u05d4\u05e9\u05d9\u05ea\u05d5\u05e3 \u05e9\u05dc \u05d4\u05e9\u05d9\u05d7\u05d4 \u05e0\u05db\u05e9\u05dc" + } + }, + "delete": { + "title": "\u05d0\u05e9\u05e8 \u05de\u05d7\u05d9\u05e7\u05d4", + "description": "\u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5 \u05ea\u05de\u05d7\u05e7 \u05d0\u05ea \u05d4\u05e9\u05d9\u05d7\u05d4 \u05d5\u05db\u05df \u05d0\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05d5\u05d4\u05d0\u05dc\u05de\u05e0\u05d8\u05d9\u05dd \u05e9\u05dc\u05d4. \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5", + "success": "\u05d4\u05e6'\u05d0\u05d8 \u05e0\u05de\u05d7\u05e7", + "inProgress": "\u05de\u05d5\u05d7\u05e7 \u05e6'\u05d0\u05d8" + }, + "rename": { + "title": "\u05e9\u05e0\u05d4 \u05e9\u05dd \u05e9\u05d9\u05d7\u05d4", + "description": "\u05d4\u05d6\u05df \u05e9\u05dd \u05d7\u05d3\u05e9 \u05dc\u05e9\u05d9\u05d7\u05d4 \u05d6\u05d5", + "form": { + "name": { + "label": "\u05e9\u05dd", + "placeholder": "\u05d4\u05d6\u05df \u05e9\u05dd \u05d7\u05d3\u05e9" + } + }, + "success": "\u05e9\u05dd \u05d4\u05e9\u05d9\u05d7\u05d4 \u05e9\u05d5\u05e0\u05d4!", + "inProgress": "\u05de\u05e9\u05e0\u05d4 \u05e9\u05dd \u05e9\u05d9\u05d7\u05d4" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u05e6'\u05d0\u05d8", + "readme": "\u05e7\u05e8\u05d0 \u05d0\u05d5\u05ea\u05d9", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u05e6'\u05d0\u05d8 \u05d7\u05d3\u05e9", + "dialog": { + "title": "\u05e6\u05d5\u05e8 \u05e6'\u05d0\u05d8 \u05d7\u05d3\u05e9", + "description": "\u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5 \u05ea\u05e0\u05e7\u05d4 \u05d0\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d9\u05ea \u05d4\u05e6'\u05d0\u05d8 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9\u05ea \u05e9\u05dc\u05da. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da?", + "tooltip": "\u05e6'\u05d0\u05d8 \u05d7\u05d3\u05e9" + } + }, + "user": { + "menu": { + "settings": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea", + "settingsKey": "\u05d4", + "apiKeys": "\u05de\u05e4\u05ea\u05d7\u05d5\u05ea API", + "logout": "\u05d4\u05ea\u05e0\u05ea\u05e7" + } + } + }, + "apiKeys": { + "title": "\u05de\u05e4\u05ea\u05d7\u05d5\u05ea API \u05e0\u05d3\u05e8\u05e9\u05d9\u05dd", + "description": "\u05db\u05d3\u05d9 \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05d6\u05d5, \u05e0\u05d3\u05e8\u05e9\u05d9\u05dd \u05de\u05e4\u05ea\u05d7\u05d5\u05ea API \u05d4\u05d1\u05d0\u05d9\u05dd. \u05d4\u05de\u05e4\u05ea\u05d7\u05d5\u05ea \u05de\u05d0\u05d5\u05d7\u05e1\u05e0\u05d9\u05dd \u05d1\u05d0\u05d7\u05e1\u05d5\u05df \u05d4\u05de\u05e7\u05d5\u05de\u05d9 \u05e9\u05dc \u05d4\u05de\u05db\u05e9\u05d9\u05e8 \u05e9\u05dc\u05da.", + "success": { + "saved": "\u05e0\u05e9\u05de\u05e8 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u05d1\u05d7\u05e8..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/hi.json b/.chainlit/translations/hi.json new file mode 100755 index 00000000..5642f159 --- /dev/null +++ b/.chainlit/translations/hi.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u0947\u0902", + "confirm": "\u092a\u0941\u0937\u094d\u091f\u093f \u0915\u0930\u0947\u0902", + "continue": "\u091c\u093e\u0930\u0940 \u0930\u0916\u0947\u0902", + "goBack": "\u0935\u093e\u092a\u0938 \u091c\u093e\u090f\u0902", + "reset": "\u0930\u0940\u0938\u0947\u091f \u0915\u0930\u0947\u0902", + "submit": "\u091c\u092e\u093e \u0915\u0930\u0947\u0902" + }, + "status": { + "loading": "\u0932\u094b\u0921 \u0939\u094b \u0930\u0939\u093e \u0939\u0948...", + "error": { + "default": "\u090f\u0915 \u0924\u094d\u0930\u0941\u091f\u093f \u0939\u0941\u0908", + "serverConnection": "\u0938\u0930\u094d\u0935\u0930 \u0938\u0947 \u0938\u0902\u092a\u0930\u094d\u0915 \u0928\u0939\u0940\u0902 \u0939\u094b \u092a\u093e \u0930\u0939\u093e" + } + } + }, + "auth": { + "login": { + "title": "\u0910\u092a \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0932\u0949\u0917\u093f\u0928 \u0915\u0930\u0947\u0902", + "form": { + "email": { + "label": "\u0908\u092e\u0947\u0932 \u092a\u0924\u093e", + "required": "\u0908\u092e\u0947\u0932 \u090f\u0915 \u0906\u0935\u0936\u094d\u092f\u0915 \u092b\u093c\u0940\u0932\u094d\u0921 \u0939\u0948", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "required": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u090f\u0915 \u0906\u0935\u0936\u094d\u092f\u0915 \u092b\u093c\u0940\u0932\u094d\u0921 \u0939\u0948" + }, + "actions": { + "signin": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0947\u0902" + }, + "alternativeText": { + "or": "\u092f\u093e" + } + }, + "errors": { + "default": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0905\u0938\u092e\u0930\u094d\u0925", + "signin": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "oauthSignin": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "redirectUriMismatch": "\u0930\u0940\u0921\u093e\u092f\u0930\u0947\u0915\u094d\u091f URI oauth \u0910\u092a \u0915\u0949\u0928\u094d\u092b\u093c\u093f\u0917\u0930\u0947\u0936\u0928 \u0938\u0947 \u092e\u0947\u0932 \u0928\u0939\u0940\u0902 \u0916\u093e \u0930\u0939\u093e", + "oauthCallback": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "oauthCreateAccount": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "emailCreateAccount": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "callback": "\u0915\u093f\u0938\u0940 \u0926\u0942\u0938\u0930\u0947 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0928\u0947 \u0915\u093e \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902", + "oauthAccountNotLinked": "\u0905\u092a\u0928\u0940 \u092a\u0939\u091a\u093e\u0928 \u0915\u0940 \u092a\u0941\u0937\u094d\u091f\u093f \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u0909\u0938\u0940 \u0916\u093e\u0924\u0947 \u0938\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0947\u0902 \u091c\u093f\u0938\u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0906\u092a\u0928\u0947 \u092e\u0942\u0932 \u0930\u0942\u092a \u0938\u0947 \u0915\u093f\u092f\u093e \u0925\u093e", + "emailSignin": "\u0908\u092e\u0947\u0932 \u0928\u0939\u0940\u0902 \u092d\u0947\u091c\u093e \u091c\u093e \u0938\u0915\u093e", + "emailVerify": "\u0915\u0943\u092a\u092f\u093e \u0905\u092a\u0928\u093e \u0908\u092e\u0947\u0932 \u0938\u0924\u094d\u092f\u093e\u092a\u093f\u0924 \u0915\u0930\u0947\u0902, \u090f\u0915 \u0928\u092f\u093e \u0908\u092e\u0947\u0932 \u092d\u0947\u091c\u093e \u0917\u092f\u093e \u0939\u0948", + "credentialsSignin": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0935\u093f\u092b\u0932\u0964 \u0906\u092a\u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e \u092a\u094d\u0930\u0926\u093e\u0928 \u0915\u093f\u090f \u0917\u090f \u0935\u093f\u0935\u0930\u0923 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0947\u0902", + "sessionRequired": "\u0907\u0938 \u092a\u0943\u0937\u094d\u0920 \u0924\u0915 \u092a\u0939\u0941\u0902\u091a\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u0943\u092a\u092f\u093e \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0947\u0902" + } + }, + "provider": { + "continue": "{{provider}} \u0915\u0947 \u0938\u093e\u0925 \u091c\u093e\u0930\u0940 \u0930\u0916\u0947\u0902" + } + }, + "chat": { + "input": { + "placeholder": "\u0905\u092a\u0928\u093e \u0938\u0902\u0926\u0947\u0936 \u092f\u0939\u093e\u0902 \u091f\u093e\u0907\u092a \u0915\u0930\u0947\u0902...", + "actions": { + "send": "\u0938\u0902\u0926\u0947\u0936 \u092d\u0947\u091c\u0947\u0902", + "stop": "\u0915\u093e\u0930\u094d\u092f \u0930\u094b\u0915\u0947\u0902", + "attachFiles": "\u092b\u093c\u093e\u0907\u0932\u0947\u0902 \u0938\u0902\u0932\u0917\u094d\u0928 \u0915\u0930\u0947\u0902" + } + }, + "speech": { + "start": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902", + "stop": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917 \u0930\u094b\u0915\u0947\u0902", + "connecting": "\u0915\u0928\u0947\u0915\u094d\u091f \u0939\u094b \u0930\u0939\u093e \u0939\u0948" + }, + "fileUpload": { + "dragDrop": "\u092b\u093c\u093e\u0907\u0932\u094b\u0902 \u0915\u094b \u092f\u0939\u093e\u0902 \u0916\u0940\u0902\u091a\u0947\u0902 \u0914\u0930 \u091b\u094b\u0921\u093c\u0947\u0902", + "browse": "\u092b\u093c\u093e\u0907\u0932\u0947\u0902 \u092c\u094d\u0930\u093e\u0909\u091c\u093c \u0915\u0930\u0947\u0902", + "sizeLimit": "\u0938\u0940\u092e\u093e:", + "errors": { + "failed": "\u0905\u092a\u0932\u094b\u0921 \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0935\u093f\u092b\u0932", + "cancelled": "\u0915\u093e \u0905\u092a\u0932\u094b\u0921 \u0930\u0926\u094d\u0926 \u0915\u093f\u092f\u093e \u0917\u092f\u093e" + }, + "actions": { + "cancelUpload": "\u0905\u092a\u0932\u094b\u0921 \u0930\u0926\u094d\u0926 \u0915\u0930\u0947\u0902", + "removeAttachment": "\u0938\u0902\u0932\u0917\u094d\u0928\u0915 \u0939\u091f\u093e\u090f\u0902" + } + }, + "commands": { + "button": "\u0909\u092a\u0915\u0930\u0923", + "changeTool": "\u0909\u092a\u0915\u0930\u0923 \u092c\u0926\u0932\u0947\u0902", + "availableTools": "\u0909\u092a\u0932\u092c\u094d\u0927 \u0909\u092a\u0915\u0930\u0923" + }, + "messages": { + "status": { + "using": "\u0909\u092a\u092f\u094b\u0917 \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902", + "used": "\u0909\u092a\u092f\u094b\u0917 \u0915\u093f\u092f\u093e" + }, + "actions": { + "copy": { + "button": "\u0915\u094d\u0932\u093f\u092a\u092c\u094b\u0930\u094d\u0921 \u092a\u0930 \u0915\u0949\u092a\u0940 \u0915\u0930\u0947\u0902", + "success": "\u0915\u0949\u092a\u0940 \u0915\u093f\u092f\u093e \u0917\u092f\u093e!" + } + }, + "feedback": { + "positive": "\u0938\u0939\u093e\u092f\u0915", + "negative": "\u0938\u0939\u093e\u092f\u0915 \u0928\u0939\u0940\u0902", + "edit": "\u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e \u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902", + "dialog": { + "title": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940 \u091c\u094b\u0921\u093c\u0947\u0902", + "submit": "\u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e \u091c\u092e\u093e \u0915\u0930\u0947\u0902", + "yourFeedback": "\u0906\u092a\u0915\u0940 \u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e..." + }, + "status": { + "updating": "\u0905\u092a\u0921\u0947\u091f \u0939\u094b \u0930\u0939\u093e \u0939\u0948", + "updated": "\u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e \u0905\u092a\u0921\u0947\u091f \u0915\u0940 \u0917\u0908" + } + } + }, + "history": { + "title": "\u092a\u093f\u091b\u0932\u0947 \u0907\u0928\u092a\u0941\u091f", + "empty": "\u0915\u0941\u091b \u092d\u0940 \u0928\u0939\u0940\u0902 \u0939\u0948...", + "show": "\u0907\u0924\u093f\u0939\u093e\u0938 \u0926\u093f\u0916\u093e\u090f\u0902" + }, + "settings": { + "title": "\u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 \u092a\u0948\u0928\u0932", + "customize": "\u0905\u092a\u0928\u0947 \u091a\u0948\u091f \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 \u0915\u094b \u092f\u0939\u093e\u0902 \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924 \u0915\u0930\u0947\u0902" + }, + "watermark": "\u090f\u0932\u090f\u0932\u090f\u092e \u0917\u0932\u0924\u093f\u092f\u093e\u0902 \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902\u0964 \u092e\u0939\u0924\u094d\u0935\u092a\u0942\u0930\u094d\u0923 \u091c\u093e\u0928\u0915\u093e\u0930\u0940 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0928\u0947 \u092a\u0930 \u0935\u093f\u091a\u093e\u0930 \u0915\u0930\u0947\u0902\u0964" + }, + "threadHistory": { + "sidebar": { + "title": "\u092a\u093f\u091b\u0932\u0940 \u091a\u0948\u091f", + "filters": { + "search": "\u0916\u094b\u091c\u0947\u0902", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0906\u091c", + "yesterday": "\u0915\u0932", + "previous7days": "\u092a\u093f\u091b\u0932\u0947 7 \u0926\u093f\u0928", + "previous30days": "\u092a\u093f\u091b\u0932\u0947 30 \u0926\u093f\u0928" + }, + "empty": "\u0915\u094b\u0908 \u0925\u094d\u0930\u0947\u0921 \u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e", + "actions": { + "close": "\u0938\u093e\u0907\u0921\u092c\u093e\u0930 \u092c\u0902\u0926 \u0915\u0930\u0947\u0902", + "open": "\u0938\u093e\u0907\u0921\u092c\u093e\u0930 \u0916\u094b\u0932\u0947\u0902" + } + }, + "thread": { + "untitled": "\u0936\u0940\u0930\u094d\u0937\u0915\u0939\u0940\u0928 \u0935\u093e\u0930\u094d\u0924\u093e\u0932\u093e\u092a", + "menu": { + "rename": "\u0928\u093e\u092e \u092c\u0926\u0932\u0947\u0902", + "share": "\u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "delete": "Delete" + }, + "actions": { + "share": { + "title": "\u091a\u0948\u091f \u0915\u093e \u0932\u093f\u0902\u0915 \u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "button": "\u0938\u093e\u091d\u093e \u0915\u0930\u0947\u0902", + "status": { + "copied": "\u0932\u093f\u0902\u0915 \u0915\u0949\u092a\u0940 \u0915\u093f\u092f\u093e \u0917\u092f\u093e", + "created": "\u0936\u0947\u092f\u0930 \u0932\u093f\u0902\u0915 \u092c\u0928\u093e\u092f\u093e \u0917\u092f\u093e!", + "unshared": "\u0907\u0938 \u0925\u094d\u0930\u0947\u0921 \u0915\u0947 \u0932\u093f\u090f \u0938\u093e\u091d\u093e \u0915\u0930\u0928\u093e \u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f \u0939\u0948" + }, + "error": { + "create": "\u0936\u0947\u092f\u0930 \u0932\u093f\u0902\u0915 \u092c\u0928\u093e\u0928\u0947 \u092e\u0947\u0902 \u0935\u093f\u092b\u0932", + "unshare": "\u0925\u094d\u0930\u0947\u0921 \u0915\u094b \u0905\u0928\u0936\u0947\u092f\u0930 \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0935\u093f\u092b\u0932" + } + }, + "delete": { + "title": "\u0939\u091f\u093e\u0928\u0947 \u0915\u0940 \u092a\u0941\u0937\u094d\u091f\u093f \u0915\u0930\u0947\u0902", + "description": "\u092f\u0939 \u0925\u094d\u0930\u0947\u0921 \u0914\u0930 \u0907\u0938\u0915\u0947 \u0938\u0902\u0926\u0947\u0936\u094b\u0902 \u0914\u0930 \u0924\u0924\u094d\u0935\u094b\u0902 \u0915\u094b \u0939\u091f\u093e \u0926\u0947\u0917\u093e\u0964 \u092f\u0939 \u0915\u094d\u0930\u093f\u092f\u093e \u0935\u093e\u092a\u0938 \u0928\u0939\u0940\u0902 \u0915\u0940 \u091c\u093e \u0938\u0915\u0924\u0940", + "success": "\u091a\u0948\u091f \u0939\u091f\u093e \u0926\u0940 \u0917\u0908", + "inProgress": "\u091a\u0948\u091f \u0939\u091f\u093e\u0908 \u091c\u093e \u0930\u0939\u0940 \u0939\u0948" + }, + "rename": { + "title": "\u0925\u094d\u0930\u0947\u0921 \u0915\u093e \u0928\u093e\u092e \u092c\u0926\u0932\u0947\u0902", + "description": "\u0907\u0938 \u0925\u094d\u0930\u0947\u0921 \u0915\u0947 \u0932\u093f\u090f \u090f\u0915 \u0928\u092f\u093e \u0928\u093e\u092e \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902", + "form": { + "name": { + "label": "\u0928\u093e\u092e", + "placeholder": "\u0928\u092f\u093e \u0928\u093e\u092e \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902" + } + }, + "success": "\u0925\u094d\u0930\u0947\u0921 \u0915\u093e \u0928\u093e\u092e \u092c\u0926\u0932 \u0926\u093f\u092f\u093e \u0917\u092f\u093e!", + "inProgress": "\u0925\u094d\u0930\u0947\u0921 \u0915\u093e \u0928\u093e\u092e \u092c\u0926\u0932\u093e \u091c\u093e \u0930\u0939\u093e \u0939\u0948" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u091a\u0948\u091f", + "readme": "\u0930\u0940\u0921\u092e\u0940", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0928\u0908 \u091a\u0948\u091f", + "dialog": { + "title": "\u0928\u0908 \u091a\u0948\u091f \u092c\u0928\u093e\u090f\u0902", + "description": "\u092f\u0939 \u0906\u092a\u0915\u093e \u0935\u0930\u094d\u0924\u092e\u093e\u0928 \u091a\u0948\u091f \u0907\u0924\u093f\u0939\u093e\u0938 \u0938\u093e\u092b\u093c \u0915\u0930 \u0926\u0947\u0917\u093e\u0964 \u0915\u094d\u092f\u093e \u0906\u092a \u091c\u093e\u0930\u0940 \u0930\u0916\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948\u0902?", + "tooltip": "\u0928\u0908 \u091a\u0948\u091f" + } + }, + "user": { + "menu": { + "settings": "\u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "settingsKey": "S", + "apiKeys": "API \u0915\u0941\u0902\u091c\u093f\u092f\u093e\u0902", + "logout": "\u0932\u0949\u0917\u0906\u0909\u091f" + } + } + }, + "apiKeys": { + "title": "\u0906\u0935\u0936\u094d\u092f\u0915 API \u0915\u0941\u0902\u091c\u093f\u092f\u093e\u0902", + "description": "\u0907\u0938 \u0910\u092a \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u0928\u093f\u092e\u094d\u0928\u0932\u093f\u0916\u093f\u0924 API \u0915\u0941\u0902\u091c\u093f\u092f\u093e\u0902 \u0906\u0935\u0936\u094d\u092f\u0915 \u0939\u0948\u0902\u0964 \u0915\u0941\u0902\u091c\u093f\u092f\u093e\u0902 \u0906\u092a\u0915\u0947 \u0921\u093f\u0935\u093e\u0907\u0938 \u0915\u0947 \u0938\u094d\u0925\u093e\u0928\u0940\u092f \u0938\u0902\u0917\u094d\u0930\u0939\u0923 \u092e\u0947\u0902 \u0938\u0902\u0917\u094d\u0930\u0939\u0940\u0924 \u0915\u0940 \u091c\u093e\u0924\u0940 \u0939\u0948\u0902\u0964", + "success": { + "saved": "\u0938\u092b\u0932\u0924\u093e\u092a\u0942\u0930\u094d\u0935\u0915 \u0938\u0939\u0947\u091c\u093e \u0917\u092f\u093e" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u091a\u0941\u0928\u0947\u0902..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/it.json b/.chainlit/translations/it.json new file mode 100755 index 00000000..5ce03407 --- /dev/null +++ b/.chainlit/translations/it.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Cancella", + "confirm": "Conferma", + "continue": "Continua", + "goBack": "Ritorna", + "reset": "Reset", + "submit": "Invia" + }, + "status": { + "loading": "Caricamento...", + "error": { + "default": "Si \u00e8 verificato un errore", + "serverConnection": "Impossibile connettersi al server" + } + } + }, + "auth": { + "login": { + "title": "Accedi per utilizzare l'app", + "form": { + "email": { + "label": "Indirizzo email", + "required": "l'email \u00e8 un campo obbligatorio", + "placeholder": "me@example.com" + }, + "password": { + "label": "Password", + "required": "la password \u00e8 un campo obbligatorio" + }, + "actions": { + "signin": "Accedi" + }, + "alternativeText": { + "or": "O" + } + }, + "errors": { + "default": "Impossibile effettuare l'accesso", + "signin": "Prova ad accedere con un account diverso", + "oauthSignin": "Prova ad accedere con un account diverso", + "redirectUriMismatch": "L'URI di reindirizzamento non corrisponde alla configurazione dell'app OAuth", + "oauthCallback": "Prova ad accedere con un account diverso", + "oauthCreateAccount": "Prova ad accedere con un account diverso", + "emailCreateAccount": "Prova ad accedere con un account diverso", + "callback": "Prova ad accedere con un account diverso", + "oauthAccountNotLinked": "Per confermare la tua identit\u00e0, accedi con lo stesso account che hai usato in precedenza", + "emailSignin": "Impossibile inviare l'email", + "emailVerify": "Verifica la tua email, \u00e8 stata inviata una nuova email", + "credentialsSignin": "Accesso non riuscito. Verifica che i dati forniti siano corretti", + "sessionRequired": "Accedi per visualizzare questa pagina" + } + }, + "provider": { + "continue": "Continua con {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Scrivi un messaggio...", + "actions": { + "send": "Invia messaggio", + "stop": "Interrompi attivit\u00e0", + "attachFiles": "Allega file" + } + }, + "commands": { + "button": "Strumenti", + "changeTool": "Cambia strumento", + "availableTools": "Strumenti disponibili" + }, + "speech": { + "start": "Inizia registrazione", + "stop": "Interrompi registrazione", + "connecting": "Connettendo" + }, + "fileUpload": { + "dragDrop": "Trascina e rilascia i file qui", + "browse": "Sfoglia file", + "sizeLimit": "Limite:", + "errors": { + "failed": "Caricamento file non riuscito", + "cancelled": "Caricamento annullato di" + }, + "actions": { + "cancelUpload": "Annulla caricamento", + "removeAttachment": "Rimuovi allegato" + } + }, + "messages": { + "status": { + "using": "In uso", + "used": "Utilizzato" + }, + "actions": { + "copy": { + "button": "Copia negli appunti", + "success": "Copiato!" + } + }, + "feedback": { + "positive": "Utile", + "negative": "Non utile", + "edit": "Modifica feedback", + "dialog": { + "title": "Aggiungi un commento", + "submit": "Invia feedback", + "yourFeedback": "Il tuo feedback..." + }, + "status": { + "updating": "Aggiornamento", + "updated": "Feedback aggiornato" + } + } + }, + "history": { + "title": "Cronologia chat", + "empty": "Cos\u00ec vuoto...", + "show": "Mostra cronologia" + }, + "settings": { + "title": "Impostazioni", + "customize": "Personalizza le impostazioni della tua chat qui" + }, + "watermark": "Gli LLMS possono commettere errori. Verifica le info importanti." + }, + "threadHistory": { + "sidebar": { + "title": "Chat precedenti", + "filters": { + "search": "Cerca", + "placeholder": "Cerca conversazioni..." + }, + "timeframes": { + "today": "Oggi", + "yesterday": "Ieri", + "previous7days": "Ultimi 7 giorni", + "previous30days": "Ultimi 30 giorni" + }, + "empty": "Nessuna chat trovata", + "actions": { + "close": "Chiudi barra laterale", + "open": "Apri barra laterale" + } + }, + "thread": { + "untitled": "Conversazione senza titolo", + "menu": { + "rename": "Rinomina", + "share": "Condividi", + "delete": "Elimina" + }, + "actions": { + "share": { + "title": "Condividi link conversazione", + "button": "Condividi", + "status": { + "copied": "Link copiato", + "created": "Link di condivisione creato!", + "unshared": "Condivisione disabilitata per questa chat" + }, + "error": { + "create": "Impossibile creare il link di condivisione", + "unshare": "Impossibile annullare la condivisione della chat" + } + }, + "delete": { + "title": "Conferma eliminazione", + "description": "Stai per eliminare la chat insieme ai suoi messaggi ed elementi. Questa azione non pu\u00f2 essere annullata", + "success": "Chat eliminata", + "inProgress": "Eliminazione chat" + }, + "rename": { + "title": "Rinomina chat", + "description": "Inserisci un nuovo nome per questa conversazione", + "form": { + "name": { + "label": "Nome", + "placeholder": "Inserisci nuovo nome" + } + }, + "success": "Chat rinominata!", + "inProgress": "Rinomina chat" + } + } + } + }, + "navigation": { + "header": { + "chat": "Chat", + "readme": "Leggimi", + "theme": { + "light": "Tema Chiaro", + "dark": "Tema Scuro", + "system": "Usa tema di sistema" + } + }, + "newChat": { + "button": "Nuova Chat", + "dialog": { + "title": "Crea Nuova Chat", + "description": "Sei sicuro di voler creare una nuova chat? La chat corrente verr\u00e0 chiusa.", + "tooltip": "Nuova Chat" + } + }, + "user": { + "menu": { + "settings": "Impostazioni", + "settingsKey": "S", + "apiKeys": "Chiavi API", + "logout": "Disconnettiti" + } + } + }, + "apiKeys": { + "title": "Chiavi API richieste", + "description": "Per utilizzare l'app, sono necessarie le seguenti chiavi API. Le chiavi sono salvate nella memoria locale del tuo dispositivo.", + "success": { + "saved": "Salvataggio riuscito" + } + }, + "alerts": { + "info": "Info", + "note": "Nota", + "tip": "Suggerimento", + "important": "Importante", + "warning": "Avviso", + "caution": "Attenzione", + "debug": "Debug", + "example": "Esempio", + "success": "Successo", + "help": "Aiuto", + "idea": "Idea", + "pending": "In sospeso", + "security": "Sicurezza", + "beta": "Beta", + "best-practice": "Miglior Soluzione" + }, + "components": { + "MultiSelectInput": { + "placeholder": "Seleziona..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/ja.json b/.chainlit/translations/ja.json new file mode 100755 index 00000000..a70e692e --- /dev/null +++ b/.chainlit/translations/ja.json @@ -0,0 +1,244 @@ +{ + "common": { + "actions": { + "cancel": "\u30ad\u30e3\u30f3\u30bb\u30eb", + "confirm": "\u78ba\u8a8d", + "continue": "\u7d9a\u3051\u308b", + "goBack": "\u623b\u308b", + "reset": "\u30ea\u30bb\u30c3\u30c8", + "submit": "\u9001\u4fe1" + }, + "status": { + "loading": "\u8aad\u307f\u8fbc\u307f\u4e2d...", + "error": { + "default": "\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f", + "serverConnection": "\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f" + } + } + }, + "auth": { + "login": { + "title": "\u30a2\u30d7\u30ea\u306b\u30ed\u30b0\u30a4\u30f3", + "form": { + "email": { + "label": "\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9", + "required": "\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u5fc5\u9808\u9805\u76ee\u3067\u3059", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u30d1\u30b9\u30ef\u30fc\u30c9", + "required": "\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5fc5\u9808\u9805\u76ee\u3067\u3059" + }, + "actions": { + "signin": "\u30b5\u30a4\u30f3\u30a4\u30f3" + }, + "alternativeText": { + "or": "\u307e\u305f\u306f" + } + }, + "errors": { + "default": "\u30b5\u30a4\u30f3\u30a4\u30f3\u3067\u304d\u307e\u305b\u3093", + "signin": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "oauthSignin": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "redirectUriMismatch": "\u30ea\u30c0\u30a4\u30ec\u30af\u30c8URI\u304cOAuth\u30a2\u30d7\u30ea\u306e\u8a2d\u5b9a\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093", + "oauthCallback": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "oauthCreateAccount": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "emailCreateAccount": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "callback": "\u5225\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "oauthAccountNotLinked": "\u672c\u4eba\u78ba\u8a8d\u306e\u305f\u3081\u3001\u6700\u521d\u306b\u4f7f\u7528\u3057\u305f\u306e\u3068\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044", + "emailSignin": "\u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f", + "emailVerify": "\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f", + "credentialsSignin": "\u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u60c5\u5831\u304c\u6b63\u3057\u3044\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044", + "sessionRequired": "\u3053\u306e\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044" + } + }, + "provider": { + "continue": "{{provider}}\u3067\u7d9a\u3051\u308b" + } + }, + "chat": { + "input": { + "placeholder": "\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044...", + "actions": { + "send": "\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1", + "stop": "\u30bf\u30b9\u30af\u3092\u505c\u6b62", + "attachFiles": "\u30d5\u30a1\u30a4\u30eb\u3092\u6dfb\u4ed8" + } + }, + "speech": { + "start": "\u9332\u97f3\u958b\u59cb", + "stop": "\u9332\u97f3\u505c\u6b62", + "connecting": "\u63a5\u7d9a\u4e2d" + }, + "commands": { + "button": "\u30c4\u30fc\u30eb", + "changeTool": "\u30c4\u30fc\u30eb\u3092\u5909\u66f4", + "availableTools": "\u5229\u7528\u53ef\u80fd\u306a\u30c4\u30fc\u30eb" + }, + "fileUpload": { + "dragDrop": "\u3053\u3053\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7", + "sizeLimit": "\u5236\u9650\uff1a", + "errors": { + "failed": "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f", + "cancelled": "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u307e\u3057\u305f\uff1a" + }, + "actions": { + "cancelUpload": "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u30ad\u30e3\u30f3\u30bb\u30eb", + "removeAttachment": "\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664" + } + }, + "messages": { + "status": { + "using": "\u4f7f\u7528\u4e2d", + "used": "\u4f7f\u7528\u6e08\u307f" + }, + "actions": { + "copy": { + "button": "\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc", + "success": "\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f\uff01" + } + }, + "feedback": { + "positive": "\u5f79\u306b\u7acb\u3063\u305f", + "negative": "\u5f79\u306b\u7acb\u305f\u306a\u304b\u3063\u305f", + "edit": "\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u7de8\u96c6", + "dialog": { + "title": "\u30b3\u30e1\u30f3\u30c8\u3092\u8ffd\u52a0", + "submit": "\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u9001\u4fe1", + "yourFeedback": "\u3042\u306a\u305f\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af..." + }, + "status": { + "updating": "\u66f4\u65b0\u4e2d", + "updated": "\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f" + } + } + }, + "history": { + "title": "\u6700\u8fd1\u306e\u5165\u529b", + "empty": "\u4f55\u3082\u3042\u308a\u307e\u305b\u3093...", + "show": "\u5c65\u6b74\u3092\u8868\u793a" + }, + "settings": { + "title": "\u8a2d\u5b9a\u30d1\u30cd\u30eb", + "customize": "\u3053\u3053\u3067\u30c1\u30e3\u30c3\u30c8\u8a2d\u5b9a\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u307e\u3059" + }, + "watermark": "\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb\u306f\u9593\u9055\u3044\u3092\u72af\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u91cd\u8981\u306a\u60c5\u5831\u306b\u3064\u3044\u3066\u306f\u78ba\u8a8d\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002" + }, + "threadHistory": { + "sidebar": { + "title": "\u904e\u53bb\u306e\u30c1\u30e3\u30c3\u30c8", + "filters": { + "search": "\u691c\u7d22", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u4eca\u65e5", + "yesterday": "\u6628\u65e5", + "previous7days": "\u904e\u53bb7\u65e5\u9593", + "previous30days": "\u904e\u53bb30\u65e5\u9593" + }, + "empty": "\u30b9\u30ec\u30c3\u30c9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093", + "actions": { + "close": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u9589\u3058\u308b", + "open": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u958b\u304f" + } + }, + "thread": { + "untitled": "\u7121\u984c\u306e\u4f1a\u8a71", + "menu": { + "rename": "\u540d\u524d\u3092\u5909\u66f4", + "share": "\u5171\u6709", + "delete": "\u524a\u9664" + }, + "actions": { + "share": { + "title": "\u30c1\u30e3\u30c3\u30c8\u306e\u30ea\u30f3\u30af\u3092\u5171\u6709", + "button": "\u5171\u6709", + "status": { + "copied": "\u30ea\u30f3\u30af\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f", + "created": "\u5171\u6709\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff01", + "unshared": "\u3053\u306e\u30b9\u30ec\u30c3\u30c9\u306e\u5171\u6709\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f" + }, + "error": { + "create": "\u5171\u6709\u30ea\u30f3\u30af\u306e\u4f5c\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f", + "unshare": "\u30b9\u30ec\u30c3\u30c9\u306e\u5171\u6709\u89e3\u9664\u306b\u5931\u6557\u3057\u307e\u3057\u305f" + } + }, + "delete": { + "title": "\u524a\u9664\u306e\u78ba\u8a8d", + "description": "\u3053\u306e\u30b9\u30ec\u30c3\u30c9\u3068\u305d\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3001\u8981\u7d20\u304c\u524a\u9664\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u64cd\u4f5c\u306f\u53d6\u308a\u6d88\u305b\u307e\u305b\u3093", + "success": "\u30c1\u30e3\u30c3\u30c8\u3092\u524a\u9664\u3057\u307e\u3057\u305f", + "inProgress": "\u30c1\u30e3\u30c3\u30c8\u3092\u524a\u9664\u4e2d" + }, + "rename": { + "title": "\u30b9\u30ec\u30c3\u30c9\u306e\u540d\u524d\u3092\u5909\u66f4", + "description": "\u3053\u306e\u30b9\u30ec\u30c3\u30c9\u306e\u65b0\u3057\u3044\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044", + "form": { + "name": { + "label": "\u540d\u524d", + "placeholder": "\u65b0\u3057\u3044\u540d\u524d\u3092\u5165\u529b" + } + }, + "success": "\u30b9\u30ec\u30c3\u30c9\u540d\u3092\u5909\u66f4\u3057\u307e\u3057\u305f\uff01", + "inProgress": "\u30b9\u30ec\u30c3\u30c9\u540d\u3092\u5909\u66f4\u4e2d" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u30c1\u30e3\u30c3\u30c8", + "readme": "\u8aac\u660e\u66f8", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u65b0\u898f\u30c1\u30e3\u30c3\u30c8", + "dialog": { + "title": "\u65b0\u898f\u30c1\u30e3\u30c3\u30c8\u306e\u4f5c\u6210", + "description": "\u73fe\u5728\u306e\u30c1\u30e3\u30c3\u30c8\u5c65\u6b74\u304c\u30af\u30ea\u30a2\u3055\u308c\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f", + "tooltip": "\u65b0\u898f\u30c1\u30e3\u30c3\u30c8" + } + }, + "user": { + "menu": { + "settings": "\u8a2d\u5b9a", + "settingsKey": "S", + "apiKeys": "API\u30ad\u30fc", + "logout": "\u30ed\u30b0\u30a2\u30a6\u30c8" + } + } + }, + "apiKeys": { + "title": "\u5fc5\u8981\u306aAPI\u30ad\u30fc", + "description": "\u3053\u306e\u30a2\u30d7\u30ea\u3092\u4f7f\u7528\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306eAPI\u30ad\u30fc\u304c\u5fc5\u8981\u3067\u3059\u3002\u30ad\u30fc\u306f\u304a\u4f7f\u3044\u306e\u30c7\u30d0\u30a4\u30b9\u306e\u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002", + "success": { + "saved": "\u4fdd\u5b58\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u9078\u629e..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/kn.json b/.chainlit/translations/kn.json new file mode 100755 index 00000000..07427577 --- /dev/null +++ b/.chainlit/translations/kn.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0cae\u0cbe\u0ca1\u0cbf", + "confirm": "\u0ca6\u0cc3\u0ca2\u0cc0\u0c95\u0cb0\u0cbf\u0cb8\u0cbf", + "continue": "\u0cae\u0cc1\u0c82\u0ca6\u0cc1\u0cb5\u0cb0\u0cbf\u0cb8\u0cbf", + "goBack": "\u0cb9\u0cbf\u0c82\u0ca6\u0cc6 \u0cb9\u0ccb\u0c97\u0cbf", + "reset": "\u0cae\u0cb0\u0cc1\u0cb9\u0cca\u0c82\u0ca6\u0cbf\u0cb8\u0cbf", + "submit": "\u0cb8\u0cb2\u0ccd\u0cb2\u0cbf\u0cb8\u0cbf" + }, + "status": { + "loading": "\u0cb2\u0ccb\u0ca1\u0ccd \u0c86\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0ca6\u0cc6...", + "error": { + "default": "\u0ca6\u0ccb\u0cb7 \u0cb8\u0c82\u0cad\u0cb5\u0cbf\u0cb8\u0cbf\u0ca6\u0cc6", + "serverConnection": "\u0cb8\u0cb0\u0ccd\u0cb5\u0cb0\u0ccd\u200c \u0c85\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca4\u0cb2\u0cc1\u0caa\u0cb2\u0cc1 \u0cb8\u0cbe\u0ca7\u0ccd\u0caf\u0cb5\u0cbe\u0c97\u0cb2\u0cbf\u0cb2\u0ccd\u0cb2" + } + } + }, + "auth": { + "login": { + "title": "\u0c85\u0caa\u0ccd\u0cb2\u0cbf\u0c95\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0c97\u0cc6 \u0caa\u0ccd\u0cb0\u0cb5\u0cc7\u0cb6\u0cbf\u0cb8\u0cb2\u0cc1 \u0cb2\u0cbe\u0c97\u0cbf\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf", + "form": { + "email": { + "label": "\u0c87\u0cae\u0cc7\u0cb2\u0ccd \u0cb5\u0cbf\u0cb3\u0cbe\u0cb8", + "required": "\u0c87\u0cae\u0cc7\u0cb2\u0ccd \u0c85\u0c97\u0ca4\u0ccd\u0caf\u0cb5\u0cbf\u0cb0\u0cc1\u0cb5 \u0c95\u0ccd\u0cb7\u0cc7\u0ca4\u0ccd\u0cb0", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u0caa\u0cbe\u0cb8\u0ccd\u200c\u0cb5\u0cb0\u0ccd\u0ca1\u0ccd", + "required": "\u0caa\u0cbe\u0cb8\u0ccd\u200c\u0cb5\u0cb0\u0ccd\u0ca1\u0ccd \u0c85\u0c97\u0ca4\u0ccd\u0caf\u0cb5\u0cbf\u0cb0\u0cc1\u0cb5 \u0c95\u0ccd\u0cb7\u0cc7\u0ca4\u0ccd\u0cb0" + }, + "actions": { + "signin": "\u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf" + }, + "alternativeText": { + "or": "\u0c85\u0ca5\u0cb5\u0cbe" + } + }, + "errors": { + "default": "\u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0cb8\u0cbe\u0ca7\u0ccd\u0caf\u0cb5\u0cbe\u0c97\u0cb2\u0cbf\u0cb2\u0ccd\u0cb2", + "signin": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "oauthSignin": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "redirectUriMismatch": "\u0cb0\u0cc0\u0ca1\u0cc8\u0cb0\u0cc6\u0c95\u0ccd\u0c9f\u0ccd URI \u0c93\u0ca5\u0ccd \u0c85\u0caa\u0ccd\u0cb2\u0cbf\u0c95\u0cc7\u0cb6\u0ca8\u0ccd \u0c95\u0cbe\u0ca8\u0ccd\u0cab\u0cbf\u0c97\u0cb0\u0cc7\u0cb6\u0ca8\u0ccd\u200c\u0c97\u0cc6 \u0cb9\u0cca\u0c82\u0ca6\u0cbf\u0c95\u0cc6\u0caf\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0cb2\u0ccd\u0cb2", + "oauthCallback": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "oauthCreateAccount": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "emailCreateAccount": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "callback": "\u0cac\u0cc7\u0cb0\u0cc6 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0caa\u0ccd\u0cb0\u0caf\u0ca4\u0ccd\u0ca8\u0cbf\u0cb8\u0cbf", + "oauthAccountNotLinked": "\u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0c97\u0cc1\u0cb0\u0cc1\u0ca4\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca6\u0cc3\u0ca2\u0cc0\u0c95\u0cb0\u0cbf\u0cb8\u0cb2\u0cc1, \u0ca8\u0cc0\u0cb5\u0cc1 \u0cae\u0cca\u0ca6\u0cb2\u0cc1 \u0cac\u0cb3\u0cb8\u0cbf\u0ca6 \u0c85\u0ca6\u0cc7 \u0c96\u0cbe\u0ca4\u0cc6\u0caf\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf", + "emailSignin": "\u0c87\u0cae\u0cc7\u0cb2\u0ccd \u0c95\u0cb3\u0cc1\u0cb9\u0cbf\u0cb8\u0cb2\u0cc1 \u0cb8\u0cbe\u0ca7\u0ccd\u0caf\u0cb5\u0cbe\u0c97\u0cb2\u0cbf\u0cb2\u0ccd\u0cb2", + "emailVerify": "\u0ca6\u0caf\u0cb5\u0cbf\u0c9f\u0ccd\u0c9f\u0cc1 \u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0c87\u0cae\u0cc7\u0cb2\u0ccd \u0caa\u0cb0\u0cbf\u0cb6\u0cc0\u0cb2\u0cbf\u0cb8\u0cbf, \u0cb9\u0cca\u0cb8 \u0c87\u0cae\u0cc7\u0cb2\u0ccd \u0c95\u0cb3\u0cc1\u0cb9\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "credentialsSignin": "\u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cb5\u0cbf\u0cab\u0cb2\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6. \u0ca8\u0cc0\u0cb5\u0cc1 \u0c92\u0ca6\u0c97\u0cbf\u0cb8\u0cbf\u0ca6 \u0cb5\u0cbf\u0cb5\u0cb0\u0c97\u0cb3\u0cc1 \u0cb8\u0cb0\u0cbf\u0caf\u0cbe\u0c97\u0cbf\u0cb5\u0cc6\u0caf\u0cc7 \u0c8e\u0c82\u0ca6\u0cc1 \u0caa\u0cb0\u0cbf\u0cb6\u0cc0\u0cb2\u0cbf\u0cb8\u0cbf", + "sessionRequired": "\u0c88 \u0caa\u0cc1\u0c9f\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0caa\u0ccd\u0cb0\u0cb5\u0cc7\u0cb6\u0cbf\u0cb8\u0cb2\u0cc1 \u0ca6\u0caf\u0cb5\u0cbf\u0c9f\u0ccd\u0c9f\u0cc1 \u0cb8\u0cc8\u0ca8\u0ccd \u0c87\u0ca8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf" + } + }, + "provider": { + "continue": "{{provider}} \u0ca8\u0cca\u0c82\u0ca6\u0cbf\u0c97\u0cc6 \u0cae\u0cc1\u0c82\u0ca6\u0cc1\u0cb5\u0cb0\u0cbf\u0cb8\u0cbf" + } + }, + "chat": { + "input": { + "placeholder": "\u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0c87\u0cb2\u0ccd\u0cb2\u0cbf \u0c9f\u0cc8\u0caa\u0ccd \u0cae\u0cbe\u0ca1\u0cbf...", + "actions": { + "send": "\u0cb8\u0c82\u0ca6\u0cc7\u0cb6 \u0c95\u0cb3\u0cc1\u0cb9\u0cbf\u0cb8\u0cbf", + "stop": "\u0c95\u0cbe\u0cb0\u0ccd\u0caf \u0ca8\u0cbf\u0cb2\u0ccd\u0cb2\u0cbf\u0cb8\u0cbf", + "attachFiles": "\u0cab\u0cc8\u0cb2\u0ccd\u200c\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0cb2\u0c97\u0ca4\u0ccd\u0ca4\u0cbf\u0cb8\u0cbf" + } + }, + "commands": { + "button": "\u0c89\u0caa\u0c95\u0cb0\u0ca3\u0c97\u0cb3\u0cc1", + "changeTool": "\u0c89\u0caa\u0c95\u0cb0\u0ca3\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0cac\u0ca6\u0cb2\u0cbf\u0cb8\u0cbf", + "availableTools": "\u0cb2\u0cad\u0ccd\u0caf\u0cb5\u0cbf\u0cb0\u0cc1\u0cb5 \u0c89\u0caa\u0c95\u0cb0\u0ca3\u0c97\u0cb3\u0cc1" + }, + "speech": { + "start": "\u0cb0\u0cc6\u0c95\u0cbe\u0cb0\u0ccd\u0ca1\u0cbf\u0c82\u0c97\u0ccd \u0caa\u0ccd\u0cb0\u0cbe\u0cb0\u0c82\u0cad\u0cbf\u0cb8\u0cbf", + "stop": "\u0cb0\u0cc6\u0c95\u0cbe\u0cb0\u0ccd\u0ca1\u0cbf\u0c82\u0c97\u0ccd \u0ca8\u0cbf\u0cb2\u0ccd\u0cb2\u0cbf\u0cb8\u0cbf", + "connecting": "\u0cb8\u0c82\u0caa\u0cb0\u0ccd\u0c95\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0ca6\u0cc6" + }, + "fileUpload": { + "dragDrop": "\u0cab\u0cc8\u0cb2\u0ccd\u200c\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0c87\u0cb2\u0ccd\u0cb2\u0cbf \u0c8e\u0cb3\u0cc6\u0ca6\u0cc1 \u0cac\u0cbf\u0ca1\u0cbf", + "browse": "\u0cab\u0cc8\u0cb2\u0ccd\u200c\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0cac\u0ccd\u0cb0\u0ccc\u0cb8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf", + "sizeLimit": "\u0cae\u0cbf\u0ca4\u0cbf:", + "errors": { + "failed": "\u0c85\u0caa\u0ccd\u200c\u0cb2\u0ccb\u0ca1\u0ccd \u0cb5\u0cbf\u0cab\u0cb2\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "cancelled": "\u0c85\u0caa\u0ccd\u200c\u0cb2\u0ccb\u0ca1\u0ccd \u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + }, + "actions": { + "cancelUpload": "\u0c85\u0caa\u0ccd\u200c\u0cb2\u0ccb\u0ca1\u0ccd \u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cbf", + "removeAttachment": "\u0c85\u0c9f\u0ccd\u0caf\u0cbe\u0c9a\u0ccd\u200c\u0cae\u0cc6\u0c82\u0c9f\u0ccd \u0c85\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca4\u0cc6\u0c97\u0cc6\u0ca6\u0cc1\u0cb9\u0cbe\u0c95\u0cbf" + } + }, + "messages": { + "status": { + "using": "\u0cac\u0cb3\u0cb8\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0cb0\u0cc1\u0cb5\u0cc1\u0ca6\u0cc1", + "used": "\u0cac\u0cb3\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + }, + "actions": { + "copy": { + "button": "\u0c95\u0ccd\u0cb2\u0cbf\u0caa\u0ccd\u200c\u0cac\u0ccb\u0cb0\u0ccd\u0ca1\u0ccd\u200c\u0c97\u0cc6 \u0ca8\u0c95\u0cb2\u0cbf\u0cb8\u0cbf", + "success": "\u0ca8\u0c95\u0cb2\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6!" + } + }, + "feedback": { + "positive": "\u0cb8\u0cb9\u0cbe\u0caf\u0c95\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "negative": "\u0cb8\u0cb9\u0cbe\u0caf\u0c95\u0cb5\u0cbe\u0c97\u0cbf\u0cb2\u0ccd\u0cb2", + "edit": "\u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0cc6 \u0cb8\u0c82\u0caa\u0cbe\u0ca6\u0cbf\u0cb8\u0cbf", + "dialog": { + "title": "\u0c95\u0cbe\u0cae\u0cc6\u0c82\u0c9f\u0ccd \u0cb8\u0cc7\u0cb0\u0cbf\u0cb8\u0cbf", + "submit": "\u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0cc6 \u0cb8\u0cb2\u0ccd\u0cb2\u0cbf\u0cb8\u0cbf", + "yourFeedback": "\u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0cc6..." + }, + "status": { + "updating": "\u0ca8\u0cb5\u0cc0\u0c95\u0cb0\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0ca6\u0cc6", + "updated": "\u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0cc6 \u0ca8\u0cb5\u0cc0\u0c95\u0cb0\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + } + } + }, + "history": { + "title": "\u0c95\u0cca\u0ca8\u0cc6\u0caf \u0c87\u0ca8\u0ccd\u200c\u0caa\u0cc1\u0c9f\u0ccd\u200c\u0c97\u0cb3\u0cc1", + "empty": "\u0c96\u0cbe\u0cb2\u0cbf\u0caf\u0cbe\u0c97\u0cbf\u0ca6\u0cc6...", + "show": "\u0c87\u0ca4\u0cbf\u0cb9\u0cbe\u0cb8 \u0ca4\u0ccb\u0cb0\u0cbf\u0cb8\u0cbf" + }, + "settings": { + "title": "\u0cb8\u0cc6\u0c9f\u0ccd\u0c9f\u0cbf\u0c82\u0c97\u0ccd\u200c\u0c97\u0cb3 \u0caa\u0ccd\u0caf\u0cbe\u0ca8\u0cc6\u0cb2\u0ccd", + "customize": "\u0c88\u0c97 \u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0c9a\u0cbe\u0c9f\u0ccd \u0cb8\u0cc6\u0c9f\u0ccd\u0c9f\u0cbf\u0c82\u0c97\u0ccd\u200c\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0c95\u0cb8\u0ccd\u0c9f\u0cae\u0cc8\u0cb8\u0ccd \u0cae\u0cbe\u0ca1\u0cbf" + }, + "watermark": "LLM \u0c97\u0cb3\u0cc1 \u0ca4\u0caa\u0ccd\u0caa\u0cc1\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0cae\u0cbe\u0ca1\u0cac\u0cb9\u0cc1\u0ca6\u0cc1. \u0caa\u0ccd\u0cb0\u0cae\u0cc1\u0c96 \u0cae\u0cbe\u0cb9\u0cbf\u0ca4\u0cbf\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0caa\u0cb0\u0cbf\u0cb6\u0cc0\u0cb2\u0cbf\u0cb8\u0cc1\u0cb5\u0cc1\u0ca6\u0ca8\u0ccd\u0ca8\u0cc1 \u0caa\u0cb0\u0cbf\u0c97\u0ca3\u0cbf\u0cb8\u0cbf." + }, + "threadHistory": { + "sidebar": { + "title": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0c97\u0cb3\u0cc1", + "filters": { + "search": "\u0cb9\u0cc1\u0ca1\u0cc1\u0c95\u0cbf", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0c87\u0c82\u0ca6\u0cc1", + "yesterday": "\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6", + "previous7days": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8 7 \u0ca6\u0cbf\u0ca8\u0c97\u0cb3\u0cc1", + "previous30days": "\u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8 30 \u0ca6\u0cbf\u0ca8\u0c97\u0cb3\u0cc1" + }, + "empty": "\u0caf\u0cbe\u0cb5\u0cc1\u0ca6\u0cc7 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0c97\u0cb3\u0cc1 \u0c95\u0c82\u0ca1\u0cc1\u0cac\u0c82\u0ca6\u0cbf\u0cb2\u0ccd\u0cb2", + "actions": { + "close": "\u0caa\u0c95\u0ccd\u0c95\u0ca6 \u0caa\u0c9f\u0ccd\u0c9f\u0cbf \u0cae\u0cc1\u0c9a\u0ccd\u0c9a\u0cbf", + "open": "\u0caa\u0c95\u0ccd\u0c95\u0ca6 \u0caa\u0c9f\u0ccd\u0c9f\u0cbf \u0ca4\u0cc6\u0cb0\u0cc6\u0caf\u0cbf\u0cb0\u0cbf" + } + }, + "thread": { + "untitled": "\u0cb6\u0cc0\u0cb0\u0ccd\u0cb7\u0cbf\u0c95\u0cc6\u0cb0\u0cb9\u0cbf\u0ca4 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6", + "menu": { + "rename": "\u0cae\u0cb0\u0cc1\u0cb9\u0cc6\u0cb8\u0cb0\u0cbf\u0cb8\u0cbf", + "share": "\u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cca\u0cb3\u0ccd\u0cb3\u0cbf", + "delete": "\u0c85\u0cb3\u0cbf\u0cb8\u0cbf" + }, + "actions": { + "share": { + "title": "\u0c9a\u0cbe\u0c9f\u0ccd\u200c\u0c97\u0cc6 \u0cb2\u0cbf\u0c82\u0c95\u0ccd \u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cca\u0cb3\u0ccd\u0cb3\u0cbf", + "button": "\u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cca\u0cb3\u0ccd\u0cb3\u0cbf", + "status": { + "copied": "\u0cb2\u0cbf\u0c82\u0c95\u0ccd \u0caa\u0ccd\u0cb0\u0ca4\u0cbf\u0cb2\u0cbf\u0caa\u0cbf \u0cae\u0cbe\u0ca1\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "created": "\u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cc6\u0caf \u0cb2\u0cbf\u0c82\u0c95\u0ccd \u0cb0\u0c9a\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6!", + "unshared": "\u0c88 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0c97\u0cc6 \u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cc6 \u0ca8\u0cbf\u0cb7\u0ccd\u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + }, + "error": { + "create": "\u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cc6\u0caf \u0cb2\u0cbf\u0c82\u0c95\u0ccd \u0cb0\u0c9a\u0cbf\u0cb8\u0cb2\u0cc1 \u0cb5\u0cbf\u0cab\u0cb2\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "unshare": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6 \u0cb9\u0c82\u0c9a\u0cbf\u0c95\u0cc6\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0cb0\u0ca6\u0ccd\u0ca6\u0cc1 \u0cae\u0cbe\u0ca1\u0cb2\u0cc1 \u0cb5\u0cbf\u0cab\u0cb2\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + } + }, + "delete": { + "title": "\u0c85\u0cb3\u0cbf\u0cb8\u0cc1\u0cb5\u0cbf\u0c95\u0cc6\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca6\u0cc3\u0ca2\u0cc0\u0c95\u0cb0\u0cbf\u0cb8\u0cbf", + "description": "\u0c87\u0ca6\u0cc1 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0cb9\u0cbe\u0c97\u0cc2 \u0c85\u0ca6\u0cb0 \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0c97\u0cb3\u0cc1 \u0cae\u0ca4\u0ccd\u0ca4\u0cc1 \u0c85\u0c82\u0cb6\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0c85\u0cb3\u0cbf\u0cb8\u0cc1\u0ca4\u0ccd\u0ca4\u0ca6\u0cc6. \u0c88 \u0c95\u0ccd\u0cb0\u0cbf\u0caf\u0cc6\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0cb0\u0ca6\u0ccd\u0ca6\u0cc1\u0c97\u0cca\u0cb3\u0cbf\u0cb8\u0cb2\u0cc1 \u0cb8\u0cbe\u0ca7\u0ccd\u0caf\u0cb5\u0cbf\u0cb2\u0ccd\u0cb2", + "success": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6 \u0c85\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6", + "inProgress": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6 \u0c85\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0ca6\u0cc6" + }, + "rename": { + "title": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0caf \u0cb9\u0cc6\u0cb8\u0cb0\u0cc1 \u0cac\u0ca6\u0cb2\u0cbe\u0caf\u0cbf\u0cb8\u0cbf", + "description": "\u0c88 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0c97\u0cc6 \u0cb9\u0cca\u0cb8 \u0cb9\u0cc6\u0cb8\u0cb0\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca8\u0cae\u0cc2\u0ca6\u0cbf\u0cb8\u0cbf", + "form": { + "name": { + "label": "\u0cb9\u0cc6\u0cb8\u0cb0\u0cc1", + "placeholder": "\u0cb9\u0cca\u0cb8 \u0cb9\u0cc6\u0cb8\u0cb0\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca8\u0cae\u0cc2\u0ca6\u0cbf\u0cb8\u0cbf" + } + }, + "success": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0caf \u0cb9\u0cc6\u0cb8\u0cb0\u0cc1 \u0cac\u0ca6\u0cb2\u0cbe\u0caf\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6!", + "inProgress": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0caf \u0cb9\u0cc6\u0cb8\u0cb0\u0cc1 \u0cac\u0ca6\u0cb2\u0cbe\u0caf\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0cbf\u0ca6\u0cc6" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6", + "readme": "\u0c93\u0ca6\u0cbf", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0cb9\u0cca\u0cb8 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6", + "dialog": { + "title": "\u0cb9\u0cca\u0cb8 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6 \u0cb0\u0c9a\u0cbf\u0cb8\u0cbf", + "description": "\u0c87\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0caa\u0ccd\u0cb0\u0cb8\u0ccd\u0ca4\u0cc1\u0ca4 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6\u0caf \u0c87\u0ca4\u0cbf\u0cb9\u0cbe\u0cb8\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0c85\u0cb3\u0cbf\u0cb8\u0cc1\u0ca4\u0ccd\u0ca4\u0ca6\u0cc6. \u0ca8\u0cc0\u0cb5\u0cc1 \u0cae\u0cc1\u0c82\u0ca6\u0cc1\u0cb5\u0cb0\u0cc6\u0caf\u0cb2\u0cc1 \u0cac\u0caf\u0cb8\u0cc1\u0cb5\u0cbf\u0cb0\u0cbe?", + "tooltip": "\u0cb9\u0cca\u0cb8 \u0cb8\u0c82\u0cad\u0cbe\u0cb7\u0ca3\u0cc6" + } + }, + "user": { + "menu": { + "settings": "\u0cb8\u0cc6\u0c9f\u0ccd\u0c9f\u0cbf\u0c82\u0c97\u0ccd\u200c\u0c97\u0cb3\u0cc1", + "settingsKey": "S", + "apiKeys": "API \u0c95\u0cc0\u0c97\u0cb3\u0cc1", + "logout": "\u0cb2\u0cbe\u0c97\u0ccd \u0c94\u0c9f\u0ccd" + } + } + }, + "apiKeys": { + "title": "\u0c85\u0c97\u0ca4\u0ccd\u0caf\u0cb5\u0cbf\u0cb0\u0cc1\u0cb5 API \u0c95\u0cc0\u0c97\u0cb3\u0cc1", + "description": "\u0c88 \u0c85\u0caa\u0ccd\u0cb2\u0cbf\u0c95\u0cc7\u0cb6\u0ca8\u0ccd \u0cac\u0cb3\u0cb8\u0cb2\u0cc1, \u0c88 \u0c95\u0cc6\u0cb3\u0c97\u0cbf\u0ca8 API \u0c95\u0cc0\u0c97\u0cb3\u0cc1 \u0c85\u0c97\u0ca4\u0ccd\u0caf\u0cb5\u0cbf\u0cb0\u0cc1\u0ca4\u0ccd\u0ca4\u0cb5\u0cc6. \u0c95\u0cc0\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca8\u0cbf\u0cae\u0ccd\u0cae \u0cb8\u0cbe\u0ca7\u0ca8\u0ca6 \u0cb8\u0ccd\u0ca5\u0cb3\u0cc0\u0caf \u0cb8\u0c82\u0c97\u0ccd\u0cb0\u0cb9\u0ca3\u0cc6\u0caf\u0cb2\u0ccd\u0cb2\u0cbf \u0cb8\u0c82\u0c97\u0ccd\u0cb0\u0cb9\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cc1\u0ca4\u0ccd\u0ca4\u0ca6\u0cc6.", + "success": { + "saved": "\u0caf\u0cb6\u0cb8\u0ccd\u0cb5\u0cbf\u0caf\u0cbe\u0c97\u0cbf \u0c89\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0ca6\u0cc6" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0c9a\u0cc1\u0ca8\u0cbe\u0caf\u0cbf\u0cb8\u0cbf..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/ko.json b/.chainlit/translations/ko.json new file mode 100755 index 00000000..63677760 --- /dev/null +++ b/.chainlit/translations/ko.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\ucde8\uc18c", + "confirm": "\ud655\uc778", + "continue": "\uacc4\uc18d", + "goBack": "\ub4a4\ub85c \uac00\uae30", + "reset": "\ucd08\uae30\ud654", + "submit": "\uc81c\ucd9c" + }, + "status": { + "loading": "\ub85c\ub529 \uc911...", + "error": { + "default": "\uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4", + "serverConnection": "\uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4" + } + } + }, + "auth": { + "login": { + "title": "\uc571\uc5d0 \uc811\uadfc\ud558\ub824\uba74 \ub85c\uadf8\uc778\ud558\uc138\uc694", + "form": { + "email": { + "label": "\uc774\uba54\uc77c \uc8fc\uc18c", + "required": "\uc774\uba54\uc77c\uc740 \ud544\uc218 \uc785\ub825 \ud56d\ubaa9\uc785\ub2c8\ub2e4", + "placeholder": "me@example.com" + }, + "password": { + "label": "\ube44\ubc00\ubc88\ud638", + "required": "\ube44\ubc00\ubc88\ud638\ub294 \ud544\uc218 \uc785\ub825 \ud56d\ubaa9\uc785\ub2c8\ub2e4" + }, + "actions": { + "signin": "\ub85c\uadf8\uc778" + }, + "alternativeText": { + "or": "\ub610\ub294" + } + }, + "errors": { + "default": "\ub85c\uadf8\uc778\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "signin": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "oauthSignin": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "redirectUriMismatch": "\ub9ac\ub2e4\uc774\ub809\ud2b8 URI\uac00 OAuth \uc571 \uc124\uc815\uacfc \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4", + "oauthCallback": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "oauthCreateAccount": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "emailCreateAccount": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "callback": "\ub2e4\ub978 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud574\ubcf4\uc138\uc694", + "oauthAccountNotLinked": "\uc2e0\uc6d0\uc744 \ud655\uc778\ud558\ub824\uba74 \uc6d0\ub798 \uc0ac\uc6a9\ud588\ub358 \uacc4\uc815\uc73c\ub85c \ub85c\uadf8\uc778\ud558\uc138\uc694", + "emailSignin": "\uc774\uba54\uc77c\uc744 \ubcf4\ub0bc \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "emailVerify": "\uc774\uba54\uc77c\uc744 \ud655\uc778\ud574\uc8fc\uc138\uc694. \uc0c8\ub85c\uc6b4 \uc774\uba54\uc77c\uc774 \ubc1c\uc1a1\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "credentialsSignin": "\ub85c\uadf8\uc778 \uc2e4\ud328. \uc81c\uacf5\ud55c \uc815\ubcf4\uac00 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud558\uc138\uc694", + "sessionRequired": "\uc774 \ud398\uc774\uc9c0\uc5d0 \uc811\uadfc\ud558\ub824\uba74 \ub85c\uadf8\uc778\ud574\uc8fc\uc138\uc694" + } + }, + "provider": { + "continue": "{{provider}}\ub85c \uacc4\uc18d\ud558\uae30" + } + }, + "chat": { + "input": { + "placeholder": "\uc5ec\uae30\uc5d0 \uba54\uc2dc\uc9c0\ub97c \uc785\ub825\ud558\uc138\uc694...", + "actions": { + "send": "\uba54\uc2dc\uc9c0 \ubcf4\ub0b4\uae30", + "stop": "\uc791\uc5c5 \uc911\uc9c0", + "attachFiles": "\ud30c\uc77c \ucca8\ubd80" + } + }, + "commands": { + "button": "\ub3c4\uad6c", + "changeTool": "\ub3c4\uad6c \ubcc0\uacbd", + "availableTools": "\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ub3c4\uad6c" + }, + "speech": { + "start": "\ub179\uc74c \uc2dc\uc791", + "stop": "\ub179\uc74c \uc911\uc9c0", + "connecting": "\uc5f0\uacb0 \uc911" + }, + "fileUpload": { + "dragDrop": "\uc5ec\uae30\uc5d0 \ud30c\uc77c\uc744 \ub4dc\ub798\uadf8 \uc564 \ub4dc\ub86d\ud558\uc138\uc694", + "browse": "\ud30c\uc77c \ucc3e\uc544\ubcf4\uae30", + "sizeLimit": "\uc81c\ud55c:", + "errors": { + "failed": "\uc5c5\ub85c\ub4dc \uc2e4\ud328", + "cancelled": "\uc5c5\ub85c\ub4dc \ucde8\uc18c:" + }, + "actions": { + "cancelUpload": "\uc5c5\ub85c\ub4dc \ucde8\uc18c", + "removeAttachment": "\ucca8\ubd80 \ud30c\uc77c \uc81c\uac70" + } + }, + "messages": { + "status": { + "using": "\uc0ac\uc6a9 \uc911", + "used": "\uc0ac\uc6a9\ub428" + }, + "actions": { + "copy": { + "button": "\ud074\ub9bd\ubcf4\ub4dc\ub85c \ubcf5\uc0ac", + "success": "\ubcf5\uc0ac\ub418\uc5c8\uc2b5\ub2c8\ub2e4!" + } + }, + "feedback": { + "positive": "\ub3c4\uc6c0\uc774 \ub418\uc5c8\uc74c", + "negative": "\ub3c4\uc6c0\uc774 \ub418\uc9c0 \uc54a\uc74c", + "edit": "\ud53c\ub4dc\ubc31 \uc218\uc815", + "dialog": { + "title": "\ub313\uae00 \ucd94\uac00", + "submit": "\ud53c\ub4dc\ubc31 \uc81c\ucd9c", + "yourFeedback": "\uadc0\ud558\uc758 \ud53c\ub4dc\ubc31..." + }, + "status": { + "updating": "\uc5c5\ub370\uc774\ud2b8 \uc911", + "updated": "\ud53c\ub4dc\ubc31\uc774 \uc5c5\ub370\uc774\ud2b8\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + } + } + }, + "history": { + "title": "\ucd5c\uadfc \uc785\ub825", + "empty": "\ube44\uc5b4 \uc788\uc2b5\ub2c8\ub2e4...", + "show": "\uae30\ub85d \ud45c\uc2dc" + }, + "settings": { + "title": "\uc124\uc815 \ud328\ub110", + "customize": "\uc5ec\uae30\uc5d0\uc11c \ucc44\ud305 \uc124\uc815\uc744 \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\uc138\uc694" + }, + "watermark": "LLM\uc740 \uc2e4\uc218\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc911\uc694\ud55c \uc815\ubcf4\ub294 \ud655\uc778\ud558\uc138\uc694." + }, + "threadHistory": { + "sidebar": { + "title": "\uc774\uc804 \ucc44\ud305", + "filters": { + "search": "\uac80\uc0c9", + "placeholder": "\ub300\ud654 \uac80\uc0c9..." + }, + "timeframes": { + "today": "\uc624\ub298", + "yesterday": "\uc5b4\uc81c", + "previous7days": "\uc9c0\ub09c 7\uc77c", + "previous30days": "\uc9c0\ub09c 30\uc77c" + }, + "empty": "\uc2a4\ub808\ub4dc\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "actions": { + "close": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30", + "open": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30" + } + }, + "thread": { + "untitled": "\uc81c\ubaa9 \uc5c6\ub294 \ub300\ud654", + "menu": { + "rename": "\uc774\ub984 \ubcc0\uacbd", + "share": "\uacf5\uc720", + "delete": "\uc0ad\uc81c" + }, + "actions": { + "share": { + "title": "\ucc44\ud305 \ub9c1\ud06c \uacf5\uc720", + "button": "\uacf5\uc720", + "status": { + "copied": "\ub9c1\ud06c \ubcf5\uc0ac\ub428", + "created": "\uacf5\uc720 \ub9c1\ud06c\uac00 \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4!", + "unshared": "\uc774 \uc2a4\ub808\ub4dc\uc758 \uacf5\uc720\uac00 \ube44\ud65c\uc131\ud654\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "create": "\uacf5\uc720 \ub9c1\ud06c \uc0dd\uc131 \uc2e4\ud328", + "unshare": "\uc2a4\ub808\ub4dc \uacf5\uc720 \ud574\uc81c \uc2e4\ud328" + } + }, + "delete": { + "title": "\uc0ad\uc81c \ud655\uc778", + "description": "\uc774\ub807\uac8c \ud558\uba74 \uc2a4\ub808\ub4dc\uc640 \uadf8 \uba54\uc2dc\uc9c0 \ubc0f \uc694\uc18c\uac00 \uc0ad\uc81c\ub429\ub2c8\ub2e4. \uc774 \uc791\uc5c5\uc740 \ucde8\uc18c\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4", + "success": "\ucc44\ud305\uc774 \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "inProgress": "\ucc44\ud305 \uc0ad\uc81c \uc911" + }, + "rename": { + "title": "\uc2a4\ub808\ub4dc \uc774\ub984 \ubcc0\uacbd", + "description": "\uc774 \uc2a4\ub808\ub4dc\uc758 \uc0c8 \uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694", + "form": { + "name": { + "label": "\uc774\ub984", + "placeholder": "\uc0c8 \uc774\ub984 \uc785\ub825" + } + }, + "success": "\uc2a4\ub808\ub4dc \uc774\ub984\uc774 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4!", + "inProgress": "\uc2a4\ub808\ub4dc \uc774\ub984 \ubcc0\uacbd \uc911" + } + } + } + }, + "navigation": { + "header": { + "chat": "\ucc44\ud305", + "readme": "\uc77d\uc5b4\ubcf4\uae30", + "theme": { + "light": "\ubc1d\uc740 \ud14c\ub9c8", + "dark": "\uc5b4\ub450\uc6b4 \ud14c\ub9c8", + "system": "\uc2dc\uc2a4\ud15c \ub530\ub77c\uac00\uae30" + } + }, + "newChat": { + "button": "\uc0c8 \ucc44\ud305", + "dialog": { + "title": "\uc0c8 \ucc44\ud305 \ub9cc\ub4e4\uae30", + "description": "\uc774\ub807\uac8c \ud558\uba74 \ud604\uc7ac \ucc44\ud305 \uae30\ub85d\uc774 \uc9c0\uc6cc\uc9d1\ub2c8\ub2e4. \uacc4\uc18d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "tooltip": "\uc0c8 \ucc44\ud305" + } + }, + "user": { + "menu": { + "settings": "\uc124\uc815", + "settingsKey": "S", + "apiKeys": "API \ud0a4", + "logout": "\ub85c\uadf8\uc544\uc6c3" + } + } + }, + "apiKeys": { + "title": "\ud544\uc694\ud55c API \ud0a4", + "description": "\uc774 \uc571\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ub2e4\uc74c API \ud0a4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \ud0a4\ub294 \uae30\uae30\uc758 \ub85c\uceec \uc800\uc7a5\uc18c\uc5d0 \uc800\uc7a5\ub429\ub2c8\ub2e4.", + "success": { + "saved": "\uc131\uacf5\uc801\uc73c\ub85c \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + } + }, + "alerts": { + "info": "\uc815\ubcf4", + "note": "\ucc38\uace0", + "tip": "\ud301", + "important": "\uc911\uc694", + "warning": "\uacbd\uace0", + "caution": "\uc8fc\uc758", + "debug": "\ub514\ubc84\uadf8", + "example": "\uc608\uc2dc", + "success": "\uc131\uacf5", + "help": "\ub3c4\uc6c0\ub9d0", + "idea": "\uc544\uc774\ub514\uc5b4", + "pending": "\ub300\uae30 \uc911", + "security": "\ubcf4\uc548", + "beta": "\ubca0\ud0c0", + "best-practice": "\ubaa8\ubc94 \uc0ac\ub840" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\uc120\ud0dd..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/ml.json b/.chainlit/translations/ml.json new file mode 100755 index 00000000..b5584115 --- /dev/null +++ b/.chainlit/translations/ml.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0d31\u0d26\u0d4d\u0d26\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15", + "confirm": "\u0d38\u0d4d\u0d25\u0d3f\u0d30\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "continue": "\u0d24\u0d41\u0d1f\u0d30\u0d41\u0d15", + "goBack": "\u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d46 \u0d2a\u0d4b\u0d15\u0d41\u0d15", + "reset": "\u0d2a\u0d41\u0d28\u0d03\u0d38\u0d1c\u0d4d\u0d1c\u0d2e\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15", + "submit": "\u0d38\u0d2e\u0d7c\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15" + }, + "status": { + "loading": "\u0d32\u0d4b\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d41...", + "error": { + "default": "\u0d12\u0d30\u0d41 \u0d2a\u0d3f\u0d36\u0d15\u0d4d \u0d38\u0d02\u0d2d\u0d35\u0d3f\u0d1a\u0d4d\u0d1a\u0d41", + "serverConnection": "\u0d38\u0d46\u0d7c\u0d35\u0d31\u0d41\u0d2e\u0d3e\u0d2f\u0d3f \u0d2c\u0d28\u0d4d\u0d27\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d3e\u0d7b \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d3f\u0d32\u0d4d\u0d32" + } + } + }, + "auth": { + "login": { + "title": "\u0d06\u0d2a\u0d4d\u0d2a\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d7b \u0d32\u0d4b\u0d17\u0d3f\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "form": { + "email": { + "label": "\u0d07\u0d2e\u0d46\u0d2f\u0d3f\u0d7d \u0d35\u0d3f\u0d32\u0d3e\u0d38\u0d02", + "required": "\u0d07\u0d2e\u0d46\u0d2f\u0d3f\u0d7d \u0d12\u0d30\u0d41 \u0d06\u0d35\u0d36\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f \u0d2b\u0d40\u0d7d\u0d21\u0d4d \u0d06\u0d23\u0d4d", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u0d2a\u0d3e\u0d38\u0d4d\u200c\u0d35\u0d47\u0d21\u0d4d", + "required": "\u0d2a\u0d3e\u0d38\u0d4d\u200c\u0d35\u0d47\u0d21\u0d4d \u0d12\u0d30\u0d41 \u0d06\u0d35\u0d36\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f \u0d2b\u0d40\u0d7d\u0d21\u0d4d \u0d06\u0d23\u0d4d" + }, + "actions": { + "signin": "\u0d38\u0d48\u0d7b \u0d07\u0d7b" + }, + "alternativeText": { + "or": "\u0d05\u0d32\u0d4d\u0d32\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d7d" + } + }, + "errors": { + "default": "\u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d15\u0d34\u0d3f\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d3f\u0d32\u0d4d\u0d32", + "signin": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "oauthSignin": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "redirectUriMismatch": "\u0d31\u0d40\u0d21\u0d2f\u0d31\u0d15\u0d4d\u0d1f\u0d4d URI oauth \u0d06\u0d2a\u0d4d\u0d2a\u0d4d \u0d15\u0d4b\u0d7a\u0d2b\u0d3f\u0d17\u0d31\u0d47\u0d37\u0d28\u0d41\u0d2e\u0d3e\u0d2f\u0d3f \u0d2a\u0d4a\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28\u0d3f\u0d32\u0d4d\u0d32", + "oauthCallback": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "oauthCreateAccount": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "emailCreateAccount": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "callback": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "oauthAccountNotLinked": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d35\u0d4d\u0d2f\u0d15\u0d4d\u0d24\u0d3f\u0d24\u0d4d\u0d35\u0d02 \u0d38\u0d4d\u0d25\u0d3f\u0d30\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d7b, \u0d06\u0d26\u0d4d\u0d2f\u0d02 \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a \u0d05\u0d24\u0d47 \u0d05\u0d15\u0d4d\u0d15\u0d57\u0d23\u0d4d\u0d1f\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "emailSignin": "\u0d07\u0d2e\u0d46\u0d2f\u0d3f\u0d7d \u0d05\u0d2f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d3e\u0d7b \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d3f\u0d32\u0d4d\u0d32", + "emailVerify": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d07\u0d2e\u0d46\u0d2f\u0d3f\u0d7d \u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15, \u0d12\u0d30\u0d41 \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d07\u0d2e\u0d46\u0d2f\u0d3f\u0d7d \u0d05\u0d2f\u0d1a\u0d4d\u0d1a\u0d3f\u0d1f\u0d4d\u0d1f\u0d41\u0d23\u0d4d\u0d1f\u0d4d", + "credentialsSignin": "\u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41. \u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d7e \u0d28\u0d7d\u0d15\u0d3f\u0d2f \u0d35\u0d3f\u0d35\u0d30\u0d19\u0d4d\u0d19\u0d7e \u0d36\u0d30\u0d3f\u0d2f\u0d3e\u0d23\u0d46\u0d28\u0d4d\u0d28\u0d4d \u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "sessionRequired": "\u0d08 \u0d2a\u0d47\u0d1c\u0d4d \u0d06\u0d15\u0d4d\u0d38\u0d38\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d38\u0d48\u0d7b \u0d07\u0d7b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15" + } + }, + "provider": { + "continue": "{{provider}} \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d24\u0d41\u0d1f\u0d30\u0d41\u0d15" + } + }, + "chat": { + "input": { + "placeholder": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d38\u0d28\u0d4d\u0d26\u0d47\u0d36\u0d02 \u0d07\u0d35\u0d3f\u0d1f\u0d46 \u0d1f\u0d48\u0d2a\u0d4d\u0d2a\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15...", + "actions": { + "send": "\u0d38\u0d28\u0d4d\u0d26\u0d47\u0d36\u0d02 \u0d05\u0d2f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15", + "stop": "\u0d1f\u0d3e\u0d38\u0d4d\u0d15\u0d4d \u0d28\u0d3f\u0d7c\u0d24\u0d4d\u0d24\u0d41\u0d15", + "attachFiles": "\u0d2b\u0d2f\u0d32\u0d41\u0d15\u0d7e \u0d05\u0d31\u0d4d\u0d31\u0d3e\u0d1a\u0d4d\u0d1a\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15" + } + }, + "commands": { + "button": "\u0d09\u0d2a\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e", + "changeTool": "\u0d09\u0d2a\u0d15\u0d30\u0d23\u0d02 \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15", + "availableTools": "\u0d32\u0d2d\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f \u0d09\u0d2a\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e" + }, + "speech": { + "start": "\u0d31\u0d46\u0d15\u0d4d\u0d15\u0d4b\u0d7c\u0d21\u0d3f\u0d02\u0d17\u0d4d \u0d06\u0d30\u0d02\u0d2d\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "stop": "\u0d31\u0d46\u0d15\u0d4d\u0d15\u0d4b\u0d7c\u0d21\u0d3f\u0d02\u0d17\u0d4d \u0d28\u0d3f\u0d7c\u0d24\u0d4d\u0d24\u0d41\u0d15", + "connecting": "\u0d2c\u0d28\u0d4d\u0d27\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41" + }, + "fileUpload": { + "dragDrop": "\u0d2b\u0d2f\u0d32\u0d41\u0d15\u0d7e \u0d07\u0d35\u0d3f\u0d1f\u0d46 \u0d35\u0d32\u0d3f\u0d1a\u0d4d\u0d1a\u0d3f\u0d1f\u0d41\u0d15", + "browse": "\u0d2b\u0d2f\u0d32\u0d41\u0d15\u0d7e \u0d24\u0d3f\u0d30\u0d2f\u0d41\u0d15", + "sizeLimit": "\u0d2a\u0d30\u0d3f\u0d27\u0d3f:", + "errors": { + "failed": "\u0d05\u0d2a\u0d4d\u200c\u0d32\u0d4b\u0d21\u0d4d \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41", + "cancelled": "\u0d05\u0d2a\u0d4d\u200c\u0d32\u0d4b\u0d21\u0d4d \u0d31\u0d26\u0d4d\u0d26\u0d3e\u0d15\u0d4d\u0d15\u0d3f" + }, + "actions": { + "cancelUpload": "\u0d05\u0d2a\u0d4d\u200c\u0cb2\u0d4b\u0d21\u0d4d \u0d31\u0d26\u0d4d\u0d26\u0d41\u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "removeAttachment": "\u0d05\u0d31\u0d4d\u0d31\u0d3e\u0d1a\u0d4d\u0d1a\u0d4d\u200c\u0d2e\u0d46\u0d28\u0d4d\u0d31\u0d4d \u0d28\u0d40\u0d15\u0d4d\u0d15\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15" + } + }, + "messages": { + "status": { + "using": "\u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41", + "used": "\u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d41" + }, + "actions": { + "copy": { + "button": "\u0d15\u0d4d\u0d32\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d\u0d2c\u0d4b\u0d7c\u0d21\u0d3f\u0d32\u0d47\u0d15\u0d4d\u0d15\u0d4d \u0d2a\u0d15\u0d7c\u0d24\u0d4d\u0d24\u0d41\u0d15", + "success": "\u0d2a\u0d15\u0d7c\u0d24\u0d4d\u0d24\u0d3f!" + } + }, + "feedback": { + "positive": "\u0d38\u0d39\u0d3e\u0d2f\u0d15\u0d30\u0d02", + "negative": "\u0d38\u0d39\u0d3e\u0d2f\u0d15\u0d30\u0d2e\u0d32\u0d4d\u0d32", + "edit": "\u0d2b\u0d40\u0d21\u0d4d\u0d2c\u0d3e\u0d15\u0d4d\u0d15\u0d4d \u0d0e\u0d21\u0d3f\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "dialog": { + "title": "\u0d12\u0d30\u0d41 \u0d15\u0d2e\u0d28\u0d4d\u0d31\u0d4d \u0d1a\u0d47\u0d7c\u0d15\u0d4d\u0d15\u0d41\u0d15", + "submit": "\u0d2b\u0d40\u0d21\u0d4d\u0d2c\u0d3e\u0d15\u0d4d\u0d15\u0d4d \u0d38\u0d2e\u0d7c\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "yourFeedback": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d4d\u0d30\u0d24\u0d3f\u0d15\u0d30\u0d23\u0d02..." + }, + "status": { + "updating": "\u0d05\u0d2a\u0d4d\u0d21\u0d47\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d41", + "updated": "\u0d2b\u0d40\u0d21\u0d4d\u0d2c\u0d3e\u0d15\u0d4d\u0d15\u0d4d \u0d05\u0d2a\u0d4d\u0d21\u0d47\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d41" + } + } + }, + "history": { + "title": "\u0d05\u0d35\u0d38\u0d3e\u0d28 \u0d07\u0d7b\u0d2a\u0d41\u0d1f\u0d4d\u0d1f\u0d41\u0d15\u0d7e", + "empty": "\u0d12\u0d28\u0d4d\u0d28\u0d41\u0d2e\u0d3f\u0d32\u0d4d\u0d32...", + "show": "\u0d39\u0d3f\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d31\u0d3f \u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15" + }, + "settings": { + "title": "\u0d15\u0d4d\u0d30\u0d2e\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e \u0d2a\u0d3e\u0d28\u0d7d", + "customize": "\u0d08 \u0d38\u0d2e\u0d2f\u0d02 \u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d15\u0d4d\u0d30\u0d2e\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e \u0d15\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d2e\u0d48\u0d38\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15" + }, + "watermark": "LLM \u0d15\u0d7e\u0d15\u0d4d\u0d15\u0d4d \u0d24\u0d46\u0d31\u0d4d\u0d31\u0d41\u0d15\u0d7e \u0d35\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d3e\u0d02. \u0d2a\u0d4d\u0d30\u0d27\u0d3e\u0d28\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f \u0d35\u0d3f\u0d35\u0d30\u0d19\u0d4d\u0d19\u0d7e \u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d \u0d2a\u0d30\u0d3f\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15." + }, + "threadHistory": { + "sidebar": { + "title": "\u0d2e\u0d41\u0d7b \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15\u0d7e", + "filters": { + "search": "\u0d24\u0d3f\u0d30\u0d2f\u0d41\u0d15", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0d07\u0d28\u0d4d\u0d28\u0d4d", + "yesterday": "\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46", + "previous7days": "\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e 7 \u0d26\u0d3f\u0d35\u0d38\u0d02", + "previous30days": "\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e 30 \u0d26\u0d3f\u0d35\u0d38\u0d02" + }, + "empty": "\u0d24\u0d4d\u0d30\u0d46\u0d21\u0d41\u0d15\u0d7e \u0d15\u0d23\u0d4d\u0d1f\u0d46\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3f\u0d32\u0d4d\u0d32", + "actions": { + "close": "\u0d38\u0d48\u0d21\u0d4d\u0d2c\u0d3e\u0d7c \u0d05\u0d1f\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15", + "open": "\u0d38\u0d48\u0d21\u0d4d\u0d2c\u0d3e\u0d7c \u0d24\u0d41\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d15" + } + }, + "thread": { + "untitled": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d38\u0d02\u0d2d\u0d3e\u0d37\u0d23\u0d02", + "menu": { + "rename": "\u0d2a\u0d47\u0d30\u0d4d \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15", + "share": "\u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d41\u0d15", + "delete": "\u0d21\u0d3f\u0d32\u0d40\u0d31\u0d4d\u0d31\u0d4d" + }, + "actions": { + "share": { + "title": "\u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d32\u0d47\u0d15\u0d4d\u0d15\u0d4d \u0d32\u0d3f\u0d19\u0d4d\u0d15\u0d4d \u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d41\u0d15", + "button": "\u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d41\u0d15", + "status": { + "copied": "\u0d32\u0d3f\u0d19\u0d4d\u0d15\u0d4d \u0d2a\u0d15\u0d7c\u0d24\u0d4d\u0d24\u0d3f", + "created": "\u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d7d \u0d32\u0d3f\u0d19\u0d4d\u0d15\u0d4d \u0d38\u0d43\u0d37\u0d4d\u0d1f\u0d3f\u0d1a\u0d4d\u0d1a\u0d41!", + "unshared": "\u0d08 \u0d24\u0d4d\u0d30\u0d46\u0d21\u0d3f\u0d28\u0d3e\u0d2f\u0d3f \u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d7d \u0d05\u0d2a\u0d4d\u0d30\u0d3e\u0d2a\u0d4d\u0d24\u0d2e\u0d3e\u0d15\u0d4d\u0d15\u0d3f" + }, + "error": { + "create": "\u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d7d \u0d32\u0d3f\u0d19\u0d4d\u0d15\u0d4d \u0d38\u0d43\u0d37\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d7d \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41", + "unshare": "\u0d24\u0d4d\u0d30\u0d46\u0d21\u0d4d \u0d2a\u0d19\u0d4d\u0d15\u0d3f\u0d1f\u0d7d \u0d05\u0d35\u0d38\u0d3e\u0d28\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d7d \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41" + } + }, + "delete": { + "title": "\u0d21\u0d3f\u0d32\u0d40\u0d31\u0d4d\u0d31\u0d4d \u0d38\u0d4d\u0d25\u0d3f\u0d30\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "description": "\u0d07\u0d24\u0d4d \u0d24\u0d4d\u0d30\u0d46\u0d21\u0d41\u0d02 \u0d05\u0d24\u0d3f\u0d28\u0d4d\u0d31\u0d46 \u0d38\u0d28\u0d4d\u0d26\u0d47\u0d36\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02 \u0d18\u0d1f\u0d15\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d02 \u0d21\u0d3f\u0d32\u0d40\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d02. \u0d08 \u0d2a\u0d4d\u0d30\u0d35\u0d7c\u0d24\u0d4d\u0d24\u0d3f \u0d2a\u0d34\u0d2f\u0d2a\u0d1f\u0d3f\u0d2f\u0d3e\u0d15\u0d4d\u0d15\u0d3e\u0d7b \u0d15\u0d34\u0d3f\u0d2f\u0d3f\u0d32\u0d4d\u0d32", + "success": "\u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d21\u0d3f\u0d32\u0d40\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d41", + "inProgress": "\u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d21\u0d3f\u0d32\u0d40\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d41" + }, + "rename": { + "title": "\u0d24\u0d4d\u0d30\u0d46\u0d21\u0d4d \u0d2a\u0d41\u0d28\u0d7c\u0d28\u0d3e\u0d2e\u0d15\u0d30\u0d23\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "description": "\u0d08 \u0d24\u0d4d\u0d30\u0d46\u0d21\u0d3f\u0d28\u0d4d \u0d12\u0d30\u0d41 \u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d2a\u0d47\u0d30\u0d4d \u0d28\u0d7d\u0d15\u0d41\u0d15", + "form": { + "name": { + "label": "\u0d2a\u0d47\u0d30\u0d4d", + "placeholder": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d2a\u0d47\u0d30\u0d4d \u0d28\u0d7d\u0d15\u0d41\u0d15" + } + }, + "success": "\u0d24\u0d4d\u0d30\u0d46\u0d21\u0d4d \u0d2a\u0d41\u0d28\u0d7c\u0d28\u0d3e\u0d2e\u0d15\u0d30\u0d23\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d41!", + "inProgress": "\u0d24\u0d4d\u0d30\u0d46\u0d21\u0d4d \u0d2a\u0d41\u0d28\u0d7c\u0d28\u0d3e\u0d2e\u0d15\u0d30\u0d23\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d41" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d", + "readme": "\u0d35\u0d3e\u0d2f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d", + "dialog": { + "title": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d38\u0d43\u0d37\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "description": "\u0d07\u0d24\u0d4d \u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d28\u0d3f\u0d32\u0d35\u0d3f\u0d32\u0d46 \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d39\u0d3f\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d31\u0d3f \u0d2e\u0d3e\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d02. \u0d24\u0d41\u0d1f\u0d30\u0d3e\u0d7b \u0d24\u0d3e\u0d7d\u0d2a\u0d4d\u0d2a\u0d30\u0d4d\u0d2f\u0d2e\u0d41\u0d23\u0d4d\u0d1f\u0d4b?", + "tooltip": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d4d" + } + }, + "user": { + "menu": { + "settings": "\u0d15\u0d4d\u0d30\u0d2e\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e", + "settingsKey": "S", + "apiKeys": "API \u0d15\u0d40\u0d15\u0d7e", + "logout": "\u0d32\u0d4b\u0d17\u0d4d\u0d14\u0d1f\u0d4d\u0d1f\u0d4d" + } + } + }, + "apiKeys": { + "title": "\u0d06\u0d35\u0d36\u0d4d\u0d2f\u0d2e\u0d3e\u0d2f API \u0d15\u0d40\u0d15\u0d7e", + "description": "\u0d08 \u0d06\u0d2a\u0d4d\u0d2a\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d7b, \u0d24\u0d3e\u0d34\u0d46\u0d2a\u0d4d\u0d2a\u0d31\u0d2f\u0d41\u0d28\u0d4d\u0d28 API \u0d15\u0d40\u0d15\u0d7e \u0d06\u0d35\u0d36\u0d4d\u0d2f\u0d2e\u0d3e\u0d23\u0d4d. \u0d15\u0d40\u0d15\u0d7e \u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d09\u0d2a\u0d15\u0d30\u0d23\u0d24\u0d4d\u0d24\u0d3f\u0d28\u0d4d\u0d31\u0d46 \u0d32\u0d4b\u0d15\u0d4d\u0d15\u0d7d \u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4b\u0d31\u0d47\u0d1c\u0d3f\u0d7d \u0d38\u0d02\u0d2d\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d28\u0d4d\u0d28\u0d41.", + "success": { + "saved": "\u0d35\u0d3f\u0d1c\u0d2f\u0d15\u0d30\u0d2e\u0d3e\u0d2f\u0d3f \u0d38\u0d02\u0d30\u0d15\u0d4d\u0d37\u0d3f\u0d1a\u0d4d\u0d1a\u0d41" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0d1a\u0d42\u0d23\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/mr.json b/.chainlit/translations/mr.json new file mode 100755 index 00000000..8c203a03 --- /dev/null +++ b/.chainlit/translations/mr.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u093e", + "confirm": "\u092a\u0941\u0937\u094d\u091f\u0940 \u0915\u0930\u093e", + "continue": "\u092a\u0941\u0922\u0947 \u091c\u093e", + "goBack": "\u092e\u093e\u0917\u0947 \u091c\u093e", + "reset": "\u0930\u0940\u0938\u0947\u091f \u0915\u0930\u093e", + "submit": "\u0938\u092c\u092e\u093f\u091f \u0915\u0930\u093e" + }, + "status": { + "loading": "\u0932\u094b\u0921 \u0915\u0930\u0924 \u0906\u0939\u0947...", + "error": { + "default": "\u090f\u0915 \u0924\u094d\u0930\u0941\u091f\u0940 \u0906\u0932\u0940", + "serverConnection": "\u0938\u0930\u094d\u0935\u094d\u0939\u0930\u0936\u0940 \u0915\u0928\u0947\u0915\u094d\u091f \u0939\u094b\u090a \u0936\u0915\u0932\u0947 \u0928\u093e\u0939\u0940" + } + } + }, + "auth": { + "login": { + "title": "\u0905\u0945\u092a \u0935\u093e\u092a\u0930\u0923\u094d\u092f\u093e\u0938\u093e\u0920\u0940 \u0932\u0949\u0917\u093f\u0928 \u0915\u0930\u093e", + "form": { + "email": { + "label": "\u0908\u092e\u0947\u0932 \u092a\u0924\u094d\u0924\u093e", + "required": "\u0908\u092e\u0947\u0932 \u0906\u0935\u0936\u094d\u092f\u0915 \u0906\u0939\u0947", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "required": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u0906\u0935\u0936\u094d\u092f\u0915 \u0906\u0939\u0947" + }, + "actions": { + "signin": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u093e" + }, + "alternativeText": { + "or": "\u0915\u093f\u0902\u0935\u093e" + } + }, + "errors": { + "default": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0942 \u0936\u0915\u0924 \u0928\u093e\u0939\u0940", + "signin": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "oauthSignin": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "redirectUriMismatch": "\u0930\u0940\u0921\u093e\u092f\u0930\u0947\u0915\u094d\u091f URI \u0913\u0925 \u0905\u0945\u092a \u0915\u0949\u0928\u094d\u092b\u093f\u0917\u0930\u0947\u0936\u0928\u0936\u0940 \u091c\u0941\u0933\u0924 \u0928\u093e\u0939\u0940", + "oauthCallback": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "oauthCreateAccount": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "emailCreateAccount": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "callback": "\u0935\u0947\u0917\u0933\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947 \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u0923\u094d\u092f\u093e\u091a\u093e \u092a\u094d\u0930\u092f\u0924\u094d\u0928 \u0915\u0930\u093e", + "oauthAccountNotLinked": "\u0924\u0941\u092e\u091a\u0940 \u0913\u0933\u0916 \u092a\u091f\u0935\u0923\u094d\u092f\u093e\u0938\u093e\u0920\u0940, \u092e\u0942\u0933 \u0935\u093e\u092a\u0930\u0932\u0947\u0932\u094d\u092f\u093e \u0916\u093e\u0924\u094d\u092f\u093e\u0928\u0947\u091a \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u093e", + "emailSignin": "\u0908\u092e\u0947\u0932 \u092a\u093e\u0920\u0935\u0942 \u0936\u0915\u0932\u0947 \u0928\u093e\u0939\u0940", + "emailVerify": "\u0915\u0943\u092a\u092f\u093e \u0924\u0941\u092e\u091a\u093e \u0908\u092e\u0947\u0932 \u0924\u092a\u093e\u0938\u093e, \u0928\u0935\u0940\u0928 \u0908\u092e\u0947\u0932 \u092a\u093e\u0920\u0935\u0932\u093e \u0917\u0947\u0932\u093e \u0906\u0939\u0947", + "credentialsSignin": "\u0938\u093e\u0907\u0928 \u0907\u0928 \u0905\u092f\u0936\u0938\u094d\u0935\u0940. \u0924\u0941\u092e\u094d\u0939\u0940 \u0926\u093f\u0932\u0947\u0932\u0940 \u092e\u093e\u0939\u093f\u0924\u0940 \u092f\u094b\u0917\u094d\u092f \u0906\u0939\u0947 \u0915\u093e \u0924\u0947 \u0924\u092a\u093e\u0938\u093e", + "sessionRequired": "\u092f\u093e \u092a\u0943\u0937\u094d\u0920\u093e\u0935\u0930 \u092a\u094d\u0930\u0935\u0947\u0936 \u0915\u0930\u0923\u094d\u092f\u093e\u0938\u093e\u0920\u0940 \u0915\u0943\u092a\u092f\u093e \u0938\u093e\u0907\u0928 \u0907\u0928 \u0915\u0930\u093e" + } + }, + "provider": { + "continue": "{{provider}} \u0938\u0939 \u092a\u0941\u0922\u0947 \u091c\u093e" + } + }, + "chat": { + "input": { + "placeholder": "\u0924\u0941\u092e\u091a\u093e \u0938\u0902\u0926\u0947\u0936 \u092f\u0947\u0925\u0947 \u091f\u093e\u0907\u092a \u0915\u0930\u093e...", + "actions": { + "send": "\u0938\u0902\u0926\u0947\u0936 \u092a\u093e\u0920\u0935\u093e", + "stop": "\u0915\u093e\u0930\u094d\u092f \u0925\u093e\u0902\u092c\u0935\u093e", + "attachFiles": "\u092b\u093e\u0907\u0932\u094d\u0938 \u091c\u094b\u0921\u093e" + } + }, + "speech": { + "start": "\u0930\u0947\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917 \u0938\u0941\u0930\u0942 \u0915\u0930\u093e", + "stop": "\u0930\u0947\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917 \u0925\u093e\u0902\u092c\u0935\u093e", + "connecting": "\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0924 \u0906\u0939\u0947" + }, + "commands": { + "button": "\u0938\u093e\u0927\u0928\u0947", + "changeTool": "\u0938\u093e\u0927\u0928 \u092c\u0926\u0932\u093e", + "availableTools": "\u0909\u092a\u0932\u092c\u094d\u0927 \u0938\u093e\u0927\u0928\u0947" + }, + "fileUpload": { + "dragDrop": "\u092b\u093e\u0907\u0932\u094d\u0938 \u092f\u0947\u0925\u0947 \u0921\u094d\u0930\u0945\u0917 \u0906\u0923\u093f \u0921\u094d\u0930\u0949\u092a \u0915\u0930\u093e", + "browse": "\u092b\u093e\u0907\u0932\u094d\u0938 \u092c\u094d\u0930\u093e\u0909\u091d \u0915\u0930\u093e", + "sizeLimit": "\u092e\u0930\u094d\u092f\u093e\u0926\u093e:", + "errors": { + "failed": "\u0905\u092a\u0932\u094b\u0921 \u0905\u092f\u0936\u0938\u094d\u0935\u0940", + "cancelled": "\u092f\u093e\u0902\u091a\u0947 \u0905\u092a\u0932\u094b\u0921 \u0930\u0926\u094d\u0926 \u0915\u0947\u0932\u0947" + }, + "actions": { + "cancelUpload": "\u0905\u092a\u0932\u094b\u0921 \u0930\u0926\u094d\u0926 \u0915\u0930\u093e", + "removeAttachment": "\u0905\u091f\u0945\u091a\u092e\u0947\u0902\u091f \u0915\u093e\u0922\u093e" + } + }, + "messages": { + "status": { + "using": "\u0935\u093e\u092a\u0930\u0924 \u0906\u0939\u0947", + "used": "\u0935\u093e\u092a\u0930\u0932\u0947" + }, + "actions": { + "copy": { + "button": "\u0915\u094d\u0932\u093f\u092a\u092c\u094b\u0930\u094d\u0921\u0935\u0930 \u0915\u0949\u092a\u0940 \u0915\u0930\u093e", + "success": "\u0915\u0949\u092a\u0940 \u0915\u0947\u0932\u0947!" + } + }, + "feedback": { + "positive": "\u0909\u092a\u092f\u0941\u0915\u094d\u0924", + "negative": "\u0909\u092a\u092f\u0941\u0915\u094d\u0924 \u0928\u093e\u0939\u0940", + "edit": "\u092b\u0940\u0921\u092c\u0945\u0915 \u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u093e", + "dialog": { + "title": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940 \u091c\u094b\u0921\u093e", + "submit": "\u092b\u0940\u0921\u092c\u0945\u0915 \u0938\u092c\u092e\u093f\u091f \u0915\u0930\u093e", + "yourFeedback": "\u0924\u0941\u092e\u091a\u0940 \u092a\u094d\u0930\u0924\u093f\u0915\u094d\u0930\u093f\u092f\u093e..." + }, + "status": { + "updating": "\u0905\u092a\u0921\u0947\u091f \u0915\u0930\u0924 \u0906\u0939\u0947", + "updated": "\u092b\u0940\u0921\u092c\u0945\u0915 \u0905\u092a\u0921\u0947\u091f \u0915\u0947\u0932\u0947" + } + } + }, + "history": { + "title": "\u0936\u0947\u0935\u091f\u091a\u0947 \u0907\u0928\u092a\u0941\u091f", + "empty": "\u0930\u093f\u0915\u093e\u092e\u0947 \u0906\u0939\u0947...", + "show": "\u0907\u0924\u093f\u0939\u093e\u0938 \u0926\u093e\u0916\u0935\u093e" + }, + "settings": { + "title": "\u0938\u0947\u091f\u093f\u0902\u0917\u094d\u091c \u092a\u0945\u0928\u0932", + "customize": "\u092f\u093e \u0935\u0947\u0933\u0940 \u0924\u0941\u092e\u091a\u094d\u092f\u093e \u091a\u0945\u091f \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u091c \u0915\u0938\u094d\u091f\u092e\u093e\u0907\u091d \u0915\u0930\u093e" + }, + "watermark": "LLM \u091a\u0941\u0915\u093e \u0915\u0930\u0942 \u0936\u0915\u0924\u093e\u0924. \u092e\u0939\u0924\u094d\u0924\u094d\u0935\u093e\u091a\u0940 \u092e\u093e\u0939\u093f\u0924\u0940 \u0924\u092a\u093e\u0938\u0923\u094d\u092f\u093e\u091a\u093e \u0935\u093f\u091a\u093e\u0930 \u0915\u0930\u093e." + }, + "threadHistory": { + "sidebar": { + "title": "\u092e\u093e\u0917\u0940\u0932 \u091a\u0945\u091f\u094d\u0938", + "filters": { + "search": "\u0936\u094b\u0927\u093e", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0906\u091c", + "yesterday": "\u0915\u093e\u0932", + "previous7days": "\u092e\u093e\u0917\u0940\u0932 7 \u0926\u093f\u0935\u0938", + "previous30days": "\u092e\u093e\u0917\u0940\u0932 30 \u0926\u093f\u0935\u0938" + }, + "empty": "\u0915\u094b\u0923\u0924\u0947\u0939\u0940 \u0925\u094d\u0930\u0947\u0921 \u0938\u093e\u092a\u0921\u0932\u0947 \u0928\u093e\u0939\u0940\u0924", + "actions": { + "close": "\u0938\u093e\u0907\u0921\u092c\u093e\u0930 \u092c\u0902\u0926 \u0915\u0930\u093e", + "open": "\u0938\u093e\u0907\u0921\u092c\u093e\u0930 \u0909\u0918\u0921\u093e" + } + }, + "thread": { + "untitled": "\u0936\u0940\u0930\u094d\u0937\u0915\u0935\u093f\u0930\u0939\u093f\u0924 \u0938\u0902\u092d\u093e\u0937\u0923", + "menu": { + "rename": "\u0928\u093e\u0935 \u092c\u0926\u0932\u093e", + "share": "\u0936\u0947\u0905\u0930 \u0915\u0930\u093e", + "delete": "\u0939\u091f\u0935\u093e" + }, + "actions": { + "share": { + "title": "\u091a\u0945\u091f\u091a\u093e \u0926\u0941\u0935\u093e \u0936\u0947\u0905\u0930 \u0915\u0930\u093e", + "button": "\u0936\u0947\u0905\u0930 \u0915\u0930\u093e", + "status": { + "copied": "\u0926\u0941\u0935\u093e \u0915\u0949\u092a\u0940 \u0915\u0947\u0932\u093e", + "created": "\u0936\u0947\u0905\u0930 \u0926\u0941\u0935\u093e \u0924\u092f\u093e\u0930 \u091d\u093e\u0932\u093e!", + "unshared": "\u092f\u093e \u0925\u094d\u0930\u0947\u0921\u0938\u093e\u0920\u0940 \u0936\u0947\u0905\u0930\u093f\u0902\u0917 \u0905\u0915\u094d\u0937\u092e \u0915\u0947\u0932\u0947" + }, + "error": { + "create": "\u0936\u0947\u0905\u0930 \u0926\u0941\u0935\u093e \u0924\u092f\u093e\u0930 \u0915\u0930\u0923\u094d\u092f\u093e\u0924 \u0905\u092a\u092f\u0936", + "unshare": "\u0925\u094d\u0930\u0947\u0921\u091a\u0947 \u0936\u0947\u0905\u0930\u093f\u0902\u0917 \u0925\u093e\u0902\u092c\u0935\u0923\u094d\u092f\u093e\u0924 \u0905\u092a\u092f\u0936" + } + }, + "delete": { + "title": "\u0939\u091f\u0935\u093f\u0923\u094d\u092f\u093e\u091a\u0940 \u092a\u0941\u0937\u094d\u091f\u0940 \u0915\u0930\u093e", + "description": "\u0939\u0947 \u0925\u094d\u0930\u0947\u0921 \u0906\u0923\u093f \u0924\u094d\u092f\u093e\u091a\u0947 \u0938\u0902\u0926\u0947\u0936 \u0935 \u0918\u091f\u0915 \u0939\u091f\u0935\u0947\u0932. \u0939\u0940 \u0915\u094d\u0930\u093f\u092f\u093e \u092a\u0942\u0930\u094d\u0935\u0935\u0924 \u0915\u0947\u0932\u0940 \u091c\u093e\u090a \u0936\u0915\u0924 \u0928\u093e\u0939\u0940", + "success": "\u091a\u0945\u091f \u0939\u091f\u0935\u0932\u093e", + "inProgress": "\u091a\u0945\u091f \u0939\u091f\u0935\u0924 \u0906\u0939\u0947" + }, + "rename": { + "title": "\u0925\u094d\u0930\u0947\u0921\u091a\u0947 \u0928\u093e\u0935 \u092c\u0926\u0932\u093e", + "description": "\u092f\u093e \u0925\u094d\u0930\u0947\u0921\u0938\u093e\u0920\u0940 \u0928\u0935\u0940\u0928 \u0928\u093e\u0935 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f \u0915\u0930\u093e", + "form": { + "name": { + "label": "\u0928\u093e\u0935", + "placeholder": "\u0928\u0935\u0940\u0928 \u0928\u093e\u0935 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f \u0915\u0930\u093e" + } + }, + "success": "\u0925\u094d\u0930\u0947\u0921\u091a\u0947 \u0928\u093e\u0935 \u092c\u0926\u0932\u0932\u0947!", + "inProgress": "\u0925\u094d\u0930\u0947\u0921\u091a\u0947 \u0928\u093e\u0935 \u092c\u0926\u0932\u0924 \u0906\u0939\u0947" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u091a\u0945\u091f", + "readme": "\u0935\u093e\u091a\u093e", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0928\u0935\u0940\u0928 \u091a\u0945\u091f", + "dialog": { + "title": "\u0928\u0935\u0940\u0928 \u091a\u0945\u091f \u0924\u092f\u093e\u0930 \u0915\u0930\u093e", + "description": "\u0939\u0947 \u0924\u0941\u092e\u091a\u093e \u0938\u0927\u094d\u092f\u093e\u091a\u093e \u091a\u0945\u091f \u0907\u0924\u093f\u0939\u093e\u0938 \u0938\u093e\u092b \u0915\u0930\u0947\u0932. \u0924\u0941\u092e\u094d\u0939\u093e\u0932\u093e \u0916\u093e\u0924\u094d\u0930\u0940 \u0906\u0939\u0947 \u0915\u0940 \u0924\u0941\u092e\u094d\u0939\u0940 \u092a\u0941\u0922\u0947 \u091c\u093e\u090a \u0907\u091a\u094d\u091b\u093f\u0924\u093e?", + "tooltip": "\u0928\u0935\u0940\u0928 \u091a\u0945\u091f" + } + }, + "user": { + "menu": { + "settings": "\u0938\u0947\u091f\u093f\u0902\u0917\u094d\u091c", + "settingsKey": "S", + "apiKeys": "API \u0915\u0940\u091c", + "logout": "\u0932\u0949\u0917\u0906\u0909\u091f" + } + } + }, + "apiKeys": { + "title": "\u0906\u0935\u0936\u094d\u092f\u0915 API \u0915\u0940\u091c", + "description": "\u0939\u0947 \u0905\u0945\u092a \u0935\u093e\u092a\u0930\u0923\u094d\u092f\u093e\u0938\u093e\u0920\u0940 \u0916\u093e\u0932\u0940\u0932 API \u0915\u0940\u091c \u0906\u0935\u0936\u094d\u092f\u0915 \u0906\u0939\u0947\u0924. \u0915\u0940\u091c \u0924\u0941\u092e\u091a\u094d\u092f\u093e \u0921\u093f\u0935\u094d\u0939\u093e\u0907\u0938\u091a\u094d\u092f\u093e \u0932\u094b\u0915\u0932 \u0938\u094d\u091f\u094b\u0930\u0947\u091c\u092e\u0927\u094d\u092f\u0947 \u0938\u093e\u0920\u0935\u0932\u094d\u092f\u093e \u091c\u093e\u0924\u093e\u0924.", + "success": { + "saved": "\u092f\u0936\u0938\u094d\u0935\u0940\u0930\u093f\u0924\u094d\u092f\u093e \u091c\u0924\u0928 \u0915\u0947\u0932\u0947" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u091a\u0941\u0928\u0947\u0902..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/nl.json b/.chainlit/translations/nl.json new file mode 100755 index 00000000..e128ce78 --- /dev/null +++ b/.chainlit/translations/nl.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "Annuleren", + "confirm": "Bevestigen", + "continue": "Doorgaan", + "goBack": "Terug", + "reset": "Herstellen", + "submit": "Versturen" + }, + "status": { + "loading": "Laden...", + "error": { + "default": "Er is een fout opgetreden", + "serverConnection": "Kon geen verbinding maken met de server" + } + } + }, + "auth": { + "login": { + "title": "Inloggen om toegang te krijgen tot de app", + "form": { + "email": { + "label": "E-mailadres", + "required": "e-mail is een verplicht veld", + "placeholder": "me@example.com" + }, + "password": { + "label": "Wachtwoord", + "required": "wachtwoord is een verplicht veld" + }, + "actions": { + "signin": "Inloggen" + }, + "alternativeText": { + "or": "OF" + } + }, + "errors": { + "default": "Kan niet inloggen", + "signin": "Probeer in te loggen met een ander account", + "oauthSignin": "Probeer in te loggen met een ander account", + "redirectUriMismatch": "De redirect URI komt niet overeen met de oauth app configuratie", + "oauthCallback": "Probeer in te loggen met een ander account", + "oauthCreateAccount": "Probeer in te loggen met een ander account", + "emailCreateAccount": "Probeer in te loggen met een ander account", + "callback": "Probeer in te loggen met een ander account", + "oauthAccountNotLinked": "Om je identiteit te bevestigen, log in met hetzelfde account dat je oorspronkelijk hebt gebruikt", + "emailSignin": "De e-mail kon niet worden verzonden", + "emailVerify": "Verifieer je e-mail, er is een nieuwe e-mail verzonden", + "credentialsSignin": "Inloggen mislukt. Controleer of de ingevoerde gegevens correct zijn", + "sessionRequired": "Log in om toegang te krijgen tot deze pagina" + } + }, + "provider": { + "continue": "Doorgaan met {{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "Typ hier je bericht...", + "actions": { + "send": "Bericht versturen", + "stop": "Taak stoppen", + "attachFiles": "Bestanden bijvoegen" + } + }, + "speech": { + "start": "Start opname", + "stop": "Stop opname", + "connecting": "Verbinden" + }, + "fileUpload": { + "dragDrop": "Sleep bestanden hierheen", + "browse": "Bestanden zoeken", + "sizeLimit": "Limiet:", + "errors": { + "failed": "Uploaden mislukt", + "cancelled": "Upload geannuleerd van" + }, + "actions": { + "cancelUpload": "Annuleer upload", + "removeAttachment": "Verwijder bijlage" + } + }, + "commands": { + "button": "Hulpmiddelen", + "changeTool": "Wijzig hulpmiddel", + "availableTools": "Beschikbare hulpmiddelen" + }, + "messages": { + "status": { + "using": "In gebruik", + "used": "Gebruikt" + }, + "actions": { + "copy": { + "button": "Kopi\u00ebren naar klembord", + "success": "Gekopieerd!" + } + }, + "feedback": { + "positive": "Nuttig", + "negative": "Niet nuttig", + "edit": "Feedback bewerken", + "dialog": { + "title": "Voeg een opmerking toe", + "submit": "Feedback versturen", + "yourFeedback": "Je feedback..." + }, + "status": { + "updating": "Bijwerken", + "updated": "Feedback bijgewerkt" + } + } + }, + "history": { + "title": "Laatste invoer", + "empty": "Zo leeg...", + "show": "Toon geschiedenis" + }, + "settings": { + "title": "Instellingenpaneel", + "customize": "Pas hier je chatinstellingen aan" + }, + "watermark": "LLM's kunnen fouten maken. Overweeg het controleren van belangrijke informatie." + }, + "threadHistory": { + "sidebar": { + "title": "Eerdere chats", + "filters": { + "search": "Zoeken", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "Vandaag", + "yesterday": "Gisteren", + "previous7days": "Afgelopen 7 dagen", + "previous30days": "Afgelopen 30 dagen" + }, + "empty": "Geen gesprekken gevonden", + "actions": { + "close": "Zijbalk sluiten", + "open": "Zijbalk openen" + } + }, + "thread": { + "untitled": "Naamloos gesprek", + "menu": { + "rename": "Hernoemen", + "share": "Delen", + "delete": "Verwijderen" + }, + "actions": { + "share": { + "title": "Deel link naar chat", + "button": "Delen", + "status": { + "copied": "Link gekopieerd", + "created": "Deellink gemaakt!", + "unshared": "Delen uitgeschakeld voor dit gesprek" + }, + "error": { + "create": "Aanmaken van deellink mislukt", + "unshare": "Delen van gesprek stoppen mislukt" + } + }, + "delete": { + "title": "Verwijdering bevestigen", + "description": "Dit zal het gesprek en bijbehorende berichten en elementen verwijderen. Deze actie kan niet ongedaan worden gemaakt", + "success": "Chat verwijderd", + "inProgress": "Chat verwijderen" + }, + "rename": { + "title": "Gesprek hernoemen", + "description": "Voer een nieuwe naam in voor dit gesprek", + "form": { + "name": { + "label": "Naam", + "placeholder": "Voer nieuwe naam in" + } + }, + "success": "Gesprek hernoemd!", + "inProgress": "Gesprek hernoemen" + } + } + } + }, + "navigation": { + "header": { + "chat": "Chat", + "readme": "Leesmij", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "Nieuwe chat", + "dialog": { + "title": "Nieuwe chat aanmaken", + "description": "Dit zal je huidige chatgeschiedenis wissen. Weet je zeker dat je door wilt gaan?", + "tooltip": "Nieuwe chat" + } + }, + "user": { + "menu": { + "settings": "Instellingen", + "settingsKey": "I", + "apiKeys": "API-sleutels", + "logout": "Uitloggen" + } + } + }, + "apiKeys": { + "title": "Vereiste API-sleutels", + "description": "Om deze app te gebruiken zijn de volgende API-sleutels vereist. De sleutels worden opgeslagen in de lokale opslag van je apparaat.", + "success": { + "saved": "Succesvol opgeslagen" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "Selecteer..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/ta.json b/.chainlit/translations/ta.json new file mode 100755 index 00000000..8d711479 --- /dev/null +++ b/.chainlit/translations/ta.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd", + "confirm": "\u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", + "continue": "\u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0b95", + "goBack": "\u0ba4\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bbf\u0b9a\u0bcd \u0b9a\u0bc6\u0bb2\u0bcd", + "reset": "\u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bae\u0bc8", + "submit": "\u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf" + }, + "status": { + "loading": "\u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1...", + "error": { + "default": "\u0baa\u0bbf\u0bb4\u0bc8 \u0b8f\u0bb1\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "serverConnection": "\u0b9a\u0bc7\u0bb5\u0bc8\u0baf\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b85\u0b9f\u0bc8\u0baf \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8" + } + } + }, + "auth": { + "login": { + "title": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0bbe\u0b9f\u0bcd\u0b9f\u0bc8 \u0b85\u0ba3\u0bc1\u0b95 \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf\u0bb5\u0bc1\u0bae\u0bcd", + "form": { + "email": { + "label": "\u0bae\u0bbf\u0ba9\u0bcd\u0ba9\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", + "required": "\u0bae\u0bbf\u0ba9\u0bcd\u0ba9\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 \u0baa\u0bc1\u0bb2\u0bae\u0bcd", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u0b95\u0b9f\u0bb5\u0bc1\u0b9a\u0bcd\u0b9a\u0bca\u0bb2\u0bcd", + "required": "\u0b95\u0b9f\u0bb5\u0bc1\u0b9a\u0bcd\u0b9a\u0bca\u0bb2\u0bcd \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 \u0baa\u0bc1\u0bb2\u0bae\u0bcd" + }, + "actions": { + "signin": "\u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0b95" + }, + "alternativeText": { + "or": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1" + } + }, + "errors": { + "default": "\u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", + "signin": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "oauthSignin": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "redirectUriMismatch": "\u0ba4\u0bbf\u0b9a\u0bc8\u0ba4\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bb2\u0bcd URI \u0b93\u0b86\u0ba4\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1 \u0b95\u0b9f\u0bcd\u0b9f\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b9f\u0ba9\u0bcd \u0baa\u0bca\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", + "oauthCallback": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "oauthCreateAccount": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "emailCreateAccount": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "callback": "\u0bb5\u0bc7\u0bb1\u0bc1 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf \u0bae\u0bc1\u0baf\u0bb1\u0bcd\u0b9a\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "oauthAccountNotLinked": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b85\u0b9f\u0bc8\u0baf\u0bbe\u0bb3\u0ba4\u0bcd\u0ba4\u0bc8 \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4, \u0bae\u0bc1\u0ba4\u0bb2\u0bbf\u0bb2\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf \u0b85\u0ba4\u0bc7 \u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bc1\u0b9f\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf\u0bb5\u0bc1\u0bae\u0bcd", + "emailSignin": "\u0bae\u0bbf\u0ba9\u0bcd\u0ba9\u0b9e\u0bcd\u0b9a\u0bb2\u0bc8 \u0b85\u0ba9\u0bc1\u0baa\u0bcd\u0baa \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", + "emailVerify": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bbf\u0ba9\u0bcd\u0ba9\u0b9e\u0bcd\u0b9a\u0bb2\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd, \u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0bae\u0bbf\u0ba9\u0bcd\u0ba9\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0b85\u0ba9\u0bc1\u0baa\u0bcd\u0baa\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1", + "credentialsSignin": "\u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0bb5\u0bc1 \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0b9f\u0bc8\u0ba8\u0bcd\u0ba4\u0ba4\u0bc1. \u0ba8\u0bc0\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bb5\u0bb4\u0b99\u0bcd\u0b95\u0bbf\u0baf \u0bb5\u0bbf\u0bb5\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bb0\u0bbf\u0baf\u0bbe\u0ba9\u0bb5\u0bc8 \u0b8e\u0ba9 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "sessionRequired": "\u0b87\u0ba8\u0bcd\u0ba4\u0baa\u0bcd \u0baa\u0b95\u0bcd\u0b95\u0ba4\u0bcd\u0ba4\u0bc8 \u0b85\u0ba3\u0bc1\u0b95 \u0b89\u0bb3\u0bcd\u0ba8\u0bc1\u0bb4\u0bc8\u0baf\u0bb5\u0bc1\u0bae\u0bcd" + } + }, + "provider": { + "continue": "{{provider}} \u0bae\u0bc2\u0bb2\u0bae\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bb5\u0bc1\u0bae\u0bcd" + } + }, + "chat": { + "input": { + "placeholder": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0baf\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc7 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0baf\u0bb5\u0bc1\u0bae\u0bcd...", + "actions": { + "send": "\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf \u0b85\u0ba9\u0bc1\u0baa\u0bcd\u0baa\u0bc1", + "stop": "\u0baa\u0ba3\u0bbf\u0baf\u0bc8 \u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", + "attachFiles": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b87\u0ba3\u0bc8" + } + }, + "commands": { + "button": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd", + "changeTool": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baf\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb5\u0bc1\u0bae\u0bcd", + "availableTools": "\u0b95\u0bbf\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd" + }, + "speech": { + "start": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc1 \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95\u0bc1", + "stop": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc8 \u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", + "connecting": "\u0b87\u0ba3\u0bc8\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1" + }, + "fileUpload": { + "dragDrop": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc7 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1 \u0bb5\u0bbf\u0b9f\u0bb5\u0bc1\u0bae\u0bcd", + "browse": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1", + "sizeLimit": "\u0bb5\u0bb0\u0bae\u0bcd\u0baa\u0bc1:", + "errors": { + "failed": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bae\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0b9f\u0bc8\u0ba8\u0bcd\u0ba4\u0ba4\u0bc1", + "cancelled": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bae\u0bcd \u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0baf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "actions": { + "cancelUpload": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd", + "removeAttachment": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1" + } + }, + "messages": { + "status": { + "using": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "used": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "actions": { + "copy": { + "button": "\u0b95\u0bbf\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bcb\u0bb0\u0bcd\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1", + "success": "\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1!" + } + }, + "feedback": { + "positive": "\u0baa\u0baf\u0ba9\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bbe\u0b95 \u0b87\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0ba4\u0bc1", + "negative": "\u0baa\u0baf\u0ba9\u0bc1\u0bb3\u0bcd\u0bb3\u0ba4\u0bbe\u0b95 \u0b87\u0bb2\u0bcd\u0bb2\u0bc8", + "edit": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc8 \u0ba4\u0bbf\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", + "dialog": { + "title": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc8\u0b9a\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd", + "submit": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc8 \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf", + "yourFeedback": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1..." + }, + "status": { + "updating": "\u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb1\u0ba4\u0bc1", + "updated": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1 \u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + } + } + }, + "history": { + "title": "\u0b95\u0b9f\u0bc8\u0b9a\u0bbf \u0b89\u0bb3\u0bcd\u0bb3\u0bc0\u0b9f\u0bc1\u0b95\u0bb3\u0bcd", + "empty": "\u0b95\u0bbe\u0bb2\u0bbf\u0baf\u0bbe\u0b95 \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1...", + "show": "\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bcd\u0bb1\u0bc8\u0b95\u0bcd \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1" + }, + "settings": { + "title": "\u0b85\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd \u0baa\u0bb2\u0b95\u0bae\u0bcd", + "customize": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0b85\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc7 \u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bbe\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd" + }, + "watermark": "LLM \u0b95\u0bb3\u0bcd \u0ba4\u0bb5\u0bb1\u0bc1\u0b95\u0bb3\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0baf\u0bb2\u0bbe\u0bae\u0bcd. \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bae\u0bbe\u0ba9 \u0ba4\u0b95\u0bb5\u0bb2\u0bcd\u0b95\u0bb3\u0bc8\u0b9a\u0bcd \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0ba4\u0bc8\u0b95\u0bcd \u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bca\u0bb3\u0bcd\u0bb3\u0bc1\u0b99\u0bcd\u0b95\u0bb3\u0bcd." + }, + "threadHistory": { + "sidebar": { + "title": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd\u0b95\u0bb3\u0bcd", + "filters": { + "search": "\u0ba4\u0bc7\u0b9f\u0bc1", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0b87\u0ba9\u0bcd\u0bb1\u0bc1", + "yesterday": "\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1", + "previous7days": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 7 \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd", + "previous30days": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 30 \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd" + }, + "empty": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd\u0b95\u0bb3\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8", + "actions": { + "close": "\u0baa\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bc8 \u0bae\u0bc2\u0b9f\u0bc1", + "open": "\u0baa\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bc8 \u0ba4\u0bbf\u0bb1" + } + }, + "thread": { + "untitled": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bbe\u0ba4 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd", + "menu": { + "rename": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1", + "share": "\u0baa\u0b95\u0bbf\u0bb0\u0bcd", + "delete": "\u0b85\u0bb4\u0bbf" + }, + "actions": { + "share": { + "title": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0baa\u0b95\u0bbf\u0bb0\u0bb5\u0bc1\u0bae\u0bcd", + "button": "\u0baa\u0b95\u0bbf\u0bb0\u0bcd", + "status": { + "copied": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "created": "\u0baa\u0b95\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1\u0bb5\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1!", + "unshared": "\u0b87\u0ba8\u0bcd\u0ba4 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0baa\u0b95\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1 \u0bae\u0bc1\u0b9f\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + }, + "error": { + "create": "\u0baa\u0b95\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b89\u0bb0\u0bc1\u0bb5\u0bbe\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", + "unshare": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0baa\u0b95\u0bbf\u0bb0\u0bcd\u0bb5\u0bc8 \u0ba8\u0bbf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8" + } + }, + "delete": { + "title": "\u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0ba4\u0bc8 \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", + "description": "\u0b87\u0ba4\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0ba4\u0ba9\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0b95\u0bb3\u0bcd, \u0b89\u0bb1\u0bc1\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd. \u0b87\u0ba8\u0bcd\u0ba4 \u0b9a\u0bc6\u0baf\u0bb2\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bbe\u0ba4\u0bc1", + "success": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", + "inProgress": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1" + }, + "rename": { + "title": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc8 \u0bae\u0bb1\u0bc1\u0baa\u0bc6\u0baf\u0bb0\u0bbf\u0b9f\u0bc1", + "description": "\u0b87\u0ba8\u0bcd\u0ba4 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0baa\u0bc6\u0baf\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bb5\u0bc1\u0bae\u0bcd", + "form": { + "name": { + "label": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd", + "placeholder": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0baa\u0bc6\u0baf\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bb5\u0bc1\u0bae\u0bcd" + } + }, + "success": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0bae\u0bb1\u0bc1\u0baa\u0bc6\u0baf\u0bb0\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1!", + "inProgress": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc8 \u0bae\u0bb1\u0bc1\u0baa\u0bc6\u0baf\u0bb0\u0bbf\u0b9f\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd", + "readme": "\u0baa\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd", + "dialog": { + "title": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bc8 \u0b89\u0bb0\u0bc1\u0bb5\u0bbe\u0b95\u0bcd\u0b95\u0bc1", + "description": "\u0b87\u0ba4\u0bc1 \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bcd\u0bb1\u0bc8 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd. \u0ba4\u0bca\u0b9f\u0bb0 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bb3\u0bbe?", + "tooltip": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd" + } + }, + "user": { + "menu": { + "settings": "\u0b85\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", + "settingsKey": "S", + "apiKeys": "API \u0bb5\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", + "logout": "\u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1\u0bc1" + } + } + }, + "apiKeys": { + "title": "\u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 API \u0bb5\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", + "description": "\u0b87\u0ba8\u0bcd\u0ba4 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0bbe\u0b9f\u0bcd\u0b9f\u0bc8\u0baa\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4, \u0baa\u0bbf\u0ba9\u0bcd\u0bb5\u0bb0\u0bc1\u0bae\u0bcd API \u0bb5\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd \u0ba4\u0bc7\u0bb5\u0bc8. \u0bb5\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd \u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bbe\u0ba4\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bc2\u0bb0\u0bcd \u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0b95\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.", + "success": { + "saved": "\u0bb5\u0bc6\u0bb1\u0bcd\u0bb1\u0bbf\u0b95\u0bb0\u0bae\u0bbe\u0b95 \u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0ba4\u0bc7\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/te.json b/.chainlit/translations/te.json new file mode 100755 index 00000000..f2f8a029 --- /dev/null +++ b/.chainlit/translations/te.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u0c30\u0c26\u0c4d\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "confirm": "\u0c28\u0c3f\u0c30\u0c4d\u0c27\u0c3e\u0c30\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "continue": "\u0c15\u0c4a\u0c28\u0c38\u0c3e\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "goBack": "\u0c35\u0c46\u0c28\u0c15\u0c4d\u0c15\u0c3f \u0c35\u0c46\u0c33\u0c4d\u0c33\u0c02\u0c21\u0c3f", + "reset": "\u0c30\u0c40\u0c38\u0c46\u0c1f\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "submit": "\u0c38\u0c2e\u0c30\u0c4d\u0c2a\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + }, + "status": { + "loading": "\u0c32\u0c4b\u0c21\u0c4d \u0c05\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f...", + "error": { + "default": "\u0c32\u0c4b\u0c2a\u0c02 \u0c38\u0c02\u0c2d\u0c35\u0c3f\u0c02\u0c1a\u0c3f\u0c02\u0c26\u0c3f", + "serverConnection": "\u0c38\u0c30\u0c4d\u0c35\u0c30\u0c4d\u200c\u0c28\u0c3f \u0c1a\u0c47\u0c30\u0c41\u0c15\u0c4b\u0c32\u0c47\u0c15\u0c2a\u0c4b\u0c2f\u0c3e\u0c2e\u0c41" + } + } + }, + "auth": { + "login": { + "title": "\u0c2f\u0c3e\u0c2a\u0c4d\u200c\u0c28\u0c3f \u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c02\u0c1a\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c32\u0c3e\u0c17\u0c3f\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "form": { + "email": { + "label": "\u0c07\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d \u0c1a\u0c3f\u0c30\u0c41\u0c28\u0c3e\u0c2e\u0c3e", + "required": "\u0c07\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d \u0c24\u0c2a\u0c4d\u0c2a\u0c28\u0c3f\u0c38\u0c30\u0c3f", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u0c2a\u0c3e\u0c38\u0c4d\u200c\u0c35\u0c30\u0c4d\u0c21\u0c4d", + "required": "\u0c2a\u0c3e\u0c38\u0c4d\u200c\u0c35\u0c30\u0c4d\u0c21\u0c4d \u0c24\u0c2a\u0c4d\u0c2a\u0c28\u0c3f\u0c38\u0c30\u0c3f" + }, + "actions": { + "signin": "\u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f" + }, + "alternativeText": { + "or": "\u0c32\u0c47\u0c26\u0c3e" + } + }, + "errors": { + "default": "\u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c32\u0c47\u0c15\u0c2a\u0c4b\u0c2f\u0c3e\u0c2e\u0c41", + "signin": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "oauthSignin": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "redirectUriMismatch": "\u0c30\u0c40\u0c21\u0c48\u0c30\u0c46\u0c15\u0c4d\u0c1f\u0c4d URI oauth \u0c2f\u0c3e\u0c2a\u0c4d \u0c15\u0c3e\u0c28\u0c4d\u0c2b\u0c3f\u0c17\u0c30\u0c47\u0c37\u0c28\u0c4d\u200c\u0c24\u0c4b \u0c38\u0c30\u0c3f\u0c2a\u0c4b\u0c32\u0c21\u0c02 \u0c32\u0c47\u0c26\u0c41", + "oauthCallback": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "oauthCreateAccount": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "emailCreateAccount": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "callback": "\u0c35\u0c47\u0c30\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c2a\u0c4d\u0c30\u0c2f\u0c24\u0c4d\u0c28\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "oauthAccountNotLinked": "\u0c2e\u0c40 \u0c17\u0c41\u0c30\u0c4d\u0c24\u0c3f\u0c02\u0c2a\u0c41\u0c28\u0c41 \u0c28\u0c3f\u0c30\u0c4d\u0c27\u0c3e\u0c30\u0c3f\u0c02\u0c1a\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f, \u0c2e\u0c40\u0c30\u0c41 \u0c2e\u0c4a\u0c26\u0c1f \u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c02\u0c1a\u0c3f\u0c28 \u0c05\u0c26\u0c47 \u0c16\u0c3e\u0c24\u0c3e\u0c24\u0c4b \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "emailSignin": "\u0c07\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d \u0c2a\u0c02\u0c2a\u0c21\u0c02 \u0c38\u0c3e\u0c27\u0c4d\u0c2f\u0c02 \u0c15\u0c3e\u0c32\u0c47\u0c26\u0c41", + "emailVerify": "\u0c26\u0c2f\u0c1a\u0c47\u0c38\u0c3f \u0c2e\u0c40 \u0c07\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d\u200c\u0c28\u0c3f \u0c27\u0c43\u0c35\u0c40\u0c15\u0c30\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f, \u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c07\u0c2e\u0c46\u0c2f\u0c3f\u0c32\u0c4d \u0c2a\u0c02\u0c2a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f", + "credentialsSignin": "\u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c35\u0c3f\u0c2b\u0c32\u0c2e\u0c48\u0c02\u0c26\u0c3f. \u0c2e\u0c40\u0c30\u0c41 \u0c05\u0c02\u0c26\u0c3f\u0c02\u0c1a\u0c3f\u0c28 \u0c35\u0c3f\u0c35\u0c30\u0c3e\u0c32\u0c41 \u0c38\u0c30\u0c48\u0c28\u0c35\u0c47\u0c28\u0c3e \u0c05\u0c28\u0c3f \u0c24\u0c28\u0c3f\u0c16\u0c40 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "sessionRequired": "\u0c08 \u0c2a\u0c47\u0c1c\u0c40\u0c28\u0c3f \u0c2f\u0c3e\u0c15\u0c4d\u0c38\u0c46\u0c38\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c26\u0c2f\u0c1a\u0c47\u0c38\u0c3f \u0c38\u0c48\u0c28\u0c4d \u0c07\u0c28\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f" + } + }, + "provider": { + "continue": "{{provider}}\u0c24\u0c4b \u0c15\u0c4a\u0c28\u0c38\u0c3e\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + } + }, + "chat": { + "input": { + "placeholder": "\u0c2e\u0c40 \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c07\u0c15\u0c4d\u0c15\u0c21 \u0c1f\u0c48\u0c2a\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f...", + "actions": { + "send": "\u0c38\u0c02\u0c26\u0c47\u0c36\u0c02 \u0c2a\u0c02\u0c2a\u0c02\u0c21\u0c3f", + "stop": "\u0c2a\u0c28\u0c3f \u0c06\u0c2a\u0c02\u0c21\u0c3f", + "attachFiles": "\u0c2b\u0c48\u0c32\u0c4d\u0c38\u0c4d \u0c1c\u0c4b\u0c21\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + } + }, + "speech": { + "start": "\u0c30\u0c3f\u0c15\u0c3e\u0c30\u0c4d\u0c21\u0c3f\u0c02\u0c17\u0c4d \u0c2a\u0c4d\u0c30\u0c3e\u0c30\u0c02\u0c2d\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "stop": "\u0c30\u0c3f\u0c15\u0c3e\u0c30\u0c4d\u0c21\u0c3f\u0c02\u0c17\u0c4d \u0c06\u0c2a\u0c02\u0c21\u0c3f", + "connecting": "\u0c05\u0c28\u0c41\u0c38\u0c02\u0c27\u0c3e\u0c28\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f" + }, + "commands": { + "button": "\u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c3e\u0c32\u0c41", + "changeTool": "\u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c02\u0c21\u0c3f", + "availableTools": "\u0c32\u0c2d\u0c4d\u0c2f\u0c2e\u0c48\u0c28 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c3e\u0c32\u0c41" + }, + "fileUpload": { + "dragDrop": "\u0c2b\u0c48\u0c32\u0c4d\u0c38\u0c4d\u200c\u0c28\u0c3f \u0c07\u0c15\u0c4d\u0c15\u0c21 \u0c21\u0c4d\u0c30\u0c3e\u0c17\u0c4d \u0c1a\u0c47\u0c38\u0c3f \u0c21\u0c4d\u0c30\u0c3e\u0c2a\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "browse": "\u0c2b\u0c48\u0c32\u0c4d\u0c38\u0c4d \u0c2c\u0c4d\u0c30\u0c4c\u0c1c\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "sizeLimit": "\u0c2a\u0c30\u0c3f\u0c2e\u0c3f\u0c24\u0c3f:", + "errors": { + "failed": "\u0c05\u0c2a\u0c4d\u200c\u0c32\u0c4b\u0c21\u0c4d \u0c35\u0c3f\u0c2b\u0c32\u0c2e\u0c48\u0c02\u0c26\u0c3f", + "cancelled": "\u0c05\u0c2a\u0c4d\u200c\u0c32\u0c4b\u0c21\u0c4d \u0c30\u0c26\u0c4d\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f" + }, + "actions": { + "cancelUpload": "\u0c30\u0c26\u0c4d\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "removeAttachment": "\u0c05\u0c28\u0c41\u0c2c\u0c02\u0c27\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + } + }, + "messages": { + "status": { + "using": "\u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f", + "used": "\u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c02\u0c1a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f" + }, + "actions": { + "copy": { + "button": "\u0c15\u0c4d\u0c32\u0c3f\u0c2a\u0c4d\u200c\u0c2c\u0c4b\u0c30\u0c4d\u0c21\u0c4d\u200c\u0c15\u0c3f \u0c15\u0c3e\u0c2a\u0c40 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "success": "\u0c15\u0c3e\u0c2a\u0c40 \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f!" + } + }, + "feedback": { + "positive": "\u0c38\u0c39\u0c3e\u0c2f\u0c15\u0c30\u0c02", + "negative": "\u0c38\u0c39\u0c3e\u0c2f\u0c15\u0c30\u0c02 \u0c15\u0c3e\u0c26\u0c41", + "edit": "\u0c05\u0c2d\u0c3f\u0c2a\u0c4d\u0c30\u0c3e\u0c2f\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c38\u0c35\u0c30\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "dialog": { + "title": "\u0c35\u0c4d\u0c2f\u0c3e\u0c16\u0c4d\u0c2f \u0c1c\u0c4b\u0c21\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "submit": "\u0c05\u0c2d\u0c3f\u0c2a\u0c4d\u0c30\u0c3e\u0c2f\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c38\u0c2e\u0c30\u0c4d\u0c2a\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "yourFeedback": "\u0c2e\u0c40 \u0c05\u0c2d\u0c3f\u0c2a\u0c4d\u0c30\u0c3e\u0c2f\u0c02..." + }, + "status": { + "updating": "\u0c28\u0c35\u0c40\u0c15\u0c30\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f", + "updated": "\u0c05\u0c2d\u0c3f\u0c2a\u0c4d\u0c30\u0c3e\u0c2f\u0c02 \u0c28\u0c35\u0c40\u0c15\u0c30\u0c3f\u0c02\u0c1a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f" + } + } + }, + "history": { + "title": "\u0c1a\u0c3f\u0c35\u0c30\u0c3f \u0c07\u0c28\u0c4d\u200c\u0c2a\u0c41\u0c1f\u0c4d\u200c\u0c32\u0c41", + "empty": "\u0c16\u0c3e\u0c33\u0c40\u0c17\u0c3e \u0c09\u0c02\u0c26\u0c3f...", + "show": "\u0c1a\u0c30\u0c3f\u0c24\u0c4d\u0c30\u0c28\u0c41 \u0c1a\u0c42\u0c2a\u0c3f\u0c02\u0c1a\u0c41" + }, + "settings": { + "title": "\u0c38\u0c46\u0c1f\u0c4d\u0c1f\u0c3f\u0c02\u0c17\u0c4d\u200c\u0c32 \u0c2a\u0c4d\u0c2f\u0c3e\u0c28\u0c46\u0c32\u0c4d", + "customize": "\u0c2e\u0c40 \u0c1a\u0c3e\u0c1f\u0c4d \u0c38\u0c46\u0c1f\u0c4d\u0c1f\u0c3f\u0c02\u0c17\u0c4d\u200c\u0c32\u0c28\u0c41 \u0c07\u0c15\u0c4d\u0c15\u0c21 \u0c05\u0c28\u0c41\u0c15\u0c42\u0c32\u0c40\u0c15\u0c30\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + }, + "watermark": "LLM\u0c32\u0c41 \u0c24\u0c2a\u0c4d\u0c2a\u0c41\u0c32\u0c41 \u0c1a\u0c47\u0c2f\u0c35\u0c1a\u0c4d\u0c1a\u0c41. \u0c2e\u0c41\u0c16\u0c4d\u0c2f\u0c2e\u0c48\u0c28 \u0c38\u0c2e\u0c3e\u0c1a\u0c3e\u0c30\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c24\u0c28\u0c3f\u0c16\u0c40 \u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c2a\u0c30\u0c3f\u0c17\u0c23\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f." + }, + "threadHistory": { + "sidebar": { + "title": "\u0c17\u0c24 \u0c1a\u0c3e\u0c1f\u0c4d\u200c\u0c32\u0c41", + "filters": { + "search": "\u0c35\u0c46\u0c24\u0c15\u0c02\u0c21\u0c3f", + "placeholder": "Search conversations..." + }, + "timeframes": { + "today": "\u0c08\u0c30\u0c4b\u0c1c\u0c41", + "yesterday": "\u0c28\u0c3f\u0c28\u0c4d\u0c28", + "previous7days": "\u0c17\u0c24 7 \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41", + "previous30days": "\u0c17\u0c24 30 \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41" + }, + "empty": "\u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d\u200c\u0c32\u0c41 \u0c15\u0c28\u0c41\u0c17\u0c4a\u0c28\u0c2c\u0c21\u0c32\u0c47\u0c26\u0c41", + "actions": { + "close": "\u0c38\u0c48\u0c21\u0c4d\u200c\u0c2c\u0c3e\u0c30\u0c4d \u0c2e\u0c42\u0c38\u0c3f\u0c35\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "open": "\u0c38\u0c48\u0c21\u0c4d\u200c\u0c2c\u0c3e\u0c30\u0c4d \u0c24\u0c46\u0c30\u0c35\u0c02\u0c21\u0c3f" + } + }, + "thread": { + "untitled": "\u0c2a\u0c47\u0c30\u0c41 \u0c32\u0c47\u0c28\u0c3f \u0c38\u0c02\u0c2d\u0c3e\u0c37\u0c23", + "menu": { + "rename": "\u0c2a\u0c47\u0c30\u0c41 \u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c02\u0c21\u0c3f", + "share": "\u0c37\u0c47\u0c30\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "delete": "\u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f" + }, + "actions": { + "share": { + "title": "\u0c1a\u0c3e\u0c1f\u0c4d \u0c32\u0c3f\u0c02\u0c15\u0c4d\u200c\u0c28\u0c41 \u0c37\u0c47\u0c30\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "button": "\u0c37\u0c47\u0c30\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "status": { + "copied": "\u0c32\u0c3f\u0c02\u0c15\u0c4d \u0c15\u0c3e\u0c2a\u0c40 \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f", + "created": "\u0c37\u0c47\u0c30\u0c4d \u0c32\u0c3f\u0c02\u0c15\u0c4d \u0c38\u0c43\u0c37\u0c4d\u0c1f\u0c3f\u0c02\u0c1a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f!", + "unshared": "\u0c08 \u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d\u200c\u0c15\u0c41 \u0c37\u0c47\u0c30\u0c3f\u0c02\u0c17\u0c4d \u0c06\u0c2a\u0c3f\u0c35\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f" + }, + "error": { + "create": "\u0c37\u0c47\u0c30\u0c4d \u0c32\u0c3f\u0c02\u0c15\u0c4d \u0c38\u0c43\u0c37\u0c4d\u0c1f\u0c3f\u0c02\u0c1a\u0c21\u0c02 \u0c35\u0c3f\u0c2b\u0c32\u0c2e\u0c48\u0c02\u0c26\u0c3f", + "unshare": "\u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d \u0c37\u0c47\u0c30\u0c3f\u0c02\u0c17\u0c4d \u0c28\u0c3f\u0c32\u0c3f\u0c2a\u0c3f\u0c35\u0c47\u0c2f\u0c21\u0c02 \u0c35\u0c3f\u0c2b\u0c32\u0c2e\u0c48\u0c02\u0c26\u0c3f" + } + }, + "delete": { + "title": "\u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c02\u0c2a\u0c41\u0c28\u0c41 \u0c28\u0c3f\u0c30\u0c4d\u0c27\u0c3e\u0c30\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "description": "\u0c07\u0c26\u0c3f \u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d\u200c\u0c24\u0c4b \u0c2a\u0c3e\u0c1f\u0c41 \u0c26\u0c3e\u0c28\u0c3f \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c32\u0c28\u0c41 \u0c2e\u0c30\u0c3f\u0c2f\u0c41 \u0c05\u0c02\u0c36\u0c3e\u0c32\u0c28\u0c41 \u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c38\u0c4d\u0c24\u0c41\u0c02\u0c26\u0c3f. \u0c08 \u0c1a\u0c30\u0c4d\u0c2f\u0c28\u0c41 \u0c30\u0c26\u0c4d\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c32\u0c47\u0c30\u0c41", + "success": "\u0c1a\u0c3e\u0c1f\u0c4d \u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c02\u0c1a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f", + "inProgress": "\u0c1a\u0c3e\u0c1f\u0c4d\u200c\u0c28\u0c3f \u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f" + }, + "rename": { + "title": "\u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d \u0c2a\u0c47\u0c30\u0c41 \u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c02\u0c21\u0c3f", + "description": "\u0c08 \u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d \u0c15\u0c4b\u0c38\u0c02 \u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c2a\u0c47\u0c30\u0c41\u0c28\u0c41 \u0c28\u0c2e\u0c4b\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f", + "form": { + "name": { + "label": "\u0c2a\u0c47\u0c30\u0c41", + "placeholder": "\u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c2a\u0c47\u0c30\u0c41\u0c28\u0c41 \u0c28\u0c2e\u0c4b\u0c26\u0c41 \u0c1a\u0c47\u0c2f\u0c02\u0c21\u0c3f" + } + }, + "success": "\u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d \u0c2a\u0c47\u0c30\u0c41 \u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f!", + "inProgress": "\u0c25\u0c4d\u0c30\u0c46\u0c21\u0c4d \u0c2a\u0c47\u0c30\u0c41 \u0c2e\u0c3e\u0c30\u0c41\u0c38\u0c4d\u0c24\u0c4b\u0c02\u0c26\u0c3f" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u0c1a\u0c3e\u0c1f\u0c4d", + "readme": "\u0c1a\u0c26\u0c35\u0c02\u0c21\u0c3f", + "theme": { + "light": "Light Theme", + "dark": "Dark Theme", + "system": "Follow System" + } + }, + "newChat": { + "button": "\u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c1a\u0c3e\u0c1f\u0c4d", + "dialog": { + "title": "\u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c1a\u0c3e\u0c1f\u0c4d \u0c38\u0c43\u0c37\u0c4d\u0c1f\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f", + "description": "\u0c07\u0c26\u0c3f \u0c2e\u0c40 \u0c2a\u0c4d\u0c30\u0c38\u0c4d\u0c24\u0c41\u0c24 \u0c1a\u0c3e\u0c1f\u0c4d \u0c1a\u0c30\u0c3f\u0c24\u0c4d\u0c30\u0c28\u0c41 \u0c24\u0c41\u0c21\u0c3f\u0c1a\u0c3f\u0c35\u0c47\u0c38\u0c4d\u0c24\u0c41\u0c02\u0c26\u0c3f. \u0c2e\u0c40\u0c30\u0c41 \u0c15\u0c4a\u0c28\u0c38\u0c3e\u0c17\u0c3f\u0c02\u0c1a\u0c3e\u0c32\u0c28\u0c41\u0c15\u0c41\u0c02\u0c1f\u0c41\u0c28\u0c4d\u0c28\u0c3e\u0c30\u0c3e?", + "tooltip": "\u0c15\u0c4a\u0c24\u0c4d\u0c24 \u0c1a\u0c3e\u0c1f\u0c4d" + } + }, + "user": { + "menu": { + "settings": "\u0c38\u0c46\u0c1f\u0c4d\u0c1f\u0c3f\u0c02\u0c17\u0c4d\u200c\u0c32\u0c41", + "settingsKey": "S", + "apiKeys": "API \u0c15\u0c40\u0c32\u0c41", + "logout": "\u0c32\u0c3e\u0c17\u0c4d \u0c05\u0c35\u0c41\u0c1f\u0c4d" + } + } + }, + "apiKeys": { + "title": "\u0c05\u0c35\u0c38\u0c30\u0c2e\u0c48\u0c28 API \u0c15\u0c40\u0c32\u0c41", + "description": "\u0c08 \u0c2f\u0c3e\u0c2a\u0c4d\u200c\u0c28\u0c3f \u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c02\u0c1a\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f, \u0c15\u0c3f\u0c02\u0c26\u0c3f API \u0c15\u0c40\u0c32\u0c41 \u0c05\u0c35\u0c38\u0c30\u0c02. \u0c15\u0c40\u0c32\u0c41 \u0c2e\u0c40 \u0c2a\u0c30\u0c3f\u0c15\u0c30\u0c02 \u0c2f\u0c4a\u0c15\u0c4d\u0c15 \u0c38\u0c4d\u0c25\u0c3e\u0c28\u0c3f\u0c15 \u0c28\u0c3f\u0c32\u0c4d\u0c35\u0c32\u0c4b \u0c28\u0c3f\u0c32\u0c4d\u0c35 \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c24\u0c3e\u0c2f\u0c3f.", + "success": { + "saved": "\u0c35\u0c3f\u0c1c\u0c2f\u0c35\u0c02\u0c24\u0c02\u0c17\u0c3e \u0c38\u0c47\u0c35\u0c4d \u0c1a\u0c47\u0c2f\u0c2c\u0c21\u0c3f\u0c02\u0c26\u0c3f" + } + }, + "alerts": { + "info": "Info", + "note": "Note", + "tip": "Tip", + "important": "Important", + "warning": "Warning", + "caution": "Caution", + "debug": "Debug", + "example": "Example", + "success": "Success", + "help": "Help", + "idea": "Idea", + "pending": "Pending", + "security": "Security", + "beta": "Beta", + "best-practice": "Best Practice" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u0c0e\u0c02\u0c1a\u0c41\u0c15\u0c4b\u0c02\u0c21\u0c3f..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/zh-CN.json b/.chainlit/translations/zh-CN.json new file mode 100755 index 00000000..ed3cb18c --- /dev/null +++ b/.chainlit/translations/zh-CN.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u53d6\u6d88", + "confirm": "\u786e\u8ba4", + "continue": "\u7ee7\u7eed", + "goBack": "\u8fd4\u56de", + "reset": "\u91cd\u7f6e", + "submit": "\u63d0\u4ea4" + }, + "status": { + "loading": "\u52a0\u8f7d\u4e2d...", + "error": { + "default": "\u53d1\u751f\u9519\u8bef", + "serverConnection": "\u65e0\u6cd5\u8fde\u63a5\u5230\u670d\u52a1\u5668" + } + } + }, + "auth": { + "login": { + "title": "\u767b\u5f55\u4ee5\u8bbf\u95ee\u5e94\u7528", + "form": { + "email": { + "label": "\u7535\u5b50\u90ae\u7bb1", + "required": "\u90ae\u7bb1\u662f\u5fc5\u586b\u9879", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u5bc6\u7801", + "required": "\u5bc6\u7801\u662f\u5fc5\u586b\u9879" + }, + "actions": { + "signin": "\u767b\u5f55" + }, + "alternativeText": { + "or": "\u6216" + } + }, + "errors": { + "default": "\u65e0\u6cd5\u767b\u5f55", + "signin": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "oauthSignin": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "redirectUriMismatch": "\u91cd\u5b9a\u5411URI\u4e0eOAuth\u5e94\u7528\u914d\u7f6e\u4e0d\u5339\u914d", + "oauthCallback": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "oauthCreateAccount": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "emailCreateAccount": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "callback": "\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u5176\u4ed6\u8d26\u53f7\u767b\u5f55", + "oauthAccountNotLinked": "\u4e3a\u786e\u8ba4\u60a8\u7684\u8eab\u4efd\uff0c\u8bf7\u4f7f\u7528\u539f\u59cb\u8d26\u53f7\u767b\u5f55", + "emailSignin": "\u90ae\u4ef6\u53d1\u9001\u5931\u8d25", + "emailVerify": "\u8bf7\u9a8c\u8bc1\u60a8\u7684\u90ae\u7bb1\uff0c\u65b0\u7684\u9a8c\u8bc1\u90ae\u4ef6\u5df2\u53d1\u9001", + "credentialsSignin": "\u767b\u5f55\u5931\u8d25\u3002\u8bf7\u68c0\u67e5\u60a8\u63d0\u4f9b\u7684\u4fe1\u606f\u662f\u5426\u6b63\u786e", + "sessionRequired": "\u8bf7\u767b\u5f55\u4ee5\u8bbf\u95ee\u6b64\u9875\u9762" + } + }, + "provider": { + "continue": "\u7ee7\u7eed\u4f7f\u7528{{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "\u5728\u6b64\u8f93\u5165\u60a8\u7684\u6d88\u606f...", + "actions": { + "send": "\u53d1\u9001\u6d88\u606f", + "stop": "\u505c\u6b62\u4efb\u52a1", + "attachFiles": "\u9644\u52a0\u6587\u4ef6" + } + }, + "speech": { + "start": "\u5f00\u59cb\u5f55\u97f3", + "stop": "\u505c\u6b62\u5f55\u97f3", + "connecting": "\u8fde\u63a5\u4e2d" + }, + "fileUpload": { + "dragDrop": "\u5c06\u6587\u4ef6\u62d6\u653e\u5230\u8fd9\u91cc", + "browse": "\u6d4f\u89c8\u6587\u4ef6", + "sizeLimit": "\u9650\u5236\uff1a", + "errors": { + "failed": "\u4e0a\u4f20\u5931\u8d25", + "cancelled": "\u5df2\u53d6\u6d88\u4e0a\u4f20" + }, + "actions": { + "cancelUpload": "\u53d6\u6d88\u4e0a\u4f20", + "removeAttachment": "\u79fb\u9664\u9644\u4ef6" + } + }, + "commands": { + "button": "\u5de5\u5177", + "changeTool": "\u66f4\u6362\u5de5\u5177", + "availableTools": "\u53ef\u7528\u5de5\u5177" + }, + "messages": { + "status": { + "using": "\u4f7f\u7528\u4e2d", + "used": "\u5df2\u4f7f\u7528" + }, + "actions": { + "copy": { + "button": "\u590d\u5236\u5230\u526a\u8d34\u677f", + "success": "\u5df2\u590d\u5236\uff01" + } + }, + "feedback": { + "positive": "\u6709\u5e2e\u52a9", + "negative": "\u6ca1\u6709\u5e2e\u52a9", + "edit": "\u7f16\u8f91\u53cd\u9988", + "dialog": { + "title": "\u6dfb\u52a0\u8bc4\u8bba", + "submit": "\u63d0\u4ea4\u53cd\u9988", + "yourFeedback": "\u60a8\u7684\u53cd\u9988..." + }, + "status": { + "updating": "\u66f4\u65b0\u4e2d", + "updated": "\u53cd\u9988\u5df2\u66f4\u65b0" + } + } + }, + "history": { + "title": "\u6700\u8fd1\u8f93\u5165", + "empty": "\u7a7a\u7a7a\u5982\u4e5f...", + "show": "\u663e\u793a\u5386\u53f2" + }, + "settings": { + "title": "\u8bbe\u7f6e\u9762\u677f", + "customize": "\u5728\u6b64\u81ea\u5b9a\u4e49\u60a8\u7684\u804a\u5929\u8bbe\u7f6e" + }, + "watermark": "\u5927\u8bed\u8a00\u6a21\u578b\u53ef\u80fd\u4f1a\u72af\u9519\u3002\u8bf7\u6838\u5b9e\u91cd\u8981\u4fe1\u606f\u3002" + }, + "threadHistory": { + "sidebar": { + "title": "\u5386\u53f2\u5bf9\u8bdd", + "filters": { + "search": "\u641c\u7d22", + "placeholder": "\u641c\u7d22\u4f1a\u8bdd..." + }, + "timeframes": { + "today": "\u4eca\u5929", + "yesterday": "\u6628\u5929", + "previous7days": "\u8fc7\u53bb7\u5929", + "previous30days": "\u8fc7\u53bb30\u5929" + }, + "empty": "\u672a\u627e\u5230\u5bf9\u8bdd", + "actions": { + "close": "\u5173\u95ed\u4fa7\u8fb9\u680f", + "open": "\u6253\u5f00\u4fa7\u8fb9\u680f" + } + }, + "thread": { + "untitled": "\u672a\u547d\u540d\u5bf9\u8bdd", + "menu": { + "rename": "\u91cd\u547d\u540d", + "share": "\u5206\u4eab", + "delete": "\u5220\u9664" + }, + "actions": { + "share": { + "title": "\u5206\u4eab\u804a\u5929\u94fe\u63a5", + "button": "\u5206\u4eab", + "status": { + "copied": "\u94fe\u63a5\u5df2\u590d\u5236", + "created": "\u5206\u4eab\u94fe\u63a5\u5df2\u521b\u5efa\uff01", + "unshared": "\u5df2\u7981\u7528\u6b64\u5bf9\u8bdd\u7684\u5206\u4eab" + }, + "error": { + "create": "\u521b\u5efa\u5206\u4eab\u94fe\u63a5\u5931\u8d25", + "unshare": "\u53d6\u6d88\u5bf9\u8bdd\u5206\u4eab\u5931\u8d25" + } + }, + "delete": { + "title": "\u786e\u8ba4\u5220\u9664", + "description": "\u8fd9\u5c06\u5220\u9664\u8be5\u5bf9\u8bdd\u53ca\u5176\u6240\u6709\u6d88\u606f\u548c\u5143\u7d20\u3002\u6b64\u64cd\u4f5c\u65e0\u6cd5\u64a4\u9500", + "success": "\u5bf9\u8bdd\u5df2\u5220\u9664", + "inProgress": "\u6b63\u5728\u5220\u9664\u5bf9\u8bdd" + }, + "rename": { + "title": "\u91cd\u547d\u540d\u5bf9\u8bdd", + "description": "\u4e3a\u6b64\u5bf9\u8bdd\u8f93\u5165\u65b0\u540d\u79f0", + "form": { + "name": { + "label": "\u540d\u79f0", + "placeholder": "\u8f93\u5165\u65b0\u540d\u79f0" + } + }, + "success": "\u5bf9\u8bdd\u5df2\u91cd\u547d\u540d\uff01", + "inProgress": "\u6b63\u5728\u91cd\u547d\u540d\u5bf9\u8bdd" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u804a\u5929", + "readme": "\u8bf4\u660e", + "theme": { + "light": "\u6d45\u8272\u4e3b\u9898", + "dark": "\u6df1\u8272\u4e3b\u9898", + "system": "\u8ddf\u968f\u7cfb\u7edf" + } + }, + "newChat": { + "button": "\u65b0\u5efa\u5bf9\u8bdd", + "dialog": { + "title": "\u521b\u5efa\u65b0\u5bf9\u8bdd", + "description": "\u8fd9\u5c06\u6e05\u9664\u60a8\u5f53\u524d\u7684\u804a\u5929\u8bb0\u5f55\u3002\u786e\u5b9a\u8981\u7ee7\u7eed\u5417\uff1f", + "tooltip": "\u65b0\u5efa\u5bf9\u8bdd" + } + }, + "user": { + "menu": { + "settings": "\u8bbe\u7f6e", + "settingsKey": "S", + "apiKeys": "API\u5bc6\u94a5", + "logout": "\u9000\u51fa\u767b\u5f55" + } + } + }, + "apiKeys": { + "title": "\u6240\u9700API\u5bc6\u94a5", + "description": "\u4f7f\u7528\u6b64\u5e94\u7528\u9700\u8981\u4ee5\u4e0bAPI\u5bc6\u94a5\u3002\u8fd9\u4e9b\u5bc6\u94a5\u5b58\u50a8\u5728\u60a8\u8bbe\u5907\u7684\u672c\u5730\u5b58\u50a8\u4e2d\u3002", + "success": { + "saved": "\u4fdd\u5b58\u6210\u529f" + } + }, + "alerts": { + "info": "\u4fe1\u606f", + "note": "\u6ce8\u91ca", + "tip": "\u63d0\u793a", + "important": "\u91cd\u8981", + "warning": "\u8b66\u544a", + "caution": "\u6ce8\u610f", + "debug": "\u8c03\u8bd5", + "example": "\u793a\u4f8b", + "success": "\u6210\u529f", + "help": "\u5e2e\u52a9", + "idea": "\u60f3\u6cd5", + "pending": "\u5f85\u5904\u7406", + "security": "\u5b89\u5168", + "beta": "\u6d4b\u8bd5", + "best-practice": "\u6700\u4f73\u5b9e\u8df5" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u9009\u62e9..." + } + } +} \ No newline at end of file diff --git a/.chainlit/translations/zh-TW.json b/.chainlit/translations/zh-TW.json new file mode 100755 index 00000000..74da1216 --- /dev/null +++ b/.chainlit/translations/zh-TW.json @@ -0,0 +1,245 @@ +{ + "common": { + "actions": { + "cancel": "\u53d6\u6d88", + "confirm": "\u78ba\u8a8d", + "continue": "\u7e7c\u7e8c", + "goBack": "\u8fd4\u56de", + "reset": "\u91cd\u8a2d", + "submit": "\u9001\u51fa" + }, + "status": { + "loading": "\u8f09\u5165\u4e2d...", + "error": { + "default": "\u767c\u751f\u932f\u8aa4", + "serverConnection": "\u7121\u6cd5\u9023\u7dda\u5230\u4f3a\u670d\u5668" + } + } + }, + "auth": { + "login": { + "title": "\u767b\u5165\u4ee5\u5b58\u53d6\u61c9\u7528\u7a0b\u5f0f", + "form": { + "email": { + "label": "\u96fb\u5b50\u4fe1\u7bb1", + "required": "\u4fe1\u7bb1\u662f\u5fc5\u586b\u9805\u76ee", + "placeholder": "me@example.com" + }, + "password": { + "label": "\u5bc6\u78bc", + "required": "\u5bc6\u78bc\u662f\u5fc5\u586b\u9805\u76ee" + }, + "actions": { + "signin": "\u767b\u5165" + }, + "alternativeText": { + "or": "\u6216" + } + }, + "errors": { + "default": "\u7121\u6cd5\u767b\u5165", + "signin": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "oauthSignin": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "redirectUriMismatch": "\u91cd\u65b0\u5c0e\u5411URI\u8207OAuth App\u8a2d\u5b9a\u4e0d\u76f8\u7b26", + "oauthCallback": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "oauthCreateAccount": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "emailCreateAccount": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "callback": "\u8acb\u5617\u8a66\u4f7f\u7528\u5176\u5b83\u5e33\u865f\u767b\u5165", + "oauthAccountNotLinked": "\u70ba\u78ba\u8a8d\u60a8\u7684\u8eab\u4efd\uff0c\u8acb\u4ee5\u539f\u672c\u4f7f\u7528\u7684\u5e33\u865f\u767b\u5165", + "emailSignin": "\u96fb\u5b50\u90f5\u4ef6\u767c\u9001\u5931\u6557", + "emailVerify": "\u8acb\u9a57\u8b49\u60a8\u7684\u96fb\u5b50\u4fe1\u7bb1\uff0c\u65b0\u7684\u9a57\u8b49\u90f5\u4ef6\u5df2\u767c\u9001", + "credentialsSignin": "\u767b\u5165\u5931\u6557\u3002\u8acb\u6aa2\u67e5\u60a8\u63d0\u4f9b\u7684\u8cc7\u8a0a\u662f\u5426\u6b63\u78ba", + "sessionRequired": "\u8acb\u767b\u5165\u4ee5\u5b58\u53d6\u6b64\u9801\u9762" + } + }, + "provider": { + "continue": "\u7e7c\u7e8c\u4f7f\u7528{{provider}}" + } + }, + "chat": { + "input": { + "placeholder": "\u5728\u6b64\u8f38\u5165\u60a8\u7684\u8a0a\u606f...", + "actions": { + "send": "\u767c\u9001\u8a0a\u606f", + "stop": "\u505c\u6b62\u4efb\u52d9", + "attachFiles": "\u9644\u52a0\u6a94\u6848" + } + }, + "speech": { + "start": "\u958b\u59cb\u9304\u97f3", + "stop": "\u505c\u6b62\u9304\u97f3", + "connecting": "\u9023\u7dda\u4e2d" + }, + "fileUpload": { + "dragDrop": "\u62d6\u66f3\u6a94\u6848\u5230\u9019\u88e1", + "browse": "\u700f\u89bd\u6a94\u6848", + "sizeLimit": "\u9650\u5236\uff1a", + "errors": { + "failed": "\u4e0a\u50b3\u5931\u6557", + "cancelled": "\u5df2\u53d6\u6d88\u4e0a\u50b3" + }, + "actions": { + "cancelUpload": "\u53d6\u6d88\u4e0a\u50b3", + "removeAttachment": "\u79fb\u9664\u9644\u4ef6" + } + }, + "commands": { + "button": "\u5de5\u5177", + "changeTool": "\u66f4\u63db\u5de5\u5177", + "availableTools": "\u53ef\u7528\u5de5\u5177" + }, + "messages": { + "status": { + "using": "\u6b63\u5728\u4f7f\u7528", + "used": "\u5df2\u4f7f\u7528" + }, + "actions": { + "copy": { + "button": "\u8907\u88fd\u5230\u526a\u8cbc\u7c3f", + "success": "\u5df2\u8907\u88fd\uff01" + } + }, + "feedback": { + "positive": "\u6709\u5e6b\u52a9", + "negative": "\u6c92\u6709\u5e6b\u52a9", + "edit": "\u7de8\u8f2f\u56de\u994b", + "dialog": { + "title": "\u65b0\u589e\u8a55\u8ad6", + "submit": "\u9001\u51fa\u56de\u994b", + "yourFeedback": "\u60a8\u7684\u56de\u994b..." + }, + "status": { + "updating": "\u66f4\u65b0\u4e2d", + "updated": "\u56de\u994b\u5df2\u66f4\u65b0" + } + } + }, + "history": { + "title": "\u6700\u8fd1\u8f38\u5165", + "empty": "\u7a7a\u7a7a\u5982\u4e5f...", + "show": "\u986f\u793a\u6b77\u53f2" + }, + "settings": { + "title": "\u8a2d\u5b9a\u9762\u677f", + "customize": "\u5728\u6b64\u81ea\u5b9a\u7fa9\u60a8\u7684\u804a\u5929\u8a2d\u5b9a" + }, + "watermark": "\u5927\u578b\u8a9e\u8a00\u6a21\u578b\u53ef\u80fd\u6703\u72af\u932f\u3002\u8acb\u6838\u5be6\u91cd\u8981\u8cc7\u8a0a\u3002" + }, + "threadHistory": { + "sidebar": { + "title": "\u6b77\u53f2\u5c0d\u8a71", + "filters": { + "search": "\u641c\u5c0b", + "placeholder": "\u641c\u5c0b\u5c0d\u8a71..." + }, + "timeframes": { + "today": "\u4eca\u5929", + "yesterday": "\u6628\u5929", + "previous7days": "\u904e\u53bb7\u5929", + "previous30days": "\u904e\u53bb30\u5929" + }, + "empty": "\u672a\u627e\u5230\u5c0d\u8a71", + "actions": { + "close": "\u95dc\u9589\u5074\u908a\u6b04", + "open": "\u6253\u958b\u5074\u908a\u6b04" + } + }, + "thread": { + "untitled": "\u672a\u547d\u540d\u5c0d\u8a71", + "menu": { + "rename": "\u91cd\u65b0\u547d\u540d", + "share": "\u5206\u4eab", + "delete": "\u522a\u9664" + }, + "actions": { + "share": { + "title": "\u5206\u4eab\u804a\u5929\u9023\u7d50", + "button": "\u5206\u4eab", + "status": { + "copied": "\u9023\u7d50\u5df2\u8907\u88fd", + "created": "\u5206\u4eab\u9023\u7d50\u5df2\u5efa\u7acb\uff01", + "unshared": "\u5df2\u505c\u7528\u6b64\u5c0d\u8a71\u7684\u5206\u4eab" + }, + "error": { + "create": "\u5efa\u7acb\u5206\u4eab\u9023\u7d50\u5931\u6557", + "unshare": "\u53d6\u6d88\u5c0d\u8a71\u5206\u4eab\u5931\u6557" + } + }, + "delete": { + "title": "\u78ba\u8a8d\u522a\u9664", + "description": "\u9019\u5c07\u522a\u9664\u8a72\u5c0d\u8a71\u53ca\u5176\u6240\u6709\u8a0a\u606f\u548c\u5143\u4ef6\u3002\u6b64\u64cd\u4f5c\u7121\u6cd5\u5fa9\u539f\u3002", + "success": "\u5c0d\u8a71\u5df2\u522a\u9664", + "inProgress": "\u6b63\u5728\u522a\u9664\u5c0d\u8a71" + }, + "rename": { + "title": "\u91cd\u65b0\u547d\u540d\u5c0d\u8a71", + "description": "\u70ba\u6b64\u5c0d\u8a71\u8f38\u5165\u65b0\u540d\u7a31", + "form": { + "name": { + "label": "\u540d\u7a31", + "placeholder": "\u8f38\u5165\u65b0\u540d\u7a31" + } + }, + "success": "\u5c0d\u8a71\u5df2\u91cd\u65b0\u547d\u540d\uff01", + "inProgress": "\u6b63\u5728\u91cd\u65b0\u547d\u540d\u5c0d\u8a71" + } + } + } + }, + "navigation": { + "header": { + "chat": "\u804a\u5929", + "readme": "\u8aaa\u660e", + "theme": { + "light": "\u6dfa\u8272\u4e3b\u984c", + "dark": "\u6df1\u8272\u4e3b\u984c", + "system": "\u8ddf\u96a8\u7cfb\u7d71" + } + }, + "newChat": { + "button": "\u65b0\u5efa\u5c0d\u8a71", + "dialog": { + "title": "\u5275\u5efa\u65b0\u5c0d\u8a71", + "description": "\u9019\u5c07\u6e05\u9664\u60a8\u7576\u524d\u7684\u804a\u5929\u8a18\u9304\u3002\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f", + "tooltip": "\u65b0\u5efa\u5c0d\u8a71" + } + }, + "user": { + "menu": { + "settings": "\u8a2d\u5b9a", + "settingsKey": "S", + "apiKeys": "API\u91d1\u9470", + "logout": "\u767b\u51fa" + } + } + }, + "apiKeys": { + "title": "\u6240\u9700API\u91d1\u9470", + "description": "\u4f7f\u7528\u6b64\u61c9\u7528\u7a0b\u5f0f\u9700\u8981\u4ee5\u4e0bAPI\u91d1\u9470\u3002\u9019\u4e9b\u91d1\u9470\u5132\u5b58\u5728\u60a8\u8a2d\u5099\u7684\u672c\u5730\u5132\u5b58\u7a7a\u9593\u4e2d\u3002", + "success": { + "saved": "\u5132\u5b58\u6210\u529f" + } + }, + "alerts": { + "info": "\u8cc7\u8a0a", + "note": "\u6ce8\u91cb", + "tip": "\u63d0\u793a", + "important": "\u91cd\u8981", + "warning": "\u8b66\u544a", + "caution": "\u6ce8\u610f", + "debug": "\u9664\u932f", + "example": "\u7bc4\u4f8b", + "success": "\u6210\u529f", + "help": "\u5e6b\u52a9", + "idea": "\u60f3\u6cd5", + "pending": "\u5f85\u8655\u7406", + "security": "\u5b89\u5168", + "beta": "\u6e2c\u8a66", + "best-practice": "\u6700\u4f73\u5be6\u8e10" + }, + "components": { + "MultiSelectInput": { + "placeholder": "\u9078\u64c7..." + } + } +} \ No newline at end of file diff --git a/.env.example b/.env.example old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.python-version b/.python-version old mode 100644 new mode 100755 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100755 index 00000000..78227ea8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "github.copilot-chat" + ] +} \ No newline at end of file diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/build/lib/cli/__init__.py b/build/lib/cli/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/build/lib/cli/main.py b/build/lib/cli/main.py new file mode 100644 index 00000000..923e14f2 --- /dev/null +++ b/build/lib/cli/main.py @@ -0,0 +1,1110 @@ +from typing import Optional +import datetime +import typer +from pathlib import Path +from functools import wraps +from rich.console import Console +from dotenv import load_dotenv + +# Load environment variables from .env file +load_dotenv() +from rich.panel import Panel +from rich.spinner import Spinner +from rich.live import Live +from rich.columns import Columns +from rich.markdown import Markdown +from rich.layout import Layout +from rich.text import Text +from rich.live import Live +from rich.table import Table +from collections import deque +import time +from rich.tree import Tree +from rich import box +from rich.align import Align +from rich.rule import Rule + +from tradingagents.graph.trading_graph import TradingAgentsGraph +from tradingagents.default_config import DEFAULT_CONFIG +from cli.models import AnalystType +from cli.utils import * + +console = Console() + +app = typer.Typer( + name="TradingAgents", + help="TradingAgents CLI: Multi-Agents LLM Financial Trading Framework", + add_completion=True, # Enable shell completion +) + + +# Create a deque to store recent messages with a maximum length +class MessageBuffer: + def __init__(self, max_length=100): + self.messages = deque(maxlen=max_length) + self.tool_calls = deque(maxlen=max_length) + self.current_report = None + self.final_report = None # Store the complete final report + self.agent_status = { + # Analyst Team + "Market Analyst": "pending", + "Social Analyst": "pending", + "News Analyst": "pending", + "Fundamentals Analyst": "pending", + # Research Team + "Bull Researcher": "pending", + "Bear Researcher": "pending", + "Research Manager": "pending", + # Trading Team + "Trader": "pending", + # Risk Management Team + "Risky Analyst": "pending", + "Neutral Analyst": "pending", + "Safe Analyst": "pending", + # Portfolio Management Team + "Portfolio Manager": "pending", + } + self.current_agent = None + self.report_sections = { + "market_report": None, + "sentiment_report": None, + "news_report": None, + "fundamentals_report": None, + "investment_plan": None, + "trader_investment_plan": None, + "final_trade_decision": None, + } + + def add_message(self, message_type, content): + timestamp = datetime.datetime.now().strftime("%H:%M:%S") + self.messages.append((timestamp, message_type, content)) + + def add_tool_call(self, tool_name, args): + timestamp = datetime.datetime.now().strftime("%H:%M:%S") + self.tool_calls.append((timestamp, tool_name, args)) + + def update_agent_status(self, agent, status): + if agent in self.agent_status: + self.agent_status[agent] = status + self.current_agent = agent + + def update_report_section(self, section_name, content): + if section_name in self.report_sections: + self.report_sections[section_name] = content + self._update_current_report() + + def _update_current_report(self): + # For the panel display, only show the most recently updated section + latest_section = None + latest_content = None + + # Find the most recently updated section + for section, content in self.report_sections.items(): + if content is not None: + latest_section = section + latest_content = content + + if latest_section and latest_content: + # Format the current section for display + section_titles = { + "market_report": "Market Analysis", + "sentiment_report": "Social Sentiment", + "news_report": "News Analysis", + "fundamentals_report": "Fundamentals Analysis", + "investment_plan": "Research Team Decision", + "trader_investment_plan": "Trading Team Plan", + "final_trade_decision": "Portfolio Management Decision", + } + self.current_report = ( + f"### {section_titles[latest_section]}\n{latest_content}" + ) + + # Update the final complete report + self._update_final_report() + + def _update_final_report(self): + report_parts = [] + + # Analyst Team Reports + if any( + self.report_sections[section] + for section in [ + "market_report", + "sentiment_report", + "news_report", + "fundamentals_report", + ] + ): + report_parts.append("## Analyst Team Reports") + if self.report_sections["market_report"]: + report_parts.append( + f"### Market Analysis\n{self.report_sections['market_report']}" + ) + if self.report_sections["sentiment_report"]: + report_parts.append( + f"### Social Sentiment\n{self.report_sections['sentiment_report']}" + ) + if self.report_sections["news_report"]: + report_parts.append( + f"### News Analysis\n{self.report_sections['news_report']}" + ) + if self.report_sections["fundamentals_report"]: + report_parts.append( + f"### Fundamentals Analysis\n{self.report_sections['fundamentals_report']}" + ) + + # Research Team Reports + if self.report_sections["investment_plan"]: + report_parts.append("## Research Team Decision") + report_parts.append(f"{self.report_sections['investment_plan']}") + + # Trading Team Reports + if self.report_sections["trader_investment_plan"]: + report_parts.append("## Trading Team Plan") + report_parts.append(f"{self.report_sections['trader_investment_plan']}") + + # Portfolio Management Decision + if self.report_sections["final_trade_decision"]: + report_parts.append("## Portfolio Management Decision") + report_parts.append(f"{self.report_sections['final_trade_decision']}") + + self.final_report = "\n\n".join(report_parts) if report_parts else None + + +message_buffer = MessageBuffer() + + +def create_layout(): + layout = Layout() + layout.split_column( + Layout(name="header", size=3), + Layout(name="main"), + Layout(name="footer", size=3), + ) + layout["main"].split_column( + Layout(name="upper", ratio=3), Layout(name="analysis", ratio=5) + ) + layout["upper"].split_row( + Layout(name="progress", ratio=2), Layout(name="messages", ratio=3) + ) + return layout + + +def update_display(layout, spinner_text=None): + # Header with welcome message + layout["header"].update( + Panel( + "[bold green]Welcome to TradingAgents CLI[/bold green]\n" + "[dim]© [Tauric Research](https://github.com/TauricResearch)[/dim]", + title="Welcome to TradingAgents", + border_style="green", + padding=(1, 2), + expand=True, + ) + ) + + # Progress panel showing agent status + progress_table = Table( + show_header=True, + header_style="bold magenta", + show_footer=False, + box=box.SIMPLE_HEAD, # Use simple header with horizontal lines + title=None, # Remove the redundant Progress title + padding=(0, 2), # Add horizontal padding + expand=True, # Make table expand to fill available space + ) + progress_table.add_column("Team", style="cyan", justify="center", width=20) + progress_table.add_column("Agent", style="green", justify="center", width=20) + progress_table.add_column("Status", style="yellow", justify="center", width=20) + + # Group agents by team + teams = { + "Analyst Team": [ + "Market Analyst", + "Social Analyst", + "News Analyst", + "Fundamentals Analyst", + ], + "Research Team": ["Bull Researcher", "Bear Researcher", "Research Manager"], + "Trading Team": ["Trader"], + "Risk Management": ["Risky Analyst", "Neutral Analyst", "Safe Analyst"], + "Portfolio Management": ["Portfolio Manager"], + } + + for team, agents in teams.items(): + # Add first agent with team name + first_agent = agents[0] + status = message_buffer.agent_status[first_agent] + if status == "in_progress": + spinner = Spinner( + "dots", text="[blue]in_progress[/blue]", style="bold cyan" + ) + status_cell = spinner + else: + status_color = { + "pending": "yellow", + "completed": "green", + "error": "red", + }.get(status, "white") + status_cell = f"[{status_color}]{status}[/{status_color}]" + progress_table.add_row(team, first_agent, status_cell) + + # Add remaining agents in team + for agent in agents[1:]: + status = message_buffer.agent_status[agent] + if status == "in_progress": + spinner = Spinner( + "dots", text="[blue]in_progress[/blue]", style="bold cyan" + ) + status_cell = spinner + else: + status_color = { + "pending": "yellow", + "completed": "green", + "error": "red", + }.get(status, "white") + status_cell = f"[{status_color}]{status}[/{status_color}]" + progress_table.add_row("", agent, status_cell) + + # Add horizontal line after each team + progress_table.add_row("─" * 20, "─" * 20, "─" * 20, style="dim") + + layout["progress"].update( + Panel(progress_table, title="Progress", border_style="cyan", padding=(1, 2)) + ) + + # Messages panel showing recent messages and tool calls + messages_table = Table( + show_header=True, + header_style="bold magenta", + show_footer=False, + expand=True, # Make table expand to fill available space + box=box.MINIMAL, # Use minimal box style for a lighter look + show_lines=True, # Keep horizontal lines + padding=(0, 1), # Add some padding between columns + ) + messages_table.add_column("Time", style="cyan", width=8, justify="center") + messages_table.add_column("Type", style="green", width=10, justify="center") + messages_table.add_column( + "Content", style="white", no_wrap=False, ratio=1 + ) # Make content column expand + + # Combine tool calls and messages + all_messages = [] + + # Add tool calls + for timestamp, tool_name, args in message_buffer.tool_calls: + # Truncate tool call args if too long + if isinstance(args, str) and len(args) > 100: + args = args[:97] + "..." + all_messages.append((timestamp, "Tool", f"{tool_name}: {args}")) + + # Add regular messages + for timestamp, msg_type, content in message_buffer.messages: + # Convert content to string if it's not already + content_str = content + if isinstance(content, list): + # Handle list of content blocks (Anthropic format) + text_parts = [] + for item in content: + if isinstance(item, dict): + if item.get('type') == 'text': + text_parts.append(item.get('text', '')) + elif item.get('type') == 'tool_use': + text_parts.append(f"[Tool: {item.get('name', 'unknown')}]") + else: + text_parts.append(str(item)) + content_str = ' '.join(text_parts) + elif not isinstance(content_str, str): + content_str = str(content) + + # Truncate message content if too long + if len(content_str) > 200: + content_str = content_str[:197] + "..." + all_messages.append((timestamp, msg_type, content_str)) + + # Sort by timestamp + all_messages.sort(key=lambda x: x[0]) + + # Calculate how many messages we can show based on available space + # Start with a reasonable number and adjust based on content length + max_messages = 12 # Increased from 8 to better fill the space + + # Get the last N messages that will fit in the panel + recent_messages = all_messages[-max_messages:] + + # Add messages to table + for timestamp, msg_type, content in recent_messages: + # Format content with word wrapping + wrapped_content = Text(content, overflow="fold") + messages_table.add_row(timestamp, msg_type, wrapped_content) + + if spinner_text: + messages_table.add_row("", "Spinner", spinner_text) + + # Add a footer to indicate if messages were truncated + if len(all_messages) > max_messages: + messages_table.footer = ( + f"[dim]Showing last {max_messages} of {len(all_messages)} messages[/dim]" + ) + + layout["messages"].update( + Panel( + messages_table, + title="Messages & Tools", + border_style="blue", + padding=(1, 2), + ) + ) + + # Analysis panel showing current report + if message_buffer.current_report: + layout["analysis"].update( + Panel( + Markdown(message_buffer.current_report), + title="Current Report", + border_style="green", + padding=(1, 2), + ) + ) + else: + layout["analysis"].update( + Panel( + "[italic]Waiting for analysis report...[/italic]", + title="Current Report", + border_style="green", + padding=(1, 2), + ) + ) + + # Footer with statistics + tool_calls_count = len(message_buffer.tool_calls) + llm_calls_count = sum( + 1 for _, msg_type, _ in message_buffer.messages if msg_type == "Reasoning" + ) + reports_count = sum( + 1 for content in message_buffer.report_sections.values() if content is not None + ) + + stats_table = Table(show_header=False, box=None, padding=(0, 2), expand=True) + stats_table.add_column("Stats", justify="center") + stats_table.add_row( + f"Tool Calls: {tool_calls_count} | LLM Calls: {llm_calls_count} | Generated Reports: {reports_count}" + ) + + layout["footer"].update(Panel(stats_table, border_style="grey50")) + + +def get_user_selections(): + """Get all user selections before starting the analysis display.""" + # Display ASCII art welcome message + with open("./cli/static/welcome.txt", "r") as f: + welcome_ascii = f.read() + + # Create welcome box content + welcome_content = f"{welcome_ascii}\n" + welcome_content += "[bold green]TradingAgents: Multi-Agents LLM Financial Trading Framework - CLI[/bold green]\n\n" + welcome_content += "[bold]Workflow Steps:[/bold]\n" + welcome_content += "I. Analyst Team → II. Research Team → III. Trader → IV. Risk Management → V. Portfolio Management\n\n" + welcome_content += ( + "[dim]Built by [Tauric Research](https://github.com/TauricResearch)[/dim]" + ) + + # Create and center the welcome box + welcome_box = Panel( + welcome_content, + border_style="green", + padding=(1, 2), + title="Welcome to TradingAgents", + subtitle="Multi-Agents LLM Financial Trading Framework", + ) + console.print(Align.center(welcome_box)) + console.print() # Add a blank line after the welcome box + + # Create a boxed questionnaire for each step + def create_question_box(title, prompt, default=None): + box_content = f"[bold]{title}[/bold]\n" + box_content += f"[dim]{prompt}[/dim]" + if default: + box_content += f"\n[dim]Default: {default}[/dim]" + return Panel(box_content, border_style="blue", padding=(1, 2)) + + # Step 1: Ticker symbol + console.print( + create_question_box( + "Step 1: Ticker Symbol", "Enter the ticker symbol to analyze", "SPY" + ) + ) + selected_ticker = get_ticker() + + # Step 2: Analysis date + default_date = datetime.datetime.now().strftime("%Y-%m-%d") + console.print( + create_question_box( + "Step 2: Analysis Date", + "Enter the analysis date (YYYY-MM-DD)", + default_date, + ) + ) + analysis_date = get_analysis_date() + + # Step 3: Select analysts + console.print( + create_question_box( + "Step 3: Analysts Team", "Select your LLM analyst agents for the analysis" + ) + ) + selected_analysts = select_analysts() + console.print( + f"[green]Selected analysts:[/green] {', '.join(analyst.value for analyst in selected_analysts)}" + ) + + # Step 4: Research depth + console.print( + create_question_box( + "Step 4: Research Depth", "Select your research depth level" + ) + ) + selected_research_depth = select_research_depth() + + # Step 5: OpenAI backend + console.print( + create_question_box( + "Step 5: OpenAI backend", "Select which service to talk to" + ) + ) + selected_llm_provider, backend_url = select_llm_provider() + + # Step 6: Thinking agents + console.print( + create_question_box( + "Step 6: Thinking Agents", "Select your thinking agents for analysis" + ) + ) + selected_shallow_thinker = select_shallow_thinking_agent(selected_llm_provider) + selected_deep_thinker = select_deep_thinking_agent(selected_llm_provider) + + return { + "ticker": selected_ticker, + "analysis_date": analysis_date, + "analysts": selected_analysts, + "research_depth": selected_research_depth, + "llm_provider": selected_llm_provider.lower(), + "backend_url": backend_url, + "shallow_thinker": selected_shallow_thinker, + "deep_thinker": selected_deep_thinker, + } + + +def get_ticker(): + """Get ticker symbol from user input.""" + return typer.prompt("", default="SPY") + + +def get_analysis_date(): + """Get the analysis date from user input.""" + while True: + date_str = typer.prompt( + "", default=datetime.datetime.now().strftime("%Y-%m-%d") + ) + try: + # Validate date format and ensure it's not in the future + analysis_date = datetime.datetime.strptime(date_str, "%Y-%m-%d") + if analysis_date.date() > datetime.datetime.now().date(): + console.print("[red]Error: Analysis date cannot be in the future[/red]") + continue + return date_str + except ValueError: + console.print( + "[red]Error: Invalid date format. Please use YYYY-MM-DD[/red]" + ) + + +def display_complete_report(final_state): + """Display the complete analysis report with team-based panels.""" + console.print("\n[bold green]Complete Analysis Report[/bold green]\n") + + # I. Analyst Team Reports + analyst_reports = [] + + # Market Analyst Report + if final_state.get("market_report"): + analyst_reports.append( + Panel( + Markdown(final_state["market_report"]), + title="Market Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + # Social Analyst Report + if final_state.get("sentiment_report"): + analyst_reports.append( + Panel( + Markdown(final_state["sentiment_report"]), + title="Social Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + # News Analyst Report + if final_state.get("news_report"): + analyst_reports.append( + Panel( + Markdown(final_state["news_report"]), + title="News Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + # Fundamentals Analyst Report + if final_state.get("fundamentals_report"): + analyst_reports.append( + Panel( + Markdown(final_state["fundamentals_report"]), + title="Fundamentals Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + if analyst_reports: + console.print( + Panel( + Columns(analyst_reports, equal=True, expand=True), + title="I. Analyst Team Reports", + border_style="cyan", + padding=(1, 2), + ) + ) + + # II. Research Team Reports + if final_state.get("investment_debate_state"): + research_reports = [] + debate_state = final_state["investment_debate_state"] + + # Bull Researcher Analysis + if debate_state.get("bull_history"): + research_reports.append( + Panel( + Markdown(debate_state["bull_history"]), + title="Bull Researcher", + border_style="blue", + padding=(1, 2), + ) + ) + + # Bear Researcher Analysis + if debate_state.get("bear_history"): + research_reports.append( + Panel( + Markdown(debate_state["bear_history"]), + title="Bear Researcher", + border_style="blue", + padding=(1, 2), + ) + ) + + # Research Manager Decision + if debate_state.get("judge_decision"): + research_reports.append( + Panel( + Markdown(debate_state["judge_decision"]), + title="Research Manager", + border_style="blue", + padding=(1, 2), + ) + ) + + if research_reports: + console.print( + Panel( + Columns(research_reports, equal=True, expand=True), + title="II. Research Team Decision", + border_style="magenta", + padding=(1, 2), + ) + ) + + # III. Trading Team Reports + if final_state.get("trader_investment_plan"): + console.print( + Panel( + Panel( + Markdown(final_state["trader_investment_plan"]), + title="Trader", + border_style="blue", + padding=(1, 2), + ), + title="III. Trading Team Plan", + border_style="yellow", + padding=(1, 2), + ) + ) + + # IV. Risk Management Team Reports + if final_state.get("risk_debate_state"): + risk_reports = [] + risk_state = final_state["risk_debate_state"] + + # Aggressive (Risky) Analyst Analysis + if risk_state.get("risky_history"): + risk_reports.append( + Panel( + Markdown(risk_state["risky_history"]), + title="Aggressive Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + # Conservative (Safe) Analyst Analysis + if risk_state.get("safe_history"): + risk_reports.append( + Panel( + Markdown(risk_state["safe_history"]), + title="Conservative Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + # Neutral Analyst Analysis + if risk_state.get("neutral_history"): + risk_reports.append( + Panel( + Markdown(risk_state["neutral_history"]), + title="Neutral Analyst", + border_style="blue", + padding=(1, 2), + ) + ) + + if risk_reports: + console.print( + Panel( + Columns(risk_reports, equal=True, expand=True), + title="IV. Risk Management Team Decision", + border_style="red", + padding=(1, 2), + ) + ) + + # V. Portfolio Manager Decision + if risk_state.get("judge_decision"): + console.print( + Panel( + Panel( + Markdown(risk_state["judge_decision"]), + title="Portfolio Manager", + border_style="blue", + padding=(1, 2), + ), + title="V. Portfolio Manager Decision", + border_style="green", + padding=(1, 2), + ) + ) + + +def update_research_team_status(status): + """Update status for all research team members and trader.""" + research_team = ["Bull Researcher", "Bear Researcher", "Research Manager", "Trader"] + for agent in research_team: + message_buffer.update_agent_status(agent, status) + +def extract_content_string(content): + """Extract string content from various message formats.""" + if isinstance(content, str): + return content + elif isinstance(content, list): + # Handle Anthropic's list format + text_parts = [] + for item in content: + if isinstance(item, dict): + if item.get('type') == 'text': + text_parts.append(item.get('text', '')) + elif item.get('type') == 'tool_use': + text_parts.append(f"[Tool: {item.get('name', 'unknown')}]") + else: + text_parts.append(str(item)) + return ' '.join(text_parts) + else: + return str(content) + +def run_analysis(): + # First get all user selections + selections = get_user_selections() + + # Create config with selected research depth + config = DEFAULT_CONFIG.copy() + config["max_debate_rounds"] = selections["research_depth"] + config["max_risk_discuss_rounds"] = selections["research_depth"] + config["quick_think_llm"] = selections["shallow_thinker"] + config["deep_think_llm"] = selections["deep_thinker"] + config["backend_url"] = selections["backend_url"] + config["llm_provider"] = selections["llm_provider"].lower() + + # Initialize the graph + graph = TradingAgentsGraph( + [analyst.value for analyst in selections["analysts"]], config=config, debug=True + ) + + # Create result directory + results_dir = Path(config["results_dir"]) / selections["ticker"] / selections["analysis_date"] + results_dir.mkdir(parents=True, exist_ok=True) + report_dir = results_dir / "reports" + report_dir.mkdir(parents=True, exist_ok=True) + log_file = results_dir / "message_tool.log" + log_file.touch(exist_ok=True) + + def save_message_decorator(obj, func_name): + func = getattr(obj, func_name) + @wraps(func) + def wrapper(*args, **kwargs): + func(*args, **kwargs) + timestamp, message_type, content = obj.messages[-1] + content = content.replace("\n", " ") # Replace newlines with spaces + with open(log_file, "a") as f: + f.write(f"{timestamp} [{message_type}] {content}\n") + return wrapper + + def save_tool_call_decorator(obj, func_name): + func = getattr(obj, func_name) + @wraps(func) + def wrapper(*args, **kwargs): + func(*args, **kwargs) + timestamp, tool_name, args = obj.tool_calls[-1] + args_str = ", ".join(f"{k}={v}" for k, v in args.items()) + with open(log_file, "a") as f: + f.write(f"{timestamp} [Tool Call] {tool_name}({args_str})\n") + return wrapper + + def save_report_section_decorator(obj, func_name): + func = getattr(obj, func_name) + @wraps(func) + def wrapper(section_name, content): + func(section_name, content) + if section_name in obj.report_sections and obj.report_sections[section_name] is not None: + content = obj.report_sections[section_name] + if content: + file_name = f"{section_name}.md" + with open(report_dir / file_name, "w") as f: + f.write(content) + return wrapper + + message_buffer.add_message = save_message_decorator(message_buffer, "add_message") + message_buffer.add_tool_call = save_tool_call_decorator(message_buffer, "add_tool_call") + message_buffer.update_report_section = save_report_section_decorator(message_buffer, "update_report_section") + + # Now start the display layout + layout = create_layout() + + with Live(layout, refresh_per_second=4) as live: + # Initial display + update_display(layout) + + # Add initial messages + message_buffer.add_message("System", f"Selected ticker: {selections['ticker']}") + message_buffer.add_message( + "System", f"Analysis date: {selections['analysis_date']}" + ) + message_buffer.add_message( + "System", + f"Selected analysts: {', '.join(analyst.value for analyst in selections['analysts'])}", + ) + update_display(layout) + + # Reset agent statuses + for agent in message_buffer.agent_status: + message_buffer.update_agent_status(agent, "pending") + + # Reset report sections + for section in message_buffer.report_sections: + message_buffer.report_sections[section] = None + message_buffer.current_report = None + message_buffer.final_report = None + + # Update agent status to in_progress for the first analyst + first_analyst = f"{selections['analysts'][0].value.capitalize()} Analyst" + message_buffer.update_agent_status(first_analyst, "in_progress") + update_display(layout) + + # Create spinner text + spinner_text = ( + f"Analyzing {selections['ticker']} on {selections['analysis_date']}..." + ) + update_display(layout, spinner_text) + + # Initialize state and get graph args + init_agent_state = graph.propagator.create_initial_state( + selections["ticker"], selections["analysis_date"] + ) + args = graph.propagator.get_graph_args() + + # Stream the analysis + trace = [] + for chunk in graph.graph.stream(init_agent_state, **args): + if len(chunk["messages"]) > 0: + # Get the last message from the chunk + last_message = chunk["messages"][-1] + + # Extract message content and type + if hasattr(last_message, "content"): + content = extract_content_string(last_message.content) # Use the helper function + msg_type = "Reasoning" + else: + content = str(last_message) + msg_type = "System" + + # Add message to buffer + message_buffer.add_message(msg_type, content) + + # If it's a tool call, add it to tool calls + if hasattr(last_message, "tool_calls"): + for tool_call in last_message.tool_calls: + # Handle both dictionary and object tool calls + if isinstance(tool_call, dict): + message_buffer.add_tool_call( + tool_call["name"], tool_call["args"] + ) + else: + message_buffer.add_tool_call(tool_call.name, tool_call.args) + + # Update reports and agent status based on chunk content + # Analyst Team Reports + if "market_report" in chunk and chunk["market_report"]: + message_buffer.update_report_section( + "market_report", chunk["market_report"] + ) + message_buffer.update_agent_status("Market Analyst", "completed") + # Set next analyst to in_progress + if "social" in selections["analysts"]: + message_buffer.update_agent_status( + "Social Analyst", "in_progress" + ) + + if "sentiment_report" in chunk and chunk["sentiment_report"]: + message_buffer.update_report_section( + "sentiment_report", chunk["sentiment_report"] + ) + message_buffer.update_agent_status("Social Analyst", "completed") + # Set next analyst to in_progress + if "news" in selections["analysts"]: + message_buffer.update_agent_status( + "News Analyst", "in_progress" + ) + + if "news_report" in chunk and chunk["news_report"]: + message_buffer.update_report_section( + "news_report", chunk["news_report"] + ) + message_buffer.update_agent_status("News Analyst", "completed") + # Set next analyst to in_progress + if "fundamentals" in selections["analysts"]: + message_buffer.update_agent_status( + "Fundamentals Analyst", "in_progress" + ) + + if "fundamentals_report" in chunk and chunk["fundamentals_report"]: + message_buffer.update_report_section( + "fundamentals_report", chunk["fundamentals_report"] + ) + message_buffer.update_agent_status( + "Fundamentals Analyst", "completed" + ) + # Set all research team members to in_progress + update_research_team_status("in_progress") + + # Research Team - Handle Investment Debate State + if ( + "investment_debate_state" in chunk + and chunk["investment_debate_state"] + ): + debate_state = chunk["investment_debate_state"] + + # Update Bull Researcher status and report + if "bull_history" in debate_state and debate_state["bull_history"]: + # Keep all research team members in progress + update_research_team_status("in_progress") + # Extract latest bull response + bull_responses = debate_state["bull_history"].split("\n") + latest_bull = bull_responses[-1] if bull_responses else "" + if latest_bull: + message_buffer.add_message("Reasoning", latest_bull) + # Update research report with bull's latest analysis + message_buffer.update_report_section( + "investment_plan", + f"### Bull Researcher Analysis\n{latest_bull}", + ) + + # Update Bear Researcher status and report + if "bear_history" in debate_state and debate_state["bear_history"]: + # Keep all research team members in progress + update_research_team_status("in_progress") + # Extract latest bear response + bear_responses = debate_state["bear_history"].split("\n") + latest_bear = bear_responses[-1] if bear_responses else "" + if latest_bear: + message_buffer.add_message("Reasoning", latest_bear) + # Update research report with bear's latest analysis + message_buffer.update_report_section( + "investment_plan", + f"{message_buffer.report_sections['investment_plan']}\n\n### Bear Researcher Analysis\n{latest_bear}", + ) + + # Update Research Manager status and final decision + if ( + "judge_decision" in debate_state + and debate_state["judge_decision"] + ): + # Keep all research team members in progress until final decision + update_research_team_status("in_progress") + message_buffer.add_message( + "Reasoning", + f"Research Manager: {debate_state['judge_decision']}", + ) + # Update research report with final decision + message_buffer.update_report_section( + "investment_plan", + f"{message_buffer.report_sections['investment_plan']}\n\n### Research Manager Decision\n{debate_state['judge_decision']}", + ) + # Mark all research team members as completed + update_research_team_status("completed") + # Set first risk analyst to in_progress + message_buffer.update_agent_status( + "Risky Analyst", "in_progress" + ) + + # Trading Team + if ( + "trader_investment_plan" in chunk + and chunk["trader_investment_plan"] + ): + message_buffer.update_report_section( + "trader_investment_plan", chunk["trader_investment_plan"] + ) + # Set first risk analyst to in_progress + message_buffer.update_agent_status("Risky Analyst", "in_progress") + + # Risk Management Team - Handle Risk Debate State + if "risk_debate_state" in chunk and chunk["risk_debate_state"]: + risk_state = chunk["risk_debate_state"] + + # Update Risky Analyst status and report + if ( + "current_risky_response" in risk_state + and risk_state["current_risky_response"] + ): + message_buffer.update_agent_status( + "Risky Analyst", "in_progress" + ) + message_buffer.add_message( + "Reasoning", + f"Risky Analyst: {risk_state['current_risky_response']}", + ) + # Update risk report with risky analyst's latest analysis only + message_buffer.update_report_section( + "final_trade_decision", + f"### Risky Analyst Analysis\n{risk_state['current_risky_response']}", + ) + + # Update Safe Analyst status and report + if ( + "current_safe_response" in risk_state + and risk_state["current_safe_response"] + ): + message_buffer.update_agent_status( + "Safe Analyst", "in_progress" + ) + message_buffer.add_message( + "Reasoning", + f"Safe Analyst: {risk_state['current_safe_response']}", + ) + # Update risk report with safe analyst's latest analysis only + message_buffer.update_report_section( + "final_trade_decision", + f"### Safe Analyst Analysis\n{risk_state['current_safe_response']}", + ) + + # Update Neutral Analyst status and report + if ( + "current_neutral_response" in risk_state + and risk_state["current_neutral_response"] + ): + message_buffer.update_agent_status( + "Neutral Analyst", "in_progress" + ) + message_buffer.add_message( + "Reasoning", + f"Neutral Analyst: {risk_state['current_neutral_response']}", + ) + # Update risk report with neutral analyst's latest analysis only + message_buffer.update_report_section( + "final_trade_decision", + f"### Neutral Analyst Analysis\n{risk_state['current_neutral_response']}", + ) + + # Update Portfolio Manager status and final decision + if "judge_decision" in risk_state and risk_state["judge_decision"]: + message_buffer.update_agent_status( + "Portfolio Manager", "in_progress" + ) + message_buffer.add_message( + "Reasoning", + f"Portfolio Manager: {risk_state['judge_decision']}", + ) + # Update risk report with final decision only + message_buffer.update_report_section( + "final_trade_decision", + f"### Portfolio Manager Decision\n{risk_state['judge_decision']}", + ) + # Mark risk analysts as completed + message_buffer.update_agent_status("Risky Analyst", "completed") + message_buffer.update_agent_status("Safe Analyst", "completed") + message_buffer.update_agent_status( + "Neutral Analyst", "completed" + ) + message_buffer.update_agent_status( + "Portfolio Manager", "completed" + ) + + # Update the display + update_display(layout) + + trace.append(chunk) + + # Get final state and decision + final_state = trace[-1] + decision = graph.process_signal(final_state["final_trade_decision"]) + + # Update all agent statuses to completed + for agent in message_buffer.agent_status: + message_buffer.update_agent_status(agent, "completed") + + message_buffer.add_message( + "Analysis", f"Completed analysis for {selections['analysis_date']}" + ) + + # Update final report sections + for section in message_buffer.report_sections.keys(): + if section in final_state: + message_buffer.update_report_section(section, final_state[section]) + + # Display the complete final report + display_complete_report(final_state) + + update_display(layout) + # print(decision) + + +@app.command() +def analyze(): + run_analysis() + + +if __name__ == "__main__": + app() diff --git a/build/lib/cli/models.py b/build/lib/cli/models.py new file mode 100644 index 00000000..f68c3da1 --- /dev/null +++ b/build/lib/cli/models.py @@ -0,0 +1,10 @@ +from enum import Enum +from typing import List, Optional, Dict +from pydantic import BaseModel + + +class AnalystType(str, Enum): + MARKET = "market" + SOCIAL = "social" + NEWS = "news" + FUNDAMENTALS = "fundamentals" diff --git a/build/lib/cli/utils.py b/build/lib/cli/utils.py new file mode 100644 index 00000000..2ad9a4d6 --- /dev/null +++ b/build/lib/cli/utils.py @@ -0,0 +1,292 @@ +import questionary +from typing import List, Optional, Tuple, Dict + +from cli.models import AnalystType + +ANALYST_ORDER = [ + ("Market Analyst", AnalystType.MARKET), + ("Social Media Analyst", AnalystType.SOCIAL), + ("News Analyst", AnalystType.NEWS), + ("Fundamentals Analyst", AnalystType.FUNDAMENTALS), +] + + +def get_ticker() -> str: + """Prompt the user to enter a ticker symbol.""" + ticker = questionary.text( + "Enter the ticker symbol to analyze:", + validate=lambda x: len(x.strip()) > 0 or "Please enter a valid ticker symbol.", + style=questionary.Style( + [ + ("text", "fg:green"), + ("highlighted", "noinherit"), + ] + ), + ).ask() + + if not ticker: + console.print("\n[red]No ticker symbol provided. Exiting...[/red]") + exit(1) + + return ticker.strip().upper() + + +def get_analysis_date() -> str: + """Prompt the user to enter a date in YYYY-MM-DD format.""" + import re + from datetime import datetime + + def validate_date(date_str: str) -> bool: + if not re.match(r"^\d{4}-\d{2}-\d{2}$", date_str): + return False + try: + datetime.strptime(date_str, "%Y-%m-%d") + return True + except ValueError: + return False + + date = questionary.text( + "Enter the analysis date (YYYY-MM-DD):", + validate=lambda x: validate_date(x.strip()) + or "Please enter a valid date in YYYY-MM-DD format.", + style=questionary.Style( + [ + ("text", "fg:green"), + ("highlighted", "noinherit"), + ] + ), + ).ask() + + if not date: + console.print("\n[red]No date provided. Exiting...[/red]") + exit(1) + + return date.strip() + + +def select_analysts() -> List[AnalystType]: + """Select analysts using an interactive checkbox.""" + choices = questionary.checkbox( + "Select Your [Analysts Team]:", + choices=[ + questionary.Choice(display, value=value) for display, value in ANALYST_ORDER + ], + instruction="\n- Press Space to select/unselect analysts\n- Press 'a' to select/unselect all\n- Press Enter when done", + validate=lambda x: len(x) > 0 or "You must select at least one analyst.", + style=questionary.Style( + [ + ("checkbox-selected", "fg:green"), + ("selected", "fg:green noinherit"), + ("highlighted", "noinherit"), + ("pointer", "noinherit"), + ] + ), + ).ask() + + if not choices: + console.print("\n[red]No analysts selected. Exiting...[/red]") + exit(1) + + return choices + + +def select_research_depth() -> int: + """Select research depth using an interactive selection.""" + + # Define research depth options with their corresponding values + DEPTH_OPTIONS = [ + ("Shallow - Quick research, few debate and strategy discussion rounds", 1), + ("Medium - Middle ground, moderate debate rounds and strategy discussion", 3), + ("Deep - Comprehensive research, in depth debate and strategy discussion", 5), + ] + + choice = questionary.select( + "Select Your [Research Depth]:", + choices=[ + questionary.Choice(display, value=value) for display, value in DEPTH_OPTIONS + ], + instruction="\n- Use arrow keys to navigate\n- Press Enter to select", + style=questionary.Style( + [ + ("selected", "fg:yellow noinherit"), + ("highlighted", "fg:yellow noinherit"), + ("pointer", "fg:yellow noinherit"), + ] + ), + ).ask() + + if choice is None: + console.print("\n[red]No research depth selected. Exiting...[/red]") + exit(1) + + return choice + + +def select_shallow_thinking_agent(provider) -> str: + """Select shallow thinking llm engine using an interactive selection.""" + + # Define shallow thinking llm engine options with their corresponding model names + SHALLOW_AGENT_OPTIONS = { + "ollama": [ + ("qwen3_ollama", "qwen3:30b"), + ("gemma3", "gemma3:27b"), + ("gpt_oss_ollama", "gpt-oss"), + ("gpt_oss", "hf.co/unsloth/gpt-oss-20b-GGUF:F16"), + ("qwen3", "hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q5_K_XL"), + ("llama3.1 local", "llama3.1"), + ("llama3.2 local", "llama3.2"), + ], + "openai": [ + ("GPT-4o-mini - Fast and efficient for quick tasks", "gpt-4o-mini"), + ("GPT-4.1-nano - Ultra-lightweight model for basic operations", "gpt-4.1-nano"), + ("GPT-4.1-mini - Compact model with good performance", "gpt-4.1-mini"), + ("GPT-4o - Standard model with solid capabilities", "gpt-4o"), + ], + "anthropic": [ + ("Claude Haiku 3.5 - Fast inference and standard capabilities", "claude-3-5-haiku-latest"), + ("Claude Sonnet 3.5 - Highly capable standard model", "claude-3-5-sonnet-latest"), + ("Claude Sonnet 3.7 - Exceptional hybrid reasoning and agentic capabilities", "claude-3-7-sonnet-latest"), + ("Claude Sonnet 4 - High performance and excellent reasoning", "claude-sonnet-4-0"), + ], + "google": [ + ("Gemini 2.0 Flash-Lite - Cost efficiency and low latency", "gemini-2.0-flash-lite"), + ("Gemini 2.0 Flash - Next generation features, speed, and thinking", "gemini-2.0-flash"), + ("Gemini 2.5 Flash - Adaptive thinking, cost efficiency", "gemini-2.5-flash-preview-05-20"), + ], + "openrouter": [ + ("Meta: Llama 4 Scout", "meta-llama/llama-4-scout:free"), + ("Meta: Llama 3.3 8B Instruct - A lightweight and ultra-fast variant of Llama 3.3 70B", "meta-llama/llama-3.3-8b-instruct:free"), + ("google/gemini-2.0-flash-exp:free - Gemini Flash 2.0 offers a significantly faster time to first token", "google/gemini-2.0-flash-exp:free"), + ], + "llama_cpp": [ + ("default", "default"), + ] + } + + choice = questionary.select( + "Select Your [Quick-Thinking LLM Engine]:", + choices=[ + questionary.Choice(display, value=value) + for display, value in SHALLOW_AGENT_OPTIONS[provider.lower()] + ], + instruction="\n- Use arrow keys to navigate\n- Press Enter to select", + style=questionary.Style( + [ + ("selected", "fg:magenta noinherit"), + ("highlighted", "fg:magenta noinherit"), + ("pointer", "fg:magenta noinherit"), + ] + ), + ).ask() + + if choice is None: + console.print( + "\n[red]No shallow thinking llm engine selected. Exiting...[/red]" + ) + exit(1) + + return choice + + +def select_deep_thinking_agent(provider) -> str: + """Select deep thinking llm engine using an interactive selection.""" + + # Define deep thinking llm engine options with their corresponding model names + DEEP_AGENT_OPTIONS = { + "ollama": [ + ("qwen3_ollama", "qwen3:30b"), + ("gemma3", "gemma3:27b"), + ("gpt_oss_ollama", "gpt-oss"), + ("gpt_oss", "hf.co/unsloth/gpt-oss-20b-GGUF:F16"), + ("qwen3", "hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q5_K_XL"), + ("llama3.1 local", "llama3.1"), + ], + "openai": [ + ("GPT-4.1-nano - Ultra-lightweight model for basic operations", "gpt-4.1-nano"), + ("GPT-4.1-mini - Compact model with good performance", "gpt-4.1-mini"), + ("GPT-4o - Standard model with solid capabilities", "gpt-4o"), + ("o4-mini - Specialized reasoning model (compact)", "o4-mini"), + ("o3-mini - Advanced reasoning model (lightweight)", "o3-mini"), + ("o3 - Full advanced reasoning model", "o3"), + ("o1 - Premier reasoning and problem-solving model", "o1"), + ], + "anthropic": [ + ("Claude Haiku 3.5 - Fast inference and standard capabilities", "claude-3-5-haiku-latest"), + ("Claude Sonnet 3.5 - Highly capable standard model", "claude-3-5-sonnet-latest"), + ("Claude Sonnet 3.7 - Exceptional hybrid reasoning and agentic capabilities", "claude-3-7-sonnet-latest"), + ("Claude Sonnet 4 - High performance and excellent reasoning", "claude-sonnet-4-0"), + ("Claude Opus 4 - Most powerful Anthropic model", " claude-opus-4-0"), + ], + "google": [ + ("Gemini 2.0 Flash-Lite - Cost efficiency and low latency", "gemini-2.0-flash-lite"), + ("Gemini 2.0 Flash - Next generation features, speed, and thinking", "gemini-2.0-flash"), + ("Gemini 2.5 Flash - Adaptive thinking, cost efficiency", "gemini-2.5-flash-preview-05-20"), + ("Gemini 2.5 Pro", "gemini-2.5-pro-preview-06-05"), + ], + "openrouter": [ + ("DeepSeek V3 - a 685B-parameter, mixture-of-experts model", "deepseek/deepseek-chat-v3-0324:free"), + ("Deepseek - latest iteration of the flagship chat model family from the DeepSeek team.", "deepseek/deepseek-chat-v3-0324:free"), + ], + "llama_cpp": [ + ("default", "default"), + ] + } + + choice = questionary.select( + "Select Your [Deep-Thinking LLM Engine]:", + choices=[ + questionary.Choice(display, value=value) + for display, value in DEEP_AGENT_OPTIONS[provider.lower()] + ], + instruction="\n- Use arrow keys to navigate\n- Press Enter to select", + style=questionary.Style( + [ + ("selected", "fg:magenta noinherit"), + ("highlighted", "fg:magenta noinherit"), + ("pointer", "fg:magenta noinherit"), + ] + ), + ).ask() + + if choice is None: + console.print("\n[red]No deep thinking llm engine selected. Exiting...[/red]") + exit(1) + + return choice + +def select_llm_provider() -> tuple[str, str]: + """Select the OpenAI api url using interactive selection.""" + # Define OpenAI api options with their corresponding endpoints + BASE_URLS = [ + ("Ollama", "http://localhost:11434/v1"), + ("OpenAI", "https://api.openai.com/v1"), + ("Anthropic", "https://api.anthropic.com/"), + ("Google", "https://generativelanguage.googleapis.com/v1"), + ("Openrouter", "https://openrouter.ai/api/v1"), + ("Llama_CPP", "https://localhost:8080/v1"), + ] + + choice = questionary.select( + "Select your LLM Provider:", + choices=[ + questionary.Choice(display, value=(display, value)) + for display, value in BASE_URLS + ], + instruction="\n- Use arrow keys to navigate\n- Press Enter to select", + style=questionary.Style( + [ + ("selected", "fg:magenta noinherit"), + ("highlighted", "fg:magenta noinherit"), + ("pointer", "fg:magenta noinherit"), + ] + ), + ).ask() + + if choice is None: + console.print("\n[red]no OpenAI backend selected. Exiting...[/red]") + exit(1) + + display_name, url = choice + print(f"You selected: {display_name}\tURL: {url}") + + return display_name, url diff --git a/main.py b/main.py old mode 100644 new mode 100755 diff --git a/pyproject.toml b/pyproject.toml old mode 100644 new mode 100755 diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 diff --git a/setup.py b/setup.py old mode 100644 new mode 100755 diff --git a/test.py b/test.py old mode 100644 new mode 100755 diff --git a/tradingagents/agents/analysts/fundamentals_analyst.py b/tradingagents/agents/analysts/fundamentals_analyst.py index 29b2ce13..f19791db 100755 --- a/tradingagents/agents/analysts/fundamentals_analyst.py +++ b/tradingagents/agents/analysts/fundamentals_analyst.py @@ -19,18 +19,9 @@ def create_fundamentals_analyst(llm): ] system_message = ( - "You are a Tactical Fundamental Analyst focused on SHORT-TERM (1-2 weeks) price catalysts. " - "Your goal is to analyze financial data to identify immediate triggers that will move the price in the next 10 trading days. " - "Ignore long-term 'intrinsic value' if it will not be realized this week. " - "Look for approaching earnings beats, guidance raises, or immediate liquidity risks. " - "Do not simply state the financials are good; determine if they are good ENOUGH to move the stock NOW." - + "\n\nDECISION LOGIC:" - + "\n- LONG: Approaching earnings beat, guidance raise, or undervalued with a specific near-term catalyst." - + "\n- SHORT: Deteriorating fundamentals, liquidity crisis, or extreme overvaluation with a negative trigger." - + "\n- HOLD: Valuation is fair, or no immediate fundamental catalysts exist." - + "\n\nMake sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read." - + " Use the available tools: `get_fundamentals` for comprehensive company analysis, `get_balance_sheet`, `get_cashflow`, and `get_income_statement` for specific financial statements." - + "\n\nYOU MUST CONCLUDE YOUR REPORT WITH: 'SIGNAL: [LONG/SHORT/HOLD]'" + "You are a researcher tasked with analyzing fundamental information for SHORT-TERM trading (1-2 week horizon). Focus on recent fundamental changes, earnings surprises, guidance updates, and any catalysts that could impact the stock price in the next 1-2 weeks. Please write a comprehensive report highlighting near-term fundamental drivers such as upcoming earnings, recent financial developments, insider activity, and any material changes that could affect short-term price movement. Make sure to include as much detail as possible. Do not simply state the trends are mixed, provide detailed and finegrained analysis and insights that may help traders make SHORT-TERM decisions within the next 1-2 weeks." + + " Make sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read." + + " Use the available tools: `get_fundamentals` for comprehensive company analysis, `get_balance_sheet`, `get_cashflow`, and `get_income_statement` for specific financial statements.", ) prompt = ChatPromptTemplate.from_messages( @@ -41,8 +32,8 @@ def create_fundamentals_analyst(llm): " Use the provided tools to progress towards answering the question." " If you are unable to fully answer, that's OK; another assistant with different tools" " will help where you left off. Execute what you can to make progress." - " If you or any other assistant has the FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** or deliverable," - " prefix your response with FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** so the team knows to stop." + " If you or any other assistant has the FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** or deliverable," + " prefix your response with FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** so the team knows to stop." " You have access to the following tools: {tool_names}.\n{system_message}" "For your reference, the current date is {current_date}. The company we want to look at is {ticker}", ), diff --git a/tradingagents/agents/analysts/market_analyst.py b/tradingagents/agents/analysts/market_analyst.py index 495ca0e2..59541f1e 100755 --- a/tradingagents/agents/analysts/market_analyst.py +++ b/tradingagents/agents/analysts/market_analyst.py @@ -18,25 +18,32 @@ def create_market_analyst(llm): ] system_message = ( - """You are a Technical Market Analyst focused on SHORT-TERM (1-2 weeks) swings. Your role is to select the **most relevant indicators** for a given market condition or trading strategy to predict the price direction for the next 5-10 days. The goal is to choose up to **8 indicators** that provide complementary insights without redundancy. - - **GOAL:** Analyze price action, volume, and momentum to determine a clear LONG, SHORT, or HOLD signal for the next 2 weeks. + """You are a trading assistant tasked with analyzing financial markets for SHORT-TERM trading (1-2 week horizon). Your role is to select the **most relevant indicators** for short-term price movement prediction from the following list. Focus on indicators that capture momentum, short-term trends, and volatility suitable for a 1-2 week holding period. The goal is to choose up to **8 indicators** that provide complementary insights without redundancy. Categories and each category's indicators are: - Categories and each category's indicators are: - Moving Averages: close_50_sma, close_200_sma, close_10_ema (Use to identify trend direction). - MACD Related: macd, macds, macdh (Use to find momentum crossovers and divergence). - Momentum Indicators: rsi (Use to flag overbought/oversold conditions). - Volatility Indicators: boll, boll_ub, boll_lb, atr (Use to spot breakouts or mean reversion). - Volume-Based Indicators: vwma (Use to confirm trends). +Moving Averages: +- close_50_sma: 50 SMA: A medium-term trend indicator. Usage: Identify trend direction and serve as dynamic support/resistance. Tips: It lags price; combine with faster indicators for timely signals. +- close_200_sma: 200 SMA: A long-term trend benchmark. Usage: Confirm overall market trend and identify golden/death cross setups. Tips: It reacts slowly; best for strategic trend confirmation rather than frequent trading entries. +- close_10_ema: 10 EMA: A responsive short-term average. Usage: Capture quick shifts in momentum and potential entry points. Tips: Prone to noise in choppy markets; use alongside longer averages for filtering false signals. - **DECISION LOGIC:** - - LONG: Confirmed Uptrend (Higher Highs), Bullish breakout with volume, or bounce off Key Support. - - SHORT: Confirmed Downtrend (Lower Lows), Bearish breakdown, or rejection at Key Resistance. - - HOLD: Choppy/Sideways market, decreasing volume, or conflicting indicators. +MACD Related: +- macd: MACD: Computes momentum via differences of EMAs. Usage: Look for crossovers and divergence as signals of trend changes. Tips: Confirm with other indicators in low-volatility or sideways markets. +- macds: MACD Signal: An EMA smoothing of the MACD line. Usage: Use crossovers with the MACD line to trigger trades. Tips: Should be part of a broader strategy to avoid false positives. +- macdh: MACD Histogram: Shows the gap between the MACD line and its signal. Usage: Visualize momentum strength and spot divergence early. Tips: Can be volatile; complement with additional filters in fast-moving markets. - Select indicators that provide diverse and complementary information. Avoid redundancy. Please make sure to call get_stock_data first to retrieve the CSV that is needed to generate indicators. Then use get_indicators with the specific indicator names. Write a very detailed and nuanced report of the trends you observe. Do not simply state the trends are mixed, provide detailed and finegrained analysis and insights that may help traders make decisions.""" +Momentum Indicators: +- rsi: RSI: Measures momentum to flag overbought/oversold conditions. Usage: Apply 70/30 thresholds and watch for divergence to signal reversals. Tips: In strong trends, RSI may remain extreme; always cross-check with trend analysis. + +Volatility Indicators: +- boll: Bollinger Middle: A 20 SMA serving as the basis for Bollinger Bands. Usage: Acts as a dynamic benchmark for price movement. Tips: Combine with the upper and lower bands to effectively spot breakouts or reversals. +- boll_ub: Bollinger Upper Band: Typically 2 standard deviations above the middle line. Usage: Signals potential overbought conditions and breakout zones. Tips: Confirm signals with other tools; prices may ride the band in strong trends. +- boll_lb: Bollinger Lower Band: Typically 2 standard deviations below the middle line. Usage: Indicates potential oversold conditions. Tips: Use additional analysis to avoid false reversal signals. +- atr: ATR: Averages true range to measure volatility. Usage: Set stop-loss levels and adjust position sizes based on current market volatility. Tips: It's a reactive measure, so use it as part of a broader risk management strategy. + +Volume-Based Indicators: +- vwma: VWMA: A moving average weighted by volume. Usage: Confirm trends by integrating price action with volume data. Tips: Watch for skewed results from volume spikes; use in combination with other volume analyses. + +- Select indicators that provide diverse and complementary information for SHORT-TERM (1-2 week) trading. Prioritize momentum indicators (RSI, MACD) and short-term moving averages (10 EMA) over long-term indicators. Avoid redundancy (e.g., do not select both rsi and stochrsi). Also briefly explain why they are suitable for short-term trading. When you tool call, please use the exact name of the indicators provided above as they are defined parameters, otherwise your call will fail. Please make sure to call get_stock_data first to retrieve the CSV that is needed to generate indicators. Then use get_indicators with the specific indicator names. Write a very detailed and nuanced report of the SHORT-TERM trends you observe, focusing on what's likely to happen in the next 1-2 weeks. Do not simply state the trends are mixed, provide detailed and finegrained analysis and insights that may help traders make SHORT-TERM decisions.""" + """ Make sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read.""" - + "\n\nYOU MUST CONCLUDE YOUR REPORT WITH: 'SIGNAL: [LONG/SHORT/HOLD]'" ) prompt = ChatPromptTemplate.from_messages( @@ -47,8 +54,8 @@ def create_market_analyst(llm): " Use the provided tools to progress towards answering the question." " If you are unable to fully answer, that's OK; another assistant with different tools" " will help where you left off. Execute what you can to make progress." - " If you or any other assistant has the FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** or deliverable," - " prefix your response with FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** so the team knows to stop." + " If you or any other assistant has the FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** or deliverable," + " prefix your response with FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** so the team knows to stop." " You have access to the following tools: {tool_names}.\n{system_message}" "For your reference, the current date is {current_date}. The company we want to look at is {ticker}", ), diff --git a/tradingagents/agents/analysts/news_analyst.py b/tradingagents/agents/analysts/news_analyst.py index 696213f0..915d3cd7 100755 --- a/tradingagents/agents/analysts/news_analyst.py +++ b/tradingagents/agents/analysts/news_analyst.py @@ -16,17 +16,8 @@ def create_news_analyst(llm): ] system_message = ( - "You are a News Analyst focused on IMMEDIATE market impact (1-2 weeks). " - "Interpret breaking news and upcoming macro events (CPI, Fed, Geopolitics) to determine short-term direction. " - "Focus on the 'Narrative' — what story is the market telling itself right now? " - "Use the available tools: get_news(query, start_date, end_date) for company-specific news. " - "Filter out noise and old news. Prioritize news that changes the short-term outlook." - + "\n\nDECISION LOGIC:" - + "\n- LONG: Distinct positive news cycle, analyst upgrades, or strong macro tailwinds." - + "\n- SHORT: Distinct negative news cycle, lawsuits, regulatory hits, or macro headwinds." - + "\n- HOLD: Mixed news, stale news, or high uncertainty waiting for a major event." + "You are a news researcher tasked with analyzing recent news and trends for SHORT-TERM trading (1-2 week horizon). Focus on breaking news, upcoming events (earnings, conferences, product launches), regulatory decisions, and any catalysts that could impact the stock price in the next 1-2 weeks. Please write a comprehensive report highlighting near-term news drivers and events that could affect short-term price movement. Use the available tools: get_news(query, start_date, end_date) for company-specific or targeted news searches, and get_global_news(curr_date, look_back_days, limit) for broader macroeconomic news. Do not simply state the trends are mixed, provide detailed and finegrained analysis and insights that may help traders make SHORT-TERM decisions within the next 1-2 weeks." + """ Make sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read.""" - + "\n\nYOU MUST CONCLUDE YOUR REPORT WITH: 'SIGNAL: [LONG/SHORT/HOLD]'" ) prompt = ChatPromptTemplate.from_messages( @@ -37,8 +28,8 @@ def create_news_analyst(llm): " Use the provided tools to progress towards answering the question." " If you are unable to fully answer, that's OK; another assistant with different tools" " will help where you left off. Execute what you can to make progress." - " If you or any other assistant has the FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** or deliverable," - " prefix your response with FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** so the team knows to stop." + " If you or any other assistant has the FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** or deliverable," + " prefix your response with FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** so the team knows to stop." " You have access to the following tools: {tool_names}.\n{system_message}" "For your reference, the current date is {current_date}. We are looking at the company {ticker}", ), diff --git a/tradingagents/agents/analysts/social_media_analyst.py b/tradingagents/agents/analysts/social_media_analyst.py index 0ba5e89d..ff5b3f15 100755 --- a/tradingagents/agents/analysts/social_media_analyst.py +++ b/tradingagents/agents/analysts/social_media_analyst.py @@ -16,16 +16,8 @@ def create_social_media_analyst(llm): ] system_message = ( - "You are a Social Media Analyst focused on RETAIL SENTIMENT trends for the next 1-2 weeks. " - "Gauge the crowd's psychological state. Look for Momentum (Hype) or Reversals (Extreme Panic/Euphoria). " - "Determine if the volume of discussion is rising (indicating incoming volatility)." - "Use the get_news tool to search for social media discussions and sentiment data." - + "\n\nDECISION LOGIC:" - + "\n- LONG: Rising organic hype (Momentum) OR Extreme Panic (Contrarian Buy)." - + "\n- SHORT: 'Sell the news' sentiment OR Extreme Euphoria (Contrarian Sell)." - + "\n- HOLD: Neutral sentiment, low social volume, or bots/spam noise." - + """ Make sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read.""" - + "\n\nYOU MUST CONCLUDE YOUR REPORT WITH: 'SIGNAL: [LONG/SHORT/HOLD]'" + "You are a social media and company specific news researcher/analyst tasked with analyzing social media posts, recent company news, and public sentiment for SHORT-TERM trading (1-2 week horizon). Focus on current sentiment momentum, viral discussions, trending topics, and any social media catalysts that could drive short-term price movement. You will be given a company's name and your objective is to write a comprehensive report detailing your analysis of what people are currently saying about that company, sentiment trends over the past week, and any viral or trending discussions that could impact the stock in the next 1-2 weeks. Use the get_news(query, start_date, end_date) tool to search for company-specific news and social media discussions. Try to look at all sources possible from social media to sentiment to news. Do not simply state the trends are mixed, provide detailed and finegrained analysis and insights that may help traders make SHORT-TERM decisions within the next 1-2 weeks." + + """ Make sure to append a Markdown table at the end of the report to organize key points in the report, organized and easy to read.""", ) prompt = ChatPromptTemplate.from_messages( @@ -36,8 +28,8 @@ def create_social_media_analyst(llm): " Use the provided tools to progress towards answering the question." " If you are unable to fully answer, that's OK; another assistant with different tools" " will help where you left off. Execute what you can to make progress." - " If you or any other assistant has the FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** or deliverable," - " prefix your response with FINAL TRANSACTION PROPOSAL: **LONG/HOLD/SHORT** so the team knows to stop." + " If you or any other assistant has the FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** or deliverable," + " prefix your response with FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT** so the team knows to stop." " You have access to the following tools: {tool_names}.\n{system_message}" "For your reference, the current date is {current_date}. The current company we want to analyze is {ticker}", ), diff --git a/tradingagents/agents/managers/research_manager.py b/tradingagents/agents/managers/research_manager.py index 803ef7c8..72cb3c58 100755 --- a/tradingagents/agents/managers/research_manager.py +++ b/tradingagents/agents/managers/research_manager.py @@ -19,24 +19,23 @@ def create_research_manager(llm, memory): for i, rec in enumerate(past_memories, 1): past_memory_str += rec["recommendation"] + "\n\n" - prompt = f"""As the portfolio manager and debate facilitator, your role is to critically evaluate this round of debate and make a definitive decision for the **Short Term (1-2 Weeks)**: align with the bear analyst, the bull analyst, or choose Hold. + prompt = f"""As the portfolio manager and debate facilitator for SHORT-TERM trading (1-2 week horizon), your role is to critically evaluate this round of debate and make a definitive position decision: align with the bull analyst (LONG), the bear analyst (SHORT), or choose HOLD only if it is strongly justified based on the arguments presented. - Summarize the key points from both sides concisely, focusing on the most compelling evidence for immediate price action. Your recommendation—**Long, Short, or Hold**—must be clear and actionable. Avoid defaulting to Hold simply because both sides have valid points; commit to a stance grounded in the debate's strongest short-term arguments. +Focus on SHORT-TERM factors: near-term catalysts, momentum, upcoming events, and what is likely to happen in the next 1-2 weeks. Summarize the key points from both sides concisely, focusing on the most compelling evidence for short-term price movement. Your position recommendation—LONG, SHORT, or HOLD—must be clear and actionable for a 1-2 week holding period. Avoid defaulting to HOLD simply because both sides have valid points; commit to a stance grounded in the debate's strongest short-term arguments. - Additionally, develop a detailed short-term investment plan for the trader. This should include: +Additionally, develop a detailed SHORT-TERM investment plan for the trader. This should include: - Your Recommendation: A decisive stance (Long/Short/Hold) supported by the most convincing arguments for the next 2 weeks. - Rationale: An explanation of why these arguments lead to your conclusion. - Strategic Actions: Concrete steps for implementing the recommendation (e.g., entry zones, stop losses). - - Take into account your past mistakes on similar situations. Use these insights to refine your decision-making. Present your analysis conversationally, as if speaking naturally, without special formatting. +Your Position Recommendation: A decisive stance (LONG/SHORT/HOLD) for the next 1-2 weeks supported by the most convincing arguments. +Rationale: An explanation of why these arguments lead to your conclusion for the short-term. +Strategic Actions: Concrete steps for implementing the recommendation with a 1-2 week timeframe in mind. +Take into account your past mistakes on similar situations. Use these insights to refine your decision-making and ensure you are learning and improving. Present your analysis conversationally, as if speaking naturally, without special formatting. - Here are your past reflections on mistakes: - \"{past_memory_str}\" +Here are your past reflections on mistakes: +\"{past_memory_str}\" - Here is the debate: - Debate History: - {history}""" +Here is the debate: +Debate History: +{history}""" response = llm.invoke(prompt) new_investment_debate_state = { diff --git a/tradingagents/agents/managers/risk_manager.py b/tradingagents/agents/managers/risk_manager.py index e3e3a5ad..cb82a7ac 100755 --- a/tradingagents/agents/managers/risk_manager.py +++ b/tradingagents/agents/managers/risk_manager.py @@ -22,25 +22,27 @@ def create_risk_manager(llm, memory): for i, rec in enumerate(past_memories, 1): past_memory_str += rec["recommendation"] + "\n\n" - prompt = f"""As the Risk Management Judge and Debate Facilitator, your goal is to evaluate the debate between three risk analysts—Risky, Neutral, and Safe/Conservative—and determine the best course of action for the trader for the **Short Term (1-2 Weeks)**. Your decision must result in a clear recommendation: **Long, Short, or Hold**. Choose Hold only if strongly justified by specific arguments, not as a fallback. + prompt = f"""As the Risk Management Judge and Debate Facilitator for SHORT-TERM trading (1-2 week horizon), your goal is to evaluate the debate between three risk analysts—Risky, Neutral, and Safe/Conservative—and determine the best position for the trader over the next 1-2 weeks. Your decision must result in a clear position recommendation: LONG, SHORT, or HOLD. Choose HOLD only if strongly justified by specific arguments, not as a fallback when all sides seem valid. Strive for clarity and decisiveness. - Guidelines for Decision-Making: - 1. **Summarize Key Arguments**: Extract the strongest points regarding short-term volatility and risk. - 2. **Provide Rationale**: Support your recommendation with direct quotes and counterarguments. - 3. **Refine the Trader's Plan**: Start with the trader's original plan, **{trader_plan}**, and adjust it based on the analysts' insights to fit a 1-2 week horizon. - 4. **Learn from Past Mistakes**: Use lessons from **{past_memory_str}** to address prior misjudgments. +Guidelines for Decision-Making (1-2 week timeframe): +1. **Summarize Key Arguments**: Extract the strongest points from each analyst, focusing on relevance to SHORT-TERM price movement. +2. **Provide Rationale**: Support your recommendation with direct quotes and counterarguments from the debate, emphasizing near-term factors. +3. **Refine the Trader's Plan**: Start with the trader's original plan, **{trader_plan}**, and adjust it based on the analysts' insights for a 1-2 week holding period. +4. **Learn from Past Mistakes**: Use lessons from **{past_memory_str}** to address prior misjudgments and improve the decision you are making now to make sure you don't make a wrong LONG/SHORT/HOLD call that loses money in the short term. - Deliverables: - - A clear and actionable recommendation: **Signal: [Long/Short/Hold]**. - - Detailed reasoning anchored in the debate and past reflections. +Deliverables: +- A clear and actionable position recommendation: LONG, SHORT, or HOLD for the next 1-2 weeks. +- Detailed reasoning anchored in the debate and past reflections, focusing on short-term factors. - --- +--- - **Analysts Debate History:** {history} +**Analysts Debate History:** +{history} - --- +--- + +Focus on actionable SHORT-TERM insights and continuous improvement. Build on past lessons, critically evaluate all perspectives, and ensure each decision optimizes for the 1-2 week timeframe.""" - Focus on actionable insights and continuous improvement for the short term.""" response = llm.invoke(prompt) new_risk_debate_state = { diff --git a/tradingagents/agents/researchers/bear_researcher.py b/tradingagents/agents/researchers/bear_researcher.py index 6eabbdd4..261e1866 100755 --- a/tradingagents/agents/researchers/bear_researcher.py +++ b/tradingagents/agents/researchers/bear_researcher.py @@ -22,14 +22,14 @@ def create_bear_researcher(llm, memory): for i, rec in enumerate(past_memories, 1): past_memory_str += rec["recommendation"] + "\n\n" - prompt = f"""You are a Bear Analyst making the case against investing in the stock for the **Short Term (1-2 Weeks)**. Your goal is to present a well-reasoned argument emphasizing immediate risks, technical breakdowns, and negative catalysts that will drive the price down in the next 10 days. + prompt = f"""You are a Bear Analyst making the case for taking a SHORT position on the stock for SHORT-TERM trading (1-2 week horizon). Your goal is to present a well-reasoned argument emphasizing near-term risks, negative catalysts, and bearish short-term signals. Leverage the provided research and data to highlight potential downsides and counter bullish arguments effectively. -Key points to focus on: +Key points to focus on for the next 1-2 weeks: -- Risks and Challenges: Highlight factors like market saturation, financial instability, or macroeconomic threats that could hinder the stock's performance. -- Competitive Weaknesses: Emphasize vulnerabilities such as weaker market positioning, declining innovation, or threats from competitors. -- Negative Indicators: Use evidence from financial data, market trends, or recent adverse news to support your position. -- Bull Counterpoints: Critically analyze the bull argument with specific data and sound reasoning, exposing weaknesses or over-optimistic assumptions. +- Near-Term Risks: Highlight upcoming events, earnings risks, negative catalysts, or announcements that could drive the price down in the next 1-2 weeks. +- Short-Term Weakness: Emphasize negative technical signals, overbought conditions, and recent price action supporting a SHORT position. +- Negative Short-Term Indicators: Use recent adverse news, sentiment deterioration, and market headwinds to support the SHORT position in the near term. +- Bull Counterpoints: Critically analyze the bull argument with specific data and sound reasoning, exposing weaknesses or over-optimistic assumptions that make LONG risky for the next 1-2 weeks. - Engagement: Present your argument in a conversational style, directly engaging with the bull analyst's points and debating effectively rather than simply listing facts. Resources available: @@ -41,7 +41,7 @@ Company fundamentals report: {fundamentals_report} Conversation history of the debate: {history} Last bull argument: {current_response} Reflections from similar situations and lessons learned: {past_memory_str} -Use this information to deliver a compelling bear argument, refute the bull's claims, and engage in a dynamic debate that demonstrates the risks and weaknesses of investing in the stock. You must also address reflections and learn from lessons and mistakes you made in the past. +Use this information to deliver a compelling bear argument for a SHORT-TERM SHORT position (1-2 weeks), refute the bull's claims, and engage in a dynamic debate that demonstrates why SHORT is preferable over LONG for the near term. You must also address reflections and learn from lessons and mistakes you made in the past. """ response = llm.invoke(prompt) diff --git a/tradingagents/agents/researchers/bull_researcher.py b/tradingagents/agents/researchers/bull_researcher.py index d67fe17e..2ad898e7 100755 --- a/tradingagents/agents/researchers/bull_researcher.py +++ b/tradingagents/agents/researchers/bull_researcher.py @@ -22,13 +22,13 @@ def create_bull_researcher(llm, memory): for i, rec in enumerate(past_memories, 1): past_memory_str += rec["recommendation"] + "\n\n" - prompt = f"""You are a Bull Analyst advocating for investing in the stock for the **Short Term (1-2 Weeks)**. Your task is to build a strong case emphasizing immediate growth momentum, breakout patterns, and positive catalysts due in the next 10 days. + prompt = f"""You are a Bull Analyst advocating for taking a LONG position on the stock for SHORT-TERM trading (1-2 week horizon). Your task is to build a strong, evidence-based case emphasizing near-term catalysts, momentum indicators, and positive short-term signals. Leverage the provided research and data to address concerns and counter bearish arguments effectively. -Key points to focus on: -- Growth Potential: Highlight the company's market opportunities, revenue projections, and scalability. -- Competitive Advantages: Emphasize factors like unique products, strong branding, or dominant market positioning. -- Positive Indicators: Use financial health, industry trends, and recent positive news as evidence. -- Bear Counterpoints: Critically analyze the bear argument with specific data and sound reasoning, addressing concerns thoroughly and showing why the bull perspective holds stronger merit. +Key points to focus on for the next 1-2 weeks: +- Near-Term Catalysts: Highlight upcoming events, earnings, product launches, or announcements that could drive the price up in the next 1-2 weeks. +- Short-Term Momentum: Emphasize positive technical signals, momentum indicators, and recent price action supporting a LONG position. +- Positive Short-Term Indicators: Use recent news, sentiment shifts, and market trends as evidence for going LONG in the near term. +- Bear Counterpoints: Critically analyze the bear argument with specific data and sound reasoning, addressing concerns and showing why the LONG position holds stronger merit over SHORT for the next 1-2 weeks. - Engagement: Present your argument in a conversational style, engaging directly with the bear analyst's points and debating effectively rather than just listing data. Resources available: @@ -39,7 +39,7 @@ Company fundamentals report: {fundamentals_report} Conversation history of the debate: {history} Last bear argument: {current_response} Reflections from similar situations and lessons learned: {past_memory_str} -Use this information to deliver a compelling bull argument, refute the bear's concerns, and engage in a dynamic debate that demonstrates the strengths of the bull position. You must also address reflections and learn from lessons and mistakes you made in the past. +Use this information to deliver a compelling bull argument for a SHORT-TERM LONG position (1-2 weeks), refute the bear's concerns, and engage in a dynamic debate that demonstrates the strengths of the LONG position for the near term. You must also address reflections and learn from lessons and mistakes you made in the past. """ response = llm.invoke(prompt) diff --git a/tradingagents/agents/risk_mgmt/aggresive_debator.py b/tradingagents/agents/risk_mgmt/aggresive_debator.py index 7e2b4937..8f8a66b3 100755 --- a/tradingagents/agents/risk_mgmt/aggresive_debator.py +++ b/tradingagents/agents/risk_mgmt/aggresive_debator.py @@ -18,11 +18,11 @@ def create_risky_debator(llm): trader_decision = state["trader_investment_plan"] - prompt = f"""As the Risky Risk Analyst, your role is to actively champion high-reward, high-risk opportunities, emphasizing bold strategies and competitive advantages. When evaluating the trader's decision or plan, focus intently on the potential upside, growth potential, and innovative benefits—even when these come with elevated risk. Use the provided market data and sentiment analysis to strengthen your arguments and challenge the opposing views. Specifically, respond directly to each point made by the conservative and neutral analysts, countering with data-driven rebuttals and persuasive reasoning. Highlight where their caution might miss critical opportunities or where their assumptions may be overly conservative. Here is the trader's decision: + prompt = f"""As the Risky Risk Analyst for SHORT-TERM trading (1-2 week horizon), your role is to actively champion high-reward opportunities that can be captured in the next 1-2 weeks. When evaluating the trader's position decision (LONG/SHORT/HOLD), focus intently on near-term catalysts, momentum, and short-term upside potential—even when these come with elevated risk. Use the provided market data and sentiment analysis to strengthen your arguments for aggressive short-term positioning. Specifically, respond directly to each point made by the conservative and neutral analysts, countering with data-driven rebuttals focused on short-term opportunities. Highlight where their caution might miss critical near-term opportunities. Here is the trader's position decision: {trader_decision} -Your task is to create a compelling case for the trader's decision by questioning and critiquing the conservative and neutral stances to demonstrate why your high-reward perspective offers the best path forward. Incorporate insights from the following sources into your arguments: +Your task is to create a compelling case for an aggressive SHORT-TERM position (1-2 weeks) by questioning and critiquing the conservative and neutral stances to demonstrate why bold action now offers the best path forward. Incorporate insights from the following sources into your arguments: Market Research Report: {market_research_report} Social Media Sentiment Report: {sentiment_report} @@ -30,7 +30,7 @@ Latest World Affairs Report: {news_report} Company Fundamentals Report: {fundamentals_report} Here is the current conversation history: {history} Here are the last arguments from the conservative analyst: {current_safe_response} Here are the last arguments from the neutral analyst: {current_neutral_response}. If there are no responses from the other viewpoints, do not halluncinate and just present your point. -Engage actively by addressing any specific concerns raised, refuting the weaknesses in their logic, and asserting the benefits of risk-taking to outpace market norms. Maintain a focus on debating and persuading, not just presenting data. Challenge each counterpoint to underscore why a high-risk approach is optimal. Output conversationally as if you are speaking without any special formatting.""" +Engage actively by addressing any specific concerns raised, refuting the weaknesses in their logic, and asserting the benefits of taking decisive action to capture short-term gains. Maintain a focus on debating and persuading, not just presenting data. Challenge each counterpoint to underscore why a decisive LONG or SHORT position is optimal over HOLD for the next 1-2 weeks. Output conversationally as if you are speaking without any special formatting.""" response = llm.invoke(prompt) diff --git a/tradingagents/agents/risk_mgmt/conservative_debator.py b/tradingagents/agents/risk_mgmt/conservative_debator.py index c56e16ad..7c494085 100755 --- a/tradingagents/agents/risk_mgmt/conservative_debator.py +++ b/tradingagents/agents/risk_mgmt/conservative_debator.py @@ -19,11 +19,11 @@ def create_safe_debator(llm): trader_decision = state["trader_investment_plan"] - prompt = f"""As the Safe/Conservative Risk Analyst, your primary objective is to protect assets, minimize volatility, and ensure steady, reliable growth. You prioritize stability, security, and risk mitigation, carefully assessing potential losses, economic downturns, and market volatility. When evaluating the trader's decision or plan, critically examine high-risk elements, pointing out where the decision may expose the firm to undue risk and where more cautious alternatives could secure long-term gains. Here is the trader's decision: + prompt = f"""As the Safe/Conservative Risk Analyst for SHORT-TERM trading (1-2 week horizon), your primary objective is to protect assets from short-term volatility and sudden market moves. You prioritize stability and risk mitigation, carefully assessing potential losses from near-term events, earnings surprises, and market volatility over the next 1-2 weeks. When evaluating the trader's position decision (LONG/SHORT/HOLD), critically examine high-risk elements for the short term, pointing out where the decision may expose the firm to undue near-term risk. Here is the trader's position decision: {trader_decision} -Your task is to actively counter the arguments of the Risky and Neutral Analysts, highlighting where their views may overlook potential threats or fail to prioritize sustainability. Respond directly to their points, drawing from the following data sources to build a convincing case for a low-risk approach adjustment to the trader's decision: +Your task is to actively counter the arguments of the Risky and Neutral Analysts, highlighting where their views may overlook potential short-term threats or near-term downside risks. Respond directly to their points, drawing from the following data sources to build a convincing case for a cautious short-term approach: Market Research Report: {market_research_report} Social Media Sentiment Report: {sentiment_report} @@ -31,7 +31,7 @@ Latest World Affairs Report: {news_report} Company Fundamentals Report: {fundamentals_report} Here is the current conversation history: {history} Here is the last response from the risky analyst: {current_risky_response} Here is the last response from the neutral analyst: {current_neutral_response}. If there are no responses from the other viewpoints, do not halluncinate and just present your point. -Engage by questioning their optimism and emphasizing the potential downsides they may have overlooked. Address each of their counterpoints to showcase why a conservative stance is ultimately the safest path for the firm's assets. Focus on debating and critiquing their arguments to demonstrate the strength of a low-risk strategy over their approaches. Output conversationally as if you are speaking without any special formatting.""" +Engage by questioning their optimism and emphasizing the potential short-term downsides they may have overlooked. Address each of their counterpoints to showcase why a conservative stance is the safest path for the next 1-2 weeks. Focus on debating and critiquing their arguments to demonstrate the strength of a risk-aware strategy for short-term trading. Output conversationally as if you are speaking without any special formatting.""" response = llm.invoke(prompt) diff --git a/tradingagents/agents/risk_mgmt/neutral_debator.py b/tradingagents/agents/risk_mgmt/neutral_debator.py index a6d2ef5c..ef1e97a4 100755 --- a/tradingagents/agents/risk_mgmt/neutral_debator.py +++ b/tradingagents/agents/risk_mgmt/neutral_debator.py @@ -18,11 +18,11 @@ def create_neutral_debator(llm): trader_decision = state["trader_investment_plan"] - prompt = f"""As the Neutral Risk Analyst, your role is to provide a balanced perspective, weighing both the potential benefits and risks of the trader's decision or plan. You prioritize a well-rounded approach, evaluating the upsides and downsides while factoring in broader market trends, potential economic shifts, and diversification strategies.Here is the trader's decision: + prompt = f"""As the Neutral Risk Analyst for SHORT-TERM trading (1-2 week horizon), your role is to provide a balanced perspective on the trader's position decision (LONG/SHORT/HOLD) for the next 1-2 weeks. You prioritize a well-rounded approach, evaluating near-term upsides and downsides while factoring in upcoming events, short-term market trends, and immediate catalysts. Here is the trader's position decision: {trader_decision} -Your task is to challenge both the Risky and Safe Analysts, pointing out where each perspective may be overly optimistic or overly cautious. Use insights from the following data sources to support a moderate, sustainable strategy to adjust the trader's decision: +Your task is to challenge both the Risky and Safe Analysts on their short-term views, pointing out where each perspective may be overly optimistic or overly cautious for the 1-2 week timeframe. Use insights from the following data sources to support a balanced short-term position strategy: Market Research Report: {market_research_report} Social Media Sentiment Report: {sentiment_report} @@ -30,7 +30,7 @@ Latest World Affairs Report: {news_report} Company Fundamentals Report: {fundamentals_report} Here is the current conversation history: {history} Here is the last response from the risky analyst: {current_risky_response} Here is the last response from the safe analyst: {current_safe_response}. If there are no responses from the other viewpoints, do not halluncinate and just present your point. -Engage actively by analyzing both sides critically, addressing weaknesses in the risky and conservative arguments to advocate for a more balanced approach. Challenge each of their points to illustrate why a moderate risk strategy might offer the best of both worlds, providing growth potential while safeguarding against extreme volatility. Focus on debating rather than simply presenting data, aiming to show that a balanced view can lead to the most reliable outcomes. Output conversationally as if you are speaking without any special formatting.""" +Engage actively by analyzing both sides critically for the short-term horizon, addressing weaknesses in the risky and conservative arguments. Challenge each of their points to illustrate why a balanced approach (whether LONG, SHORT, or HOLD) might offer the best risk-reward for the next 1-2 weeks. Focus on debating rather than simply presenting data, aiming to show that a balanced view optimized for short-term trading can lead to the most reliable outcomes. Output conversationally as if you are speaking without any special formatting.""" response = llm.invoke(prompt) diff --git a/tradingagents/agents/trader/trader.py b/tradingagents/agents/trader/trader.py index 337d18c5..be9bca21 100755 --- a/tradingagents/agents/trader/trader.py +++ b/tradingagents/agents/trader/trader.py @@ -24,15 +24,13 @@ def create_trader(llm, memory): context = { "role": "user", - "content": f"Based on a comprehensive analysis by a team of analysts, here is an investment plan tailored for {company_name}. This plan incorporates insights from current technical market trends, macroeconomic indicators, and social media sentiment. Use this plan as a foundation for evaluating your next trading decision.\n\nProposed Investment Plan: {investment_plan}\n\nLeverage these insights to make an informed and strategic decision.", + "content": f"Based on a comprehensive analysis by a team of analysts, here is a SHORT-TERM investment plan (1-2 week horizon) tailored for {company_name}. This plan incorporates insights from current technical market trends, near-term catalysts, and social media sentiment. Use this plan as a foundation for evaluating your next SHORT-TERM position decision.\n\nProposed Investment Plan: {investment_plan}\n\nLeverage these insights to make an informed and strategic position decision for the next 1-2 weeks.", } messages = [ { "role": "system", - "content": f"""You are a trading agent analyzing market data to make investment decisions. Based on your analysis, provide a specific position to long, short, or hold. - End with a firm decision. Do not forget to utilize lessons from past decisions to learn from your mistakes. Here is some reflections from similar situatiosn you traded in and the lessons learned: {past_memory_str}""" - + """Output strictly a JSON block with the following format: {"position": "Long" | "Short" | "Hold", explanation: str, "profit_estimate_pct": float, "risk_level": "Low" | "Medium" | "High", "trade_duration_days": int}""", + "content": f"""You are a trading agent analyzing market data to make SHORT-TERM position decisions (1-2 week horizon). Based on your analysis, provide a specific position recommendation: LONG (bullish, expecting price increase in 1-2 weeks), SHORT (bearish, expecting price decrease in 1-2 weeks), or HOLD (neutral, no position change). Focus on near-term catalysts, momentum, and what is likely to happen in the next 1-2 weeks. End with a firm decision and always conclude your response with 'FINAL POSITION RECOMMENDATION: **LONG/HOLD/SHORT**' to confirm your recommendation. Do not forget to utilize lessons from past decisions to learn from your mistakes. Here is some reflections from similar situations you traded in and the lessons learned: {past_memory_str}""", }, context, ] diff --git a/tradingagents/agents/utils/memory.py b/tradingagents/agents/utils/memory.py index b0b33ae2..ddc87846 100755 --- a/tradingagents/agents/utils/memory.py +++ b/tradingagents/agents/utils/memory.py @@ -9,7 +9,10 @@ class FinancialSituationMemory: self.embedding = "nomic-embed-text" else: self.embedding = "text-embedding-3-small" - self.client = OpenAI(base_url=config["backend_embedding_url"]) + self.client = OpenAI( + api_key=config["embedding_api_key"], + base_url=config["backend_embedding_url"] + ) self.chroma_client = chromadb.Client(Settings(allow_reset=True)) self.situation_collection = self.chroma_client.create_collection(name=name) diff --git a/tradingagents/dataflows/alpha_vantage_common.py b/tradingagents/dataflows/alpha_vantage_common.py index 409ff29e..e8513755 100755 --- a/tradingagents/dataflows/alpha_vantage_common.py +++ b/tradingagents/dataflows/alpha_vantage_common.py @@ -5,6 +5,8 @@ import json from datetime import datetime from io import StringIO +from .utils import safe_read_csv + API_BASE_URL = "https://www.alphavantage.co/query" def get_api_key() -> str: @@ -101,7 +103,7 @@ def _filter_csv_by_date_range(csv_data: str, start_date: str, end_date: str) -> try: # Parse CSV data - df = pd.read_csv(StringIO(csv_data)) + df = safe_read_csv(csv_data) # Assume the first column is the date column (timestamp) date_col = df.columns[0] diff --git a/tradingagents/dataflows/interface.py b/tradingagents/dataflows/interface.py index 4061f043..d39814c8 100755 --- a/tradingagents/dataflows/interface.py +++ b/tradingagents/dataflows/interface.py @@ -48,9 +48,9 @@ TOOLS_CATEGORIES = { "description": "News (public/insiders, original/processed)", "tools": [ "get_news", - "get_global_news", + # "get_global_news", # "get_insider_sentiment", - "get_insider_transactions", + # "get_insider_transactions", ] } } diff --git a/tradingagents/dataflows/local.py b/tradingagents/dataflows/local.py index 502bc43a..59a76d9c 100755 --- a/tradingagents/dataflows/local.py +++ b/tradingagents/dataflows/local.py @@ -7,6 +7,7 @@ from dateutil.relativedelta import relativedelta import json from .reddit_utils import fetch_top_from_category from tqdm import tqdm +from .utils import safe_read_csv def get_YFin_data_window( symbol: Annotated[str, "ticker symbol of the company"], @@ -19,7 +20,7 @@ def get_YFin_data_window( start_date = before.strftime("%Y-%m-%d") # read in data - data = pd.read_csv( + data = safe_read_csv( os.path.join( DATA_DIR, f"market_data/price_data/{symbol}-YFin-data-2015-01-01-2025-03-25.csv", @@ -54,7 +55,7 @@ def get_YFin_data( end_date: Annotated[str, "End date in yyyy-mm-dd format"], ) -> str: # read in data - data = pd.read_csv( + data = safe_read_csv( os.path.join( DATA_DIR, f"market_data/price_data/{symbol}-YFin-data-2015-01-01-2025-03-25.csv", @@ -241,7 +242,7 @@ def get_simfin_balance_sheet( "us", f"us-balance-{freq}.csv", ) - df = pd.read_csv(data_path, sep=";") + df = safe_read_csv(data_path, sep=";") # Convert date strings to datetime objects and remove any time components df["Report Date"] = pd.to_datetime(df["Report Date"], utc=True).dt.normalize() @@ -288,7 +289,7 @@ def get_simfin_cashflow( "us", f"us-cashflow-{freq}.csv", ) - df = pd.read_csv(data_path, sep=";") + df = safe_read_csv(data_path, sep=";") # Convert date strings to datetime objects and remove any time components df["Report Date"] = pd.to_datetime(df["Report Date"], utc=True).dt.normalize() @@ -335,7 +336,7 @@ def get_simfin_income_statements( "us", f"us-income-{freq}.csv", ) - df = pd.read_csv(data_path, sep=";") + df = safe_read_csv(data_path, sep=";") # Convert date strings to datetime objects and remove any time components df["Report Date"] = pd.to_datetime(df["Report Date"], utc=True).dt.normalize() diff --git a/tradingagents/dataflows/stockstats_utils.py b/tradingagents/dataflows/stockstats_utils.py index e81684e0..cf28f0e9 100755 --- a/tradingagents/dataflows/stockstats_utils.py +++ b/tradingagents/dataflows/stockstats_utils.py @@ -4,6 +4,7 @@ from stockstats import wrap from typing import Annotated import os from .config import get_config, DATA_DIR +from .utils import safe_read_csv class StockstatsUtils: @@ -26,7 +27,7 @@ class StockstatsUtils: if not online: try: - data = pd.read_csv( + data = safe_read_csv( os.path.join( DATA_DIR, f"{symbol}-YFin-data-2015-01-01-2025-03-25.csv", @@ -54,7 +55,7 @@ class StockstatsUtils: ) if os.path.exists(data_file): - data = pd.read_csv(data_file) + data = safe_read_csv(data_file) data["Date"] = pd.to_datetime(data["Date"]) else: data = yf.download( diff --git a/tradingagents/dataflows/utils.py b/tradingagents/dataflows/utils.py index 4523de19..46e0b514 100755 --- a/tradingagents/dataflows/utils.py +++ b/tradingagents/dataflows/utils.py @@ -1,4 +1,5 @@ import os +from io import StringIO import json import pandas as pd from datetime import date, timedelta, datetime @@ -37,3 +38,14 @@ def get_next_weekday(date): return next_weekday else: return date + +def safe_read_csv(text, **kwargs): + """ + Try the default C engine first; on ParserError fall back to python engine + and skip bad lines to avoid tokenizing errors from malformed rows. + """ + try: + return pd.read_csv(StringIO(text), **kwargs) + except pd.errors.ParserError: + return pd.read_csv(StringIO(text), engine='python', on_bad_lines='skip', **kwargs) + diff --git a/tradingagents/dataflows/y_finance.py b/tradingagents/dataflows/y_finance.py index da7273d5..bae34fd4 100755 --- a/tradingagents/dataflows/y_finance.py +++ b/tradingagents/dataflows/y_finance.py @@ -4,6 +4,7 @@ from dateutil.relativedelta import relativedelta import yfinance as yf import os from .stockstats_utils import StockstatsUtils +from .utils import safe_read_csv def get_YFin_data_online( symbol: Annotated[str, "ticker symbol of the company"], @@ -205,7 +206,7 @@ def _get_stock_stats_bulk( if not online: # Local data path try: - data = pd.read_csv( + data = safe_read_csv( os.path.join( config.get("data_cache_dir", "data"), f"{symbol}-YFin-data-2015-01-01-2025-03-25.csv", @@ -232,7 +233,7 @@ def _get_stock_stats_bulk( ) if os.path.exists(data_file): - data = pd.read_csv(data_file) + data = safe_read_csv(data_file) data["Date"] = pd.to_datetime(data["Date"]) else: data = yf.download( diff --git a/tradingagents/default_config.py b/tradingagents/default_config.py index 745718d3..1fbe7d59 100755 --- a/tradingagents/default_config.py +++ b/tradingagents/default_config.py @@ -1,13 +1,11 @@ import os DEFAULT_CONFIG = { - "project_dir": os.path.abspath(os.path.join(os.path.dirname(__file__), ".")), - "results_dir": os.getenv("/data/coding/TradingAgents/results", "./results"), + "project_dir": "/home/jaskirat/coding/TradingAgents", + # "results_dir": "/data/coding/TradingAgents/results", + "results_dir": "/home/jaskirat/coding/TradingAgents/results", "data_dir": "/data", - "data_cache_dir": os.path.join( - os.path.abspath(os.path.join(os.path.dirname(__file__), ".")), - "dataflows/data_cache", - ), + "data_cache_dir": '/home/jaskirat/coding/TradingAgents/dataflows/data_cache', # LLM settings "llm_provider": "ollama", # "deep_think_llm": "hf.co/unsloth/Qwen3-30B-A3B-Instruct-2507-GGUF:Q5_K_XL", @@ -19,13 +17,21 @@ DEFAULT_CONFIG = { # "deep_think_llm": "gpt-oss", # "quick_think_llm": "gpt-oss", # "temperature": 0.1, - "deep_think_llm": "glm-4.7-flash", - "quick_think_llm": "glm-4.7-flash", + # "deep_think_llm": "gpt-5-mini", + # "quick_think_llm": "gpt-5-mini", + "deep_think_llm": "glm-4.7", + "quick_think_llm": "glm-4.7", "temperature": 0.7, "top_p": 0.95, "backend_url": "http://localhost:8080/v1", + # "backend_url": "https://api.openai.com/v1", + # "backend_url": "https://api.z.ai/api/paas/v4", + # "backend_embedding_url": "https://api.openai.com/v1", "backend_embedding_url": "http://localhost:8081/v1", + # "backend_embedding_url":"https://api.z.ai/api/v1", # "backend_url": "http://localhost:11434/v1", + "api_key": "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", + "embedding_api_key": "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", # Debate and discussion settings "max_debate_rounds": 5, "max_risk_discuss_rounds": 5, diff --git a/tradingagents/graph/signal_processing.py b/tradingagents/graph/signal_processing.py index ee1f358c..87f463ce 100755 --- a/tradingagents/graph/signal_processing.py +++ b/tradingagents/graph/signal_processing.py @@ -1,5 +1,7 @@ # TradingAgents/graph/signal_processing.py +import json +import re from langchain_openai import ChatOpenAI @@ -10,23 +12,132 @@ class SignalProcessor: """Initialize with an LLM for processing.""" self.quick_thinking_llm = quick_thinking_llm - def process_signal(self, full_signal: str) -> str: + def _extract_json_from_response(self, response_str: str) -> str: + """Extract JSON from response, handling markdown code blocks.""" + # Remove markdown code blocks if present + code_block_pattern = r"```(?:json)?\s*([\s\S]*?)\s*```" + match = re.search(code_block_pattern, response_str) + if match: + return match.group(1).strip() + + # Try to find JSON object directly + json_pattern = r"\{[\s\S]*\}" + match = re.search(json_pattern, response_str) + if match: + return match.group(0) + + return response_str + + def _extract_field_value(self, text: str, field: str, default): + """Extract a field value from text using regex.""" + # Try to match "field": value or "field": "value" + pattern = rf'"{field}"\s*:\s*("([^"]*?)"|(-?\d+\.?\d*))' + match = re.search(pattern, text) + if match: + if match.group(2) is not None: # String value + return match.group(2) + elif match.group(3) is not None: # Numeric value + try: + return float(match.group(3)) + except ValueError: + return default + return default + + def _parse_response_with_regex(self, response_str: str) -> dict: + """Parse response using regex when JSON parsing fails.""" + # Extract position + position = "HOLD" + pos_match = re.search(r'"position"\s*:\s*"(LONG|SHORT|HOLD)"', response_str, re.IGNORECASE) + if pos_match: + position = pos_match.group(1).upper() + elif "LONG" in response_str.upper() and "SHORT" not in response_str.upper(): + position = "LONG" + elif "SHORT" in response_str.upper() and "LONG" not in response_str.upper(): + position = "SHORT" + + # Extract numeric fields + profit_match = re.search(r'"profit_estimate_pct"\s*:\s*(-?\d+\.?\d*)', response_str) + profit = float(profit_match.group(1)) if profit_match else 0.0 + + stop_loss_match = re.search(r'"stop_loss_pct"\s*:\s*(-?\d+\.?\d*)', response_str) + stop_loss = float(stop_loss_match.group(1)) if stop_loss_match else 5.0 + + # Extract risk level + risk_match = re.search(r'"risk_level"\s*:\s*"(low|mid|high)"', response_str, re.IGNORECASE) + risk_level = risk_match.group(1).lower() if risk_match else "mid" + + # Extract explanation - handle both quoted and unquoted + explanation = "Unable to extract explanation." + exp_match = re.search(r'"explanation"\s*:\s*"([^"]*)"', response_str) + if exp_match: + explanation = exp_match.group(1) + else: + # Try to get text after "explanation": + exp_match = re.search(r'"explanation"\s*:\s*([^,}]+)', response_str) + if exp_match: + explanation = exp_match.group(1).strip().strip('"') + + return { + "position": position, + "profit_estimate_pct": profit, + "stop_loss_pct": stop_loss, + "risk_level": risk_level, + "explanation": explanation[:300] if explanation else "Unable to extract explanation." + } + + def process_signal(self, full_signal: str) -> dict: """ - Process a full trading signal to extract the core decision. + Process a full trading signal to extract the core decision and analysis. Args: full_signal: Complete trading signal text Returns: - Extracted decision (LONG, SHORT, or HOLD) + Dictionary containing: + - position: LONG, SHORT, or HOLD + - profit_estimate_pct: Estimated profit percentage + - stop_loss_pct: Recommended stop loss percentage + - risk_level: low, mid, or high + - explanation: Brief explanation of the decision """ messages = [ ( "system", - "You are an efficient assistant designed to analyze paragraphs or financial reports provided by a group of analysts. Your task is to extract the investment decision: LONG, SHORT, or HOLD. Provide only the extracted decision (LONG, SHORT, or HOLD) as your output, without adding any additional text or information." - + """Output strictly a JSON block with the following format: {"position": "Long" | "Short" | "Hold", explanation: str, "profit_estimate_pct": float, "risk_level": "Low" | "Medium" | "High"}""", + """You are an efficient assistant designed to analyze paragraphs or financial reports provided by a group of analysts for SHORT-TERM trading (1-2 week horizon). Your task is to extract the position recommendation and provide a structured analysis. + +Extract and return a JSON object with the following fields: +1. "position": The position recommendation for the next 1-2 weeks - must be exactly one of: "LONG", "SHORT", or "HOLD" +2. "profit_estimate_pct": Your estimated profit/loss percentage over the next 1-2 weeks as a number (e.g., 5.5 for 5.5% profit, -3.0 for 3% loss). Base this on the short-term analysis provided. +3. "stop_loss_pct": The recommended stop loss percentage as a positive number (e.g., 3.0 for a 3% stop loss). This should be based on the risk level and volatility mentioned in the analysis. +4. "risk_level": The short-term risk level - must be exactly one of: "low", "mid", or "high" +5. "explanation": A brief 1-2 sentence explanation of why this position is recommended for the short-term (1-2 weeks) + +Return ONLY the raw JSON object, no markdown formatting, no code blocks. Example: +{"position": "LONG", "profit_estimate_pct": 5.5, "stop_loss_pct": 3.0, "risk_level": "mid", "explanation": "Strong short-term momentum and upcoming catalyst support a bullish position for the next 1-2 weeks."}""", ), ("human", full_signal), ] - return self.quick_thinking_llm.invoke(messages).content + response_content = self.quick_thinking_llm.invoke(messages).content + print(response_content) + response_str = str(response_content) if response_content else "" + + # Extract JSON from response (handles markdown code blocks) + json_str = self._extract_json_from_response(response_str) + + try: + result = json.loads(json_str) + if "position" not in result: + result["position"] = "HOLD" + if "profit_estimate_pct" not in result: + result["profit_estimate_pct"] = 0.0 + if "stop_loss_pct" not in result: + result["stop_loss_pct"] = 5.0 + if "risk_level" not in result: + result["risk_level"] = "mid" + if "explanation" not in result: + result["explanation"] = "Unable to extract detailed explanation." + return result + except json.JSONDecodeError: + # Fallback to regex-based parsing + return self._parse_response_with_regex(response_str) diff --git a/tradingagents/graph/trading_graph.py b/tradingagents/graph/trading_graph.py index 1ef6d9ec..6040ea46 100755 --- a/tradingagents/graph/trading_graph.py +++ b/tradingagents/graph/trading_graph.py @@ -73,14 +73,20 @@ class TradingAgentsGraph: # Initialize LLMs if self.config["llm_provider"].lower() == "openai" or self.config["llm_provider"] == "ollama" or self.config["llm_provider"] == "openrouter": - self.deep_thinking_llm = ChatOpenAI(model=self.config["deep_think_llm"], - base_url=self.config["backend_url"], - temperature=self.config["temperature"], - top_p=self.config["top_p"]) - self.quick_thinking_llm = ChatOpenAI(model=self.config["quick_think_llm"], - base_url=self.config["backend_url"], - temperature=self.config["temperature"], - top_p=self.config["top_p"]) + self.deep_thinking_llm = ChatOpenAI( + api_key=self.config["api_key"], + model=self.config["deep_think_llm"], + base_url=self.config["backend_url"], + temperature=self.config["temperature"], + # top_p=self.config["top_p"] + ) + self.quick_thinking_llm = ChatOpenAI( + api_key=self.config["api_key"], + model=self.config["quick_think_llm"], + base_url=self.config["backend_url"], + temperature=self.config["temperature"], + # top_p=self.config["top_p"] + ) elif self.config["llm_provider"].lower() == "anthropic": self.deep_thinking_llm = ChatAnthropic(model=self.config["deep_think_llm"], base_url=self.config["backend_url"], @@ -155,7 +161,7 @@ class TradingAgentsGraph: get_news, # get_global_news, # get_insider_sentiment, - get_insider_transactions, + # get_insider_transactions, ] ), "fundamentals": ToolNode( @@ -199,7 +205,7 @@ class TradingAgentsGraph: self.curr_state = final_state # Log state - # self._log_state(trade_date, final_state) + self._log_state(trade_date, final_state) # Return decision and processed signal return final_state, self.process_signal(final_state["final_trade_decision"]) @@ -237,11 +243,11 @@ class TradingAgentsGraph: } # Save to file - directory = Path(f"eval_results/{self.ticker}/TradingAgentsStrategy_logs/") + directory = Path(self.config["results_dir"]) / str(self.ticker) directory.mkdir(parents=True, exist_ok=True) with open( - f"eval_results/{self.ticker}/TradingAgentsStrategy_logs/full_states_log_{trade_date}.json", + f"{directory}/{trade_date}.json", "w", ) as f: json.dump(self.log_states_dict, f, indent=4) diff --git a/tradingagents/tauric_researcher.py b/tradingagents/tauric_researcher.py index 5549dcac..b1ec4656 100644 --- a/tradingagents/tauric_researcher.py +++ b/tradingagents/tauric_researcher.py @@ -1,5 +1,6 @@ import os from datetime import datetime +import shutil from typing import Dict from tradingagents.graph.trading_graph import TradingAgentsGraph @@ -17,7 +18,18 @@ class TauricResearcher: os.environ["OPENAI_API_KEY"] = "sk-xxxx" # IGNORE os.environ["ALPHA_VANTAGE_API_KEY"] = "J13IJQQOT4NLKF3A" os.environ["OLLAMA_API_KEY"] = "85a41aff1f814d3ca81f0a957ac02114.HGH8TZywvA0zbLe2y09Kvv4F" - + + def clear_data_cache(self): + """Clear the data cache directory to ensure fresh data retrieval.""" + cache_dir = DEFAULT_CONFIG["data_cache_dir"] + if os.path.isdir(cache_dir): + for name in os.listdir(cache_dir): + path = os.path.join(cache_dir, name) + if os.path.isdir(path): + shutil.rmtree(path) + else: + os.remove(path) + def run(self, stock_symbol: str = "NVDA", date: str = None, config: dict = DEFAULT_CONFIG.copy()) -> dict: """ Run the trading agent to generate a trading decision for a stock. @@ -28,12 +40,16 @@ class TauricResearcher: Returns: The evaluated trading decision as a Python object. """ + self.clear_data_cache() # Initialize the trading graph with debug mode enabled ta = TradingAgentsGraph(debug=True, config=config) # Forward propagate through the graph to get trading decision for NVDA _, decision = ta.propagate(stock_symbol, date) - decision = eval(decision) + try: + decision = eval(decision) + except Exception as e: + pass # Evaluate and return the decision string as a Python object return decision \ No newline at end of file diff --git a/uv.lock b/uv.lock old mode 100644 new mode 100755