corrected project, added mcp, litellm, fastapi yet
@ -1,8 +1,12 @@
|
||||
# Git
|
||||
# ===== Git =====
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Python
|
||||
# ===== OS =====
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# ===== Python =====
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.pyo
|
||||
@ -13,38 +17,29 @@ __pycache__/
|
||||
dist/
|
||||
build/
|
||||
|
||||
# Virtual envs
|
||||
# ===== Virtual envs =====
|
||||
.venv
|
||||
venv
|
||||
env/
|
||||
|
||||
# Env files
|
||||
# ===== Env files =====
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
|
||||
# Editors
|
||||
# ===== Editors =====
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Tests
|
||||
# ===== Tests =====
|
||||
tests/
|
||||
test/
|
||||
|
||||
# Node
|
||||
node_modules/
|
||||
frontend/node_modules/
|
||||
.next/
|
||||
frontend/.next/
|
||||
npm-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Docker
|
||||
# ===== Docker =====
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
.dockerignore
|
||||
|
||||
|
||||
# ===== Chainlit =====
|
||||
.files/
|
||||
.chainlit/translations/*
|
||||
!.chainlit/translations/en-US.json
|
||||
*.log
|
||||
29
.env.example
Normal file
@ -0,0 +1,29 @@
|
||||
# .env
|
||||
|
||||
# ----- API KEYS -----
|
||||
GROQ_API_KEY=...
|
||||
GEMINI_API_KEY=...
|
||||
CEREBRAS_API_KEY=...
|
||||
OPENROUTER_API_KEY=...
|
||||
LITELLM_API_KEY=sk-anything
|
||||
OPENAI_API_KEY=sk-anything
|
||||
|
||||
# ----- URLS -----
|
||||
MCP_SERVER_URL=http://mcp:8002/mcp
|
||||
LITELLM_BASE_URL=http://litellm:4000/v1
|
||||
BACKEND_BASE_URL=http://backend:8001/api/run
|
||||
JUSTICE_API_BASE=https://obcan.justice.sk/pilot/api/ress-isu-service/v1
|
||||
|
||||
# ----- DATABASE -----
|
||||
POSTGRES_USER=chainlit
|
||||
POSTGRES_PASSWORD=supersecret
|
||||
POSTGRES_DB=chainlit_db
|
||||
CHAINLIT_DATABASE_URL=postgresql+asyncpg://chainlit:supersecret@db:5432/chainlit_db
|
||||
|
||||
# ----- AUTH -----
|
||||
AUTH_USER=admin
|
||||
AUTH_PASS=admin
|
||||
CHAINLIT_AUTH_SECRET=nUf~IB=m~Qi8mkh?3quIU>G:rfqMp$,UIgZs6MV%UmZi4.S$cukRHb?d$>tOy/9B
|
||||
|
||||
# ----- IGNORE KEY -----
|
||||
cukRHb=ignore
|
||||
26
.gitignore
vendored
@ -30,6 +30,7 @@ nosetests.xml
|
||||
|
||||
# ===== Env =====
|
||||
.env
|
||||
.env.test
|
||||
!.env.example
|
||||
!.env.local
|
||||
!.env.local.example
|
||||
@ -40,29 +41,14 @@ nosetests.xml
|
||||
# ===== VS Code =====
|
||||
.vscode/
|
||||
|
||||
# ===== Node / Next.js =====
|
||||
node_modules/
|
||||
.next/
|
||||
out/
|
||||
coverage/
|
||||
.pnp
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/versions
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.pnpm-debug.log*
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# ===== Misc =====
|
||||
.DS_Store
|
||||
*.pem
|
||||
.vercel
|
||||
*.log
|
||||
*.spec
|
||||
*.manifest
|
||||
*.manifest
|
||||
|
||||
# ===== Chainlit =====
|
||||
.files/
|
||||
.chainlit/translations/
|
||||
264
README.md
@ -1,154 +1,212 @@
|
||||
# Právny AI Asistent – integrácia s API
|
||||
|
||||

|
||||
|
||||
## Popis
|
||||
|
||||
Právny AI Asistent je inteligentný asistent integrovaný s oficiálnymi verejnými API Ministerstva spravodlivosti Slovenskej republiky. Systém poskytuje užívateľom prístup k štruktúrovaným právnym informáciám prostredníctvom prirodzeného jazyka.
|
||||
Právny AI Asistent je inteligentný asistent integrovaný s oficiálnymi verejnými API Ministerstva spravodlivosti Slovenskej republiky (obcan.justice.sk). Systém umožňuje používateľom pristupovať k štruktúrovaným právnym informáciám prostredníctvom prirodzeného jazyka v reálnom čase.
|
||||
|
||||
**Hlavné funkcie:**
|
||||
|
||||
- Interpretácia užívateľských otázok v prirodzenom jazyku
|
||||
- Automatická extrakcia a validácia parametrov
|
||||
- Načítavanie dát výlučne cez oficiálne API
|
||||
- Vyhľadávanie súdov, sudcov, rozhodnutí, zmlúv a konaní
|
||||
- Automatická extrakcia a validácia parametrov zo vstupných otázok
|
||||
- Načítavanie dát výlučne cez oficiálne API Ministerstva spravodlivosti SR
|
||||
- Prezentácia výsledkov v zrozumiteľnom formáte v slovenskom jazyku
|
||||
- Streamovanie odpovedí v reálnom čase token po tokene
|
||||
|
||||
---
|
||||
|
||||
## Použité knižnice a technológie
|
||||
|
||||
|
||||
### Jadro aplikácie
|
||||
|
||||
| Technológia | Účel |
|
||||
|---|---|
|
||||
| **Python 3.11** | Hlavný programovací jazyk |
|
||||
| **openai-agents** | Tvorba AI agentov a streamovanie odpovedí |
|
||||
| **openai** | Python klient pre OpenAI / Ollama API |
|
||||
| **Chainlit** | Framework pre chat rozhranie |
|
||||
| **Ollama** | Lokálne spúšťanie AI modelov |
|
||||
| **Docker** | Kontajnerizácia aplikácie |
|
||||
| **python-dotenv** | Načítavanie premenných prostredia zo súboru `.env` |
|
||||
|
||||
|
||||
| Technológia | Verzia | Účel |
|
||||
|---|---|---|
|
||||
| **Python** | 3.11 | Hlavný programovací jazyk |
|
||||
| **openai-agents** | 0.6.3 | Tvorba AI agentov a streamovanie odpovedí |
|
||||
| **FastAPI** | ≥ 0.136.0 | Backend REST API a SSE streaming |
|
||||
| **Chainlit** | 2.11.0 | Framework pre chat rozhranie (frontend) |
|
||||
| **FastMCP** | ≥ 2.7.0 | MCP server pre nástroje Justice API |
|
||||
| **LiteLLM** | – | Proxy pre viacero LLM modelov |
|
||||
| **Docker** | – | Kontajnerizácia aplikácie |
|
||||
|
||||
### API a sieť
|
||||
|
||||
|
||||
| Technológia | Účel |
|
||||
|---|---|
|
||||
| **httpx** | Asynchrónna HTTP komunikácia s API |
|
||||
| **pydantic** | Validácia a serializácia vstupných parametrov (schémy) |
|
||||
| **cachetools** | TTL cache pre API odpovede |
|
||||
| **tenacity** | Automatické opakovanie požiadaviek pri chybách (retry) |
|
||||
|
||||
| **aiohttp** | HTTP komunikácia na strane frontendu (Chainlit) |
|
||||
|
||||
### Testovanie
|
||||
|
||||
|
||||
| Technológia | Účel |
|
||||
|---|---|
|
||||
| **pytest** | Testovací framework |
|
||||
| **pytest-asyncio** | Podpora asynchrónnych testov |
|
||||
| **respx** | Mockovanie HTTP požiadaviek (httpx) |
|
||||
| **pytest-html** | Generovanie HTML reportov z testov |
|
||||
| **pytest-cov** | Meranie pokrytia kódu testami |
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Štruktúra projektu
|
||||
|
||||
```
|
||||
ai-lawyer-agent/
|
||||
├── .chainlit/ # Konfigurácia Chainlit
|
||||
├── api/ # API logika
|
||||
│ ├── __init__.py
|
||||
│ ├── fetch_api_data.py # Spracovanie API
|
||||
│ ├── config.py # Konfigurácia API
|
||||
│ ├── schemas.py # Pydantic schémy
|
||||
│ └── tools.py # API nástroje (function tools pre agenta)
|
||||
├── core/
|
||||
│ ├── __init__.py
|
||||
│ ├── config.py # Konfigurácia agenta (modely, parametre)
|
||||
│ ├── init_agent.py # Inicializácia AI agenta
|
||||
│ ├── stream_response.py # Streamovanie odpovedí
|
||||
│ └── system_prompt.py # Systémový prompt
|
||||
├── public/ # Verejné zdroje
|
||||
├── testing/ # Testy a testovacie nástroje
|
||||
│ ├── tests/
|
||||
│ │ ├── test_api.py # Integračné testy voči reálnemu API
|
||||
│ │ ├── test_fetch.py # Unit testy pre fetch_api_data
|
||||
│ │ ├── test_llm_compare.py # LLM benchmark testy
|
||||
│ │ ├── test_project.py # LLM extrakcia parametrov (DB testy)
|
||||
│ │ ├── test_schemas.py # Unit testy Pydantic schém
|
||||
│ │ ├── test_sys_prompt.py # Unit testy systémového promptu
|
||||
│ │ └── test_tools.py # Unit testy API nástrojov
|
||||
│ ├── charts/ # Výstupné reporty a coverage (generované)
|
||||
│ ├── test_cases.db # SQLite databáza testovacích prípadov
|
||||
│ └── run_tests.py # Spúšťač testov (pytest + HTML report + coverage)
|
||||
├── app.py # Hlavný súbor aplikácie (Chainlit + spracovanie API)
|
||||
├── chainlit.md # Uvítacia obrazovka (default Chainlit)
|
||||
└── chainlit_en-US.md # Uvítacia obrazovka (Legal AI Assistant)
|
||||
legal-ai-assistant/
|
||||
├── backend/ # Backendová logika
|
||||
│ ├── agent/ # AI agent
|
||||
│ │ ├── agent.py # Inicializácia agenta
|
||||
│ │ ├── hooks.py # Sledovanie behu agenta
|
||||
│ │ ├── response.py # Streamovanie SSE odpovedí
|
||||
│ │ └── sys_prompt.py # Systémový prompt
|
||||
│ ├── routers/ # FastAPI routery
|
||||
│ │ ├── health.py # Health check endpoint
|
||||
│ │ ├── info.py # Informácie o aplikácii
|
||||
│ │ └── run_agent.py # Hlavný endpoint /api/run
|
||||
│ ├── tools/
|
||||
│ │ ├── api/
|
||||
│ │ │ ├── http_request_handler.py # HTTP komunikácia s API
|
||||
│ │ │ └── schemas.py # Pydantic schémy pre každý endpoint
|
||||
│ │ └── mcp/
|
||||
│ │ ├── factory.py # Továrňa na MCP nástroje
|
||||
│ │ └── server.py # FastMCP server (všetky nástroje)
|
||||
│ ├── logger.py # Logovanie
|
||||
│ └── main.py # FastAPI aplikácia
|
||||
├── frontend/ # Frontendová logika
|
||||
│ ├── services/
|
||||
│ │ ├── agent_client.py # HTTP komunikácia s backendom
|
||||
│ │ └── tool_steps.py # Zobrazovanie krokov nástrojov v UI
|
||||
│ ├── public/ # Verejné zdroje (ikony, CSS, logo)
|
||||
│ ├── .chainlit/
|
||||
│ │ ├── config.toml # Konfigurácia Chainlit
|
||||
│ │ └── translations/ # Preklady UI
|
||||
│ └── app.py # Hlavná Chainlit aplikácia
|
||||
├── tests/ # Testy
|
||||
├── configs.py # Globálna konfigurácia (modely, URL, konštanty)
|
||||
├── litellm-config.yaml # Konfigurácia LiteLLM proxy
|
||||
├── compose.yaml # Docker Compose
|
||||
└── pyproject.toml # Závislosti projektu
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Opis konfigurácie kontajnerov
|
||||
|
||||
Aplikácia beží ako sada Docker kontajnerov definovaných v `compose.yaml`.
|
||||
|
||||
| Kontajner | Port | Popis |
|
||||
|---|---|---|
|
||||
| **frontend** | `8000` | Chainlit chat rozhranie |
|
||||
| **backend** | `8001` | FastAPI server – spracovanie požiadaviek a agent |
|
||||
| **mcp** | `8002` | FastMCP server – nástroje pre Justice API |
|
||||
| **litellm** | `4000` | LiteLLM proxy – routing LLM modelov |
|
||||
| **db** | `5432` | PostgreSQL – ukladanie histórie konverzácií |
|
||||
|
||||
Každý kontajner má nastavený `healthcheck`. Backend čaká na LiteLLM a MCP, frontend čaká na backend a databázu.
|
||||
|
||||
Premenné prostredia (API kľúče, databázové pripojenie atď.) sa načítavajú zo súboru `.env`.
|
||||
|
||||
---
|
||||
|
||||
## Testovanie
|
||||
|
||||
Projekt obsahuje automatizované testy pokrývajúce unit testy schém, API nástrojov, fetchovania dát, systémového promptu a integračné testy voči reálnemu API Ministerstva spravodlivosti. LLM testy overujú správnosť extrakcie parametrov z prirodzeného jazyka oproti 54 referenčným prípadom uloženým v SQLite databáze.
|
||||
|
||||

|
||||
|
||||
### Spustiť testovanie
|
||||
```bash
|
||||
python -m testing.run_tests
|
||||
Projekt obsahuje tri vrstvy testov:
|
||||
|
||||
**Unit testy** (`tests/unit/`) — overujú Pydantic schémy (validácia, normalizácia ID), HTTP handler (cachovanie, chybové stavy), továrňu MCP nástrojov a systémový prompt.
|
||||
|
||||
**Integračné testy** (`tests/integration/`) — overujú správanie FastAPI endpointov (`/`, `/info`, `/api/run`), formát SSE odpovede a štruktúru správ histórie.
|
||||
|
||||
**Eval testy** (`tests/evals/`) — LLM-as-Judge hodnotenie agenta: presnosť výberu nástrojov (F1), grounding voči API dátam, bezpečnosť (žiadne právne rady) a detekcia halucinácie. Výsledky sa ukladajú ako JSON, heatmapa, tabuľka a radar chart do `tests/results/`.
|
||||
|
||||
### Štruktúra testov
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Inštrukcia pre inštaláciu
|
||||
|
||||
### Inštalácia cez Git
|
||||
|
||||
#### 1. Naklonovanie repozitára
|
||||
|
||||
```bash
|
||||
git clone git@git.kemt.fei.tuke.sk:od059jr/ai-lawyer-agent.git
|
||||
tests/
|
||||
├── e2e/ # End-to-end testy agenta (LLM-as-Judge hodnotenie)
|
||||
│ ├── test_hallucination.py # Testy detekcie halucinácie
|
||||
│ ├── test_not_found.py # Testy správania pri nenájdených výsledkoch
|
||||
│ └── test_safety.py # Testy bezpečnosti (žiadne právne rady)
|
||||
├── evals/ # Eval scenáre pre manuálne spustenie
|
||||
│ ├── requests.json # Referenčné požiadavky pre eval scenáre
|
||||
│ └── test_scenarios.py # Spúšťač eval scenárov
|
||||
├── integration/ # Integračné testy
|
||||
│ ├── test_format.py # Testy FastAPI endpointov a SSE formátu
|
||||
│ ├── test_mcp_server.py # Testy registrácie MCP nástrojov
|
||||
│ ├── test_results.py # Testy štruktúry API odpovedí
|
||||
│ └── test_tools.py # Testy volania a parametrov MCP nástrojov
|
||||
├── reports/ # Generované testovacie reporty (HTML)
|
||||
├── unit/ # Unit testy
|
||||
│ ├── test_http.py # Testy HTTP handlera (cache, chyby)
|
||||
│ ├── test_prompt.py # Testy systémového promptu
|
||||
│ └── test_schemas.py # Testy Pydantic schém (validácia, normalizácia)
|
||||
├── __init__.py
|
||||
└── conftest.py # Zdieľané fixtures pre všetky testy
|
||||
```
|
||||
|
||||
#### 2. Vytvorenie virtuálneho prostredia
|
||||
|
||||
**Windows:**
|
||||
```bash
|
||||
python -m venv venv
|
||||
venv\Scripts\activate
|
||||
```
|
||||
|
||||
**macOS / Linux:**
|
||||
```bash
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
#### 3. Inštalácia závislostí
|
||||
### Spustiť testy
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
# Unit testy
|
||||
./scripts/testctl.sh unit
|
||||
|
||||
#### 4. Stiahnutie inštalátora Ollama
|
||||
# Integračné testy
|
||||
./scripts/testctl.sh integration
|
||||
|
||||
Stiahnite si Ollama z oficiálnej stránky: https://ollama.com/download
|
||||
|
||||
#### 5. Stiahnutie modelov
|
||||
|
||||
```bash
|
||||
ollama pull qwen3.5:cloud
|
||||
```
|
||||
|
||||
```bash
|
||||
ollama pull gpt-oss:20b-cloud
|
||||
# Eval testy (vyžaduje bežiaci backend)
|
||||
MODEL=gemini-2.5-flash ./scripts/testctl.sh evals
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Inštalácia cez Docker
|
||||
## Návod na použitie
|
||||
|
||||
#### 1. Inštalácia Docker a Docker Desktop
|
||||
### Požiadavky
|
||||
|
||||
Stiahnite a nainštalujte Docker Desktop: https://www.docker.com/products/docker-desktop
|
||||
- Docker a Docker Compose
|
||||
- API kľúče pre LLM modely (Groq, Gemini, OpenRouter, Cerebras)
|
||||
|
||||
#### 2. Nainštalujte a spustite aplikáciu
|
||||
### Spustenie aplikácie
|
||||
|
||||
Obraz je dostupný na Docker Hub: https://hub.docker.com/r/alexgott0616/ai-lawyer-agent
|
||||
**1. Naklonovanie repozitára**
|
||||
```bash
|
||||
git clone <url-repozitara>
|
||||
cd legal-ai-assistant
|
||||
```
|
||||
|
||||
**2. Vytvorenie virtuálneho prostredia (voliteľné, pre lokálny vývoj)**
|
||||
```bash
|
||||
./scripts/install.sh
|
||||
```
|
||||
Skript vytvorí `venv` a nainštaluje všetky závislosti. Ak prostredie už existuje, skript sa zastaví.
|
||||
|
||||
**3. Zostavenie a spustenie**
|
||||
```bash
|
||||
./scripts/appctl.sh --build
|
||||
```
|
||||
|
||||
**4. Otvorenie aplikácie**
|
||||
|
||||
Aplikácia je dostupná na: [http://localhost:8000](http://localhost:8000)
|
||||
|
||||
### Ďalšie príkazy
|
||||
|
||||
```bash
|
||||
./scripts/appctl.sh --start # Spustiť (bez zostavenia)
|
||||
./scripts/appctl.sh --stop # Zastaviť
|
||||
./scripts/appctl.sh --logs # Zobraziť logy
|
||||
./scripts/appctl.sh --clean # Vyčistiť Docker cache
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Zdroje
|
||||
|
||||
- [Chainlit dokumentácia](https://docs.chainlit.io)
|
||||
- [openai-agents dokumentácia](https://openai.github.io/openai-agents-python/)
|
||||
- [FastMCP dokumentácia](https://gofastmcp.com)
|
||||
- [LiteLLM dokumentácia](https://docs.litellm.ai)
|
||||
- [API Ministerstva spravodlivosti SR](https://obcan.justice.sk)
|
||||
- [LiteLLM modely – Groq](https://docs.litellm.ai/docs/providers/groq)
|
||||
- [LiteLLM modely – Gemini](https://docs.litellm.ai/docs/providers/gemini)
|
||||
- [LiteLLM modely – OpenRouter](https://docs.litellm.ai/docs/providers/openrouter)
|
||||
@ -1,15 +1,16 @@
|
||||
FROM python:3.11-slim
|
||||
# backend/Dockerfile
|
||||
|
||||
FROM python:3.11.9-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update && apt-get install -y gcc \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY pyproject.toml .
|
||||
RUN pip install -e "."
|
||||
RUN pip install --no-cache-dir -e ".[backend]"
|
||||
|
||||
COPY backend/ ./backend/
|
||||
COPY configs.py .
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
EXPOSE 8001
|
||||
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8001"]
|
||||
@ -0,0 +1 @@
|
||||
# backend/__init__.py
|
||||
4
backend/agent/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# backend/agent/__init__.py
|
||||
from .agent import build_agent, make_mcp_server
|
||||
from .response import stream_response
|
||||
from .sys_prompt import get_system_prompt
|
||||
59
backend/agent/agent.py
Normal file
@ -0,0 +1,59 @@
|
||||
from agents import Agent, OpenAIChatCompletionsModel, AsyncOpenAI, ModelSettings
|
||||
from agents.mcp import MCPServerStreamableHttp
|
||||
from backend.agent.sys_prompt import get_system_prompt
|
||||
from backend.agent.hooks import LegalAssistantHooks
|
||||
from configs import (
|
||||
LITELLM_BASE_URL,
|
||||
LITELLM_API_KEY,
|
||||
LLM_TIMEOUT,
|
||||
MCP_SERVER_URL,
|
||||
AGENT_TEMPERATURE,
|
||||
DEFAULT_MODEL
|
||||
)
|
||||
|
||||
def make_client() -> AsyncOpenAI:
|
||||
"""Async client pointing to LiteLLM proxy."""
|
||||
return AsyncOpenAI (
|
||||
base_url=LITELLM_BASE_URL,
|
||||
api_key=LITELLM_API_KEY,
|
||||
timeout=LLM_TIMEOUT,
|
||||
max_retries=0
|
||||
)
|
||||
|
||||
def make_mcp_server() -> MCPServerStreamableHttp:
|
||||
"""MCP server exposing Slovak Justice API tools."""
|
||||
return MCPServerStreamableHttp(
|
||||
name="Slovak Justice API",
|
||||
params={"url": MCP_SERVER_URL},
|
||||
cache_tools_list=True
|
||||
)
|
||||
|
||||
def build_agent(mcp_server: MCPServerStreamableHttp, model_name: str = DEFAULT_MODEL) -> Agent:
|
||||
"""
|
||||
Build and return a Legal AI Assistant agent.
|
||||
|
||||
Args:
|
||||
model_name: Model identifier routed through LiteLLM.
|
||||
|
||||
Returns:
|
||||
Configured Agent ready to run.
|
||||
"""
|
||||
|
||||
return Agent (
|
||||
name="Legal AI Assistant",
|
||||
instructions=get_system_prompt(),
|
||||
model=OpenAIChatCompletionsModel(
|
||||
model=model_name,
|
||||
openai_client=make_client()
|
||||
),
|
||||
model_settings=ModelSettings(
|
||||
temperature=AGENT_TEMPERATURE,
|
||||
tool_choice="auto",
|
||||
parallel_tool_calls=False,
|
||||
include_usage=True
|
||||
),
|
||||
mcp_servers=[mcp_server],
|
||||
tool_use_behavior="run_llm_again",
|
||||
reset_tool_choice=True,
|
||||
hooks=LegalAssistantHooks()
|
||||
)
|
||||
33
backend/agent/hooks.py
Normal file
@ -0,0 +1,33 @@
|
||||
import time
|
||||
from backend.logger import setup_logger
|
||||
from agents import AgentHooks, RunContextWrapper, Agent
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
class LegalAssistantHooks(AgentHooks):
|
||||
"""Tracks execution time, tool calls and token usage per agent run."""
|
||||
|
||||
def __init__(self):
|
||||
self.start_time: float = 0
|
||||
self.tool_calls: int = 0
|
||||
|
||||
async def on_start(self, ctx: RunContextWrapper, agent: Agent) -> None:
|
||||
"""Resets counters and logs agent start."""
|
||||
self.start_time = time.time()
|
||||
self.tool_calls = 0
|
||||
logger.info(f"[AGENT {agent.name} STARTED]")
|
||||
|
||||
async def on_tool_start(self, ctx: RunContextWrapper, agent: Agent, tool) -> None:
|
||||
"""Logs each tool invocation."""
|
||||
self.tool_calls += 1
|
||||
logger.info(f"[TOOL {tool.name} CALLED]")
|
||||
|
||||
async def on_tool_end(self, ctx: RunContextWrapper, agent: Agent, tool, result) -> None:
|
||||
"""Marker indicating the end of the tool invocation."""
|
||||
logger.info(f"[TOOL {tool.name} ENDED]")
|
||||
|
||||
async def on_end(self, ctx: RunContextWrapper, agent: Agent, output) -> None:
|
||||
"""Logs elapsed time and total tokens used."""
|
||||
elapsed = time.time() - self.start_time
|
||||
logger.info(f"[AGENT {agent.name} ENDED] | tools_called={self.tool_calls} | elapsed={elapsed:.2f}s")
|
||||
|
||||
73
backend/agent/response.py
Normal file
@ -0,0 +1,73 @@
|
||||
from typing import AsyncGenerator
|
||||
from agents import Agent, Runner, RunItemStreamEvent
|
||||
from openai.types.responses import ResponseTextDeltaEvent
|
||||
import asyncio
|
||||
import time
|
||||
from backend.logger import setup_logger
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
def parse_run_item_event(event: RunItemStreamEvent, last_tool_name: str | None) -> tuple[dict | None, str | None]:
|
||||
"""Parses run item event into SSE payload and updated tool name."""
|
||||
match event.name:
|
||||
case "reasoning_item_created":
|
||||
summary = event.item.raw_item.summary
|
||||
if summary and summary[0].text:
|
||||
return {
|
||||
"type": "reasoning",
|
||||
"data": summary[0].text
|
||||
}, last_tool_name
|
||||
return None, last_tool_name
|
||||
|
||||
case "tool_called":
|
||||
last_tool_name = event.item.raw_item.name
|
||||
return {
|
||||
"type": "tool_start",
|
||||
"tool": last_tool_name,
|
||||
"input": event.item.raw_item.arguments,
|
||||
}, last_tool_name
|
||||
|
||||
case "tool_output":
|
||||
return {
|
||||
"type": "tool_result",
|
||||
"tool": last_tool_name,
|
||||
"output": event.item.output,
|
||||
}, last_tool_name
|
||||
|
||||
case _:
|
||||
return None, last_tool_name
|
||||
|
||||
async def stream_response(agent: Agent, prompt: list[dict] | str) -> AsyncGenerator[dict, None]:
|
||||
"""Stream agent response token by token."""
|
||||
last_tool_name = None
|
||||
start_perf_time = time.time()
|
||||
|
||||
try:
|
||||
result = Runner.run_streamed(agent, input=prompt)
|
||||
async for event in result.stream_events():
|
||||
|
||||
if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
|
||||
yield {"type": "text", "data": event.data.delta}
|
||||
await asyncio.sleep(0.03)
|
||||
|
||||
elif event.type == "run_item_stream_event":
|
||||
payload, last_tool_name = parse_run_item_event(event, last_tool_name)
|
||||
if payload:
|
||||
yield payload
|
||||
|
||||
pure_elapsed = time.time() - start_perf_time
|
||||
usage = getattr(result.context_wrapper, "usage", None)
|
||||
if usage:
|
||||
yield {
|
||||
"type": "usage",
|
||||
"input_tokens": getattr(usage, "input_tokens", 0),
|
||||
"output_tokens": getattr(usage, "output_tokens", 0),
|
||||
"pure_duration": pure_elapsed
|
||||
}
|
||||
|
||||
except (asyncio.CancelledError, GeneratorExit):
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.error(f"[RUN STREAMED ERROR] | {str(e)}", exc_info=True)
|
||||
yield {"type": "error", "data": str(e)}
|
||||
|
||||
120
backend/agent/sys_prompt.py
Normal file
@ -0,0 +1,120 @@
|
||||
|
||||
def get_system_prompt() -> str:
|
||||
"""System prompt for AI Legal Assistant"""
|
||||
|
||||
return f"""
|
||||
You are a Legal AI Assistant integrated with the official public API
|
||||
of the Ministry of Justice of the Slovak Republic (obcan.justice.sk).
|
||||
You extract structured parameters from user queries, call the correct
|
||||
API tools, and present results clearly in Slovak.
|
||||
You are an API data interpreter — not a legal advisor.
|
||||
|
||||
<data_source>
|
||||
Use ONLY data returned by the Justice API tools. Never use training
|
||||
knowledge to answer legal questions, infer missing data, or speculate.
|
||||
When the API returns no results, say so clearly and suggest alternatives.
|
||||
</data_source>
|
||||
|
||||
<supported_domains>
|
||||
Courts (Súdy), Judges (Sudcovia), Decisions (Rozhodnutia),
|
||||
Contracts (Zmluvy), Civil Proceedings (Občianske konania),
|
||||
Administrative Proceedings (Správne konania), Executor(Exekutor).
|
||||
Each domain has three tools: search, by_id, autocomplete.
|
||||
Always prefer autocomplete for name-based lookups — it is faster
|
||||
and bypasses alphabetical pagination.
|
||||
</supported_domains>
|
||||
|
||||
<tool_selection_rules>
|
||||
Name search -> autocomplete first, then by_id if ID returned
|
||||
Known ID -> use by_id directly
|
||||
Filter/browse -> use search with appropriate facets
|
||||
Court mentioned -> resolve court ID via court_autocomplete first,
|
||||
then pass guidSud to the next tool call
|
||||
</tool_selection_rules>
|
||||
|
||||
<input_normalization>
|
||||
Before any tool call, fix common input errors automatically:
|
||||
- Diacritics: try correct form first (Novák), then without (Novak)
|
||||
- Dates: "január 2024" -> Od="01.01.2024" Do="31.01.2024"
|
||||
- IDs: "175" -> "sud_175"; "sudca 42" -> "sudca_42"
|
||||
- Regions: "Bratislava" -> "Bratislavský kraj"
|
||||
- Courts: "Okresný súd v Košice" -> "Okresný súd Košice I"
|
||||
- Page numbering starts at 0, not 1
|
||||
</input_normalization>
|
||||
|
||||
<date_fields_per_domain>
|
||||
Civil proceedings : pojednavaniaOd / pojednavaniaDo
|
||||
Decisions : vydaniaOd / vydaniaDo
|
||||
Contracts : datumZverejeneniaOd / datumZverejeneniaDo
|
||||
Admin proceedings : datumPravoplatnostiOd / datumPravoplatnostiDo
|
||||
Always pass date parameters when the user mentions any time period.
|
||||
</date_fields_per_domain>
|
||||
|
||||
<error_handling>
|
||||
API timeout (>10s) -> retry once, then: "Služba momentálne nedostupná. Skúste neskôr."
|
||||
HTTP 404 -> "Záznam nebol nájdený."
|
||||
HTTP 500 -> "Chyba servera. Skúste neskôr."
|
||||
Empty results -> suggest: broader region, check diacritics, visit obcan.justice.sk
|
||||
|
||||
Empty tool results (numFound: 0) = "Záznam nebol nájdený".
|
||||
NEVER report 500/Server Error unless explicitly returned by the tool.
|
||||
</error_handling>
|
||||
|
||||
<response_rules>
|
||||
Language: always Slovak
|
||||
Internal (never shown to user): tool names, IDs, raw JSON, parameter names
|
||||
User-facing: names, dates, counts, status, court names
|
||||
Dates: DD.MM.YYYY
|
||||
Numbers: Slovak locale (1 234, not 1,234)
|
||||
For 1 result: show all relevant fields (name, role, court, status)
|
||||
For 2–5 results: short numbered list
|
||||
For 6+ results: show count, first 5, suggest filtering by region or court
|
||||
When results are paginated, always state the total count
|
||||
</response_rules>
|
||||
|
||||
<few_shot_examples>
|
||||
Example 1 — name search:
|
||||
User: "Nájdi sudcu Novák v Bratislave"
|
||||
Steps: judge_autocomplete(query="Novák", limit=10)
|
||||
-> if results: judge_by_id for each
|
||||
-> if empty: judge_search(query="Novák",
|
||||
krajFacetFilter=["Bratislavský kraj"], size=50)
|
||||
Output: "Našiel som 2 sudcov s menom Novák..."
|
||||
|
||||
Example 2 — court + domain chaining:
|
||||
User: "Zmluvy Krajského súdu v Bratislave"
|
||||
Steps: court_autocomplete(query="Krajský súd Bratislava") -> sud_7
|
||||
contract_search(guidSud="sud_7")
|
||||
Output: "Krajský súd v Bratislave má 143 zmlúv. Zobrazujem prvých 20."
|
||||
|
||||
Example 3 — not found:
|
||||
User: "Sudca Novak Košice"
|
||||
Steps: judge_autocomplete(query="Novak") -> empty
|
||||
judge_autocomplete(query="Novák") -> empty
|
||||
judge_search(query="Novák",
|
||||
krajFacetFilter=["Košický kraj"], size=50)
|
||||
Output: "Nenašiel som sudcu Novák v Košickom kraji.
|
||||
Skúste rozšíriť hľadanie na celú SR alebo overte diakritiku."
|
||||
|
||||
Example 4 — ambiguity:
|
||||
User: "Sudca Kováč"
|
||||
Steps: judge_autocomplete(query="Kováč", limit=10) -> 8 results across 4 regions
|
||||
Output: "Našiel som 8 sudcov s menom Kováč. Upresnite región:
|
||||
Bratislavský kraj, Košický kraj, Žilinský kraj, Prešovský kraj?"
|
||||
|
||||
Example 5 — date filter:
|
||||
User: "Rozhodnutia Okresného súdu Bratislava I za január 2024"
|
||||
Steps: court_autocomplete(query="Okresný súd Bratislava I") -> sud_3
|
||||
decision_search(guidSud="sud_3",
|
||||
vydaniaOd="01.01.2024",
|
||||
vydaniaDo="31.01.2024", page=0)
|
||||
Output: "Okresný súd Bratislava I vydal v januári 2024 celkom 47 rozhodnutí.
|
||||
Zobrazujem prvých 5."
|
||||
</few_shot_examples>
|
||||
|
||||
<boundaries>
|
||||
You do not explain legal advice history beyond API data or search outside the Ministry of Justice API.
|
||||
Never give advice or use "Odporúčam/Mali by ste". Always start with a disclaimer and use neutral phrases like "Je možné sa obrátiť na...".
|
||||
If asked, you may briefly explain your AI model and its capabilities.
|
||||
</boundaries>
|
||||
"""
|
||||
@ -1,8 +0,0 @@
|
||||
import os
|
||||
|
||||
JUSTICE_API_BASE = os.getenv("JUSTICE_API_BASE", "https://obcan.justice.sk/pilot/api/ress-isu-service")
|
||||
HTTP_TIMEOUT = float(os.getenv("HTTP_TIMEOUT", "10.0"))
|
||||
HTTP_MAX_CONNECTIONS = int(os.getenv("HTTP_MAX_CONNECTIONS", "20"))
|
||||
HTTP_MAX_KEEPALIVE = int(os.getenv("HTTP_MAX_KEEPALIVE", "10"))
|
||||
CACHE_TTL = int(os.getenv("CACHE_TTL", "300"))
|
||||
CACHE_MAX_SIZE = int(os.getenv("CACHE_MAX_SIZE", "256"))
|
||||
@ -1,78 +0,0 @@
|
||||
import httpx
|
||||
import logging
|
||||
import json
|
||||
from cachetools import TTLCache
|
||||
from typing import Callable
|
||||
from tenacity import retry, stop_after_attempt, wait_exponential
|
||||
|
||||
from backend.api.config import HTTP_TIMEOUT, HTTP_MAX_CONNECTIONS, HTTP_MAX_KEEPALIVE, CACHE_TTL, CACHE_MAX_SIZE
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
logger.handlers.clear()
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
handler = logging.StreamHandler()
|
||||
handler.setFormatter(logging.Formatter(
|
||||
fmt='%(asctime)s - %(levelname)s - %(message)s',
|
||||
datefmt='%H:%M:%S'
|
||||
))
|
||||
logger.addHandler(handler)
|
||||
logger.propagate = False
|
||||
|
||||
httpx_logger = logging.getLogger("httpx")
|
||||
httpx_logger.handlers.clear()
|
||||
httpx_logger.setLevel(logging.INFO)
|
||||
httpx_logger.addHandler(handler)
|
||||
httpx_logger.propagate = False
|
||||
|
||||
_cache = TTLCache(maxsize=CACHE_MAX_SIZE, ttl=CACHE_TTL)
|
||||
|
||||
_client = httpx.AsyncClient(
|
||||
timeout=httpx.Timeout(HTTP_TIMEOUT),
|
||||
limits=httpx.Limits(max_connections=HTTP_MAX_CONNECTIONS,
|
||||
max_keepalive_connections=HTTP_MAX_KEEPALIVE),
|
||||
)
|
||||
|
||||
_log_callback: Callable[[str], None] | None = None
|
||||
|
||||
def set_log_callback(cb: Callable[[str], None] | None):
|
||||
global _log_callback
|
||||
_log_callback = cb
|
||||
|
||||
def _log(msg: str):
|
||||
logger.info(msg)
|
||||
if _log_callback is not None:
|
||||
_log_callback(msg)
|
||||
|
||||
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=1, max=5))
|
||||
async def fetch_api_data(icon: str, url: str, params: dict, remove_keys: list = None) -> dict:
|
||||
try:
|
||||
cache_key = f"{url}:{sorted(params.items())}"
|
||||
if cache_key in _cache:
|
||||
_log(f"💾 {icon} Cache hit")
|
||||
return _cache[cache_key]
|
||||
|
||||
_log(f"🔨 {icon} Input parameters:\n{json.dumps(params, ensure_ascii=False, indent=2)}")
|
||||
response = await _client.get(url, params=params)
|
||||
response.raise_for_status()
|
||||
_log(f"🖇️ {icon} Request URL: {response.url}")
|
||||
|
||||
data = response.json()
|
||||
if remove_keys and isinstance(data, dict):
|
||||
for key in remove_keys:
|
||||
data.pop(key, None)
|
||||
|
||||
_cache[cache_key] = data
|
||||
_log(f"✅ {icon} Success: {url}")
|
||||
return data
|
||||
|
||||
except httpx.HTTPStatusError as e:
|
||||
_log(f"❌ {icon}HTTP error: {e.response.status_code} - {e.response.text}")
|
||||
return {"error": "http_error", "status_code": e.response.status_code}
|
||||
except httpx.RequestError as e:
|
||||
_log(f"❌ {icon}Request error: {str(e)}")
|
||||
return {"error": "request_error", "status_code": str(e)}
|
||||
except Exception as e:
|
||||
_log(f"❌ {icon}Unexpected error: {str(e)}")
|
||||
return {"error": "unexpected_error", "status_code": str(e)}
|
||||
@ -1,342 +0,0 @@
|
||||
from typing import Annotated, List, Literal, Optional
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
class SortableMixin(BaseModel):
|
||||
sortProperty: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Atribút, podľa ktorého budú záznamy zoradené")
|
||||
] = None
|
||||
sortDirection: Annotated[
|
||||
Literal["ASC", "DESC"],
|
||||
Field(default="ASC", description="Smer zoradenia (ASC alebo DESC)")
|
||||
] = "ASC"
|
||||
|
||||
|
||||
class PaginatedRequest(SortableMixin):
|
||||
page: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=0, description="Číslo stránky (začína od 0, nie od 1!)")
|
||||
] = None
|
||||
size: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=1, description="Počet záznamov na stránku")
|
||||
] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sud
|
||||
####################################################################################################################
|
||||
|
||||
class CourtSearch(PaginatedRequest):
|
||||
"""Zoznam súdov s voliteľnými filtrami. GET /v1/sud"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Hľadané slovo alebo slovné spojenie")
|
||||
] = None
|
||||
typSuduFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Typ súdu (fazetový filter), napr. ['Okresný súd', 'Krajský súd']")
|
||||
] = None
|
||||
krajFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Kraj (fazetový filter), napr. ['Bratislavský kraj']")
|
||||
] = None
|
||||
okresFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Okres (fazetový filter), napr. ['Okres Bratislava I']")
|
||||
] = None
|
||||
zahrnutZaniknuteSudy: Annotated[
|
||||
Optional[bool],
|
||||
Field(default=None, description="True = zahrnúť zaniknuté súdy, False = len aktívne")
|
||||
] = None
|
||||
indexDatumOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum indexácie od")
|
||||
] = None
|
||||
indexDatumDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum indexácie do")
|
||||
] = None
|
||||
|
||||
|
||||
class CourtByID(BaseModel):
|
||||
"""Jeden súd podľa ID. GET /v1/sud/{id}"""
|
||||
id: Annotated[str, Field(description="Identifikátor súdu, napr. 'sud_175'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"sud_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class CourtAutocomplete(BaseModel):
|
||||
"""Autocomplete pre názvy súdov. GET /v1/sud/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximálny počet výsledkov")] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sudca
|
||||
####################################################################################################################
|
||||
|
||||
class JudgeSearch(BaseModel):
|
||||
"""Zoznam sudcov s voliteľnými filtrami. GET /v1/sudca"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Hľadané slovo alebo slovné spojenie")
|
||||
] = None
|
||||
funkciaFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Funkcia (fazetový filter), napr. ['Sudca', 'Predseda', 'Podpredseda']")
|
||||
] = None
|
||||
typSuduFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Typ súdu (fazetový filter)")
|
||||
] = None
|
||||
krajFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Kraj (fazetový filter), napr. ['Bratislavský kraj']")
|
||||
] = None
|
||||
okresFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Okres (fazetový filter)")
|
||||
] = None
|
||||
stavZapisuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(
|
||||
default=None,
|
||||
description=(
|
||||
"Stav zápisu — neprekladať hodnoty: "
|
||||
"'label.sudca.aktivny', 'label.sudca.odvolany', "
|
||||
"'label.sudca.vymazany', "
|
||||
"'label.sudca.prerusenie vykonu - poberatel', "
|
||||
"'label.sudca.prerusenie vykonu - ina funkce'"
|
||||
)
|
||||
)
|
||||
] = None
|
||||
guidSud: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Identifikátor súdu, napr. 'sud_100'")
|
||||
] = None
|
||||
indexDatumOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum indexácie od")
|
||||
] = None
|
||||
indexDatumDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum indexácie do")
|
||||
] = None
|
||||
page: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=0, description="Číslo stránky (začína od 0)")
|
||||
] = None
|
||||
size: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=1, description="Počet záznamov na stránku")
|
||||
] = None
|
||||
|
||||
|
||||
class JudgeByID(BaseModel):
|
||||
"""Jeden sudca podľa ID. GET /v1/sudca/{id}"""
|
||||
id: Annotated[str, Field(description="Identifikátor sudcu, napr. 'sudca_1'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"sudca_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class JudgeAutocomplete(BaseModel):
|
||||
"""
|
||||
Autocomplete pre mená sudcov. GET /v1/sudca/autocomplete
|
||||
PREFEROVANÝ nástroj pri hľadaní sudcu podľa mena — použiť pred JudgeSearch!
|
||||
"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Čiastočné meno sudcu")
|
||||
] = None
|
||||
guidSud: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Identifikátor súdu, napr. 'sud_100'")
|
||||
] = None
|
||||
limit: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=1, description="Maximálny počet návrhov")
|
||||
] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/rozhodnutie
|
||||
####################################################################################################################
|
||||
|
||||
class DecisionSearch(PaginatedRequest):
|
||||
"""Zoznam rozhodnutí s voliteľnými filtrami. GET /v1/rozhodnutie"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo alebo slovné spojenie")] = None
|
||||
typSuduFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Typ súdu (fazetový filter)")] = None
|
||||
krajFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Kraj (fazetový filter)")] = None
|
||||
okresFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Okres (fazetový filter)")] = None
|
||||
oblastPravnejUpravyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Oblasť právnej úpravy (fazetový filter)")
|
||||
] = None
|
||||
podOblastPravnejUpravyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Podoblasť právnej úpravy (fazetový filter)")
|
||||
] = None
|
||||
formaRozhodnutiaFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Forma rozhodnutia, napr. ['Uznesenie', 'Rozsudok', 'Platobný rozkaz']")
|
||||
] = None
|
||||
povahaRozhodnutiaFacetFilter: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Povaha rozhodnutia")
|
||||
] = None
|
||||
odkazovanePredpisy: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Odkazované predpisy")
|
||||
] = None
|
||||
vydaniaOd: Annotated[Optional[str], Field(default=None, description="Vydanie od (DD.MM.YYYY)")] = None
|
||||
vydaniaDo: Annotated[Optional[str], Field(default=None, description="Vydanie do (DD.MM.YYYY)")] = None
|
||||
ecli: Annotated[Optional[str], Field(default=None, description="ECLI identifikátor, napr. 'ECLI:SK:OSPO:1965:8114010264.1'")] = None
|
||||
spisovaZnacka: Annotated[Optional[str], Field(default=None, description="Spisová značka, napr. '7C/221/1991'")] = None
|
||||
cisloSpisu: Annotated[Optional[str], Field(default=None, description="Identifikačné číslo spisu")] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Identifikátor sudcu, napr. 'sudca_1'")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu, napr. 'sud_100'")] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Dátum indexácie od")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Dátum indexácie do")] = None
|
||||
|
||||
|
||||
class DecisionByID(BaseModel):
|
||||
"""Jedno rozhodnutie podľa ID. GET /v1/rozhodnutie/{id}"""
|
||||
id: Annotated[str, Field(description="Identifikátor rozhodnutia")]
|
||||
|
||||
|
||||
class DecisionAutocomplete(BaseModel):
|
||||
"""Autocomplete pre rozhodnutia. GET /v1/rozhodnutie/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximálny počet výsledkov")] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/zmluvy
|
||||
####################################################################################################################
|
||||
|
||||
class ContractSearch(PaginatedRequest):
|
||||
"""Zoznam zmlúv s voliteľnými filtrami. GET /v1/zmluvy"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo alebo slovné spojenie")] = None
|
||||
typDokumentuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Typ dokumentu, napr. ['FAKTURA', 'OBJEDNAVKA', 'ZMLUVA', 'DODATOK']")
|
||||
] = None
|
||||
odberatelFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Odberateľ (súd), napr. ['Krajský súd v Bratislave']")
|
||||
] = None
|
||||
dodavatelFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Dodávateľ, napr. ['Slovak Telekom, a.s.']")
|
||||
] = None
|
||||
hodnotaZmluvyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Hodnota zmluvy: '0-1000', '1000-20000', '20000-100000', '100000-500000', 'Viac ako 500000'")
|
||||
] = None
|
||||
datumZverejeneniaOd: Annotated[Optional[str], Field(default=None, description="Dátum zverejnenia od")] = None
|
||||
datumZverejeneniaDo: Annotated[Optional[str], Field(default=None, description="Dátum zverejnenia do")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu, napr. 'sud_100'")] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Dátum indexácie od")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Dátum indexácie do")] = None
|
||||
|
||||
|
||||
class ContractByID(BaseModel):
|
||||
"""Jedna zmluva podľa ID. GET /v1/zmluvy/{idZmluvy}"""
|
||||
idZmluvy: Annotated[str, Field(description="Identifikátor zmluvy, napr. '2156252'")]
|
||||
|
||||
|
||||
class ContractAutocomplete(BaseModel):
|
||||
"""Autocomplete pre zmluvy. GET /v1/zmluvy/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximálny počet výsledkov")] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/obcianPojednavania
|
||||
####################################################################################################################
|
||||
|
||||
class CivilProceedingsSearch(PaginatedRequest):
|
||||
"""Zoznam občianskych pojednávaní. GET /v1/obcianPojednavania"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo alebo slovné spojenie")] = None
|
||||
typSuduFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Typ súdu (fazetový filter)")] = None
|
||||
krajFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Kraj (fazetový filter)")] = None
|
||||
okresFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Okres (fazetový filter)")] = None
|
||||
usekFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Úsek (fazetový filter), napr. ['C', 'O', 'S']")
|
||||
] = None
|
||||
formaUkonuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Forma úkonu, napr. ['Pojednávanie bez rozhodnutia', 'Pojednávanie a rozhodnutie']")
|
||||
] = None
|
||||
pojednavaniaOd: Annotated[Optional[str], Field(default=None, description="Pojednávania od (DD.MM.YYYY)")] = None
|
||||
pojednavaniaDo: Annotated[Optional[str], Field(default=None, description="Pojednávania do (DD.MM.YYYY)")] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Identifikátor sudcu, napr. 'sudca_1'")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu, napr. 'sud_100'")] = None
|
||||
spisovaZnacka: Annotated[Optional[str], Field(default=None, description="Spisová značka, napr. '7C/221/1991'")] = None
|
||||
verejneVyhlasenie: Annotated[Optional[bool], Field(default=None, description="Verejné vyhlásenie")] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Dátum indexácie od")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Dátum indexácie do")] = None
|
||||
|
||||
|
||||
class CivilProceedingsByID(BaseModel):
|
||||
"""Jedno pojednávanie podľa ID. GET /v1/obcianPojednavania/{id}"""
|
||||
id: Annotated[str, Field(description="Identifikátor, napr. '121e4d31-695e-41e1-9191-7c9ad5d8d484'")]
|
||||
|
||||
|
||||
class CivilProceedingsAutocomplete(BaseModel):
|
||||
"""Autocomplete pre občianske pojednávania. GET /v1/obcianPojednavania/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Identifikátor súdu")] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Identifikátor sudcu")] = None
|
||||
verejneVyhlasenie: Annotated[Optional[bool], Field(default=None, description="Verejné vyhlásenie")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximálny počet výsledkov")] = None
|
||||
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/spravneKonanie
|
||||
####################################################################################################################
|
||||
|
||||
class AdminProceedingsSearch(PaginatedRequest):
|
||||
"""Zoznam správnych konaní. GET /v1/spravneKonanie"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo alebo slovné spojenie")] = None
|
||||
druhFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Druh konania (fazetový filter)")
|
||||
] = None
|
||||
datumPravoplatnostiOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum právoplatnosti od (DD.MM.YYYY)")
|
||||
] = None
|
||||
datumPravoplatnostiDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Dátum právoplatnosti do (DD.MM.YYYY)")
|
||||
] = None
|
||||
|
||||
|
||||
class AdminProceedingsByID(BaseModel):
|
||||
"""Jedno správne konanie podľa ID. GET /v1/spravneKonanie/{id}"""
|
||||
id: Annotated[str, Field(description="Identifikátor, napr. 'spravneKonanie_103'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"spravneKonanie_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class AdminProceedingsAutocomplete(BaseModel):
|
||||
"""Autocomplete pre správne konania. GET /v1/spravneKonanie/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Hľadané slovo")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximálny počet výsledkov")] = None
|
||||
@ -1,284 +0,0 @@
|
||||
from agents import function_tool
|
||||
from backend.api.fetch_api_data import fetch_api_data
|
||||
from backend.api.schemas import (
|
||||
CourtSearch, CourtByID, CourtAutocomplete,
|
||||
JudgeSearch, JudgeByID, JudgeAutocomplete,
|
||||
DecisionSearch, DecisionByID, DecisionAutocomplete,
|
||||
ContractSearch, ContractByID, ContractAutocomplete,
|
||||
CivilProceedingsSearch, CivilProceedingsByID, CivilProceedingsAutocomplete,
|
||||
AdminProceedingsSearch, AdminProceedingsByID, AdminProceedingsAutocomplete,
|
||||
)
|
||||
from backend.api.config import JUSTICE_API_BASE
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sud
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def court_search(params: CourtSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of courts from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (CourtSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of courts and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sud"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def court_id(params: CourtByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific court by its identifier.
|
||||
Args:
|
||||
params (CourtByID): Unique identifier of the court.
|
||||
Returns:
|
||||
dict: Details of the specified court.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sud/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params={}, remove_keys=['foto'])
|
||||
|
||||
@function_tool
|
||||
async def court_autocomplete(params: CourtAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for court names.
|
||||
Args:
|
||||
params (CourtAutocomplete): Parameters for autocomplete.
|
||||
Returns:
|
||||
dict: Suggested court names matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sud/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🏛️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sudca
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def judge_search(params: JudgeSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of judges from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (JudgeSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of judges and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sudca"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params=params.model_dump(exclude_none=True), remove_keys=['sudcaMapList'])
|
||||
|
||||
|
||||
@function_tool
|
||||
async def judge_id(params: JudgeByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific judge by their identifier.
|
||||
Args:
|
||||
params (JudgeByID): Unique identifier of the judge.
|
||||
Returns:
|
||||
dict: Details of the specified judge.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sudca/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params={})
|
||||
|
||||
|
||||
@function_tool
|
||||
async def judge_autocomplete(params: JudgeAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for judges' names.
|
||||
Args:
|
||||
params (JudgeAutocomplete): Parameters for autocomplete query (e.g., partial name).
|
||||
Returns:
|
||||
dict: Suggested judge names matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/sudca/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🧑⚖️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/rozhodnutie
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def decision_search(params: DecisionSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of decisions from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (DecisionSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of decisions and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/rozhodnutie"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
|
||||
@function_tool
|
||||
async def decision_id(params: DecisionByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific decision by its identifier.
|
||||
Args:
|
||||
params (DecisionByID): Unique identifier of the decision.
|
||||
Returns:
|
||||
dict: Details of the specified decision.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/rozhodnutie/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params={})
|
||||
|
||||
@function_tool
|
||||
async def decision_autocomplete(params: DecisionAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for decision-related search terms.
|
||||
Args:
|
||||
params (DecisionAutocomplete): Parameters for autocomplete.
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/rozhodnutie/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="⚖️️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/zmluvy
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def contract_search(params: ContractSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of contracts from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (ContractSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of contracts and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/zmluvy"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
|
||||
@function_tool
|
||||
async def contract_id(params: ContractByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific contract by its identifier.
|
||||
Args:
|
||||
params (ContractByID): Unique identifier of the contract.
|
||||
Returns:
|
||||
dict: Details of the specified contract.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/zmluvy/{params.idZmluvy}"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params={})
|
||||
|
||||
@function_tool
|
||||
async def contract_autocomplete(params: ContractAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for contract-related search terms.
|
||||
Args:
|
||||
params (ContractAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/zmluvy/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="📃", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/obcianPojednavania
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings_search(params: CivilProceedingsSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of civil proceedings and publicly announced judgments
|
||||
from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (CivilProceedingsSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of civil proceedings and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/obcianPojednavania"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings_id(params: CivilProceedingsByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific civil proceeding
|
||||
and publicly announced judgment by its identifier.
|
||||
Args:
|
||||
params (CivilProceedingsByID): Unique identifier of the civil proceeding.
|
||||
Returns:
|
||||
dict: Details of the specified civil proceeding and judgment.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/obcianPojednavania/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params={})
|
||||
|
||||
@function_tool
|
||||
async def civil_proceedings_autocomplete(params: CivilProceedingsAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for civil proceeding search terms.
|
||||
Args:
|
||||
params (CivilProceedingsAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/obcianPojednavania/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="🖊️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/spravneKonanie
|
||||
####################################################################################################################
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings_search(params: AdminProceedingsSearch) -> dict:
|
||||
"""
|
||||
Fetch a list of administrative proceedings from the Justice API with optional filtering.
|
||||
Args:
|
||||
params (AdminProceedingsSearch): Filtering and pagination parameters.
|
||||
Returns:
|
||||
dict: A dictionary containing a list of administrative proceedings and related metadata.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/spravneKonanie"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings_id(params: AdminProceedingsByID) -> dict:
|
||||
"""
|
||||
Fetch detailed information about a specific administrative proceeding by its identifier.
|
||||
Args:
|
||||
params (AdminProceedingsByID): Unique identifier of the administrative proceeding.
|
||||
Returns:
|
||||
dict: Details of the specified administrative proceeding.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/spravneKonanie/{params.id}"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params={})
|
||||
|
||||
@function_tool
|
||||
async def admin_proceedings_autocomplete(params: AdminProceedingsAutocomplete) -> dict:
|
||||
"""
|
||||
Fetch autocomplete suggestions for administrative proceeding search terms.
|
||||
Args:
|
||||
params (AdminProceedingsAutocomplete): Parameters for autocomplete query (e.g., partial text).
|
||||
Returns:
|
||||
dict: Suggested values matching the input query.
|
||||
"""
|
||||
url = f"{JUSTICE_API_BASE}/v1/spravneKonanie/autocomplete"
|
||||
|
||||
return await fetch_api_data(icon="✒️", url=url, params=params.model_dump(exclude_none=True))
|
||||
|
||||
ALL_TOOLS = [
|
||||
court_search, court_id, court_autocomplete,
|
||||
judge_search, judge_id, judge_autocomplete,
|
||||
decision_search, decision_id, decision_autocomplete,
|
||||
contract_search, contract_id, contract_autocomplete,
|
||||
civil_proceedings_search, civil_proceedings_id, civil_proceedings_autocomplete,
|
||||
admin_proceedings_search, admin_proceedings_id, admin_proceedings_autocomplete,
|
||||
]
|
||||
@ -1,23 +0,0 @@
|
||||
model_list:
|
||||
# GROQ
|
||||
- model_name: llama-3.3-70b
|
||||
litellm_params:
|
||||
model: groq/llama-3.3-70b-versatile
|
||||
api_key: os.environ/GROQ_API_KEY
|
||||
|
||||
- model_name: qwen-qwq-32b
|
||||
litellm_params:
|
||||
model: groq/qwen-qwq-32b
|
||||
api_key: os.environ/GROQ_API_KEY
|
||||
|
||||
# Google AI Studio
|
||||
- model_name: gemini-flash
|
||||
litellm_params:
|
||||
model: gemini/gemini-2.0-flash
|
||||
api_key: os.environ/GEMINI_API_KEY
|
||||
|
||||
litellm_settings:
|
||||
drop_params: true
|
||||
request_timeout: 60
|
||||
num_retries: 2
|
||||
convert_input_to_str: true
|
||||
@ -1,43 +0,0 @@
|
||||
from agents import Agent, OpenAIChatCompletionsModel, AsyncOpenAI, ModelSettings, set_tracing_disabled
|
||||
from agents.mcp import MCPServerStreamableHttp
|
||||
from backend.core.config import LITELLM_BASE_URL, LITELLM_API_KEY, AGENT_TEMPERATURE, LLM_TIMEOUT, DEFAULT_MODEL, MCP_SERVER_URL
|
||||
from backend.core.system_prompt import get_system_prompt
|
||||
#from api.tools import ALL_TOOLS
|
||||
|
||||
def _make_client() -> AsyncOpenAI:
|
||||
return AsyncOpenAI (
|
||||
base_url=LITELLM_BASE_URL,
|
||||
api_key=LITELLM_API_KEY,
|
||||
timeout=LLM_TIMEOUT,
|
||||
max_retries=0
|
||||
)
|
||||
|
||||
def get_mcp_server() -> MCPServerStreamableHttp:
|
||||
return MCPServerStreamableHttp(
|
||||
name="Slovak Justice API",
|
||||
params={"url": MCP_SERVER_URL},
|
||||
cache_tools_list=True
|
||||
)
|
||||
|
||||
def assistant_agent(model_name: str = DEFAULT_MODEL) -> Agent:
|
||||
"""Initialize the assistant agent for legal work"""
|
||||
|
||||
client = _make_client()
|
||||
model = OpenAIChatCompletionsModel(
|
||||
model=model_name,
|
||||
openai_client=client
|
||||
)
|
||||
|
||||
return Agent(
|
||||
name="AI Lawyer Assistant",
|
||||
instructions=get_system_prompt(model_name),
|
||||
model=model,
|
||||
model_settings=ModelSettings(
|
||||
temperature=AGENT_TEMPERATURE,
|
||||
tool_choice="auto",
|
||||
parallel_tool_calls=False
|
||||
),
|
||||
tool_use_behavior="run_llm_again",
|
||||
reset_tool_choice=True,
|
||||
mcp_servers=[get_mcp_server()],
|
||||
)
|
||||
@ -1,13 +0,0 @@
|
||||
import os
|
||||
|
||||
LITELLM_BASE_URL = os.getenv("LITELLM_BASE_URL", "http://localhost:4000/v1")
|
||||
LITELLM_API_KEY = os.getenv("LITELLM_API_KEY", "sk-anything")
|
||||
|
||||
MCP_SERVER_URL = os.getenv("MCP_SERVER_URL", "http://localhost:8001/mcp")
|
||||
|
||||
DEFAULT_MODEL = os.getenv("DEFAULT_MODEL", "llama-3.3-70b")
|
||||
MAX_HISTORY = int(os.getenv("MAX_HISTORY", "20"))
|
||||
AGENT_TEMPERATURE = float(os.getenv("AGENT_TEMPERATURE", "0.3"))
|
||||
LLM_TIMEOUT = float(os.getenv("LLM_TIMEOUT", "60.0"))
|
||||
|
||||
ALL_MODELS = { "llama-3.3-70b", "qwen-qwq-32b", "gemini-flash" }
|
||||
@ -1,15 +0,0 @@
|
||||
from typing import AsyncGenerator
|
||||
from agents import Agent, Runner
|
||||
from openai.types.responses import ResponseTextDeltaEvent
|
||||
|
||||
async def stream_response(agent: Agent, prompt: list[dict] | str) -> AsyncGenerator[str, None]:
|
||||
"""Stream agent response and update the UI."""
|
||||
try:
|
||||
async with agent.mcp_servers[0]:
|
||||
result = Runner.run_streamed(agent, input=prompt)
|
||||
async for event in result.stream_events():
|
||||
if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
|
||||
yield event.data.delta # <-- sends the next piece of response text
|
||||
except Exception as e:
|
||||
yield f"⚠️🖨 Error: {e}"
|
||||
|
||||
@ -1,190 +0,0 @@
|
||||
|
||||
def get_system_prompt(model_name: str) -> str:
|
||||
|
||||
return f"""
|
||||
# Legal AI Assistant – Slovak Ministry of Justice API
|
||||
**Powered by:** {model_name}
|
||||
|
||||
## Role
|
||||
You are a Legal AI Assistant integrated with the official public APIs of the Ministry of Justice of the Slovak Republic.
|
||||
You extract structured parameters from natural-language queries, call the correct API tools, and present results clearly in Slovak.
|
||||
You are strictly an API data interpreter — not a legal advisor.
|
||||
|
||||
---
|
||||
|
||||
## Operational Constraints
|
||||
- ✅ Use ONLY data returned by official Ministry of Justice APIs
|
||||
- ✅ You may briefly explain your AI model and how it differs from others
|
||||
- ✅ You may list what you are not allowed to disclose
|
||||
- ❌ Do NOT use external legal knowledge or training data to answer legal questions
|
||||
- ❌ Do NOT infer, speculate, or fill gaps beyond API responses
|
||||
- ❌ Do NOT mention APIs, tools, schemas, function names, or internal logic in final answers
|
||||
- ❌ Do NOT expose pagination details, raw JSON, or technical errors to the user
|
||||
|
||||
---
|
||||
|
||||
## Supported Legal Domains
|
||||
Judges (Sudcovia) : search, search by ID, autocomplete
|
||||
Courts (Súdy) : search, search by ID, autocomplete
|
||||
Decisions (Rozhodnutia) : search, search by ID, autocomplete
|
||||
Contracts (Zmluvy) : search, search by ID, autocomplete
|
||||
Civil Proceedings (Občianske konania) : search, search by ID, autocomplete
|
||||
Administrative Proceedings (Správne konania) : search, search by ID, autocomplete
|
||||
|
||||
**Rule:** Always use the most specific tool available. Prefer autocomplete for name-based lookups.
|
||||
|
||||
---
|
||||
|
||||
## Mandatory Processing Workflow
|
||||
|
||||
### Step 1 — Intent Detection
|
||||
Identify the legal domain and intent:
|
||||
- Searching by name → use autocomplete first
|
||||
- Searching by known ID → use ID-specific tool
|
||||
- Broad search with filters → use general search
|
||||
|
||||
### Step 2 — Input Normalization
|
||||
Automatically fix common user errors BEFORE calling any tool:
|
||||
- Slovak diacritics: `Novak` → try both `Novak` AND `Novák`; `Kos` → `Košice`
|
||||
- Court names: `Okresný súd v Košice` → `Okresný súd Košice I`
|
||||
- Dates: `12 decembra 2024` → `12.12.2024`; `december 2024` → `01.12.2024` to `31.12.2024`; `január 2024` → `01.01.2024` to `31.01.2024`
|
||||
- IDs: `175` → `sud_175`; `sudca 42` → `sudca_42`
|
||||
- Region names: always use full form with "kraj": `Bratislava` → `Bratislavský kraj`
|
||||
|
||||
### Step 3 — Name Search Strategy (CRITICAL)
|
||||
When searching by person name, ALWAYS follow this order:
|
||||
1. **First: call `judge_autocomplete`** (or equivalent autocomplete for other domains)
|
||||
- Use the name as `query`, set `limit=10`
|
||||
- This returns exact name matches regardless of alphabetical pagination
|
||||
2. **If autocomplete returns results:** use the returned IDs to call `judge_by_id` for full details
|
||||
3. **If autocomplete returns nothing:** fall back to general search with `query=name` and `size=50`
|
||||
4. **Never** rely on page 0 of general search results when looking for a specific name — results are alphabetical and the person may be on page 10+
|
||||
|
||||
### Step 4 — Court-to-Filter Chaining (CRITICAL)
|
||||
When a user mentions a specific court by name AND requests data from another domain (judges, contracts, proceedings):
|
||||
1. First call `court_autocomplete` to find the court and get its ID (e.g. `sud_123`)
|
||||
2. Then pass that ID as `guidSud` in the next search call
|
||||
3. NEVER search judges/contracts/proceedings without `guidSud` when the user specified a court
|
||||
|
||||
Example:
|
||||
- User: "Zmluvy Krajského súdu v Bratislave"
|
||||
- Step 1: court_autocomplete(query="Krajský súd v Bratislave") → returns id: "sud_7"
|
||||
- Step 2: contract_search(guidSud="sud_7") ✅
|
||||
- WRONG: contract_search() without guidSud ❌
|
||||
|
||||
### Step 5 — Diacritics Handling (CRITICAL)
|
||||
Slovak names with special characters (á, é, í, ó, ú, ý, ä, č, ď, ě, ľ, ĺ, ň, ô, ŕ, š, ť, ž) must be handled carefully:
|
||||
- Always attempt the search with the diacritics-correct form first: `Novák`, not `Novak`
|
||||
- If no results, retry without diacritics: `Novak`
|
||||
- If still no results, try common variants: `Nováková`, `Novakova`
|
||||
- Inform the user which variant was used
|
||||
|
||||
### Step 6 — Pagination Handling (CRITICAL)
|
||||
- **page starts at 0, NOT 1. First page = page=0. Second page = page=1.**
|
||||
- Default API page size is 20. Total results may be 2365+ for broad queries.
|
||||
- When total results > available results shown, always inform the user there are more
|
||||
- Suggest filtering by region (kraj), court type, or status to narrow results
|
||||
- Never silently show only page 0 without mentioning it's a subset
|
||||
|
||||
### Step 7 — Date Parameters (CRITICAL)
|
||||
Always extract AND pass date parameters when the user mentions any time period:
|
||||
- "v januári 2024" → `pojednavaniaOd="01.01.2024"`, `pojednavaniaDo="31.01.2024"`
|
||||
- "december 2024" → `vydaniaOd="01.12.2024"`, `vydaniaDo="31.12.2024"`
|
||||
- "v roku 2023" → use full year range Od="01.01.2023", Do="31.12.2023"
|
||||
- NEVER ignore a date or time period mentioned by the user
|
||||
- Each endpoint uses a different date field — use the correct one per domain:
|
||||
- Civil proceedings: `pojednavaniaOd` / `pojednavaniaDo`
|
||||
- Decisions: `vydaniaOd` / `vydaniaDo`
|
||||
- Contracts: `datumZverejeneniaOd` / `datumZverejeneniaDo`
|
||||
- Administrative proceedings: `datumPravoplatnostiOd` / `datumPravoplatnostiDo`
|
||||
|
||||
### Step 8 — Parameter Validation
|
||||
Before calling any tool, validate:
|
||||
- Date formats match the expected format for that endpoint (DD.MM.YYYY — check per tool)
|
||||
- IDs follow the correct prefix pattern (sud_, sudca_, spravneKonanie_, etc.)
|
||||
- Facet filter values are from known valid options (e.g. region names are exact API values)
|
||||
- `page` starts at 0 — never use negative values
|
||||
|
||||
### Step 9 — Tool Invocation
|
||||
Call the appropriate tool with validated, normalized parameters.
|
||||
If a parameter is uncertain (e.g., user gave an ambiguous court name), either:
|
||||
- Ask the user to confirm before calling, OR
|
||||
- Use autocomplete to find the correct value first
|
||||
|
||||
### Step 10 — Result Handling
|
||||
✅ Results found : Summarize clearly, show structured list
|
||||
⚠️ Empty results : Explain calmly, suggest alternatives
|
||||
📄 Partial results (paginated) : Show what was found, mention total count, suggest filtering
|
||||
❌ API error : Inform user politely, suggest retry
|
||||
|
||||
### Step 11 — Response Generation
|
||||
Always respond in **Slovak**. Format rules:
|
||||
- Use numbered lists for multiple results
|
||||
- Show: name, role/function, court, region, status (active/inactive)
|
||||
- Keep responses concise — do not dump raw data
|
||||
- Use emojis sparingly (✅ ⚠️ 🔍 only)
|
||||
- Never show IDs, URLs, parameter names, or technical details
|
||||
|
||||
---
|
||||
|
||||
## Error Recovery Playbook
|
||||
Name not found on page 0 -> Use autocomplete, do NOT report "not found"
|
||||
Diacritics mismatch -> Try both forms, report which was used
|
||||
Too many results (>100) -> Ask user to specify region, court, or time period
|
||||
Unknown court name -> Use court autocomplete to find correct name
|
||||
Date format unclear -> Ask user to confirm or infer from context
|
||||
ID format wrong -> Normalize automatically (add prefix)
|
||||
Court mentioned but guidSud missing -> Always resolve court ID via autocomplete first
|
||||
Date mentioned but not passed -> Always extract and pass date parameters
|
||||
|
||||
---
|
||||
|
||||
## Response Format Examples
|
||||
|
||||
**Single judge found:**
|
||||
```
|
||||
Našiel som sudcu Novák:
|
||||
• Meno: JUDr. Ján Novák
|
||||
• Funkcia: Sudca
|
||||
• Súd: Okresný súd Bratislava I
|
||||
• Kraj: Bratislavský kraj
|
||||
• Stav: aktívny
|
||||
```
|
||||
|
||||
**Multiple results:**
|
||||
```
|
||||
Našiel som 5 sudcov s menom Novák (zobrazujem všetkých 5):
|
||||
1. JUDr. Ján Novák — Okresný súd Bratislava I (aktívny)
|
||||
2. JUDr. Peter Novák — Krajský súd Košice (aktívny)
|
||||
...
|
||||
```
|
||||
|
||||
**Paginated results:**
|
||||
```
|
||||
Celkovo: 2 365 výsledkov. Zobrazujem prvých 20.
|
||||
Pre presnejšie výsledky uveďte kraj alebo typ súdu.
|
||||
|
||||
1. JUDr. Alena Adamcová — Najvyšší súd SR (aktívny)
|
||||
...
|
||||
```
|
||||
|
||||
**Not found:**
|
||||
```
|
||||
Nenašiel som sudcu s menom "Novak" v Bratislavskom kraji.
|
||||
|
||||
Možné dôvody:
|
||||
• Meno môže mať diakritiku: skúste "Novák"
|
||||
• Sudca môže pôsobiť v inom kraji
|
||||
• Skúste rozšíriť vyhľadávanie na celú SR
|
||||
|
||||
Chcete, aby som hľadal "Novák" namiesto "Novak"?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## What You Are NOT
|
||||
- ❌ Not a lawyer — do not give legal advice
|
||||
- ❌ Not a historian — do not explain legal history beyond API data
|
||||
- ❌ Not a search engine — only search within Ministry of Justice API
|
||||
- ❌ Not multilingual by default — always respond in Slovak unless explicitly asked otherwise
|
||||
"""
|
||||
13
backend/logger.py
Normal file
@ -0,0 +1,13 @@
|
||||
import logging
|
||||
|
||||
def setup_logger(name: str) -> logging.Logger:
|
||||
logger = logging.getLogger(name)
|
||||
handler = logging.StreamHandler()
|
||||
formatter = logging.Formatter(
|
||||
fmt="\n%(asctime)s | %(levelname)s | %(name)s | %(message)s",
|
||||
datefmt="%H:%M:%S"
|
||||
)
|
||||
handler.setFormatter(formatter)
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.INFO)
|
||||
return logger
|
||||
@ -1,54 +1,16 @@
|
||||
import os
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from pydantic import BaseModel
|
||||
from fastapi.responses import StreamingResponse
|
||||
from backend.core.agent import assistant_agent
|
||||
from backend.core.streaming import stream_response
|
||||
from backend.core.config import ALL_MODELS, DEFAULT_MODEL
|
||||
import json
|
||||
from backend.routers import health, info, run_agent
|
||||
|
||||
app = FastAPI(title="Legal AI Assistant")
|
||||
app = FastAPI()
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["http://localhost:3000"],
|
||||
allow_origins=["*"],
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
class Message(BaseModel):
|
||||
role: str
|
||||
content: str
|
||||
|
||||
class Request(BaseModel):
|
||||
messages: list[Message]
|
||||
model: str = DEFAULT_MODEL
|
||||
|
||||
@app.get("/")
|
||||
async def health_check():
|
||||
return {"status": "ok"}
|
||||
|
||||
@app.get("/api/models")
|
||||
async def get_models():
|
||||
return {"models": list(ALL_MODELS)}
|
||||
|
||||
@app.post("/api/chat")
|
||||
async def chat(request: Request):
|
||||
agent = assistant_agent(request.model)
|
||||
messages = [{"role": ms.role, "content": ms.content} for ms in request.messages]
|
||||
|
||||
async def stream():
|
||||
async for token in stream_response(agent, messages):
|
||||
chunk = json.dumps({"type": "text-delta", "textDelta": token})
|
||||
yield f"data: {chunk}\n\n"
|
||||
yield "data: [DONE]\n\n"
|
||||
|
||||
return StreamingResponse(
|
||||
stream(),
|
||||
media_type="text/event-stream",
|
||||
headers={
|
||||
"Cache-Control": "no-cache",
|
||||
"X-Accel-Buffering": "no",
|
||||
}
|
||||
)
|
||||
app.include_router(health.router)
|
||||
app.include_router(info.router)
|
||||
app.include_router(run_agent.router)
|
||||
@ -1,17 +0,0 @@
|
||||
from fastmcp import FastMCP
|
||||
from backend.mcp_server.tools.judges import register_judge_tools
|
||||
|
||||
mcp = FastMCP(
|
||||
name="Slovak Justice API",
|
||||
instructions="""
|
||||
Tento MCP server poskytuje prístup k verejným API
|
||||
Ministerstva spravodlivosti Slovenskej republiky.
|
||||
Obsahuje nástroje pre vyhľadávanie súdov, sudcov,
|
||||
rozhodnutí, zmlúv a konaní.
|
||||
"""
|
||||
)
|
||||
|
||||
register_judge_tools(mcp)
|
||||
|
||||
if __name__ == "__main__":
|
||||
mcp.run(transport="streamable-http", host="0.0.0.0", port=8001)
|
||||
@ -1,76 +0,0 @@
|
||||
# mcp_server/tools/judges.py
|
||||
import httpx
|
||||
import json
|
||||
from fastmcp import FastMCP
|
||||
from typing import Optional
|
||||
|
||||
JUSTICE_API = "https://obcan.justice.sk/pilot/api/ress-isu-service"
|
||||
HEADERS = {
|
||||
"User-Agent": "Mozilla/5.0",
|
||||
"Accept": "application/json",
|
||||
"Accept-Language": "sk-SK,sk;q=0.9",
|
||||
}
|
||||
|
||||
async def _get(path: str, params: dict) -> dict:
|
||||
clean = {k: v for k, v in params.items() if v is not None}
|
||||
async with httpx.AsyncClient(timeout=10.0) as client:
|
||||
r = await client.get(
|
||||
f"{JUSTICE_API}{path}",
|
||||
params=clean,
|
||||
headers=HEADERS
|
||||
)
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
def register_judge_tools(mcp: FastMCP):
|
||||
|
||||
@mcp.tool()
|
||||
async def judge_autocomplete(
|
||||
query: str,
|
||||
court_id: Optional[str] = None,
|
||||
limit: int = 10,
|
||||
) -> str:
|
||||
"""
|
||||
Autocomplete pre mená sudcov — použiť AKO PRVÝ krok
|
||||
pri hľadaní sudcu podľa mena.
|
||||
"""
|
||||
result = await _get("/v1/sudca/autocomplete", {
|
||||
"query": query,
|
||||
"guidSud": court_id,
|
||||
"limit": limit,
|
||||
})
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
|
||||
@mcp.tool()
|
||||
async def judge_search(
|
||||
query: Optional[str] = None,
|
||||
kraj: Optional[str] = None,
|
||||
court_id: Optional[str] = None,
|
||||
status: Optional[str] = None,
|
||||
page: int = 0,
|
||||
size: int = 20,
|
||||
) -> str:
|
||||
"""
|
||||
Vyhľadávanie sudcov s filtrami.
|
||||
Používať ak autocomplete nevráti výsledky.
|
||||
"""
|
||||
result = await _get("/v1/sudca", {
|
||||
"query": query,
|
||||
"krajFacetFilter": kraj,
|
||||
"guidSud": court_id,
|
||||
"stavZapisuFacetFilter": status,
|
||||
"page": page,
|
||||
"size": size,
|
||||
})
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
|
||||
@mcp.tool()
|
||||
async def judge_by_id(judge_id: str) -> str:
|
||||
"""
|
||||
Detailné informácie o konkrétnom sudcovi podľa ID.
|
||||
judge_id: ID sudcu (napr. "sudca_42")
|
||||
"""
|
||||
if judge_id.isdigit():
|
||||
judge_id = f"sudca_{judge_id}"
|
||||
result = await _get(f"/v1/sudca/{judge_id}", {})
|
||||
return json.dumps(result, ensure_ascii=False)
|
||||
1
backend/routers/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# backend/routers/__init__.py
|
||||
8
backend/routers/health.py
Normal file
@ -0,0 +1,8 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/")
|
||||
async def health_check():
|
||||
"""Returns service health status."""
|
||||
return {"status": "ok"}
|
||||
33
backend/routers/info.py
Normal file
@ -0,0 +1,33 @@
|
||||
from fastapi import APIRouter
|
||||
from datetime import datetime
|
||||
from configs import (
|
||||
DEFAULT_MODEL,
|
||||
ALL_MODELS,
|
||||
MCP_SERVER_URL,
|
||||
LITELLM_BASE_URL,
|
||||
JUSTICE_API_BASE
|
||||
)
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.get("/info")
|
||||
async def info():
|
||||
"""Application metadata and configuration."""
|
||||
return {
|
||||
"service": "Legal AI Assistant",
|
||||
"version": "0.4.0",
|
||||
"description": "AI Assistant for Slovak Ministry of Justice API",
|
||||
"timestamp": datetime.now().isoformat(),
|
||||
"endpoints": {
|
||||
"chat": "/chat",
|
||||
"models": "/api/models",
|
||||
"health": "/",
|
||||
},
|
||||
"config": {
|
||||
"default_model": DEFAULT_MODEL,
|
||||
"available_models": [m["id"] for m in ALL_MODELS],
|
||||
"api_url": JUSTICE_API_BASE,
|
||||
"mcp_server": MCP_SERVER_URL,
|
||||
"litellm": LITELLM_BASE_URL,
|
||||
}
|
||||
}
|
||||
79
backend/routers/run_agent.py
Normal file
@ -0,0 +1,79 @@
|
||||
import json
|
||||
import asyncio
|
||||
from typing import AsyncIterator
|
||||
from pydantic import BaseModel
|
||||
from fastapi import APIRouter
|
||||
from fastapi.responses import StreamingResponse
|
||||
from backend.agent import build_agent, make_mcp_server, stream_response
|
||||
from configs import DEFAULT_MODEL
|
||||
from backend.logger import setup_logger
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
class Message(BaseModel):
|
||||
role: str
|
||||
content: str
|
||||
|
||||
class Query(BaseModel):
|
||||
query: str
|
||||
model: str = DEFAULT_MODEL
|
||||
history: list[Message] = []
|
||||
|
||||
def build_messages(query: Query) -> list[dict]:
|
||||
"""Converts Query history and current query into messages list."""
|
||||
messages = [{"role": m.role, "content": m.content} for m in query.history]
|
||||
messages.append({"role": "user", "content": query.query})
|
||||
return messages
|
||||
|
||||
async def run_agent_task(query: Query, queue: asyncio.Queue, messages: list[dict]) -> None:
|
||||
"""Connects MCP, builds agent and streams events into queue."""
|
||||
mcp_server = make_mcp_server()
|
||||
try:
|
||||
async with mcp_server:
|
||||
logger.info("[MCP CONNECTED]")
|
||||
agent = build_agent(mcp_server=mcp_server, model_name=query.model)
|
||||
logger.info(f"[AGENT MODEL] | {query.model}")
|
||||
async for event in stream_response(agent, messages):
|
||||
await queue.put(event)
|
||||
except Exception as e:
|
||||
logger.error(f"[AGENT TASK ERROR] | {e}", exc_info=True)
|
||||
await queue.put({"type": "error", "data": f"\u26A0 {str(e)}"})
|
||||
finally:
|
||||
await queue.put(None)
|
||||
|
||||
async def generate_response(queue: Query, task: asyncio.Task[None]) -> AsyncIterator[str]:
|
||||
"""Reads events from queue and yields SSE formatted strings."""
|
||||
try:
|
||||
while True:
|
||||
token = await queue.get()
|
||||
if token is None:
|
||||
yield "data: [DONE]\n\n"
|
||||
break
|
||||
yield f"data: {json.dumps(token)}\n\n"
|
||||
except asyncio.CancelledError:
|
||||
task.cancel()
|
||||
finally:
|
||||
await asyncio.gather(task, return_exceptions=True)
|
||||
|
||||
@router.post("/api/run")
|
||||
async def run_agent(query: Query) -> StreamingResponse:
|
||||
"""
|
||||
Run Legal AI Assistant and stream response.
|
||||
|
||||
Args:
|
||||
query: User query and model identifier (e.g. 'llama-3.1-8b').
|
||||
|
||||
Returns:
|
||||
SSE stream of response tokens.
|
||||
"""
|
||||
logger.info(f"[REQUEST] | query={query.query} | model={query.model}")
|
||||
messages = build_messages(query)
|
||||
queue = asyncio.Queue()
|
||||
task = asyncio.create_task(run_agent_task(query, queue, messages))
|
||||
return StreamingResponse(
|
||||
generate_response(queue, task),
|
||||
media_type="text/event-stream",
|
||||
headers={"Cache-Control": "no-cache", "X-Accel-Buffering": "no"},
|
||||
)
|
||||
1
backend/tools/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# backend/tools/__init__.py
|
||||
1
backend/tools/api/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# backend/tools/api/__init__.py
|
||||
84
backend/tools/api/http_request_handler.py
Normal file
@ -0,0 +1,84 @@
|
||||
import httpx
|
||||
from cachetools import TTLCache
|
||||
from tenacity import retry, stop_after_attempt, wait_exponential
|
||||
import urllib.parse
|
||||
|
||||
from backend.logger import setup_logger
|
||||
from configs import (
|
||||
JUSTICE_API_BASE,
|
||||
HTTP_TIMEOUT,
|
||||
HTTP_MAX_CONNECTIONS,
|
||||
HTTP_MAX_KEEPALIVE,
|
||||
CACHE_TTL,
|
||||
CACHE_MAX_SIZE,
|
||||
RETRY_ATTEMPTS,
|
||||
RETRY_MAX_WAIT,
|
||||
RETRY_MIN_WAIT,
|
||||
RETRY_MULTIPLIER,
|
||||
)
|
||||
|
||||
WAIT_EXPONENTIAL = wait_exponential(
|
||||
multiplier=RETRY_MULTIPLIER,
|
||||
min=RETRY_MIN_WAIT,
|
||||
max=RETRY_MAX_WAIT
|
||||
)
|
||||
STOP_AFTER_ATTEMPT = stop_after_attempt(RETRY_ATTEMPTS)
|
||||
CACHE = TTLCache(maxsize=CACHE_MAX_SIZE, ttl=CACHE_TTL)
|
||||
TIMEOUT = httpx.Timeout(HTTP_TIMEOUT)
|
||||
LIMITS = httpx.Limits(
|
||||
max_connections=HTTP_MAX_CONNECTIONS,
|
||||
max_keepalive_connections=HTTP_MAX_KEEPALIVE
|
||||
)
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
def get_client() -> httpx.AsyncClient:
|
||||
return httpx.AsyncClient(timeout=TIMEOUT, limits=LIMITS)
|
||||
|
||||
@retry(stop=STOP_AFTER_ATTEMPT, wait=WAIT_EXPONENTIAL)
|
||||
async def http_request(route: str, params: dict | None, remove_keys: list[str] | None = None) -> dict:
|
||||
"""Sends an HTTP GET request and returns the parsed JSON response."""
|
||||
|
||||
url = f"{JUSTICE_API_BASE}{route}"
|
||||
|
||||
params_tuple = tuple(sorted(params.items())) if params else ()
|
||||
cache_key = f"{url}:{params_tuple}"
|
||||
if cache_key in CACHE:
|
||||
return CACHE[cache_key]
|
||||
|
||||
returned_url = url
|
||||
|
||||
try:
|
||||
logger.info(f"[HTTP REQUEST] | {url} | params={params}")
|
||||
async with get_client() as client:
|
||||
if params:
|
||||
query_string = urllib.parse.urlencode(
|
||||
params,
|
||||
doseq=True,
|
||||
quote_via=urllib.parse.quote
|
||||
)
|
||||
final_url = f"{url}?{query_string}"
|
||||
response = await client.get(final_url)
|
||||
else:
|
||||
response = await client.get(url)
|
||||
|
||||
response.raise_for_status()
|
||||
logger.info(f"[HTTP SUCCESS] | {url} | status={response.status_code}")
|
||||
|
||||
returned_url = str(response.url)
|
||||
data = response.json()
|
||||
|
||||
if remove_keys and isinstance(data, dict):
|
||||
for key in remove_keys:
|
||||
data.pop(key, None)
|
||||
|
||||
result = {"url": returned_url, "data": data}
|
||||
CACHE[cache_key] = result
|
||||
return result
|
||||
|
||||
except httpx.HTTPError as e:
|
||||
logger.error(f"[HTTP ERROR] | {returned_url} | {str(e)}")
|
||||
return {"error": "http_error", "detail": str(e)}
|
||||
except Exception as e:
|
||||
logger.error(f"[UNEXPECTED ERROR] | {returned_url} | {str(e)}")
|
||||
return {"error": "unexpected_error", "detail": str(e)}
|
||||
421
backend/tools/api/schemas.py
Normal file
@ -0,0 +1,421 @@
|
||||
from typing import Annotated, List, Literal, Optional
|
||||
from pydantic import BaseModel, Field, field_validator
|
||||
|
||||
class SortableMixin(BaseModel):
|
||||
sortProperty: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Attribute to sort records by")
|
||||
] = None
|
||||
sortDirection: Annotated[
|
||||
Literal["ASC", "DESC"],
|
||||
Field(default="ASC", description="Sort direction: 'ASC' (default) or 'DESC'")
|
||||
] = "ASC"
|
||||
|
||||
|
||||
class PaginatedRequest(SortableMixin):
|
||||
page: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=0, description="Page number, starts at 0 (not 1)")
|
||||
] = None
|
||||
size: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=1, description="Number of records per page")
|
||||
] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sud — Courts
|
||||
####################################################################################################################
|
||||
|
||||
class CourtSearch(PaginatedRequest):
|
||||
"""List of courts with optional filters. GET /v1/sud"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Search term or phrase")
|
||||
] = None
|
||||
typSuduFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Court type facet filter, e.g. ['Okresný súd', 'Krajský súd']")
|
||||
] = None
|
||||
krajFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Region facet filter, e.g. ['Bratislavský kraj']")
|
||||
] = None
|
||||
okresFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="District facet filter, e.g. ['Okres Bratislava I']")
|
||||
] = None
|
||||
zahrnutZaniknuteSudy: Annotated[
|
||||
Optional[bool],
|
||||
Field(default=None, description="True = include dissolved courts, False = active only")
|
||||
] = None
|
||||
indexDatumOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Index date from, format DD.MM.YYYY")
|
||||
] = None
|
||||
indexDatumDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Index date to, format DD.MM.YYYY")
|
||||
] = None
|
||||
|
||||
|
||||
class CourtByID(BaseModel):
|
||||
"""Single court by ID. GET /v1/sud/{id}"""
|
||||
id: Annotated[str, Field(description="Court identifier, e.g. 'sud_175'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"sud_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class CourtAutocomplete(BaseModel):
|
||||
"""Autocomplete for court names. GET /v1/sud/autocomplete
|
||||
PREFERRED tool when searching court by name — use before CourtSearch.
|
||||
"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Partial court name")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/sudca — Judges
|
||||
####################################################################################################################
|
||||
|
||||
class JudgeSearch(PaginatedRequest):
|
||||
"""List of judges with optional filters. GET /v1/sudca"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Search term or phrase")
|
||||
] = None
|
||||
funkciaFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Function facet filter, e.g. ['Sudca', 'Predseda', 'Podpredseda']")
|
||||
] = None
|
||||
typSuduFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Court type facet filter")
|
||||
] = None
|
||||
krajFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Region facet filter, e.g. ['Bratislavský kraj']")
|
||||
] = None
|
||||
okresFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="District facet filter")
|
||||
] = None
|
||||
stavZapisuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(
|
||||
default=None,
|
||||
description=(
|
||||
"Registration status filter. Do not translate values: "
|
||||
"'label.sudca.aktivny', 'label.sudca.odvolany', "
|
||||
"'label.sudca.vymazany', "
|
||||
"'label.sudca.prerusenie vykonu - poberatel', "
|
||||
"'label.sudca.prerusenie vykonu - ina funkce'"
|
||||
)
|
||||
)
|
||||
] = None
|
||||
guidSud: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Court identifier, e.g. 'sud_100'")
|
||||
] = None
|
||||
indexDatumOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Index date from, format DD.MM.YYYY")
|
||||
] = None
|
||||
indexDatumDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Index date to, format DD.MM.YYYY")
|
||||
] = None
|
||||
|
||||
|
||||
class JudgeByID(BaseModel):
|
||||
"""Single judge by ID. GET /v1/sudca/{id}"""
|
||||
id: Annotated[str, Field(description="Judge identifier, e.g. 'sudca_1'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"sudca_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class JudgeAutocomplete(BaseModel):
|
||||
"""Autocomplete for judge names. GET /v1/sudca/autocomplete
|
||||
PREFERRED tool when searching judge by name — use before JudgeSearch.
|
||||
"""
|
||||
query: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Partial judge name")
|
||||
] = None
|
||||
guidSud: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Court identifier to narrow results, e.g. 'sud_100'")
|
||||
] = None
|
||||
limit: Annotated[
|
||||
Optional[int],
|
||||
Field(default=None, ge=1, description="Maximum number of results")
|
||||
] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/rozhodnutie — Decisions
|
||||
####################################################################################################################
|
||||
|
||||
class DecisionSearch(PaginatedRequest):
|
||||
"""List of court decisions with optional filters. GET /v1/rozhodnutie"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term or phrase")] = None
|
||||
typSuduFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Court type facet filter")] = None
|
||||
krajFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Region facet filter")] = None
|
||||
okresFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="District facet filter")] = None
|
||||
oblastPravnejUpravyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Legal area facet filter")
|
||||
] = None
|
||||
podOblastPravnejUpravyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Legal sub-area facet filter")
|
||||
] = None
|
||||
formaRozhodnutiaFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Decision form facet filter, e.g. ['Uznesenie', 'Rozsudok', 'Platobný rozkaz']")
|
||||
] = None
|
||||
povahaRozhodnutiaFacetFilter: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Decision nature facet filter")
|
||||
] = None
|
||||
odkazovanePredpisy: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Referenced legal regulations")
|
||||
] = None
|
||||
vydaniaOd: Annotated[Optional[str], Field(default=None, description="Issued date from, format YYYY-MM-DD")] = None
|
||||
vydaniaDo: Annotated[Optional[str], Field(default=None, description="Issued date to, format YYYY-MM-DD")] = None
|
||||
ecli: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="ECLI identifier, e.g. 'ECLI:SK:OSPO:1965:8114010264.1'")
|
||||
] = None
|
||||
spisovaZnacka: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Case reference number, e.g. '7C/221/1991'")
|
||||
] = None
|
||||
cisloSpisu: Annotated[Optional[str], Field(default=None, description="Case file number")] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Judge identifier, e.g. 'sudca_1'")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Index date from, format DD.MM.YYYY")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Index date to, format DD.MM.YYYY")] = None
|
||||
|
||||
|
||||
class DecisionByID(BaseModel):
|
||||
"""Single court decision by ID. GET /v1/rozhodnutie/{id}"""
|
||||
id: Annotated[str, Field(description="Decision identifier")]
|
||||
|
||||
|
||||
class DecisionAutocomplete(BaseModel):
|
||||
"""Autocomplete for court decisions. GET /v1/rozhodnutie/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/zmluvy — Contracts
|
||||
####################################################################################################################
|
||||
|
||||
class ContractSearch(PaginatedRequest):
|
||||
"""List of court contracts with optional filters. GET /v1/zmluvy"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term or phrase")] = None
|
||||
typDokumentuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Document type facet filter, e.g. ['FAKTURA', 'OBJEDNAVKA', 'ZMLUVA', 'DODATOK']")
|
||||
] = None
|
||||
odberatelFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Recipient (court) facet filter, e.g. ['Krajský súd v Bratislave']")
|
||||
] = None
|
||||
dodavatelFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Supplier facet filter, e.g. ['Slovak Telekom, a.s.']")
|
||||
] = None
|
||||
hodnotaZmluvyFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Contract value range filter: '0-1000', '1000-20000', '20000-100000', '100000-500000', 'Viac ako 500000'")
|
||||
] = None
|
||||
datumZverejeneniaOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Publication date from, format DD.MM.YYYY")
|
||||
] = None
|
||||
datumZverejeneniaDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Publication date to, format DD.MM.YYYY")
|
||||
] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Index date from, format DD.MM.YYYY")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Index date to, format DD.MM.YYYY")] = None
|
||||
|
||||
|
||||
class ContractByID(BaseModel):
|
||||
"""Single contract by ID. GET /v1/zmluvy/{idZmluvy}"""
|
||||
idZmluvy: Annotated[str, Field(description="Contract identifier, e.g. '2156252'")]
|
||||
|
||||
|
||||
class ContractAutocomplete(BaseModel):
|
||||
"""Autocomplete for contracts. GET /v1/zmluvy/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/obcianPojednavania — Civil Proceedings
|
||||
####################################################################################################################
|
||||
|
||||
class CivilProceedingsSearch(PaginatedRequest):
|
||||
"""List of civil court hearings and publicly announced judgments. GET /v1/obcianPojednavania"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term or phrase")] = None
|
||||
typSuduFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Court type facet filter")] = None
|
||||
krajFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="Region facet filter")] = None
|
||||
okresFacetFilter: Annotated[Optional[List[str]], Field(default=None, description="District facet filter")] = None
|
||||
usekFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Section facet filter, e.g. ['C', 'O', 'S']")
|
||||
] = None
|
||||
formaUkonuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Action form facet filter, e.g. ['Pojednávanie bez rozhodnutia', 'Pojednávanie a rozhodnutie']")
|
||||
] = None
|
||||
pojednavaniaOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Hearing date from, format YYYY-MM-DD")
|
||||
] = None
|
||||
pojednavaniaDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Hearing date to, format YYYY-MM-DD")
|
||||
] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Judge identifier, e.g. 'sudca_1'")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
spisovaZnacka: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Case reference number, e.g. '7C/221/1991'")
|
||||
] = None
|
||||
verejneVyhlasenie: Annotated[
|
||||
Optional[bool],
|
||||
Field(default=None, description="True = publicly announced judgment only")
|
||||
] = None
|
||||
indexDatumOd: Annotated[Optional[str], Field(default=None, description="Index date from, format DD.MM.YYYY")] = None
|
||||
indexDatumDo: Annotated[Optional[str], Field(default=None, description="Index date to, format DD.MM.YYYY")] = None
|
||||
|
||||
|
||||
class CivilProceedingsByID(BaseModel):
|
||||
"""Single civil hearing by ID. GET /v1/obcianPojednavania/{id}"""
|
||||
id: Annotated[str, Field(description="Hearing identifier, e.g. '121e4d31-695e-41e1-9191-7c9ad5d8d484'")]
|
||||
|
||||
|
||||
class CivilProceedingsAutocomplete(BaseModel):
|
||||
"""Autocomplete for civil proceedings. GET /v1/obcianPojednavania/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term")] = None
|
||||
guidSud: Annotated[Optional[str], Field(default=None, description="Court identifier, e.g. 'sud_100'")] = None
|
||||
guidSudca: Annotated[Optional[str], Field(default=None, description="Judge identifier, e.g. 'sudca_1'")] = None
|
||||
verejneVyhlasenie: Annotated[
|
||||
Optional[bool],
|
||||
Field(default=None, description="True = publicly announced judgment only")
|
||||
] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/spravneKonanie — Administrative Proceedings
|
||||
####################################################################################################################
|
||||
|
||||
class AdminProceedingsSearch(PaginatedRequest):
|
||||
"""List of administrative proceedings. GET /v1/spravneKonanie"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term or phrase")] = None
|
||||
druhFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Proceeding type facet filter")
|
||||
] = None
|
||||
datumPravoplatnostiOd: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Legal force date from, format YYYY-MM-DD")
|
||||
] = None
|
||||
datumPravoplatnostiDo: Annotated[
|
||||
Optional[str],
|
||||
Field(default=None, description="Legal force date to, format YYYY-MM-DD")
|
||||
] = None
|
||||
|
||||
|
||||
class AdminProceedingsByID(BaseModel):
|
||||
"""Single administrative proceeding by ID. GET /v1/spravneKonanie/{id}"""
|
||||
id: Annotated[str, Field(description="Proceeding identifier, e.g. 'spravneKonanie_103'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"spravneKonanie_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class AdminProceedingsAutocomplete(BaseModel):
|
||||
"""Autocomplete for administrative proceedings. GET /v1/spravneKonanie/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
####################################################################################################################
|
||||
# .../v1/exekutor — Executor
|
||||
####################################################################################################################
|
||||
|
||||
class ExecutorSearch(PaginatedRequest):
|
||||
"""List of bailiffs (exekútori). GET /v1/exekutor"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term or phrase")] = None
|
||||
sudFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Court facet filter, e.g. 'Krajský súd v Trenčíne'")
|
||||
] = None
|
||||
krajFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Region facet filter, e.g. 'Košický kraj'")
|
||||
] = None
|
||||
okresFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="District facet filter")
|
||||
] = None
|
||||
obecFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(default=None, description="Municipality facet filter")
|
||||
] = None
|
||||
stavZapisuFacetFilter: Annotated[
|
||||
Optional[List[str]],
|
||||
Field(
|
||||
default=None,
|
||||
description=(
|
||||
"Registration status filter. Do not translate values: "
|
||||
"'label.zapis_stav.aktivny', 'label.zapis_stav.neaktivny'"
|
||||
)
|
||||
)
|
||||
] = None
|
||||
|
||||
|
||||
class ExecutorByID(BaseModel):
|
||||
"""Single bailiff by ID. GET /v1/exekutor/{id}"""
|
||||
id: Annotated[str, Field(description="Bailiff identifier, e.g. 'exekutor_154'")]
|
||||
|
||||
@field_validator("id")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
return f"exekutor_{v}" if v.isdigit() else v
|
||||
|
||||
|
||||
class ExecutorByECE(BaseModel):
|
||||
"""Single bailiff by ECE registration number. GET /v1/exekutor/ec/{ece}"""
|
||||
ece: Annotated[str, Field(description="Bailiff ECE registration number, e.g. '089'")]
|
||||
|
||||
@field_validator("ece")
|
||||
@classmethod
|
||||
def normalize(cls, v: str) -> str:
|
||||
v = v.strip()
|
||||
if not v:
|
||||
raise ValueError("ece cannot be empty")
|
||||
return v
|
||||
|
||||
|
||||
class ExecutorAutocomplete(BaseModel):
|
||||
"""Autocomplete for bailiffs. GET /v1/exekutor/autocomplete"""
|
||||
query: Annotated[Optional[str], Field(default=None, description="Search term")] = None
|
||||
limit: Annotated[Optional[int], Field(default=None, ge=1, description="Maximum number of results")] = None
|
||||
|
||||
@ -9,7 +9,8 @@ COPY pyproject.toml .
|
||||
RUN pip install -e ".[mcp]"
|
||||
|
||||
COPY backend/ ./backend/
|
||||
COPY configs.py .
|
||||
|
||||
EXPOSE 8001
|
||||
EXPOSE 8002
|
||||
|
||||
CMD ["python", "-m", "backend.mcp_server.mcp_server"]
|
||||
CMD ["python", "-m", "backend.tools.mcp.server"]
|
||||
1
backend/tools/mcp/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# backend/tools/mcp/__init__.py
|
||||
38
backend/tools/mcp/factory.py
Normal file
@ -0,0 +1,38 @@
|
||||
from backend.tools.api.http_request_handler import http_request
|
||||
from inspect import Signature, Parameter
|
||||
from pydantic import BaseModel
|
||||
from pydantic_core import PydanticUndefined
|
||||
|
||||
def create_tool(route: str, schema: type[BaseModel], remove_keys: list[str] | None = None):
|
||||
"""Creates an MCP tool that calls an API route with Pydantic params."""
|
||||
async def tool(**kwargs):
|
||||
resolved_route = route.format(**kwargs)
|
||||
filtered_kwargs = {k: v for k, v in kwargs.items() if f"{{{k}}}" not in route}
|
||||
|
||||
if not filtered_kwargs:
|
||||
return await http_request(route=resolved_route, params={}, remove_keys=remove_keys)
|
||||
|
||||
parsed = schema(**filtered_kwargs)
|
||||
return await http_request(
|
||||
route=resolved_route,
|
||||
params=parsed.model_dump(exclude_none=True),
|
||||
remove_keys=remove_keys
|
||||
)
|
||||
|
||||
params = []
|
||||
for field_name, field_info in schema.model_fields.items():
|
||||
default = field_info.default
|
||||
params.append(
|
||||
Parameter(
|
||||
name=field_name,
|
||||
kind=Parameter.KEYWORD_ONLY,
|
||||
annotation=field_info.annotation,
|
||||
default=default if default is not PydanticUndefined else Parameter.empty,
|
||||
))
|
||||
|
||||
tool.__name__ = schema.__name__
|
||||
tool.__doc__ = schema.__doc__
|
||||
tool.__signature__ = Signature(params)
|
||||
tool.__annotations__ = {f: i.annotation for f, i in schema.model_fields.items()}
|
||||
|
||||
return tool
|
||||
74
backend/tools/mcp/server.py
Normal file
@ -0,0 +1,74 @@
|
||||
from fastmcp import FastMCP
|
||||
from backend.tools.mcp.factory import create_tool
|
||||
from backend.tools.api.schemas import (
|
||||
CourtSearch, CourtByID, CourtAutocomplete,
|
||||
JudgeSearch, JudgeByID, JudgeAutocomplete,
|
||||
DecisionSearch, DecisionByID, DecisionAutocomplete,
|
||||
ContractSearch, ContractByID, ContractAutocomplete,
|
||||
CivilProceedingsSearch, CivilProceedingsByID, CivilProceedingsAutocomplete,
|
||||
AdminProceedingsSearch, AdminProceedingsByID, AdminProceedingsAutocomplete,
|
||||
ExecutorSearch, ExecutorByID, ExecutorByECE, ExecutorAutocomplete,
|
||||
)
|
||||
|
||||
TOOLS = [
|
||||
# .../v1/sud — Courts
|
||||
{"name": "court_search", "route": "/sud", "schema": CourtSearch, "remove_keys": None},
|
||||
{"name": "court_id", "route": "/sud/{id}", "schema": CourtByID, "remove_keys": ["foto"]},
|
||||
{"name": "court_autocomplete", "route": "/sud/autocomplete", "schema": CourtAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/sudca — Judges
|
||||
{"name": "judge_search", "route": "/sudca", "schema": JudgeSearch, "remove_keys": ["sudcaMapList"]},
|
||||
{"name": "judge_id", "route": "/sudca/{id}", "schema": JudgeByID, "remove_keys": None},
|
||||
{"name": "judge_autocomplete", "route": "/sudca/autocomplete", "schema": JudgeAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/rozhodnutie — Decisions
|
||||
{"name": "decision_search", "route": "/rozhodnutie", "schema": DecisionSearch, "remove_keys": None},
|
||||
{"name": "decision_id", "route": "/rozhodnutie/{id}", "schema": DecisionByID, "remove_keys": None},
|
||||
{"name": "decision_autocomplete", "route": "/rozhodnutie/autocomplete","schema": DecisionAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/zmluvy — Contracts
|
||||
{"name": "contract_search", "route": "/zmluvy", "schema": ContractSearch, "remove_keys": None},
|
||||
{"name": "contract_id", "route": "/zmluvy/{idZmluvy}", "schema": ContractByID, "remove_keys": None},
|
||||
{"name": "contract_autocomplete", "route": "/zmluvy/autocomplete", "schema": ContractAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/obcianPojednavania — Civil Proceedings
|
||||
{"name": "civil_proceedings_search", "route": "/obcianPojednavania", "schema": CivilProceedingsSearch, "remove_keys": None},
|
||||
{"name": "civil_proceedings_id", "route": "/obcianPojednavania/{id}", "schema": CivilProceedingsByID, "remove_keys": None},
|
||||
{"name": "civil_proceedings_autocomplete", "route": "/obcianPojednavania/autocomplete","schema": CivilProceedingsAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/spravneKonanie — Administrative Proceedings
|
||||
{"name": "admin_proceedings_search", "route": "/spravneKonanie", "schema": AdminProceedingsSearch, "remove_keys": None},
|
||||
{"name": "admin_proceedings_id", "route": "/spravneKonanie/{id}", "schema": AdminProceedingsByID, "remove_keys": None},
|
||||
{"name": "admin_proceedings_autocomplete", "route": "/spravneKonanie/autocomplete","schema": AdminProceedingsAutocomplete, "remove_keys": None},
|
||||
|
||||
# .../v1/exekutor — Executor
|
||||
{"name": "executor_search", "route": "/exekutor", "schema": ExecutorSearch, "remove_keys": None},
|
||||
{"name": "executor_ece", "route": "/exekutor/ec/{ece}", "schema": ExecutorByECE, "remove_keys": None},
|
||||
{"name": "executor_id", "route": "/exekutor/{id}", "schema": ExecutorByID, "remove_keys": None},
|
||||
{"name": "executor_autocomplete", "route": "/exekutor/autocomplete","schema": ExecutorAutocomplete, "remove_keys": None},
|
||||
|
||||
]
|
||||
|
||||
mcp = FastMCP(
|
||||
name="Slovak Justice API",
|
||||
instructions="""
|
||||
This MCP server provides access to public APIs of the
|
||||
Ministry of Justice of the Slovak Republic.
|
||||
It contains tools for searching for courts, judges,
|
||||
decisions, contracts and proceedings.
|
||||
"""
|
||||
)
|
||||
|
||||
def register_tools():
|
||||
for tool in TOOLS:
|
||||
tool_function = create_tool(
|
||||
route=tool["route"],
|
||||
schema=tool["schema"],
|
||||
remove_keys=tool.get("remove_keys")
|
||||
)
|
||||
mcp.tool(name=tool["name"])(tool_function)
|
||||
|
||||
register_tools()
|
||||
|
||||
if __name__ == "__main__":
|
||||
mcp.run(transport="streamable-http", host="0.0.0.0", port=8002)
|
||||
94
compose.yaml
@ -1,36 +1,66 @@
|
||||
name: "legal-ai-assistant"
|
||||
services:
|
||||
frontend:
|
||||
build:
|
||||
context: ./frontend
|
||||
dockerfile: Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
depends_on:
|
||||
backend:
|
||||
condition: service_started
|
||||
|
||||
backend:
|
||||
build:
|
||||
container_name: backend
|
||||
build:
|
||||
context: .
|
||||
dockerfile: backend/Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
- LITELLM_BASE_URL=http://litellm:4000/v1
|
||||
- LITELLM_API_KEY=sk-anything
|
||||
- MCP_SERVER_URL=http://mcp:8001/mcp
|
||||
- DEFAULT_MODEL=llama-3.3-70b
|
||||
- "8001:8001"
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
litellm:
|
||||
condition: service_started
|
||||
condition: service_healthy
|
||||
mcp:
|
||||
condition: service_started
|
||||
healthcheck:
|
||||
test: curl --fail http://localhost:8001/ || exit 1
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
frontend:
|
||||
container_name: frontend
|
||||
build:
|
||||
context: .
|
||||
dockerfile: frontend/Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8000:8000"
|
||||
env_file:
|
||||
- .env
|
||||
depends_on:
|
||||
backend:
|
||||
condition: service_healthy
|
||||
db:
|
||||
condition: service_healthy
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: db
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5432:5432"
|
||||
env_file:
|
||||
- .env
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
- ./frontend/schema.sql:/docker-entrypoint-initdb.d/schema.sql
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
|
||||
litellm:
|
||||
image: ghcr.io/berriai/litellm:main-stable
|
||||
@ -39,18 +69,28 @@ services:
|
||||
ports:
|
||||
- "4000:4000"
|
||||
env_file:
|
||||
- backend/.env
|
||||
- .env
|
||||
volumes:
|
||||
- ./backend/config.yaml:/app/config.yaml:ro
|
||||
- ./litellm-config.yaml:/app/config.yaml
|
||||
command: ['--config', '/app/config.yaml', '--port', '4000']
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')\""]
|
||||
interval: 15s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
|
||||
mcp:
|
||||
container_name: mcp
|
||||
build:
|
||||
context: .
|
||||
dockerfile: backend/mcp_server/Dockerfile
|
||||
dockerfile: backend/tools/mcp/Dockerfile
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8001:8001"
|
||||
environment:
|
||||
- JUSTICE_API_BASE=https://obcan.justice.sk/pilot/api/ress-isu-service
|
||||
- "8002:8002"
|
||||
env_file:
|
||||
- .env
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
name: db_data
|
||||
63
configs.py
Normal file
@ -0,0 +1,63 @@
|
||||
import os
|
||||
|
||||
# ----- BACKEND -----
|
||||
BACKEND_BASE_URL = os.getenv("BACKEND_BASE_URL", "http://backend:8001/api/run")
|
||||
|
||||
# ----- LiteLLM -----
|
||||
LITELLM_BASE_URL = os.getenv("LITELLM_BASE_URL", "http://litellm:4000/v1")
|
||||
LITELLM_API_KEY = os.getenv("LITELLM_API_KEY")
|
||||
|
||||
# ----- MCP SERVER -----
|
||||
MCP_SERVER_URL = os.getenv("MCP_SERVER_URL", "http://mcp:8002/mcp")
|
||||
JUSTICE_API_BASE = os.getenv("JUSTICE_API_BASE")
|
||||
|
||||
# ----- HTTP FOR TOOLS -----
|
||||
HTTP_TIMEOUT = 10.0
|
||||
HTTP_MAX_CONNECTIONS = 20
|
||||
HTTP_MAX_KEEPALIVE = 10
|
||||
|
||||
# ----- HTTP FOR CHAINLIT CLIENT -----
|
||||
HTTP_TIMEOUT_TOTAL = 300.0
|
||||
HTTP_TIMEOUT_CONNECT = 10.0
|
||||
|
||||
# ----- CACHE -----
|
||||
CACHE_TTL = 300
|
||||
CACHE_MAX_SIZE = 256
|
||||
|
||||
# ----- RETRY -----
|
||||
RETRY_ATTEMPTS = 3
|
||||
RETRY_MULTIPLIER = 1
|
||||
RETRY_MIN_WAIT = 1
|
||||
RETRY_MAX_WAIT = 5
|
||||
|
||||
# ----- LLM MODELS -----
|
||||
ALL_MODELS = [
|
||||
{"id": "gpt-oss-120b", "desc": "Uses **openrouter/openai/gpt-oss-120b**", "icon": "gpt.svg"},
|
||||
{"id": "llama-3.1-8b", "desc": "Uses **groq/llama-3.1-8b-instant**", "icon": "ollama.svg"},
|
||||
{"id": "qwen-qwq-32b", "desc": "Uses **groq/qwen/qwen3-32b**", "icon": "qwen.svg"},
|
||||
{"id": "qwen3-235b", "desc": "Uses **cerebras/qwen-3-235b**", "icon": "qwen.svg"},
|
||||
{"id": "gemini-2.5-flash", "desc": "Uses **gemini/gemini-2.5-flash**", "icon": "gemini.svg"},
|
||||
{"id": "gemini-2.5-pro", "desc": "Uses **gemini/gemini-2.5-pro**", "icon": "gemini.svg"},
|
||||
{"id": "deepseek-r1", "desc": "Uses **openrouter/deepseek/deepseek-r1**", "icon": "deepseek.svg"},
|
||||
]
|
||||
|
||||
# ----- AI AGENT -----
|
||||
DEFAULT_MODEL= "gpt-oss-120b"
|
||||
AGENT_TEMPERATURE = 0.3
|
||||
LLM_TIMEOUT = 120.0
|
||||
|
||||
# ----- CHAINLIT DATABASE -----
|
||||
CHAINLIT_DATABASE_URL = os.getenv("CHAINLIT_DATABASE_URL")
|
||||
CHAINLIT_AUTH_SECRET = os.getenv("CHAINLIT_AUTH_SECRET")
|
||||
|
||||
# ----- CHAINLIT AUTH -----
|
||||
AUTH_USER = os.getenv("AUTH_USER")
|
||||
AUTH_PASS = os.getenv("AUTH_PASS")
|
||||
|
||||
# ----- CHAINLIT STARTERS -----
|
||||
ALL_STARTERS = [
|
||||
{"label": "Legal Data Search", "prompt": "What legal data can the agent find?", "icon": "magnifying-glass.svg"},
|
||||
{"label": "Restricted Actions List", "prompt": "What is the agent not allowed to do or use?", "icon": "ban.svg"},
|
||||
{"label": "Agent Data Sources", "prompt": "What data sources does the agent rely on?", "icon": "database.svg"},
|
||||
{"label": "Example Legal Case", "prompt": "Give me an example of a legal question you can answer.", "icon": "scale-balanced.svg"},
|
||||
]
|
||||
59
frontend/.chainlit/config.toml
Normal file
@ -0,0 +1,59 @@
|
||||
[project]
|
||||
# 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
|
||||
|
||||
# Disable third party caching
|
||||
cache = false
|
||||
|
||||
# Authorized origins
|
||||
allow_origins = ["*"]
|
||||
|
||||
[features]
|
||||
# Disable HTML rendering for security
|
||||
unsafe_allow_html = false
|
||||
|
||||
# Disable LaTeX
|
||||
latex = false
|
||||
|
||||
# Enable markdown in user messages
|
||||
user_message_markdown = true
|
||||
|
||||
# Allow users to edit their own messages
|
||||
edit_message = true
|
||||
|
||||
# Disable file uploads
|
||||
[features.spontaneous_file_upload]
|
||||
enabled = false
|
||||
|
||||
# Disable audio
|
||||
[features.audio]
|
||||
enabled = false
|
||||
|
||||
# MCP is handled via Python code, not UI
|
||||
[features.mcp]
|
||||
enabled = false
|
||||
|
||||
[UI]
|
||||
# Assistant display name
|
||||
name = "Legal AI Assistant"
|
||||
|
||||
# Default dark theme
|
||||
default_theme = "dark"
|
||||
|
||||
# Ask user confirmation before clearing chat
|
||||
confirm_new_chat = true
|
||||
|
||||
# Show only tool calls in Chain of Thought
|
||||
cot = "full"
|
||||
|
||||
# Custom CSS
|
||||
custom_css = "/public/custom.css"
|
||||
|
||||
# The style of alert boxes.
|
||||
alert_style = "modern"
|
||||
|
||||
[meta]
|
||||
generated_by = "2.11.1"
|
||||
259
frontend/.chainlit/translations/ar-SA.json
Normal file
@ -0,0 +1,259 @@
|
||||
{
|
||||
"common": {
|
||||
"actions": {
|
||||
"cancel": "\u0625\u0644\u063a\u0627\u0621",
|
||||
"confirm": "\u062a\u0623\u0643\u064a\u062f",
|
||||
"continue": "\u0645\u062a\u0627\u0628\u0639\u0629",
|
||||
"goBack": "\u0631\u062c\u0648\u0639",
|
||||
"reset": "\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646",
|
||||
"submit": "\u0625\u0631\u0633\u0627\u0644"
|
||||
},
|
||||
"status": {
|
||||
"loading": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u0645\u064a\u0644...",
|
||||
"error": {
|
||||
"default": "\u062d\u062f\u062b \u062e\u0637\u0623",
|
||||
"serverConnection": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u062e\u0627\u062f\u0645"
|
||||
}
|
||||
}
|
||||
},
|
||||
"auth": {
|
||||
"login": {
|
||||
"title": "\u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u062a\u0637\u0628\u064a\u0642",
|
||||
"form": {
|
||||
"email": {
|
||||
"label": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a",
|
||||
"required": "\u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u062d\u0642\u0644 \u0625\u0644\u0632\u0627\u0645\u064a",
|
||||
"placeholder": "me@example.com"
|
||||
},
|
||||
"password": {
|
||||
"label": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631",
|
||||
"required": "\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u062d\u0642\u0644 \u0625\u0644\u0632\u0627\u0645\u064a"
|
||||
},
|
||||
"actions": {
|
||||
"signin": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644"
|
||||
},
|
||||
"alternativeText": {
|
||||
"or": "\u0623\u0648"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"default": "\u062a\u0639\u0630\u0631 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644",
|
||||
"signin": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"oauthSignin": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"redirectUriMismatch": "\u0639\u0646\u0648\u0627\u0646 URI \u0644\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062a\u0648\u062c\u064a\u0647 \u0644\u0627 \u064a\u062a\u0637\u0627\u0628\u0642 \u0645\u0639 \u062a\u0643\u0648\u064a\u0646 \u062a\u0637\u0628\u064a\u0642 OAuth",
|
||||
"oauthCallback": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"oauthCreateAccount": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"emailCreateAccount": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"callback": "\u062d\u0627\u0648\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u062d\u0633\u0627\u0628 \u0622\u062e\u0631",
|
||||
"oauthAccountNotLinked": "\u0644\u062a\u0623\u0643\u064a\u062f \u0647\u0648\u064a\u062a\u0643\u060c \u0642\u0645 \u0628\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0628\u0646\u0641\u0633 \u0627\u0644\u062d\u0633\u0627\u0628 \u0627\u0644\u0630\u064a \u0627\u0633\u062a\u062e\u062f\u0645\u062a\u0647 \u0641\u064a \u0627\u0644\u0623\u0635\u0644",
|
||||
"emailSignin": "\u062a\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a",
|
||||
"emailVerify": "\u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0628\u0631\u064a\u062f\u0643 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u060c \u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0628\u0631\u064a\u062f \u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u062c\u062f\u064a\u062f",
|
||||
"credentialsSignin": "\u0641\u0634\u0644 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644. \u062a\u062d\u0642\u0642 \u0645\u0646 \u0635\u062d\u0629 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0645\u0642\u062f\u0645\u0629",
|
||||
"sessionRequired": "\u064a\u0631\u062c\u0649 \u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062f\u062e\u0648\u0644 \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0647 \u0627\u0644\u0635\u0641\u062d\u0629"
|
||||
}
|
||||
},
|
||||
"provider": {
|
||||
"continue": "\u0645\u062a\u0627\u0628\u0639\u0629 \u0645\u0639 {{provider}}"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"input": {
|
||||
"placeholder": "\u0627\u0643\u062a\u0628 \u0631\u0633\u0627\u0644\u062a\u0643 \u0647\u0646\u0627...",
|
||||
"actions": {
|
||||
"send": "\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0631\u0633\u0627\u0644\u0629",
|
||||
"stop": "\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0645\u0647\u0645\u0629",
|
||||
"attachFiles": "\u0625\u0631\u0641\u0627\u0642 \u0645\u0644\u0641\u0627\u062a"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0631\u0633\u0627\u0644\u0629 \u0645\u0641\u0636\u0644\u0629",
|
||||
"headline": "\u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u0627\u0644\u0645\u0641\u0636\u0644\u0629",
|
||||
"empty": {
|
||||
"title": "\u0644\u0627 \u062a\u0648\u062c\u062f \u0631\u0633\u0627\u0626\u0644 \u0645\u062d\u0641\u0648\u0638\u0629 \u0628\u0639\u062f",
|
||||
"description": "\u0627\u0628\u062f\u0623 \u0628\u0625\u0631\u0633\u0627\u0644 \u0631\u0633\u0627\u0644\u0629 \u0648\u0642\u0645 \u0628\u062a\u0645\u064a\u064a\u0632\u0647\u0627 \u0628\u0646\u062c\u0645\u0629 \u0623\u0648 \u0645\u064a\u0651\u0632 \u0631\u0633\u0627\u0644\u0629 \u0645\u0646 \u0645\u062d\u0627\u062f\u062b\u0627\u062a\u0643 \u0627\u0644\u0633\u0627\u0628\u0642\u0629"
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"button": "\u0623\u062f\u0648\u0627\u062a",
|
||||
"changeTool": "\u062a\u063a\u064a\u064a\u0631 \u0627\u0644\u0623\u062f\u0627\u0629",
|
||||
"availableTools": "\u0627\u0644\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0645\u062a\u0627\u062d\u0629"
|
||||
},
|
||||
"speech": {
|
||||
"start": "\u0628\u062f\u0621 \u0627\u0644\u062a\u0633\u062c\u064a\u0644",
|
||||
"stop": "\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u062a\u0633\u062c\u064a\u0644",
|
||||
"connecting": "\u062c\u0627\u0631\u064a \u0627\u0644\u0627\u062a\u0635\u0627\u0644"
|
||||
},
|
||||
"fileUpload": {
|
||||
"dragDrop": "\u0627\u0633\u062d\u0628 \u0648\u0623\u0641\u0644\u062a \u0627\u0644\u0645\u0644\u0641\u0627\u062a \u0647\u0646\u0627",
|
||||
"browse": "\u062a\u0635\u0641\u062d \u0627\u0644\u0645\u0644\u0641\u0627\u062a",
|
||||
"sizeLimit": "\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649:",
|
||||
"errors": {
|
||||
"failed": "\u0641\u0634\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644",
|
||||
"cancelled": "\u062a\u0645 \u0625\u0644\u063a\u0627\u0621 \u062a\u062d\u0645\u064a\u0644"
|
||||
},
|
||||
"actions": {
|
||||
"cancelUpload": "\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u062a\u062d\u0645\u064a\u0644",
|
||||
"removeAttachment": "\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0645\u0631\u0641\u0642"
|
||||
}
|
||||
},
|
||||
"messages": {
|
||||
"status": {
|
||||
"using": "\u064a\u0633\u062a\u062e\u062f\u0645",
|
||||
"used": "\u0645\u0633\u062a\u062e\u062f\u0645"
|
||||
},
|
||||
"actions": {
|
||||
"copy": {
|
||||
"button": "\u0646\u0633\u062e \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629",
|
||||
"success": "\u062a\u0645 \u0627\u0644\u0646\u0633\u062e!"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"positive": "\u0645\u0641\u064a\u062f",
|
||||
"negative": "\u063a\u064a\u0631 \u0645\u0641\u064a\u062f",
|
||||
"edit": "\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u062a\u0639\u0644\u064a\u0642",
|
||||
"dialog": {
|
||||
"title": "\u0625\u0636\u0627\u0641\u0629 \u062a\u0639\u0644\u064a\u0642",
|
||||
"submit": "\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u062a\u0639\u0644\u064a\u0642",
|
||||
"yourFeedback": "\u0631\u0623\u064a\u0643..."
|
||||
},
|
||||
"status": {
|
||||
"updating": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u062f\u064a\u062b",
|
||||
"updated": "\u062a\u0645 \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062a\u0639\u0644\u064a\u0642"
|
||||
}
|
||||
}
|
||||
},
|
||||
"history": {
|
||||
"title": "\u0627\u0644\u0645\u062f\u062e\u0644\u0627\u062a \u0627\u0644\u0623\u062e\u064a\u0631\u0629",
|
||||
"empty": "\u0641\u0627\u0631\u063a \u062a\u0645\u0627\u0645\u0627\u064b...",
|
||||
"show": "\u0639\u0631\u0636 \u0627\u0644\u0633\u062c\u0644"
|
||||
},
|
||||
"settings": {
|
||||
"title": "\u0644\u0648\u062d\u0629 \u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a",
|
||||
"customize": "\u062e\u0635\u0635 \u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629 \u0647\u0646\u0627"
|
||||
},
|
||||
"watermark": "\u0642\u062f \u062a\u062e\u0637\u0626 \u0646\u0645\u0627\u0630\u062c \u0627\u0644\u0630\u0643\u0627\u0621 \u0627\u0644\u0627\u0635\u0637\u0646\u0627\u0639\u064a. \u062a\u062d\u0642\u0642 \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0627\u0644\u0645\u0647\u0645\u0629."
|
||||
},
|
||||
"threadHistory": {
|
||||
"sidebar": {
|
||||
"title": "\u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0627\u062a \u0627\u0644\u0633\u0627\u0628\u0642\u0629",
|
||||
"filters": {
|
||||
"search": "\u0628\u062d\u062b",
|
||||
"placeholder": "\u0627\u0644\u0628\u062d\u062b \u0641\u064a \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0627\u062a..."
|
||||
},
|
||||
"timeframes": {
|
||||
"today": "\u0627\u0644\u064a\u0648\u0645",
|
||||
"yesterday": "\u0623\u0645\u0633",
|
||||
"previous7days": "\u0622\u062e\u0631 7 \u0623\u064a\u0627\u0645",
|
||||
"previous30days": "\u0622\u062e\u0631 30 \u064a\u0648\u0645\u0627\u064b"
|
||||
},
|
||||
"empty": "\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0645\u062d\u0627\u062f\u062b\u0627\u062a",
|
||||
"actions": {
|
||||
"close": "\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u062c\u0627\u0646\u0628\u064a",
|
||||
"open": "\u0641\u062a\u062d \u0627\u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u062c\u0627\u0646\u0628\u064a"
|
||||
}
|
||||
},
|
||||
"thread": {
|
||||
"untitled": "\u0645\u062d\u0627\u062f\u062b\u0629 \u0628\u062f\u0648\u0646 \u0639\u0646\u0648\u0627\u0646",
|
||||
"menu": {
|
||||
"rename": "\u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629",
|
||||
"share": "\u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"delete": "\u062d\u0630\u0641"
|
||||
},
|
||||
"actions": {
|
||||
"share": {
|
||||
"title": "\u0645\u0634\u0627\u0631\u0643\u0629 \u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629",
|
||||
"button": "\u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"status": {
|
||||
"copied": "\u062a\u0645 \u0646\u0633\u062e \u0627\u0644\u0631\u0627\u0628\u0637",
|
||||
"created": "\u062a\u0645 \u0625\u0646\u0634\u0627\u0621 \u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629!",
|
||||
"unshared": "\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629"
|
||||
},
|
||||
"error": {
|
||||
"create": "\u0641\u0634\u0644 \u0625\u0646\u0634\u0627\u0621 \u0631\u0627\u0628\u0637 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0629",
|
||||
"unshare": "\u0641\u0634\u0644 \u062a\u0639\u0637\u064a\u0644 \u0645\u0634\u0627\u0631\u0643\u0629 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629"
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"title": "\u062a\u0623\u0643\u064a\u062f \u0627\u0644\u062d\u0630\u0641",
|
||||
"description": "\u0633\u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0625\u0644\u0649 \u062d\u0630\u0641 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629 \u0645\u0639 \u0631\u0633\u0627\u0626\u0644\u0647\u0627 \u0648\u0639\u0646\u0627\u0635\u0631\u0647\u0627. \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u062a\u0631\u0627\u062c\u0639 \u0639\u0646 \u0647\u0630\u0627 \u0627\u0644\u0625\u062c\u0631\u0627\u0621",
|
||||
"success": "\u062a\u0645 \u062d\u0630\u0641 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629",
|
||||
"inProgress": "\u062c\u0627\u0631\u064a \u062d\u0630\u0641 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629"
|
||||
},
|
||||
"rename": {
|
||||
"title": "\u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629",
|
||||
"description": "\u0623\u062f\u062e\u0644 \u0627\u0633\u0645\u0627\u064b \u062c\u062f\u064a\u062f\u0627\u064b \u0644\u0647\u0630\u0647 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629",
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "\u0627\u0644\u0627\u0633\u0645",
|
||||
"placeholder": "\u0623\u062f\u062e\u0644 \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u062c\u062f\u064a\u062f"
|
||||
}
|
||||
},
|
||||
"success": "\u062a\u0645\u062a \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629!",
|
||||
"inProgress": "\u062c\u0627\u0631\u064a \u0625\u0639\u0627\u062f\u0629 \u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"header": {
|
||||
"chat": "\u0645\u062d\u0627\u062f\u062b\u0629",
|
||||
"readme": "\u0627\u0642\u0631\u0623\u0646\u064a",
|
||||
"theme": {
|
||||
"light": "\u0627\u0644\u0633\u0645\u0629 \u0627\u0644\u0641\u0627\u062a\u062d\u0629",
|
||||
"dark": "\u0627\u0644\u0633\u0645\u0629 \u0627\u0644\u062f\u0627\u0643\u0646\u0629",
|
||||
"system": "\u0645\u062a\u0627\u0628\u0639\u0629 \u0627\u0644\u0646\u0638\u0627\u0645"
|
||||
}
|
||||
},
|
||||
"newChat": {
|
||||
"button": "\u0645\u062d\u0627\u062f\u062b\u0629 \u062c\u062f\u064a\u062f\u0629",
|
||||
"dialog": {
|
||||
"title": "\u0625\u0646\u0634\u0627\u0621 \u0645\u062d\u0627\u062f\u062b\u0629 \u062c\u062f\u064a\u062f\u0629",
|
||||
"description": "\u0633\u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0625\u0644\u0649 \u0645\u0633\u062d \u0633\u062c\u0644 \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629 \u0627\u0644\u062d\u0627\u0644\u064a. \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0645\u0646 \u0623\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0645\u062a\u0627\u0628\u0639\u0629\u061f",
|
||||
"tooltip": "\u0645\u062d\u0627\u062f\u062b\u0629 \u062c\u062f\u064a\u062f\u0629"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"menu": {
|
||||
"settings": "\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a",
|
||||
"settingsKey": "S",
|
||||
"apiKeys": "\u0645\u0641\u0627\u062a\u064a\u062d API",
|
||||
"logout": "\u062a\u0633\u062c\u064a\u0644 \u0627\u0644\u062e\u0631\u0648\u062c"
|
||||
}
|
||||
}
|
||||
},
|
||||
"apiKeys": {
|
||||
"title": "\u0645\u0641\u0627\u062a\u064a\u062d API \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629",
|
||||
"description": "\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0627 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\u060c \u0645\u0641\u0627\u062a\u064a\u062d API \u0627\u0644\u062a\u0627\u0644\u064a\u0629 \u0645\u0637\u0644\u0648\u0628\u0629. \u064a\u062a\u0645 \u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0641\u064a \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0627\u0644\u0645\u062d\u0644\u064a \u0644\u062c\u0647\u0627\u0632\u0643.",
|
||||
"success": {
|
||||
"saved": "\u062a\u0645 \u0627\u0644\u062d\u0641\u0638 \u0628\u0646\u062c\u0627\u062d"
|
||||
}
|
||||
},
|
||||
"alerts": {
|
||||
"info": "\u0645\u0639\u0644\u0648\u0645\u0627\u062a",
|
||||
"note": "\u0645\u0644\u0627\u062d\u0638\u0629",
|
||||
"tip": "\u0646\u0635\u064a\u062d\u0629",
|
||||
"important": "\u0645\u0647\u0645",
|
||||
"warning": "\u062a\u062d\u0630\u064a\u0631",
|
||||
"caution": "\u062a\u0646\u0628\u064a\u0647",
|
||||
"debug": "\u062a\u0635\u062d\u064a\u062d",
|
||||
"example": "\u0645\u062b\u0627\u0644",
|
||||
"success": "\u0646\u062c\u0627\u062d",
|
||||
"help": "\u0645\u0633\u0627\u0639\u062f\u0629",
|
||||
"idea": "\u0641\u0643\u0631\u0629",
|
||||
"pending": "\u0642\u064a\u062f \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631",
|
||||
"security": "\u0623\u0645\u0627\u0646",
|
||||
"beta": "\u062a\u062c\u0631\u064a\u0628\u064a",
|
||||
"best-practice": "\u0623\u0641\u0636\u0644 \u0645\u0645\u0627\u0631\u0633\u0629"
|
||||
},
|
||||
"components": {
|
||||
"MultiSelectInput": {
|
||||
"placeholder": "\u0627\u062e\u062a\u0631..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0627\u062e\u062a\u0631 \u062a\u0627\u0631\u064a\u062e\u0627\u064b",
|
||||
"range": "\u0627\u062e\u062a\u0631 \u0646\u0637\u0627\u0642\u0627\u064b \u0645\u0646 \u0627\u0644\u062a\u0648\u0627\u0631\u064a\u062e"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/bn.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u098f\u0995\u099f\u09bf \u09aa\u099b\u09a8\u09cd\u09a6\u09c7\u09b0 \u09ae\u09c7\u09b8\u09c7\u099c \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8",
|
||||
"headline": "\u09aa\u099b\u09a8\u09cd\u09a6\u09c7\u09b0 \u09ae\u09c7\u09b8\u09c7\u099c",
|
||||
"remove": "\u09aa\u099b\u09a8\u09cd\u09a6 \u09ac\u09be\u09a4\u09bf\u09b2 \u0995\u09b0\u09c1\u09a8",
|
||||
"empty": {
|
||||
"title": "\u098f\u0996\u09a8\u0993 \u0995\u09cb\u09a8\u09cb \u09aa\u09cd\u09b0\u09ae\u09cd\u09aa\u099f \u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09bf\u09a4 \u09a8\u09c7\u0987",
|
||||
"description": "\u098f\u0995\u099f\u09bf \u09aa\u09cd\u09b0\u09ae\u09cd\u09aa\u099f \u09aa\u09be\u09a0\u09bf\u09af\u09bc\u09c7 \u098f\u09ac\u0982 \u09a4\u09be\u09a4\u09c7 \u09a4\u09be\u09b0\u0995\u09be \u099a\u09bf\u09b9\u09cd\u09a8 \u09a6\u09bf\u09af\u09bc\u09c7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09c1\u09a8 \u09ac\u09be \u0986\u0997\u09c7\u09b0 \u099a\u09cd\u09af\u09be\u099f \u09a5\u09c7\u0995\u09c7 \u098f\u0995\u099f\u09bf \u09aa\u09cd\u09b0\u09ae\u09cd\u09aa\u099f\u09c7 \u09a4\u09be\u09b0\u0995\u09be \u099a\u09bf\u09b9\u09cd\u09a8 \u09a6\u09bf\u09a8"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u098f\u0995\u099f\u09bf \u09a4\u09be\u09b0\u09bf\u0996 \u09ac\u09c7\u099b\u09c7 \u09a8\u09bf\u09a8",
|
||||
"range": "\u09a4\u09be\u09b0\u09bf\u0996\u09c7\u09b0 \u09aa\u09b0\u09bf\u09b8\u09c0\u09ae\u09be \u09ac\u09c7\u099b\u09c7 \u09a8\u09bf\u09a8"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
259
frontend/.chainlit/translations/da-DK.json
Normal file
@ -0,0 +1,259 @@
|
||||
{
|
||||
"common": {
|
||||
"actions": {
|
||||
"cancel": "Annuller",
|
||||
"confirm": "Bekr\u00e6ft",
|
||||
"continue": "Forts\u00e6t",
|
||||
"goBack": "G\u00e5 tilbage",
|
||||
"reset": "Nulstil",
|
||||
"submit": "Indsend"
|
||||
},
|
||||
"status": {
|
||||
"loading": "Indl\u00e6ser...",
|
||||
"error": {
|
||||
"default": "Der opstod en fejl",
|
||||
"serverConnection": "Kunne ikke n\u00e5 serveren"
|
||||
}
|
||||
}
|
||||
},
|
||||
"auth": {
|
||||
"login": {
|
||||
"title": "Log ind for at f\u00e5 adgang til appen",
|
||||
"form": {
|
||||
"email": {
|
||||
"label": "E-mailadresse",
|
||||
"required": "e-mail er et p\u00e5kr\u00e6vet felt",
|
||||
"placeholder": "me@example.com"
|
||||
},
|
||||
"password": {
|
||||
"label": "Adgangskode",
|
||||
"required": "adgangskode er et p\u00e5kr\u00e6vet felt"
|
||||
},
|
||||
"actions": {
|
||||
"signin": "Log ind"
|
||||
},
|
||||
"alternativeText": {
|
||||
"or": "ELLER"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"default": "Kunne ikke logge ind",
|
||||
"signin": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"oauthSignin": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"redirectUriMismatch": "Omdirigerings-URI'en matcher ikke oauth-app konfigurationen",
|
||||
"oauthCallback": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"oauthCreateAccount": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"emailCreateAccount": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"callback": "Pr\u00f8v at logge ind med en anden konto",
|
||||
"oauthAccountNotLinked": "For at bekr\u00e6fte din identitet, log ind med samme konto, som du oprindeligt brugte",
|
||||
"emailSignin": "E-mailen kunne ikke sendes",
|
||||
"emailVerify": "Bekr\u00e6ft venligst din e-mail, en ny e-mail er blevet sendt",
|
||||
"credentialsSignin": "Login mislykkedes. Kontroller at de angivne oplysninger er korrekte",
|
||||
"sessionRequired": "Log venligst ind for at f\u00e5 adgang til denne side"
|
||||
}
|
||||
},
|
||||
"provider": {
|
||||
"continue": "Forts\u00e6t med {{provider}}"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"input": {
|
||||
"placeholder": "Skriv din besked her...",
|
||||
"actions": {
|
||||
"send": "Send besked",
|
||||
"stop": "Stop opgave",
|
||||
"attachFiles": "Vedh\u00e6ft filer"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Brug en favorit besked",
|
||||
"headline": "Favorit beskeder",
|
||||
"empty": {
|
||||
"title": "Ingen gemte prompts endnu",
|
||||
"description": "Start med at sende en prompt og markere den med en stjerne, eller v\u00e6lg en prompt fra tidligere samtaler"
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"button": "V\u00e6rkt\u00f8jer",
|
||||
"changeTool": "Skift v\u00e6rkt\u00f8j",
|
||||
"availableTools": "Tilg\u00e6ngelige v\u00e6rkt\u00f8jer"
|
||||
},
|
||||
"speech": {
|
||||
"start": "Start optagelse",
|
||||
"stop": "Stop optagelse",
|
||||
"connecting": "Forbinder"
|
||||
},
|
||||
"fileUpload": {
|
||||
"dragDrop": "Tr\u00e6k og slip filer her",
|
||||
"browse": "Gennemse filer",
|
||||
"sizeLimit": "Gr\u00e6nse:",
|
||||
"errors": {
|
||||
"failed": "Upload mislykkedes",
|
||||
"cancelled": "Annullerede upload af"
|
||||
},
|
||||
"actions": {
|
||||
"cancelUpload": "Annullere upload",
|
||||
"removeAttachment": "Fjern vedh\u00e6ftning"
|
||||
}
|
||||
},
|
||||
"messages": {
|
||||
"status": {
|
||||
"using": "Bruger",
|
||||
"used": "Brugte"
|
||||
},
|
||||
"actions": {
|
||||
"copy": {
|
||||
"button": "Kopier til udklipsholder",
|
||||
"success": "Kopieret!"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"positive": "Hj\u00e6lpsom",
|
||||
"negative": "Ikke hj\u00e6lpsom",
|
||||
"edit": "Rediger feedback",
|
||||
"dialog": {
|
||||
"title": "Tilf\u00f8j en kommentar",
|
||||
"submit": "Indsend feedback",
|
||||
"yourFeedback": "Din feedback..."
|
||||
},
|
||||
"status": {
|
||||
"updating": "Opdaterer",
|
||||
"updated": "Feedback opdateret"
|
||||
}
|
||||
}
|
||||
},
|
||||
"history": {
|
||||
"title": "Seneste input",
|
||||
"empty": "S\u00e5 tomt...",
|
||||
"show": "Vis historik"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Indstillingspanel",
|
||||
"customize": "Tilpas dine chatindstillinger her"
|
||||
},
|
||||
"watermark": "Bygget med"
|
||||
},
|
||||
"threadHistory": {
|
||||
"sidebar": {
|
||||
"title": "Tidligere samtaler",
|
||||
"filters": {
|
||||
"search": "S\u00f8g",
|
||||
"placeholder": "S\u00f8g i samtaler..."
|
||||
},
|
||||
"timeframes": {
|
||||
"today": "I dag",
|
||||
"yesterday": "I g\u00e5r",
|
||||
"previous7days": "Seneste 7 dage",
|
||||
"previous30days": "Seneste 30 dage"
|
||||
},
|
||||
"empty": "Ingen tr\u00e5de fundet",
|
||||
"actions": {
|
||||
"close": "Luk sidepanel",
|
||||
"open": "\u00c5bn sidepanel"
|
||||
}
|
||||
},
|
||||
"thread": {
|
||||
"untitled": "Unavngivet samtale",
|
||||
"menu": {
|
||||
"rename": "Omd\u00f8b",
|
||||
"share": "Del",
|
||||
"delete": "Slet"
|
||||
},
|
||||
"actions": {
|
||||
"share": {
|
||||
"title": "Del link til chat",
|
||||
"button": "Del",
|
||||
"status": {
|
||||
"copied": "Link kopieret",
|
||||
"created": "Delingslink oprettet!",
|
||||
"unshared": "Deling deaktiveret for denne tr\u00e5d"
|
||||
},
|
||||
"error": {
|
||||
"create": "Kunne ikke oprette delingslink",
|
||||
"unshare": "Kunne ikke fjerne deling af tr\u00e5d"
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"title": "Bekr\u00e6ft sletning",
|
||||
"description": "Dette vil slette tr\u00e5den samt dens beskeder og elementer. Denne handling kan ikke fortrydes",
|
||||
"success": "Chat slettet",
|
||||
"inProgress": "Sletter chat"
|
||||
},
|
||||
"rename": {
|
||||
"title": "Omd\u00f8b tr\u00e5d",
|
||||
"description": "Indtast et nyt navn til denne tr\u00e5d",
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Navn",
|
||||
"placeholder": "Indtast nyt navn"
|
||||
}
|
||||
},
|
||||
"success": "Tr\u00e5d omd\u00f8bt!",
|
||||
"inProgress": "Omd\u00f8ber tr\u00e5d"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"header": {
|
||||
"chat": "Chat",
|
||||
"readme": "\ud83d\udcd6",
|
||||
"theme": {
|
||||
"light": "Lyst tema",
|
||||
"dark": "M\u00f8rkt tema",
|
||||
"system": "F\u00f8lg system"
|
||||
}
|
||||
},
|
||||
"newChat": {
|
||||
"button": "Ny chat",
|
||||
"dialog": {
|
||||
"title": "Opret ny chat",
|
||||
"description": "Dette vil rydde din nuv\u00e6rende chathistorik. Er du sikker p\u00e5, at du vil forts\u00e6tte?",
|
||||
"tooltip": "Ny chat"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"menu": {
|
||||
"settings": "Indstillinger",
|
||||
"settingsKey": "S",
|
||||
"apiKeys": "API-n\u00f8gler",
|
||||
"logout": "Log ud"
|
||||
}
|
||||
}
|
||||
},
|
||||
"apiKeys": {
|
||||
"title": "P\u00e5kr\u00e6vede API-n\u00f8gler",
|
||||
"description": "For at bruge denne app kr\u00e6ves f\u00f8lgende API-n\u00f8gler. N\u00f8glerne gemmes p\u00e5 din enheds lokale lager.",
|
||||
"success": {
|
||||
"saved": "Gemt succesfuldt"
|
||||
}
|
||||
},
|
||||
"alerts": {
|
||||
"info": "Info",
|
||||
"note": "Bem\u00e6rk",
|
||||
"tip": "Tip",
|
||||
"important": "Vigtigt",
|
||||
"warning": "Advarsel",
|
||||
"caution": "Forsigtig",
|
||||
"debug": "Fejlfinding",
|
||||
"example": "Eksempel",
|
||||
"success": "Succes",
|
||||
"help": "Hj\u00e6lp",
|
||||
"idea": "Id\u00e9",
|
||||
"pending": "Afventer",
|
||||
"security": "Sikkerhed",
|
||||
"beta": "Beta",
|
||||
"best-practice": "Bedste praksis"
|
||||
},
|
||||
"components": {
|
||||
"MultiSelectInput": {
|
||||
"placeholder": "V\u00e6lg..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "V\u00e6lg en dato",
|
||||
"range": "V\u00e6lg et datointerval"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
254
frontend/.chainlit/translations/de-DE.json
Normal file
@ -0,0 +1,254 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Eine favorisierte Nachricht verwenden",
|
||||
"headline": "Favorisierte Nachrichten",
|
||||
"remove": "Favorit entfernen",
|
||||
"empty": {
|
||||
"title": "Noch keine Prompts gespeichert",
|
||||
"description": "Beginne, indem du einen Prompt sendest und mit einem Stern markierst oder markiere einen Prompt aus vorherigen Chats"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/el-GR.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03b1\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03bf \u03bc\u03ae\u03bd\u03c5\u03bc\u03b1",
|
||||
"headline": "\u0391\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03b1 \u03bc\u03b7\u03bd\u03cd\u03bc\u03b1\u03c4\u03b1",
|
||||
"remove": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b1\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5",
|
||||
"empty": {
|
||||
"title": "\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03c0\u03c1\u03bf\u03c4\u03c1\u03bf\u03c0\u03ad\u03c2 \u03b1\u03ba\u03cc\u03bc\u03b1",
|
||||
"description": "\u039e\u03b5\u03ba\u03b9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03c3\u03c4\u03ad\u03bb\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03bc\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c4\u03c1\u03bf\u03c0\u03ae \u03ba\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03c4\u03b5 \u03c4\u03b7\u03bd \u03c3\u03c4\u03b1 \u03b1\u03b3\u03b1\u03c0\u03b7\u03bc\u03ad\u03bd\u03b1 \u03ae \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c4\u03c1\u03bf\u03c0\u03ae \u03b1\u03c0\u03cc \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b5\u03c2 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b5\u03c2"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1",
|
||||
"range": "\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03b5\u03cd\u03c1\u03bf\u03c2 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03b9\u03ce\u03bd"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/en-US.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Use a favorite message",
|
||||
"headline": "Favorite Messages",
|
||||
"remove": "Remove favorite",
|
||||
"empty": {
|
||||
"title": "No Saved Prompts Yet",
|
||||
"description": "Start by sending a prompt and star it or star a prompt from previous chats"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "Pick a date",
|
||||
"range": "Pick a date range"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/es.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Usar un mensaje favorito",
|
||||
"headline": "Mensajes favoritos",
|
||||
"remove": "Eliminar favorito",
|
||||
"empty": {
|
||||
"title": "A\u00fan no hay prompts guardados",
|
||||
"description": "Comienza enviando un prompt y m\u00e1rcalo con estrella o marca un prompt de chats anteriores"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "Elige una fecha",
|
||||
"range": "Elige un rango de fechas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/fr-FR.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Utiliser un message favori",
|
||||
"headline": "Messages favoris",
|
||||
"remove": "Supprimer des favoris",
|
||||
"empty": {
|
||||
"title": "Aucun prompt enregistr\u00e9 pour le moment",
|
||||
"description": "Commencez par envoyer un prompt et ajoutez-le aux favoris ou ajoutez un prompt de discussions pr\u00e9c\u00e9dentes aux favoris"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "Choisir une date",
|
||||
"range": "Choisir une plage de dates"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/gu.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0aae\u0aa8\u0aaa\u0ab8\u0a82\u0aa6 \u0ab8\u0a82\u0aa6\u0ac7\u0ab6\u0aa8\u0acb \u0a89\u0aaa\u0aaf\u0acb\u0a97 \u0a95\u0ab0\u0acb",
|
||||
"headline": "\u0aae\u0aa8\u0aaa\u0ab8\u0a82\u0aa6 \u0ab8\u0a82\u0aa6\u0ac7\u0ab6\u0abe\u0a93",
|
||||
"remove": "\u0aae\u0aa8\u0aaa\u0ab8\u0a82\u0aa6 \u0ab8\u0a82\u0aa6\u0ac7\u0ab6 \u0aa6\u0ac2\u0ab0 \u0a95\u0ab0\u0acb",
|
||||
"empty": {
|
||||
"title": "\u0ab9\u0a9c\u0ac0 \u0ab8\u0ac1\u0aa7\u0ac0 \u0a95\u0acb\u0a88 \u0aaa\u0acd\u0ab0\u0acb\u0aae\u0acd\u0aaa\u0acd\u0a9f \u0ab8\u0abe\u0a9a\u0ab5\u0ac7\u0ab2 \u0aa8\u0aa5\u0ac0",
|
||||
"description": "\u0a8f\u0a95 \u0aaa\u0acd\u0ab0\u0acb\u0aae\u0acd\u0aaa\u0acd\u0a9f \u0aae\u0acb\u0a95\u0ab2\u0ac0\u0aa8\u0ac7 \u0a85\u0aa8\u0ac7 \u0aa4\u0ac7\u0aa8\u0ac7 \u0ab8\u0acd\u0a9f\u0abe\u0ab0 \u0a95\u0ab0\u0ac0\u0aa8\u0ac7 \u0ab6\u0ab0\u0ac2\u0a86\u0aa4 \u0a95\u0ab0\u0acb \u0a85\u0aa5\u0ab5\u0abe \u0a85\u0a97\u0abe\u0a89\u0aa8\u0ac0 \u0a9a\u0ac7\u0a9f\u0aae\u0abe\u0a82\u0aa5\u0ac0 \u0a95\u0acb\u0a88 \u0aaa\u0acd\u0ab0\u0acb\u0aae\u0acd\u0aaa\u0acd\u0a9f\u0aa8\u0ac7 \u0ab8\u0acd\u0a9f\u0abe\u0ab0 \u0a95\u0ab0\u0acb"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0aa4\u0abe\u0ab0\u0ac0\u0a96 \u0aaa\u0ab8\u0a82\u0aa6 \u0a95\u0ab0\u0acb",
|
||||
"range": "\u0aa4\u0abe\u0ab0\u0ac0\u0a96\u0aa8\u0ac0 \u0ab6\u0acd\u0ab0\u0ac7\u0aa3\u0ac0 \u0aaa\u0ab8\u0a82\u0aa6 \u0a95\u0ab0\u0acb"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/he-IL.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d4\u05d5\u05d3\u05e2\u05d4 \u05de\u05d5\u05e2\u05d3\u05e4\u05ea",
|
||||
"headline": "\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05de\u05d5\u05e2\u05d3\u05e4\u05d5\u05ea",
|
||||
"remove": "\u05d4\u05e1\u05e8 \u05de\u05d4\u05de\u05d5\u05e2\u05d3\u05e4\u05d9\u05dd",
|
||||
"empty": {
|
||||
"title": "\u05e2\u05d3\u05d9\u05d9\u05df \u05d0\u05d9\u05df \u05d4\u05e0\u05d7\u05d9\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea",
|
||||
"description": "\u05d4\u05ea\u05d7\u05dc \u05d1\u05e9\u05dc\u05d9\u05d7\u05ea \u05d4\u05e0\u05d7\u05d9\u05d4 \u05d5\u05e1\u05de\u05df \u05d0\u05d5\u05ea\u05d4 \u05d1\u05db\u05d5\u05db\u05d1 \u05d0\u05d5 \u05e1\u05de\u05df \u05d4\u05e0\u05d7\u05d9\u05d4 \u05de\u05e9\u05d9\u05d7\u05d5\u05ea \u05e7\u05d5\u05d3\u05de\u05d5\u05ea"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u05d1\u05d7\u05e8 \u05ea\u05d0\u05e8\u05d9\u05da",
|
||||
"range": "\u05d1\u05d7\u05e8 \u05d8\u05d5\u05d5\u05d7 \u05ea\u05d0\u05e8\u05d9\u05db\u05d9\u05dd"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/hi.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u092a\u0938\u0902\u0926\u0940\u0926\u093e \u0938\u0902\u0926\u0947\u0936 \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0947\u0902",
|
||||
"headline": "\u092a\u0938\u0902\u0926\u0940\u0926\u093e \u0938\u0902\u0926\u0947\u0936",
|
||||
"remove": "\u092a\u0938\u0902\u0926\u0940\u0926\u093e \u0939\u091f\u093e\u090f\u0902",
|
||||
"empty": {
|
||||
"title": "\u0905\u092d\u0940 \u0924\u0915 \u0915\u094b\u0908 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f \u0938\u0939\u0947\u091c\u093e \u0928\u0939\u0940\u0902 \u0917\u092f\u093e",
|
||||
"description": "\u090f\u0915 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f \u092d\u0947\u091c\u0915\u0930 \u0914\u0930 \u0909\u0938\u0947 \u0938\u094d\u091f\u093e\u0930 \u0915\u0930\u0915\u0947 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902 \u092f\u093e \u092a\u093f\u091b\u0932\u0940 \u091a\u0948\u091f \u0938\u0947 \u0915\u093f\u0938\u0940 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f \u0915\u094b \u0938\u094d\u091f\u093e\u0930 \u0915\u0930\u0947\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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u090f\u0915 \u0924\u093e\u0930\u0940\u0916 \u091a\u0941\u0928\u0947\u0902",
|
||||
"range": "\u0924\u093e\u0930\u0940\u0916 \u0938\u0940\u092e\u093e \u091a\u0941\u0928\u0947\u0902"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
254
frontend/.chainlit/translations/it.json
Normal file
@ -0,0 +1,254 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Usa un messaggio preferito",
|
||||
"headline": "Messaggi preferiti",
|
||||
"remove": "Rimuovi preferito",
|
||||
"empty": {
|
||||
"title": "Nessun prompt salvato ancora",
|
||||
"description": "Inizia inviando un prompt e aggiungilo ai preferiti o aggiungi un prompt dalle chat precedenti"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
}
|
||||
}
|
||||
}
|
||||
259
frontend/.chainlit/translations/ja.json
Normal file
@ -0,0 +1,259 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u304a\u6c17\u306b\u5165\u308a\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u4f7f\u7528",
|
||||
"headline": "\u304a\u6c17\u306b\u5165\u308a\u306e\u30e1\u30c3\u30bb\u30fc\u30b8",
|
||||
"remove": "\u304a\u6c17\u306b\u5165\u308a\u3092\u524a\u9664",
|
||||
"empty": {
|
||||
"title": "\u4fdd\u5b58\u3055\u308c\u305f\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u307e\u3060\u3042\u308a\u307e\u305b\u3093",
|
||||
"description": "\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u9001\u4fe1\u3057\u3066\u30b9\u30bf\u30fc\u3092\u4ed8\u3051\u308b\u304b\u3001\u4ee5\u524d\u306e\u30c1\u30e3\u30c3\u30c8\u304b\u3089\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u30b9\u30bf\u30fc\u3057\u3066\u304f\u3060\u3055\u3044"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u65e5\u4ed8\u3092\u9078\u629e",
|
||||
"range": "\u65e5\u4ed8\u7bc4\u56f2\u3092\u9078\u629e"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/kn.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0cae\u0cc6\u0c9a\u0ccd\u0c9a\u0cbf\u0ca8 \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0cac\u0cb3\u0cb8\u0cbf",
|
||||
"headline": "\u0cae\u0cc6\u0c9a\u0ccd\u0c9a\u0cbf\u0ca8 \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0c97\u0cb3\u0cc1",
|
||||
"remove": "\u0cae\u0cc6\u0c9a\u0ccd\u0c9a\u0cbf\u0ca8 \u0cb8\u0c82\u0ca6\u0cc7\u0cb6\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0ca4\u0cc6\u0c97\u0cc6\u0ca6\u0cc1\u0cb9\u0cbe\u0c95\u0cbf",
|
||||
"empty": {
|
||||
"title": "\u0c87\u0ca8\u0ccd\u0ca8\u0cc2 \u0caf\u0cbe\u0cb5\u0cc1\u0ca6\u0cc7 \u0caa\u0ccd\u0cb0\u0cbe\u0c82\u0caa\u0ccd\u0c9f\u0ccd\u200c\u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0c89\u0cb3\u0cbf\u0cb8\u0cb2\u0cbe\u0c97\u0cbf\u0cb2\u0ccd\u0cb2",
|
||||
"description": "\u0caa\u0ccd\u0cb0\u0cbe\u0c82\u0caa\u0ccd\u0c9f\u0ccd \u0c95\u0cb3\u0cc1\u0cb9\u0cbf\u0cb8\u0cbf \u0cae\u0ca4\u0ccd\u0ca4\u0cc1 \u0c85\u0ca6\u0c95\u0ccd\u0c95\u0cc6 \u0cb8\u0ccd\u0c9f\u0cbe\u0cb0\u0ccd \u0cae\u0cbe\u0ca1\u0cbf \u0c85\u0ca5\u0cb5\u0cbe \u0cb9\u0cbf\u0c82\u0ca6\u0cbf\u0ca8 \u0c9a\u0cbe\u0c9f\u0ccd\u200c\u0c97\u0cb3\u0cbf\u0c82\u0ca6 \u0caa\u0ccd\u0cb0\u0cbe\u0c82\u0caa\u0ccd\u0c9f\u0ccd\u200c\u0c97\u0cc6 \u0cb8\u0ccd\u0c9f\u0cbe\u0cb0\u0ccd \u0cae\u0cbe\u0ca1\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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0ca6\u0cbf\u0ca8\u0cbe\u0c82\u0c95\u0cb5\u0ca8\u0ccd\u0ca8\u0cc1 \u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf",
|
||||
"range": "\u0ca6\u0cbf\u0ca8\u0cbe\u0c82\u0c95 \u0cb6\u0ccd\u0cb0\u0cc7\u0ca3\u0cbf\u0caf\u0ca8\u0ccd\u0ca8\u0cc1 \u0c86\u0caf\u0ccd\u0c95\u0cc6\u0cae\u0cbe\u0ca1\u0cbf"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
254
frontend/.chainlit/translations/ko.json
Normal file
@ -0,0 +1,254 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\uc990\uaca8\ucc3e\uae30 \uba54\uc2dc\uc9c0 \uc0ac\uc6a9",
|
||||
"headline": "\uc990\uaca8\ucc3e\uae30 \uba54\uc2dc\uc9c0",
|
||||
"remove": "\uc990\uaca8\ucc3e\uae30 \uc81c\uac70",
|
||||
"empty": {
|
||||
"title": "\uc800\uc7a5\ub41c \ud504\ub86c\ud504\ud2b8\uac00 \uc544\uc9c1 \uc5c6\uc2b5\ub2c8\ub2e4",
|
||||
"description": "\ud504\ub86c\ud504\ud2b8\ub97c \ubcf4\ub0b4\uace0 \ubcc4\ud45c\ub97c \ucd94\uac00\ud558\uac70\ub098 \uc774\uc804 \ub300\ud654\uc5d0\uc11c \ud504\ub86c\ud504\ud2b8\uc5d0 \ubcc4\ud45c\ub97c \ucd94\uac00\ud558\uc138\uc694"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/ml.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0d2a\u0d4d\u0d30\u0d3f\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f \u0d38\u0d28\u0d4d\u0d26\u0d47\u0d36\u0d02 \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
|
||||
"headline": "\u0d2a\u0d4d\u0d30\u0d3f\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f \u0d38\u0d28\u0d4d\u0d26\u0d47\u0d36\u0d19\u0d4d\u0d19\u0d7e",
|
||||
"remove": "\u0d07\u0d37\u0d4d\u0d1f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d24\u0d4d \u0d28\u0d40\u0d15\u0d4d\u0d15\u0d02 \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
|
||||
"empty": {
|
||||
"title": "\u0d07\u0d24\u0d41\u0d35\u0d30\u0d46 \u0d38\u0d02\u0d30\u0d15\u0d4d\u0d37\u0d3f\u0d1a\u0d4d\u0d1a \u0d2a\u0d4d\u0d30\u0d4b\u0d02\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d41\u0d15\u0d33\u0d4a\u0d28\u0d4d\u0d28\u0d41\u0d2e\u0d3f\u0d32\u0d4d\u0d32",
|
||||
"description": "\u0d12\u0d30\u0d41 \u0d2a\u0d4d\u0d30\u0d4b\u0d02\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d4d \u0d05\u0d2f\u0d1a\u0d4d\u0d1a\u0d4d \u0d05\u0d24\u0d3f\u0d28\u0d4d \u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d3e\u0d7c \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d41\u0d15\u0d4a\u0d23\u0d4d\u0d1f\u0d4d \u0d06\u0d30\u0d02\u0d2d\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15 \u0d05\u0d32\u0d4d\u0d32\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d7d \u0d2e\u0d41\u0d7b \u0d1a\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15\u0d33\u0d3f\u0d7d \u0d28\u0d3f\u0d28\u0d4d\u0d28\u0d4d \u0d12\u0d30\u0d41 \u0d2a\u0d4d\u0d30\u0d4b\u0d02\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d3f\u0d28\u0d4d \u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d3e\u0d7c \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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0d24\u0d40\u0d2f\u0d24\u0d3f \u0d24\u0d3f\u0d30\u0d1e\u0d4d\u0d1e\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15",
|
||||
"range": "\u0d24\u0d40\u0d2f\u0d24\u0d3f \u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f \u0d24\u0d3f\u0d30\u0d1e\u0d4d\u0d1e\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/mr.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0906\u0935\u0921\u0924\u093e \u0938\u0902\u0926\u0947\u0936 \u0935\u093e\u092a\u0930\u093e",
|
||||
"headline": "\u0906\u0935\u0921\u0924\u0947 \u0938\u0902\u0926\u0947\u0936",
|
||||
"remove": "\u0906\u0935\u0921\u0924\u093e \u0938\u0902\u0926\u0947\u0936 \u0915\u093e\u0922\u093e",
|
||||
"empty": {
|
||||
"title": "\u0905\u0926\u094d\u092f\u093e\u092a \u0915\u094b\u0923\u0924\u0947\u0939\u0940 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f \u091c\u0924\u0928 \u0915\u0947\u0932\u0947\u0932\u0947 \u0928\u093e\u0939\u0940\u0924",
|
||||
"description": "\u090f\u0915 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f \u092a\u093e\u0920\u0935\u0942\u0928 \u0906\u0923\u093f \u0924\u094d\u092f\u093e\u0935\u0930 \u0938\u094d\u091f\u093e\u0930 \u0915\u0930\u0942\u0928 \u0938\u0941\u0930\u0941\u0935\u093e\u0924 \u0915\u0930\u093e \u0915\u093f\u0902\u0935\u093e \u092e\u093e\u0917\u0940\u0932 \u091a\u0945\u091f\u092e\u0927\u0942\u0928 \u092a\u094d\u0930\u0949\u092e\u094d\u092a\u094d\u091f\u0935\u0930 \u0938\u094d\u091f\u093e\u0930 \u0915\u0930\u093e"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0924\u093e\u0930\u0940\u0916 \u0928\u093f\u0935\u0921\u093e",
|
||||
"range": "\u0924\u093e\u0930\u0940\u0916 \u0936\u094d\u0930\u0947\u0923\u0940 \u0928\u093f\u0935\u0921\u093e"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/nl.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Gebruik een favoriet bericht",
|
||||
"headline": "Favoriete berichten",
|
||||
"remove": "Verwijder favoriet",
|
||||
"empty": {
|
||||
"title": "Nog geen opgeslagen prompts",
|
||||
"description": "Begin door een prompt te versturen en voeg deze toe aan favorieten of voeg een prompt uit eerdere chats toe"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "Kies een datum",
|
||||
"range": "Kies een datumbereik"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/pt-PT.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"common": {
|
||||
"actions": {
|
||||
"cancel": "Cancelar",
|
||||
"confirm": "Confirmar",
|
||||
"continue": "Continuar",
|
||||
"goBack": "Voltar",
|
||||
"reset": "Repor",
|
||||
"submit": "Enviar"
|
||||
},
|
||||
"status": {
|
||||
"loading": "A carregar...",
|
||||
"error": {
|
||||
"default": "Ocorreu um erro",
|
||||
"serverConnection": "N\u00e3o foi poss\u00edvel estabelecer liga\u00e7\u00e3o ao servidor"
|
||||
}
|
||||
}
|
||||
},
|
||||
"auth": {
|
||||
"login": {
|
||||
"title": "Inicie sess\u00e3o para aceder \u00e0 aplica\u00e7\u00e3o",
|
||||
"form": {
|
||||
"email": {
|
||||
"label": "E-mail",
|
||||
"required": "o e-mail \u00e9 obrigat\u00f3rio",
|
||||
"placeholder": "me@example.com"
|
||||
},
|
||||
"password": {
|
||||
"label": "Palavra-passe",
|
||||
"required": "a palavra-passe \u00e9 obrigat\u00f3ria"
|
||||
},
|
||||
"actions": {
|
||||
"signin": "Iniciar sess\u00e3o"
|
||||
},
|
||||
"alternativeText": {
|
||||
"or": "Ou"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"default": "N\u00e3o foi poss\u00edvel iniciar sess\u00e3o",
|
||||
"signin": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"oauthSignin": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"redirectUriMismatch": "O URI de redirecionamento n\u00e3o corresponde \u00e0 configura\u00e7\u00e3o da aplica\u00e7\u00e3o OAuth",
|
||||
"oauthCallback": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"oauthCreateAccount": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"emailCreateAccount": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"callback": "Tente iniciar sess\u00e3o com outra conta",
|
||||
"oauthAccountNotLinked": "Para confirmar a sua identidade, inicie sess\u00e3o com a mesma conta utilizada anteriormente",
|
||||
"emailSignin": "N\u00e3o foi poss\u00edvel enviar o e-mail",
|
||||
"emailVerify": "Por favor, verifique o seu e-mail. Foi enviada uma nova mensagem",
|
||||
"credentialsSignin": "Erro ao iniciar sess\u00e3o. Verifique se os dados fornecidos est\u00e3o corretos",
|
||||
"sessionRequired": "Por favor, inicie sess\u00e3o para aceder a esta p\u00e1gina"
|
||||
}
|
||||
},
|
||||
"provider": {
|
||||
"continue": "Continuar com {{provider}}"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"input": {
|
||||
"placeholder": "Escreva a sua mensagem aqui...",
|
||||
"actions": {
|
||||
"send": "Enviar mensagem",
|
||||
"stop": "Parar tarefa",
|
||||
"attachFiles": "Anexar ficheiros"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "Utilizar mensagem favorita",
|
||||
"headline": "Mensagens favoritas",
|
||||
"remove": "Remover favorito",
|
||||
"empty": {
|
||||
"title": "Ainda n\u00e3o h\u00e1 prompts guardados",
|
||||
"description": "Comece por enviar um prompt e marc\u00e1-lo com estrela, ou marque com estrela um prompt de conversas anteriores"
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"button": "Ferramentas",
|
||||
"changeTool": "Alterar ferramenta",
|
||||
"availableTools": "Ferramentas dispon\u00edveis"
|
||||
},
|
||||
"speech": {
|
||||
"start": "Iniciar grava\u00e7\u00e3o",
|
||||
"stop": "Parar grava\u00e7\u00e3o",
|
||||
"connecting": "A ligar"
|
||||
},
|
||||
"fileUpload": {
|
||||
"dragDrop": "Arraste e largue ficheiros aqui",
|
||||
"browse": "Procurar ficheiros",
|
||||
"sizeLimit": "Limite:",
|
||||
"errors": {
|
||||
"failed": "Erro ao carregar",
|
||||
"cancelled": "Carregamento cancelado de"
|
||||
},
|
||||
"actions": {
|
||||
"cancelUpload": "Cancelar carregamento",
|
||||
"removeAttachment": "Remover anexo"
|
||||
}
|
||||
},
|
||||
"messages": {
|
||||
"status": {
|
||||
"using": "A utilizar",
|
||||
"used": "Utilizado"
|
||||
},
|
||||
"actions": {
|
||||
"copy": {
|
||||
"button": "Copiar para a \u00e1rea de transfer\u00eancia",
|
||||
"success": "Copiado!"
|
||||
}
|
||||
},
|
||||
"feedback": {
|
||||
"positive": "\u00datil",
|
||||
"negative": "N\u00e3o \u00fatil",
|
||||
"edit": "Editar coment\u00e1rio",
|
||||
"dialog": {
|
||||
"title": "Adicionar um coment\u00e1rio",
|
||||
"submit": "Enviar coment\u00e1rio",
|
||||
"yourFeedback": "O seu coment\u00e1rio..."
|
||||
},
|
||||
"status": {
|
||||
"updating": "A atualizar",
|
||||
"updated": "Coment\u00e1rio atualizado"
|
||||
}
|
||||
}
|
||||
},
|
||||
"history": {
|
||||
"title": "\u00daltimas entradas",
|
||||
"empty": "Est\u00e1 vazio...",
|
||||
"show": "Mostrar hist\u00f3rico"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Painel de configura\u00e7\u00f5es",
|
||||
"customize": "Personalize aqui as configura\u00e7\u00f5es do seu chat"
|
||||
},
|
||||
"watermark": "Os modelos de linguagem podem cometer erros. Verifique sempre informa\u00e7\u00f5es importantes."
|
||||
},
|
||||
"threadHistory": {
|
||||
"sidebar": {
|
||||
"title": "Conversas anteriores",
|
||||
"filters": {
|
||||
"search": "Pesquisar",
|
||||
"placeholder": "Pesquisar conversas..."
|
||||
},
|
||||
"timeframes": {
|
||||
"today": "Hoje",
|
||||
"yesterday": "Ontem",
|
||||
"previous7days": "\u00daltimos 7 dias",
|
||||
"previous30days": "\u00daltimos 30 dias"
|
||||
},
|
||||
"empty": "Nenhuma conversa encontrada",
|
||||
"actions": {
|
||||
"close": "Fechar barra lateral",
|
||||
"open": "Abrir barra lateral"
|
||||
}
|
||||
},
|
||||
"thread": {
|
||||
"untitled": "Conversa sem t\u00edtulo",
|
||||
"menu": {
|
||||
"rename": "Renomear",
|
||||
"share": "Partilhar",
|
||||
"delete": "Eliminar"
|
||||
},
|
||||
"actions": {
|
||||
"share": {
|
||||
"title": "Partilhar liga\u00e7\u00e3o do chat",
|
||||
"button": "Partilhar",
|
||||
"status": {
|
||||
"copied": "Liga\u00e7\u00e3o copiada",
|
||||
"created": "Liga\u00e7\u00e3o de partilha criada!",
|
||||
"unshared": "Partilha desativada para esta conversa"
|
||||
},
|
||||
"error": {
|
||||
"create": "Erro ao criar liga\u00e7\u00e3o de partilha",
|
||||
"unshare": "Erro ao desativar a partilha"
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"title": "Confirmar elimina\u00e7\u00e3o",
|
||||
"description": "Ir\u00e1 eliminar a conversa e todos os seus conte\u00fados. Esta a\u00e7\u00e3o n\u00e3o pode ser anulada.",
|
||||
"success": "Chat eliminado",
|
||||
"inProgress": "A eliminar chat"
|
||||
},
|
||||
"rename": {
|
||||
"title": "Renomear conversa",
|
||||
"description": "Insira um novo nome para esta conversa",
|
||||
"form": {
|
||||
"name": {
|
||||
"label": "Nome",
|
||||
"placeholder": "Insira o novo nome"
|
||||
}
|
||||
},
|
||||
"success": "Conversa renomeada!",
|
||||
"inProgress": "A renomear conversa"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"header": {
|
||||
"chat": "Chat",
|
||||
"readme": "Leia-me",
|
||||
"theme": {
|
||||
"light": "Tema claro",
|
||||
"dark": "Tema escuro",
|
||||
"system": "Seguir sistema"
|
||||
}
|
||||
},
|
||||
"newChat": {
|
||||
"button": "Novo chat",
|
||||
"dialog": {
|
||||
"title": "Criar novo chat",
|
||||
"description": "Isto ir\u00e1 apagar o hist\u00f3rico de chat atual. Tem a certeza de que pretende continuar?",
|
||||
"tooltip": "Novo chat"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"menu": {
|
||||
"settings": "Configura\u00e7\u00f5es",
|
||||
"settingsKey": "S",
|
||||
"apiKeys": "Chaves API",
|
||||
"logout": "Terminar sess\u00e3o"
|
||||
}
|
||||
}
|
||||
},
|
||||
"apiKeys": {
|
||||
"title": "Chaves API necess\u00e1rias",
|
||||
"description": "Para utilizar esta aplica\u00e7\u00e3o, s\u00e3o necess\u00e1rias as seguintes chaves API. As chaves s\u00e3o guardadas localmente no seu dispositivo.",
|
||||
"success": {
|
||||
"saved": "Guardado com sucesso"
|
||||
}
|
||||
},
|
||||
"alerts": {
|
||||
"info": "Informa\u00e7\u00e3o",
|
||||
"note": "Nota",
|
||||
"tip": "Dica",
|
||||
"important": "Importante",
|
||||
"warning": "Aviso",
|
||||
"caution": "Cuidado",
|
||||
"debug": "Depura\u00e7\u00e3o",
|
||||
"example": "Exemplo",
|
||||
"success": "Sucesso",
|
||||
"help": "Ajuda",
|
||||
"idea": "Ideia",
|
||||
"pending": "Pendente",
|
||||
"security": "Seguran\u00e7a",
|
||||
"beta": "Beta",
|
||||
"best-practice": "Boa pr\u00e1tica"
|
||||
},
|
||||
"components": {
|
||||
"MultiSelectInput": {
|
||||
"placeholder": "Selecionar..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "Escolher uma data",
|
||||
"range": "Escolher um intervalo de datas"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/ta.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bae\u0bbe\u0ba9 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0baf\u0bc8\u0baa\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb5\u0bc1\u0bae\u0bcd",
|
||||
"headline": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bae\u0bbe\u0ba9 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bbf\u0b95\u0bb3\u0bcd",
|
||||
"remove": "\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0ba4\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1",
|
||||
"empty": {
|
||||
"title": "\u0b87\u0ba9\u0bcd\u0ba9\u0bc1\u0bae\u0bcd \u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0bcd\u0bb0\u0bbe\u0bae\u0bcd\u0baa\u0bcd\u0b9f\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8",
|
||||
"description": "\u0b92\u0bb0\u0bc1 \u0baa\u0bcd\u0bb0\u0bbe\u0bae\u0bcd\u0baa\u0bcd\u0b9f\u0bcd \u0b85\u0ba9\u0bc1\u0baa\u0bcd\u0baa\u0bbf \u0b85\u0ba4\u0bc8 \u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0bb5\u0ba4\u0ba9\u0bcd \u0bae\u0bc2\u0bb2\u0bae\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf \u0b85\u0bb0\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bb3\u0bbf\u0bb2\u0bcd \u0b87\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b92\u0bb0\u0bc1 \u0baa\u0bcd\u0bb0\u0bbe\u0bae\u0bcd\u0baa\u0bcd\u0b9f\u0bcd\u0b9f\u0bc8 \u0bb8\u0bcd\u0b9f\u0bbe\u0bb0\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0baf\u0bb5\u0bc1\u0bae\u0bcd"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0ba4\u0bc7\u0ba4\u0bbf\u0baf\u0bc8\u0ba4\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd",
|
||||
"range": "\u0ba4\u0bc7\u0ba4\u0bbf \u0bb5\u0bb0\u0bae\u0bcd\u0baa\u0bc8\u0ba4\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bb5\u0bc1\u0bae\u0bcd"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/te.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u0c07\u0c37\u0c4d\u0c1f\u0c2e\u0c48\u0c28 \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c09\u0c2a\u0c2f\u0c4b\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f",
|
||||
"headline": "\u0c07\u0c37\u0c4d\u0c1f\u0c2e\u0c48\u0c28 \u0c38\u0c02\u0c26\u0c47\u0c36\u0c3e\u0c32\u0c41",
|
||||
"remove": "\u0c07\u0c37\u0c4d\u0c1f\u0c2e\u0c48\u0c28\u0c26\u0c3e\u0c28\u0c4d\u0c28\u0c3f \u0c24\u0c4a\u0c32\u0c17\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f",
|
||||
"empty": {
|
||||
"title": "\u0c07\u0c02\u0c15\u0c3e \u0c2a\u0c4d\u0c30\u0c3e\u0c02\u0c2a\u0c4d\u0c1f\u0c4d\u200c\u0c32\u0c41 \u0c38\u0c47\u0c35\u0c4d \u0c1a\u0c47\u0c2f\u0c32\u0c47\u0c26\u0c41",
|
||||
"description": "\u0c12\u0c15 \u0c2a\u0c4d\u0c30\u0c3e\u0c02\u0c2a\u0c4d\u0c1f\u0c4d \u0c2a\u0c02\u0c2a\u0c3f \u0c26\u0c3e\u0c28\u0c3f\u0c15\u0c3f \u0c38\u0c4d\u0c1f\u0c3e\u0c30\u0c4d \u0c1a\u0c47\u0c2f\u0c21\u0c02 \u0c26\u0c4d\u0c35\u0c3e\u0c30\u0c3e \u0c2a\u0c4d\u0c30\u0c3e\u0c30\u0c02\u0c2d\u0c3f\u0c02\u0c1a\u0c02\u0c21\u0c3f \u0c32\u0c47\u0c26\u0c3e \u0c2e\u0c41\u0c28\u0c41\u0c2a\u0c1f\u0c3f \u0c1a\u0c3e\u0c1f\u0c4d\u200c\u0c32 \u0c28\u0c41\u0c02\u0c21\u0c3f \u0c2a\u0c4d\u0c30\u0c3e\u0c02\u0c2a\u0c4d\u0c1f\u0c4d\u200c\u0c15\u0c41 \u0c38\u0c4d\u0c1f\u0c3e\u0c30\u0c4d \u0c1a\u0c47\u0c2f\u0c02\u0c21\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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u0c24\u0c47\u0c26\u0c40\u0c28\u0c3f \u0c0e\u0c02\u0c1a\u0c41\u0c15\u0c4b\u0c02\u0c21\u0c3f",
|
||||
"range": "\u0c24\u0c47\u0c26\u0c40 \u0c2a\u0c30\u0c3f\u0c27\u0c3f\u0c28\u0c3f \u0c0e\u0c02\u0c1a\u0c41\u0c15\u0c4b\u0c02\u0c21\u0c3f"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/zh-CN.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u4f7f\u7528\u6536\u85cf\u7684\u6d88\u606f",
|
||||
"headline": "\u6536\u85cf\u7684\u6d88\u606f",
|
||||
"remove": "\u79fb\u9664\u6536\u85cf",
|
||||
"empty": {
|
||||
"title": "\u5c1a\u672a\u4fdd\u5b58\u7684\u63d0\u793a",
|
||||
"description": "\u4ece\u53d1\u9001\u63d0\u793a\u5e76\u52a0\u661f\u6807\u5f00\u59cb\uff0c\u6216\u4ece\u4e4b\u524d\u7684\u804a\u5929\u4e2d\u52a0\u661f\u6807\u63d0\u793a"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u9009\u62e9\u65e5\u671f",
|
||||
"range": "\u9009\u62e9\u65e5\u671f\u8303\u56f4"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
260
frontend/.chainlit/translations/zh-TW.json
Normal file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"favorites": {
|
||||
"use": "\u4f7f\u7528\u6536\u85cf\u7684\u8a0a\u606f",
|
||||
"headline": "\u6536\u85cf\u7684\u8a0a\u606f",
|
||||
"remove": "\u79fb\u9664\u6536\u85cf",
|
||||
"empty": {
|
||||
"title": "\u5c1a\u672a\u5132\u5b58\u7684\u63d0\u793a",
|
||||
"description": "\u5f9e\u767c\u9001\u63d0\u793a\u4e26\u52a0\u661f\u865f\u958b\u59cb\uff0c\u6216\u5f9e\u4e4b\u524d\u7684\u804a\u5929\u4e2d\u52a0\u661f\u865f\u63d0\u793a"
|
||||
}
|
||||
},
|
||||
"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..."
|
||||
},
|
||||
"DatePickerInput": {
|
||||
"placeholder": {
|
||||
"single": "\u9078\u64c7\u65e5\u671f",
|
||||
"range": "\u9078\u64c7\u65e5\u671f\u7bc4\u570d"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,14 +1,18 @@
|
||||
FROM node:20-alpine
|
||||
# frontend/Dockerfile
|
||||
FROM python:3.11.8-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm ci
|
||||
COPY pyproject.toml .
|
||||
RUN pip install --no-cache-dir -e ".[frontend]"
|
||||
|
||||
COPY . .
|
||||
COPY frontend/ ./frontend
|
||||
COPY configs.py .
|
||||
|
||||
RUN npm run build
|
||||
WORKDIR /app/frontend
|
||||
|
||||
EXPOSE 3000
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["npm", "start"]
|
||||
ENV PYTHONPATH=/app
|
||||
|
||||
CMD ["chainlit", "run", "app.py", "--host", "0.0.0.0", "--port", "8000"]
|
||||
122
frontend/app.py
Normal file
@ -0,0 +1,122 @@
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
import aiohttp
|
||||
import asyncio
|
||||
import chainlit as cl
|
||||
from chainlit.data.sql_alchemy import SQLAlchemyDataLayer
|
||||
from chainlit.types import ThreadDict
|
||||
|
||||
from frontend.services import (
|
||||
sync_session_model,
|
||||
post_agent_request,
|
||||
parse_sse_stream,
|
||||
dispatch_events,
|
||||
finalize_message,
|
||||
)
|
||||
from configs import (
|
||||
ALL_MODELS,
|
||||
ALL_STARTERS,
|
||||
DEFAULT_MODEL,
|
||||
AUTH_USER,
|
||||
AUTH_PASS,
|
||||
CHAINLIT_DATABASE_URL,
|
||||
HTTP_TIMEOUT_TOTAL,
|
||||
HTTP_TIMEOUT_CONNECT,
|
||||
)
|
||||
|
||||
_CLIENT_TIMEOUT = aiohttp.ClientTimeout(
|
||||
total=HTTP_TIMEOUT_TOTAL,
|
||||
connect=HTTP_TIMEOUT_CONNECT,
|
||||
)
|
||||
|
||||
@cl.password_auth_callback
|
||||
def auth_callback(username: str, password: str) -> cl.User | None:
|
||||
"""Checks the user's login and password."""
|
||||
if username == AUTH_USER and password == AUTH_PASS:
|
||||
return cl.User(
|
||||
identifier=username,
|
||||
metadata={"role": "admin", "provider": "credentials"}
|
||||
)
|
||||
else:
|
||||
return None
|
||||
|
||||
@cl.set_starters
|
||||
async def set_starters() -> list[cl.Starter]:
|
||||
"""Define starter prompts displayed on the welcome screen."""
|
||||
return [
|
||||
cl.Starter(
|
||||
label=starter["label"],
|
||||
message=starter["prompt"],
|
||||
icon=f"/public/icons/{starter['icon']}",
|
||||
)
|
||||
for starter in ALL_STARTERS
|
||||
]
|
||||
|
||||
@cl.set_chat_profiles
|
||||
async def chat_profile() -> list[cl.ChatProfile]:
|
||||
"""Define available AI model profiles for the chat."""
|
||||
return [
|
||||
cl.ChatProfile(
|
||||
name=model["id"],
|
||||
markdown_description=model["desc"],
|
||||
icon=f"/public/icons/{model['icon']}",
|
||||
)
|
||||
for model in ALL_MODELS
|
||||
]
|
||||
|
||||
@cl.on_chat_start
|
||||
async def init_session() -> None:
|
||||
"""Initialize chat session with selected model."""
|
||||
model = cl.user_session.get("chat_profile") or DEFAULT_MODEL
|
||||
cl.user_session.set("model", model)
|
||||
cl.user_session.set("history", [])
|
||||
|
||||
@cl.data_layer
|
||||
def get_data_layer() -> SQLAlchemyDataLayer:
|
||||
"""Returns SQLAlchemy data layer for storing chat history"""
|
||||
return SQLAlchemyDataLayer(
|
||||
conninfo=CHAINLIT_DATABASE_URL
|
||||
)
|
||||
|
||||
@cl.on_chat_resume
|
||||
async def chat_resume(thread: ThreadDict) -> None:
|
||||
"""Converts thread steps into role-based history list."""
|
||||
history = []
|
||||
|
||||
for step in thread["steps"]:
|
||||
if step["type"] == "user_message":
|
||||
history.append({"role": "user", "content": step["output"]})
|
||||
elif step["type"] == "assistant_message":
|
||||
history.append({"role": "assistant", "content": step["output"]})
|
||||
|
||||
model = cl.user_session.get("chat_profile") or DEFAULT_MODEL
|
||||
cl.user_session.set("model", model)
|
||||
cl.user_session.set("history", history)
|
||||
|
||||
@cl.on_message
|
||||
async def on_message(message: cl.Message) -> None:
|
||||
"""Input AI agent response, connect with FastAPI."""
|
||||
model, history = sync_session_model()
|
||||
history.append({"role": "user", "content": message.content})
|
||||
|
||||
msg = cl.Message(content="")
|
||||
cancelled = False
|
||||
active_steps = {}
|
||||
|
||||
async with cl.Step(name="thinking 💭", type="run") as steps:
|
||||
try:
|
||||
async with aiohttp.ClientSession(timeout=_CLIENT_TIMEOUT) as session:
|
||||
response = await post_agent_request(session, message.content, model, history)
|
||||
async for parsed in parse_sse_stream(response):
|
||||
await dispatch_events(parsed, msg, steps, active_steps)
|
||||
|
||||
except asyncio.CancelledError:
|
||||
cancelled = True
|
||||
steps.output = "Cancelled"
|
||||
except Exception as e:
|
||||
steps.output = "Error"
|
||||
|
||||
|
||||
history = await finalize_message(msg, cancelled, history)
|
||||
cl.user_session.set("history", history)
|
||||
@ -1,26 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
||||
import {
|
||||
useChatRuntime,
|
||||
AssistantChatTransport,
|
||||
} from "@assistant-ui/react-ai-sdk";
|
||||
import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
|
||||
import { Thread } from "@/components/assistant-ui/thread";
|
||||
|
||||
export const Assistant = () => {
|
||||
const runtime = useChatRuntime({
|
||||
sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,
|
||||
transport: new AssistantChatTransport({
|
||||
api: "/api/chat",
|
||||
}),
|
||||
});
|
||||
|
||||
return (
|
||||
<AssistantRuntimeProvider runtime={runtime}>
|
||||
<div className="h-dvh">
|
||||
<Thread />
|
||||
</div>
|
||||
</AssistantRuntimeProvider>
|
||||
);
|
||||
};
|
||||
|
Before Width: | Height: | Size: 286 KiB |
@ -1,88 +0,0 @@
|
||||
@import "tailwindcss";
|
||||
@import "tw-animate-css";
|
||||
|
||||
@custom-variant dark (&:is(.dark *));
|
||||
|
||||
@theme inline {
|
||||
--color-background: var(--background);
|
||||
--color-foreground: var(--foreground);
|
||||
--font-sans: var(--font-geist-sans);
|
||||
--font-mono: var(--font-geist-mono);
|
||||
--color-chart-5: var(--chart-5);
|
||||
--color-chart-4: var(--chart-4);
|
||||
--color-chart-3: var(--chart-3);
|
||||
--color-chart-2: var(--chart-2);
|
||||
--color-chart-1: var(--chart-1);
|
||||
--color-ring: var(--ring);
|
||||
--color-input: var(--input);
|
||||
--color-border: var(--border);
|
||||
--color-destructive: var(--destructive);
|
||||
--color-accent-foreground: var(--accent-foreground);
|
||||
--color-accent: var(--accent);
|
||||
--color-muted-foreground: var(--muted-foreground);
|
||||
--color-muted: var(--muted);
|
||||
--color-secondary-foreground: var(--secondary-foreground);
|
||||
--color-secondary: var(--secondary);
|
||||
--color-primary-foreground: var(--primary-foreground);
|
||||
--color-primary: var(--primary);
|
||||
--color-popover-foreground: var(--popover-foreground);
|
||||
--color-popover: var(--popover);
|
||||
--color-card-foreground: var(--card-foreground);
|
||||
--color-card: var(--card);
|
||||
--radius-sm: calc(var(--radius) - 4px);
|
||||
--radius-md: calc(var(--radius) - 2px);
|
||||
--radius-lg: var(--radius);
|
||||
--radius-xl: calc(var(--radius) + 4px);
|
||||
--animate-shimmer: shimmer-sweep var(--shimmer-duration, 1000ms) linear
|
||||
infinite both;
|
||||
@keyframes shimmer-sweep {
|
||||
from {
|
||||
background-position: 150% 0;
|
||||
}
|
||||
to {
|
||||
background-position: -100% 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:root {
|
||||
--radius: 0.625rem;
|
||||
--background: oklch(0.12 0.04 240);
|
||||
--foreground: oklch(0.95 0.01 240);
|
||||
--card: oklch(0.17 0.05 240);
|
||||
--card-foreground: oklch(0.95 0.01 240);
|
||||
--popover: oklch(0.17 0.05 240);
|
||||
--popover-foreground: oklch(0.95 0.01 240);
|
||||
--primary: oklch(0.6 0.18 240);
|
||||
--primary-foreground: oklch(0.98 0 0);
|
||||
--secondary: oklch(0.2 0.05 240);
|
||||
--secondary-foreground: oklch(0.95 0.01 240);
|
||||
--muted: oklch(0.2 0.05 240);
|
||||
--muted-foreground: oklch(0.65 0.05 240);
|
||||
--accent: oklch(0.22 0.06 240);
|
||||
--accent-foreground: oklch(0.95 0.01 240);
|
||||
--destructive: oklch(0.577 0.245 27.325);
|
||||
--border: oklch(1 0 0 / 8%);
|
||||
--input: oklch(1 0 0 / 12%);
|
||||
--ring: oklch(0.5 0.15 240);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border outline-ring/50;
|
||||
}
|
||||
|
||||
:root {
|
||||
color-scheme: light;
|
||||
}
|
||||
|
||||
:root.dark {
|
||||
color-scheme: dark;
|
||||
}
|
||||
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
import type { Metadata } from "next";
|
||||
import { Geist, Geist_Mono } from "next/font/google";
|
||||
import { TooltipProvider } from "@/components/ui/tooltip";
|
||||
import "./globals.css";
|
||||
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Legal AI Assistant",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html lang="en" className="root">
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
>
|
||||
<TooltipProvider>{children}</TooltipProvider>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
import { Assistant } from "./assistant";
|
||||
|
||||
export default function Home() {
|
||||
return <Assistant />;
|
||||
}
|
||||
29
frontend/chainlit.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Legal AI Assistant 🏛️⚖️
|
||||
|
||||
An AI-powered assistant for querying public data from the **Slovak Ministry of Justice API** (obcan.justice.sk). Ask about courts, judges, decisions, contracts, and legal proceedings — all in Slovak.
|
||||
|
||||
---
|
||||
|
||||
## What it does
|
||||
|
||||
- Searches courts, judges, decisions, contracts, civil and administrative proceedings
|
||||
- Calls the Justice API via MCP tools and presents results clearly
|
||||
- Maintains conversation history across sessions
|
||||
- Streams responses token by token in real time
|
||||
|
||||
---
|
||||
|
||||
## Frontend (Chainlit)
|
||||
|
||||
Built with **Chainlit 2.11**, the interface provides:
|
||||
|
||||
- **Chat profiles** — switch between AI models (GPT, Gemini, DeepSeek, Qwen, LLaMA) directly from the UI
|
||||
- **Starter prompts** — quick-access example questions on the welcome screen
|
||||
- **Step tracking** — tool calls and reasoning steps are shown as collapsible steps inside each response
|
||||
- **Auth** — password-protected login
|
||||
- **Persistent history** — conversations are stored in PostgreSQL and resumable across sessions
|
||||
- **Custom theme** — dark mode with a custom CSS and branded logo
|
||||
|
||||
---
|
||||
|
||||
> ⚠️ This assistant retrieves and presents public data only. It does not provide legal advice.
|
||||
@ -1,21 +0,0 @@
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema.json",
|
||||
"style": "new-york",
|
||||
"rsc": true,
|
||||
"tsx": true,
|
||||
"tailwind": {
|
||||
"config": "",
|
||||
"css": "app/globals.css",
|
||||
"baseColor": "zinc",
|
||||
"cssVariables": true,
|
||||
"prefix": ""
|
||||
},
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/lib/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/lib",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"iconLibrary": "lucide"
|
||||
}
|
||||
@ -1,62 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { type FC } from "react";
|
||||
import { ComposerPrimitive, AuiIf } from "@assistant-ui/react";
|
||||
import { ArrowUpIcon, SquareIcon } from "lucide-react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { TooltipIconButton } from "./tooltip-icon-button";
|
||||
|
||||
const ComposerAction: FC = () => {
|
||||
return (
|
||||
<div className="relative flex items-center justify-end">
|
||||
<AuiIf condition={(s) => !s.thread.isRunning}>
|
||||
<ComposerPrimitive.Send asChild>
|
||||
<TooltipIconButton
|
||||
tooltip="Odoslať"
|
||||
side="bottom"
|
||||
type="button"
|
||||
variant="default"
|
||||
size="icon"
|
||||
className="size-8 rounded-full bg-blue-600 hover:bg-blue-700 border-0"
|
||||
aria-label="Send message"
|
||||
>
|
||||
<ArrowUpIcon className="size-4" />
|
||||
</TooltipIconButton>
|
||||
</ComposerPrimitive.Send>
|
||||
</AuiIf>
|
||||
<AuiIf condition={(s) => s.thread.isRunning}>
|
||||
<ComposerPrimitive.Cancel asChild>
|
||||
<Button
|
||||
type="button"
|
||||
variant="default"
|
||||
size="icon"
|
||||
className="size-8 rounded-full bg-blue-600 hover:bg-blue-700 border-0"
|
||||
aria-label="Stop generating"
|
||||
>
|
||||
<SquareIcon className="size-3 fill-current" />
|
||||
</Button>
|
||||
</ComposerPrimitive.Cancel>
|
||||
</AuiIf>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const ThreadComposer: FC = () => {
|
||||
return (
|
||||
<ComposerPrimitive.Root className="relative flex w-full flex-col">
|
||||
<div
|
||||
data-slot="composer-shell"
|
||||
className="flex w-full flex-col gap-2 rounded-2xl border border-blue-500/20 bg-card p-3 transition-shadow focus-within:border-blue-500/50 focus-within:ring-2 focus-within:ring-blue-500/10"
|
||||
>
|
||||
<ComposerPrimitive.Input
|
||||
placeholder="Napíšte správu..."
|
||||
className="max-h-32 min-h-10 w-full resize-none bg-transparent px-2 py-1 text-sm outline-none placeholder:text-muted-foreground/60"
|
||||
rows={1}
|
||||
autoFocus
|
||||
aria-label="Message input"
|
||||
/>
|
||||
<ComposerAction />
|
||||
</div>
|
||||
</ComposerPrimitive.Root>
|
||||
);
|
||||
};
|
||||
@ -1,21 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { type FC } from "react";
|
||||
import { SquarePenIcon, ChevronDownIcon, ScaleIcon } from "lucide-react";
|
||||
|
||||
export const ThreadHeader: FC = () => {
|
||||
return (
|
||||
<div className="flex items-center gap-2 px-4 py-3 border-b border-border/40">
|
||||
<button className="p-1.5 rounded-md hover:bg-accent transition-colors">
|
||||
<SquarePenIcon className="size-5 text-muted-foreground" />
|
||||
</button>
|
||||
|
||||
<div className="flex items-center gap-1.5 px-3 py-1.5 rounded-lg hover:bg-accent cursor-pointer transition-colors">
|
||||
<span className="text-sm font-medium text-foreground">
|
||||
Legal AI Assistant
|
||||
</span>
|
||||
<ChevronDownIcon className="size-4 text-muted-foreground" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@ -1,243 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import "@assistant-ui/react-markdown/styles/dot.css";
|
||||
|
||||
import {
|
||||
type CodeHeaderProps,
|
||||
MarkdownTextPrimitive,
|
||||
unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,
|
||||
useIsMarkdownCodeBlock,
|
||||
} from "@assistant-ui/react-markdown";
|
||||
import remarkGfm from "remark-gfm";
|
||||
import { type FC, memo, useState } from "react";
|
||||
import { CheckIcon, CopyIcon } from "lucide-react";
|
||||
|
||||
import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
const MarkdownTextImpl = () => {
|
||||
return (
|
||||
<MarkdownTextPrimitive
|
||||
remarkPlugins={[remarkGfm]}
|
||||
className="aui-md"
|
||||
components={defaultComponents}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export const MarkdownText = memo(MarkdownTextImpl);
|
||||
|
||||
const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {
|
||||
const { isCopied, copyToClipboard } = useCopyToClipboard();
|
||||
const onCopy = () => {
|
||||
if (!code || isCopied) return;
|
||||
copyToClipboard(code);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="aui-code-header-root mt-2.5 flex items-center justify-between rounded-t-lg border border-border/50 border-b-0 bg-muted/50 px-3 py-1.5 text-xs">
|
||||
<span className="aui-code-header-language font-medium text-muted-foreground lowercase">
|
||||
{language}
|
||||
</span>
|
||||
<TooltipIconButton tooltip="Copy" onClick={onCopy}>
|
||||
{!isCopied && <CopyIcon />}
|
||||
{isCopied && <CheckIcon />}
|
||||
</TooltipIconButton>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const useCopyToClipboard = ({
|
||||
copiedDuration = 3000,
|
||||
}: {
|
||||
copiedDuration?: number;
|
||||
} = {}) => {
|
||||
const [isCopied, setIsCopied] = useState<boolean>(false);
|
||||
|
||||
const copyToClipboard = (value: string) => {
|
||||
if (!value) return;
|
||||
|
||||
navigator.clipboard.writeText(value).then(() => {
|
||||
setIsCopied(true);
|
||||
setTimeout(() => setIsCopied(false), copiedDuration);
|
||||
});
|
||||
};
|
||||
|
||||
return { isCopied, copyToClipboard };
|
||||
};
|
||||
|
||||
const defaultComponents = memoizeMarkdownComponents({
|
||||
h1: ({ className, ...props }) => (
|
||||
<h1
|
||||
className={cn(
|
||||
"aui-md-h1 mb-2 scroll-m-20 font-semibold text-base first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
h2: ({ className, ...props }) => (
|
||||
<h2
|
||||
className={cn(
|
||||
"aui-md-h2 mt-3 mb-1.5 scroll-m-20 font-semibold text-sm first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
h3: ({ className, ...props }) => (
|
||||
<h3
|
||||
className={cn(
|
||||
"aui-md-h3 mt-2.5 mb-1 scroll-m-20 font-semibold text-sm first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
h4: ({ className, ...props }) => (
|
||||
<h4
|
||||
className={cn(
|
||||
"aui-md-h4 mt-2 mb-1 scroll-m-20 font-medium text-sm first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
h5: ({ className, ...props }) => (
|
||||
<h5
|
||||
className={cn(
|
||||
"aui-md-h5 mt-2 mb-1 font-medium text-sm first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
h6: ({ className, ...props }) => (
|
||||
<h6
|
||||
className={cn(
|
||||
"aui-md-h6 mt-2 mb-1 font-medium text-sm first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
p: ({ className, ...props }) => (
|
||||
<p
|
||||
className={cn(
|
||||
"aui-md-p my-2.5 leading-normal first:mt-0 last:mb-0",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
a: ({ className, ...props }) => (
|
||||
<a
|
||||
className={cn(
|
||||
"aui-md-a text-primary underline underline-offset-2 hover:text-primary/80",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
blockquote: ({ className, ...props }) => (
|
||||
<blockquote
|
||||
className={cn(
|
||||
"aui-md-blockquote my-2.5 border-muted-foreground/30 border-l-2 pl-3 text-muted-foreground italic",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
ul: ({ className, ...props }) => (
|
||||
<ul
|
||||
className={cn(
|
||||
"aui-md-ul my-2 ml-4 list-disc marker:text-muted-foreground [&>li]:mt-1",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
ol: ({ className, ...props }) => (
|
||||
<ol
|
||||
className={cn(
|
||||
"aui-md-ol my-2 ml-4 list-decimal marker:text-muted-foreground [&>li]:mt-1",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
hr: ({ className, ...props }) => (
|
||||
<hr
|
||||
className={cn("aui-md-hr my-2 border-muted-foreground/20", className)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
table: ({ className, ...props }) => (
|
||||
<table
|
||||
className={cn(
|
||||
"aui-md-table my-2 w-full border-separate border-spacing-0 overflow-y-auto",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
th: ({ className, ...props }) => (
|
||||
<th
|
||||
className={cn(
|
||||
"aui-md-th bg-muted px-2 py-1 text-left font-medium first:rounded-tl-lg last:rounded-tr-lg [[align=center]]:text-center [[align=right]]:text-right",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
td: ({ className, ...props }) => (
|
||||
<td
|
||||
className={cn(
|
||||
"aui-md-td border-muted-foreground/20 border-b border-l px-2 py-1 text-left last:border-r [[align=center]]:text-center [[align=right]]:text-right",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
tr: ({ className, ...props }) => (
|
||||
<tr
|
||||
className={cn(
|
||||
"aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
li: ({ className, ...props }) => (
|
||||
<li className={cn("aui-md-li leading-normal", className)} {...props} />
|
||||
),
|
||||
sup: ({ className, ...props }) => (
|
||||
<sup
|
||||
className={cn("aui-md-sup [&>a]:text-xs [&>a]:no-underline", className)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
pre: ({ className, ...props }) => (
|
||||
<pre
|
||||
className={cn(
|
||||
"aui-md-pre overflow-x-auto rounded-t-none rounded-b-lg border border-border/50 border-t-0 bg-muted/30 p-3 text-xs leading-relaxed",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
),
|
||||
code: function Code({ className, ...props }) {
|
||||
const isCodeBlock = useIsMarkdownCodeBlock();
|
||||
return (
|
||||
<code
|
||||
className={cn(
|
||||
!isCodeBlock &&
|
||||
"aui-md-inline-code rounded-md border border-border/50 bg-muted/50 px-1.5 py-0.5 font-mono text-[0.85em]",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
},
|
||||
CodeHeader,
|
||||
});
|
||||
@ -1,160 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { type FC } from "react";
|
||||
import {
|
||||
ActionBarMorePrimitive,
|
||||
ActionBarPrimitive,
|
||||
AuiIf,
|
||||
BranchPickerPrimitive,
|
||||
ErrorPrimitive,
|
||||
MessagePrimitive,
|
||||
useAuiState,
|
||||
} from "@assistant-ui/react";
|
||||
import {
|
||||
CheckIcon,
|
||||
ChevronLeftIcon,
|
||||
ChevronRightIcon,
|
||||
CopyIcon,
|
||||
DownloadIcon,
|
||||
MoreHorizontalIcon,
|
||||
RefreshCwIcon,
|
||||
ScaleIcon,
|
||||
} from "lucide-react";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { MarkdownText } from "./markdown-text";
|
||||
import { ToolFallback } from "./tool-fallback";
|
||||
import { TooltipIconButton } from "./tooltip-icon-button";
|
||||
|
||||
const MessageError: FC = () => {
|
||||
return (
|
||||
<MessagePrimitive.Error>
|
||||
<ErrorPrimitive.Root className="mt-2 rounded-md border border-destructive bg-destructive/10 p-3 text-destructive text-sm">
|
||||
<ErrorPrimitive.Message className="line-clamp-2" />
|
||||
</ErrorPrimitive.Root>
|
||||
</MessagePrimitive.Error>
|
||||
);
|
||||
};
|
||||
|
||||
const AssistantActionBar: FC = () => {
|
||||
return (
|
||||
<ActionBarPrimitive.Root
|
||||
hideWhenRunning
|
||||
autohide="not-last"
|
||||
autohideFloat="single-branch"
|
||||
className="col-start-3 row-start-2 -ml-1 flex gap-1 text-muted-foreground"
|
||||
>
|
||||
<ActionBarPrimitive.Copy asChild>
|
||||
<TooltipIconButton tooltip="Kopírovať">
|
||||
<AuiIf condition={(s) => s.message.isCopied}>
|
||||
<CheckIcon />
|
||||
</AuiIf>
|
||||
<AuiIf condition={(s) => !s.message.isCopied}>
|
||||
<CopyIcon />
|
||||
</AuiIf>
|
||||
</TooltipIconButton>
|
||||
</ActionBarPrimitive.Copy>
|
||||
<ActionBarPrimitive.Reload asChild>
|
||||
<TooltipIconButton tooltip="Obnoviť">
|
||||
<RefreshCwIcon />
|
||||
</TooltipIconButton>
|
||||
</ActionBarPrimitive.Reload>
|
||||
<ActionBarMorePrimitive.Root>
|
||||
<ActionBarMorePrimitive.Trigger asChild>
|
||||
<TooltipIconButton tooltip="Viac" className="data-[state=open]:bg-accent">
|
||||
<MoreHorizontalIcon />
|
||||
</TooltipIconButton>
|
||||
</ActionBarMorePrimitive.Trigger>
|
||||
<ActionBarMorePrimitive.Content
|
||||
side="bottom"
|
||||
align="start"
|
||||
className="z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md"
|
||||
>
|
||||
<ActionBarPrimitive.ExportMarkdown asChild>
|
||||
<ActionBarMorePrimitive.Item className="flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent">
|
||||
<DownloadIcon className="size-4" />
|
||||
Export ako Markdown
|
||||
</ActionBarMorePrimitive.Item>
|
||||
</ActionBarPrimitive.ExportMarkdown>
|
||||
</ActionBarMorePrimitive.Content>
|
||||
</ActionBarMorePrimitive.Root>
|
||||
</ActionBarPrimitive.Root>
|
||||
);
|
||||
};
|
||||
|
||||
export const BranchPicker: FC<BranchPickerPrimitive.Root.Props> = ({
|
||||
className,
|
||||
...rest
|
||||
}) => {
|
||||
return (
|
||||
<BranchPickerPrimitive.Root
|
||||
hideWhenSingleBranch
|
||||
className={cn(
|
||||
"mr-2 -ml-2 inline-flex items-center text-muted-foreground text-xs",
|
||||
className,
|
||||
)}
|
||||
{...rest}
|
||||
>
|
||||
<BranchPickerPrimitive.Previous asChild>
|
||||
<TooltipIconButton tooltip="Predchádzajúci">
|
||||
<ChevronLeftIcon />
|
||||
</TooltipIconButton>
|
||||
</BranchPickerPrimitive.Previous>
|
||||
<span className="font-medium">
|
||||
<BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />
|
||||
</span>
|
||||
<BranchPickerPrimitive.Next asChild>
|
||||
<TooltipIconButton tooltip="Ďalší">
|
||||
<ChevronRightIcon />
|
||||
</TooltipIconButton>
|
||||
</BranchPickerPrimitive.Next>
|
||||
</BranchPickerPrimitive.Root>
|
||||
);
|
||||
};
|
||||
|
||||
export const AssistantMessage: FC = () => {
|
||||
return (
|
||||
<MessagePrimitive.Root
|
||||
className="fade-in slide-in-from-bottom-1 relative mx-auto w-full max-w-(--thread-max-width) animate-in py-3 duration-150"
|
||||
data-role="assistant"
|
||||
>
|
||||
<div className="flex gap-3 px-2">
|
||||
<div className="size-7 rounded-full bg-blue-600/20 border border-blue-500/30 flex items-center justify-center shrink-0 mt-0.5">
|
||||
<ScaleIcon className="size-3.5 text-blue-400" />
|
||||
</div>
|
||||
<div className="flex-1 min-w-0">
|
||||
<div className="text-foreground leading-relaxed">
|
||||
<MessagePrimitive.Parts>
|
||||
{({ part }) => {
|
||||
if (part.type === "text") return <MarkdownText />;
|
||||
if (part.type === "tool-call")
|
||||
return part.toolUI ?? <ToolFallback {...part} />;
|
||||
return null;
|
||||
}}
|
||||
</MessagePrimitive.Parts>
|
||||
<MessageError />
|
||||
</div>
|
||||
<div className="mt-1 flex">
|
||||
<BranchPicker />
|
||||
<AssistantActionBar />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</MessagePrimitive.Root>
|
||||
);
|
||||
};
|
||||
|
||||
export const UserMessage: FC = () => {
|
||||
return (
|
||||
<MessagePrimitive.Root
|
||||
className="fade-in slide-in-from-bottom-1 mx-auto grid w-full max-w-(--thread-max-width) animate-in auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 py-3 duration-150 [&:where(>*)]:col-start-2"
|
||||
data-role="user"
|
||||
>
|
||||
<div className="relative col-start-2 min-w-0">
|
||||
<div className="wrap-break-word rounded-2xl bg-blue-600/20 border border-blue-500/20 px-4 py-2.5 text-foreground empty:hidden">
|
||||
<MessagePrimitive.Parts />
|
||||
</div>
|
||||
</div>
|
||||
<BranchPicker className="col-span-full col-start-1 row-start-3 -mr-1 justify-end" />
|
||||
</MessagePrimitive.Root>
|
||||
);
|
||||
};
|
||||
@ -1,64 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { type FC } from "react";
|
||||
import { AuiIf, ThreadPrimitive, useAuiState } from "@assistant-ui/react";
|
||||
import { ArrowDownIcon } from "lucide-react";
|
||||
|
||||
import { ThreadHeader } from "./header";
|
||||
import { ThreadWelcome } from "./welcome";
|
||||
import { AssistantMessage, UserMessage } from "./messages";
|
||||
import { ThreadComposer } from "./composer";
|
||||
import { TooltipIconButton } from "./tooltip-icon-button";
|
||||
|
||||
const ThreadMessage: FC = () => {
|
||||
const role = useAuiState((s) => s.message.role);
|
||||
if (role === "user") return <UserMessage />;
|
||||
return <AssistantMessage />;
|
||||
};
|
||||
|
||||
const ThreadScrollToBottom: FC = () => {
|
||||
return (
|
||||
<ThreadPrimitive.ScrollToBottom asChild>
|
||||
<TooltipIconButton
|
||||
tooltip="Scroll to bottom"
|
||||
variant="outline"
|
||||
className="absolute -top-12 z-10 self-center rounded-full p-4 disabled:invisible dark:border-border dark:bg-background dark:hover:bg-accent"
|
||||
>
|
||||
<ArrowDownIcon />
|
||||
</TooltipIconButton>
|
||||
</ThreadPrimitive.ScrollToBottom>
|
||||
);
|
||||
};
|
||||
|
||||
export const Thread: FC = () => {
|
||||
return (
|
||||
<ThreadPrimitive.Root
|
||||
className="aui-root aui-thread-root @container flex h-full flex-col bg-background"
|
||||
style={{
|
||||
["--thread-max-width" as string]: "48rem",
|
||||
["--composer-radius" as string]: "16px",
|
||||
["--composer-padding" as string]: "12px",
|
||||
}}
|
||||
>
|
||||
<ThreadHeader />
|
||||
|
||||
<ThreadPrimitive.Viewport
|
||||
turnAnchor="top"
|
||||
className="relative flex flex-1 flex-col overflow-x-auto overflow-y-scroll scroll-smooth px-4 pt-4"
|
||||
>
|
||||
<AuiIf condition={(s) => s.thread.isEmpty}>
|
||||
<ThreadWelcome />
|
||||
</AuiIf>
|
||||
|
||||
<ThreadPrimitive.Messages>
|
||||
{() => <ThreadMessage />}
|
||||
</ThreadPrimitive.Messages>
|
||||
|
||||
<ThreadPrimitive.ViewportFooter className="sticky bottom-0 mx-auto mt-auto flex w-full max-w-(--thread-max-width) flex-col gap-4 overflow-visible rounded-t-2xl bg-background pb-4 md:pb-6 pt-2">
|
||||
<ThreadScrollToBottom />
|
||||
<ThreadComposer />
|
||||
</ThreadPrimitive.ViewportFooter>
|
||||
</ThreadPrimitive.Viewport>
|
||||
</ThreadPrimitive.Root>
|
||||
);
|
||||
};
|
||||
@ -1,324 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { memo, useCallback, useRef, useState } from "react";
|
||||
import {
|
||||
AlertCircleIcon,
|
||||
CheckIcon,
|
||||
ChevronDownIcon,
|
||||
LoaderIcon,
|
||||
XCircleIcon,
|
||||
} from "lucide-react";
|
||||
import {
|
||||
useScrollLock,
|
||||
type ToolCallMessagePartStatus,
|
||||
type ToolCallMessagePartComponent,
|
||||
} from "@assistant-ui/react";
|
||||
import {
|
||||
Collapsible,
|
||||
CollapsibleContent,
|
||||
CollapsibleTrigger,
|
||||
} from "@/components/ui/collapsible";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
const ANIMATION_DURATION = 200;
|
||||
|
||||
export type ToolFallbackRootProps = Omit<
|
||||
React.ComponentProps<typeof Collapsible>,
|
||||
"open" | "onOpenChange"
|
||||
> & {
|
||||
open?: boolean;
|
||||
onOpenChange?: (open: boolean) => void;
|
||||
defaultOpen?: boolean;
|
||||
};
|
||||
|
||||
function ToolFallbackRoot({
|
||||
className,
|
||||
open: controlledOpen,
|
||||
onOpenChange: controlledOnOpenChange,
|
||||
defaultOpen = false,
|
||||
children,
|
||||
...props
|
||||
}: ToolFallbackRootProps) {
|
||||
const collapsibleRef = useRef<HTMLDivElement>(null);
|
||||
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
||||
const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);
|
||||
|
||||
const isControlled = controlledOpen !== undefined;
|
||||
const isOpen = isControlled ? controlledOpen : uncontrolledOpen;
|
||||
|
||||
const handleOpenChange = useCallback(
|
||||
(open: boolean) => {
|
||||
if (!open) {
|
||||
lockScroll();
|
||||
}
|
||||
if (!isControlled) {
|
||||
setUncontrolledOpen(open);
|
||||
}
|
||||
controlledOnOpenChange?.(open);
|
||||
},
|
||||
[lockScroll, isControlled, controlledOnOpenChange],
|
||||
);
|
||||
|
||||
return (
|
||||
<Collapsible
|
||||
ref={collapsibleRef}
|
||||
data-slot="tool-fallback-root"
|
||||
open={isOpen}
|
||||
onOpenChange={handleOpenChange}
|
||||
className={cn(
|
||||
"aui-tool-fallback-root group/tool-fallback-root w-full rounded-lg border py-3",
|
||||
className,
|
||||
)}
|
||||
style={
|
||||
{
|
||||
"--animation-duration": `${ANIMATION_DURATION}ms`,
|
||||
} as React.CSSProperties
|
||||
}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
</Collapsible>
|
||||
);
|
||||
}
|
||||
|
||||
type ToolStatus = ToolCallMessagePartStatus["type"];
|
||||
|
||||
const statusIconMap: Record<ToolStatus, React.ElementType> = {
|
||||
running: LoaderIcon,
|
||||
complete: CheckIcon,
|
||||
incomplete: XCircleIcon,
|
||||
"requires-action": AlertCircleIcon,
|
||||
};
|
||||
|
||||
function ToolFallbackTrigger({
|
||||
toolName,
|
||||
status,
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<typeof CollapsibleTrigger> & {
|
||||
toolName: string;
|
||||
status?: ToolCallMessagePartStatus;
|
||||
}) {
|
||||
const statusType = status?.type ?? "complete";
|
||||
const isRunning = statusType === "running";
|
||||
const isCancelled =
|
||||
status?.type === "incomplete" && status.reason === "cancelled";
|
||||
|
||||
const Icon = statusIconMap[statusType];
|
||||
const label = isCancelled ? "Cancelled tool" : "Used tool";
|
||||
|
||||
return (
|
||||
<CollapsibleTrigger
|
||||
data-slot="tool-fallback-trigger"
|
||||
className={cn(
|
||||
"aui-tool-fallback-trigger group/trigger flex w-full items-center gap-2 px-4 text-sm transition-colors",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
<Icon
|
||||
data-slot="tool-fallback-trigger-icon"
|
||||
className={cn(
|
||||
"aui-tool-fallback-trigger-icon size-4 shrink-0",
|
||||
isCancelled && "text-muted-foreground",
|
||||
isRunning && "animate-spin",
|
||||
)}
|
||||
/>
|
||||
<span
|
||||
data-slot="tool-fallback-trigger-label"
|
||||
className={cn(
|
||||
"aui-tool-fallback-trigger-label-wrapper relative inline-block grow text-left leading-none",
|
||||
isCancelled && "text-muted-foreground line-through",
|
||||
)}
|
||||
>
|
||||
<span>
|
||||
{label}: <b>{toolName}</b>
|
||||
</span>
|
||||
{isRunning && (
|
||||
<span
|
||||
aria-hidden
|
||||
data-slot="tool-fallback-trigger-shimmer"
|
||||
className="aui-tool-fallback-trigger-shimmer shimmer pointer-events-none absolute inset-0 motion-reduce:animate-none"
|
||||
>
|
||||
{label}: <b>{toolName}</b>
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
<ChevronDownIcon
|
||||
data-slot="tool-fallback-trigger-chevron"
|
||||
className={cn(
|
||||
"aui-tool-fallback-trigger-chevron size-4 shrink-0",
|
||||
"transition-transform duration-(--animation-duration) ease-out",
|
||||
"group-data-[state=closed]/trigger:-rotate-90",
|
||||
"group-data-[state=open]/trigger:rotate-0",
|
||||
)}
|
||||
/>
|
||||
</CollapsibleTrigger>
|
||||
);
|
||||
}
|
||||
|
||||
function ToolFallbackContent({
|
||||
className,
|
||||
children,
|
||||
...props
|
||||
}: React.ComponentProps<typeof CollapsibleContent>) {
|
||||
return (
|
||||
<CollapsibleContent
|
||||
data-slot="tool-fallback-content"
|
||||
className={cn(
|
||||
"aui-tool-fallback-content relative overflow-hidden text-sm outline-none",
|
||||
"group/collapsible-content ease-out",
|
||||
"data-[state=closed]:animate-collapsible-up",
|
||||
"data-[state=open]:animate-collapsible-down",
|
||||
"data-[state=closed]:fill-mode-forwards",
|
||||
"data-[state=closed]:pointer-events-none",
|
||||
"data-[state=open]:duration-(--animation-duration)",
|
||||
"data-[state=closed]:duration-(--animation-duration)",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
<div className="mt-3 flex flex-col gap-2 border-t pt-2">{children}</div>
|
||||
</CollapsibleContent>
|
||||
);
|
||||
}
|
||||
|
||||
function ToolFallbackArgs({
|
||||
argsText,
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<"div"> & {
|
||||
argsText?: string;
|
||||
}) {
|
||||
if (!argsText) return null;
|
||||
|
||||
return (
|
||||
<div
|
||||
data-slot="tool-fallback-args"
|
||||
className={cn("aui-tool-fallback-args px-4", className)}
|
||||
{...props}
|
||||
>
|
||||
<pre className="aui-tool-fallback-args-value whitespace-pre-wrap">
|
||||
{argsText}
|
||||
</pre>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function ToolFallbackResult({
|
||||
result,
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<"div"> & {
|
||||
result?: unknown;
|
||||
}) {
|
||||
if (result === undefined) return null;
|
||||
|
||||
return (
|
||||
<div
|
||||
data-slot="tool-fallback-result"
|
||||
className={cn(
|
||||
"aui-tool-fallback-result border-t border-dashed px-4 pt-2",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
<p className="aui-tool-fallback-result-header font-semibold">Result:</p>
|
||||
<pre className="aui-tool-fallback-result-content whitespace-pre-wrap">
|
||||
{typeof result === "string" ? result : JSON.stringify(result, null, 2)}
|
||||
</pre>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function ToolFallbackError({
|
||||
status,
|
||||
className,
|
||||
...props
|
||||
}: React.ComponentProps<"div"> & {
|
||||
status?: ToolCallMessagePartStatus;
|
||||
}) {
|
||||
if (status?.type !== "incomplete") return null;
|
||||
|
||||
const error = status.error;
|
||||
const errorText = error
|
||||
? typeof error === "string"
|
||||
? error
|
||||
: JSON.stringify(error)
|
||||
: null;
|
||||
|
||||
if (!errorText) return null;
|
||||
|
||||
const isCancelled = status.reason === "cancelled";
|
||||
const headerText = isCancelled ? "Cancelled reason:" : "Error:";
|
||||
|
||||
return (
|
||||
<div
|
||||
data-slot="tool-fallback-error"
|
||||
className={cn("aui-tool-fallback-error px-4", className)}
|
||||
{...props}
|
||||
>
|
||||
<p className="aui-tool-fallback-error-header font-semibold text-muted-foreground">
|
||||
{headerText}
|
||||
</p>
|
||||
<p className="aui-tool-fallback-error-reason text-muted-foreground">
|
||||
{errorText}
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const ToolFallbackImpl: ToolCallMessagePartComponent = ({
|
||||
toolName,
|
||||
argsText,
|
||||
result,
|
||||
status,
|
||||
}) => {
|
||||
const isCancelled =
|
||||
status?.type === "incomplete" && status.reason === "cancelled";
|
||||
|
||||
return (
|
||||
<ToolFallbackRoot
|
||||
className={cn(isCancelled && "border-muted-foreground/30 bg-muted/30")}
|
||||
>
|
||||
<ToolFallbackTrigger toolName={toolName} status={status} />
|
||||
<ToolFallbackContent>
|
||||
<ToolFallbackError status={status} />
|
||||
<ToolFallbackArgs
|
||||
argsText={argsText}
|
||||
className={cn(isCancelled && "opacity-60")}
|
||||
/>
|
||||
{!isCancelled && <ToolFallbackResult result={result} />}
|
||||
</ToolFallbackContent>
|
||||
</ToolFallbackRoot>
|
||||
);
|
||||
};
|
||||
|
||||
const ToolFallback = memo(
|
||||
ToolFallbackImpl,
|
||||
) as unknown as ToolCallMessagePartComponent & {
|
||||
Root: typeof ToolFallbackRoot;
|
||||
Trigger: typeof ToolFallbackTrigger;
|
||||
Content: typeof ToolFallbackContent;
|
||||
Args: typeof ToolFallbackArgs;
|
||||
Result: typeof ToolFallbackResult;
|
||||
Error: typeof ToolFallbackError;
|
||||
};
|
||||
|
||||
ToolFallback.displayName = "ToolFallback";
|
||||
ToolFallback.Root = ToolFallbackRoot;
|
||||
ToolFallback.Trigger = ToolFallbackTrigger;
|
||||
ToolFallback.Content = ToolFallbackContent;
|
||||
ToolFallback.Args = ToolFallbackArgs;
|
||||
ToolFallback.Result = ToolFallbackResult;
|
||||
ToolFallback.Error = ToolFallbackError;
|
||||
|
||||
export {
|
||||
ToolFallback,
|
||||
ToolFallbackRoot,
|
||||
ToolFallbackTrigger,
|
||||
ToolFallbackContent,
|
||||
ToolFallbackArgs,
|
||||
ToolFallbackResult,
|
||||
ToolFallbackError,
|
||||
};
|
||||
@ -1,42 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { ComponentPropsWithRef, forwardRef } from "react";
|
||||
import { Slottable } from "@radix-ui/react-slot";
|
||||
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipTrigger,
|
||||
} from "@/components/ui/tooltip";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
export type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {
|
||||
tooltip: string;
|
||||
side?: "top" | "bottom" | "left" | "right";
|
||||
};
|
||||
|
||||
export const TooltipIconButton = forwardRef<
|
||||
HTMLButtonElement,
|
||||
TooltipIconButtonProps
|
||||
>(({ children, tooltip, side = "bottom", className, ...rest }, ref) => {
|
||||
return (
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
{...rest}
|
||||
className={cn("aui-button-icon size-6 p-1", className)}
|
||||
ref={ref}
|
||||
>
|
||||
<Slottable>{children}</Slottable>
|
||||
<span className="aui-sr-only sr-only">{tooltip}</span>
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side={side}>{tooltip}</TooltipContent>
|
||||
</Tooltip>
|
||||
);
|
||||
});
|
||||
|
||||
TooltipIconButton.displayName = "TooltipIconButton";
|
||||
@ -1,84 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { type FC } from "react";
|
||||
|
||||
const STARTERS = [
|
||||
{
|
||||
icon: "/icons/magnifying-glass.svg",
|
||||
description: "What legal data can the agent find?",
|
||||
},
|
||||
{
|
||||
icon: "/icons/ban.svg",
|
||||
description: "What are the agent's limitations?",
|
||||
},
|
||||
{
|
||||
icon: "/icons/hexagon.svg",
|
||||
description: "What are the details of your AI model?",
|
||||
},
|
||||
{
|
||||
icon: "/icons/database.svg",
|
||||
description: "What are your data sources?",
|
||||
},
|
||||
];
|
||||
|
||||
const ThreadSuggestions: FC = () => {
|
||||
const handleClick = (prompt: string) => {
|
||||
const input = document.querySelector(
|
||||
'textarea[aria-label="Message input"]'
|
||||
) as HTMLTextAreaElement;
|
||||
if (input) {
|
||||
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
|
||||
window.HTMLTextAreaElement.prototype,
|
||||
"value"
|
||||
)?.set;
|
||||
nativeInputValueSetter?.call(input, prompt);
|
||||
input.dispatchEvent(new Event("input", { bubbles: true }));
|
||||
input.focus();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div className="grid w-full grid-cols-2 @lg:grid-cols-4 gap-2 pb-4 px-2">
|
||||
{STARTERS.map((s) => (
|
||||
<button
|
||||
key={s.description}
|
||||
onClick={() => handleClick(s.description)}
|
||||
className="flex flex-row items-center gap-1 rounded-xl border border-blue-500/20 bg-card px-4 py-3 text-left text-sm transition-colors hover:bg-blue-600/10 hover:border-blue-500/40 cursor-pointer"
|
||||
>
|
||||
<div className="size-5 flex-shrink-0">
|
||||
<img
|
||||
src={s.icon}
|
||||
alt=""
|
||||
className="size-full object-contain group-hover:scale-110 transition-transform"
|
||||
/>
|
||||
</div>
|
||||
<span className="text-muted-foreground group-hover:text-foreground transition-colors leading-tight">
|
||||
{s.description}
|
||||
</span>
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export const ThreadWelcome: FC = () => {
|
||||
return (
|
||||
<div className="mx-auto my-auto flex w-full max-w-(--thread-max-width) grow flex-col items-center justify-end gap-6">
|
||||
<div className="flex flex-col items-center gap-4">
|
||||
<div className=" rounded-full overflow-hidden ring-2 ring-blue-500/30 shadow-lg shadow-blue-500/20">
|
||||
<img
|
||||
src="/logo.png"
|
||||
alt="Legal AI"
|
||||
className="w-50 h-50 object-cover"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col items-center gap-1 text-center">
|
||||
<h1 className="fade-in slide-in-from-bottom-1 animate-in fill-mode-both font-semibold text-2xl duration-200">
|
||||
Legal AI Assistant
|
||||
</h1>
|
||||
</div>
|
||||
</div>
|
||||
<ThreadSuggestions />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@ -1,64 +0,0 @@
|
||||
import * as React from "react";
|
||||
import { cva, type VariantProps } from "class-variance-authority";
|
||||
import { Slot } from "radix-ui";
|
||||
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
const buttonVariants = cva(
|
||||
"inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
||||
{
|
||||
variants: {
|
||||
variant: {
|
||||
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
||||
destructive:
|
||||
"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
|
||||
outline:
|
||||
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
||||
secondary:
|
||||
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
||||
ghost:
|
||||
"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
||||
link: "text-primary underline-offset-4 hover:underline",
|
||||
},
|
||||
size: {
|
||||
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
||||
xs: "h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
||||
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
||||
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
||||
icon: "size-9",
|
||||
"icon-xs": "size-6 rounded-md [&_svg:not([class*='size-'])]:size-3",
|
||||
"icon-sm": "size-8",
|
||||
"icon-lg": "size-10",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "default",
|
||||
size: "default",
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
function Button({
|
||||
className,
|
||||
variant = "default",
|
||||
size = "default",
|
||||
asChild = false,
|
||||
...props
|
||||
}: React.ComponentProps<"button"> &
|
||||
VariantProps<typeof buttonVariants> & {
|
||||
asChild?: boolean;
|
||||
}) {
|
||||
const Comp = asChild ? Slot.Root : "button";
|
||||
|
||||
return (
|
||||
<Comp
|
||||
data-slot="button"
|
||||
data-variant={variant}
|
||||
data-size={size}
|
||||
className={cn(buttonVariants({ variant, size, className }))}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export { Button, buttonVariants };
|
||||
@ -1,33 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import { Collapsible as CollapsiblePrimitive } from "radix-ui";
|
||||
|
||||
function Collapsible({
|
||||
...props
|
||||
}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
|
||||
return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
|
||||
}
|
||||
|
||||
function CollapsibleTrigger({
|
||||
...props
|
||||
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
|
||||
return (
|
||||
<CollapsiblePrimitive.CollapsibleTrigger
|
||||
data-slot="collapsible-trigger"
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function CollapsibleContent({
|
||||
...props
|
||||
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
|
||||
return (
|
||||
<CollapsiblePrimitive.CollapsibleContent
|
||||
data-slot="collapsible-content"
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
||||
@ -1,57 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import * as React from "react";
|
||||
import { Tooltip as TooltipPrimitive } from "radix-ui";
|
||||
|
||||
import { cn } from "@/lib/utils";
|
||||
|
||||
function TooltipProvider({
|
||||
delayDuration = 0,
|
||||
...props
|
||||
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
|
||||
return (
|
||||
<TooltipPrimitive.Provider
|
||||
data-slot="tooltip-provider"
|
||||
delayDuration={delayDuration}
|
||||
{...props}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function Tooltip({
|
||||
...props
|
||||
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
|
||||
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />;
|
||||
}
|
||||
|
||||
function TooltipTrigger({
|
||||
...props
|
||||
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
||||
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />;
|
||||
}
|
||||
|
||||
function TooltipContent({
|
||||
className,
|
||||
sideOffset = 0,
|
||||
children,
|
||||
...props
|
||||
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
|
||||
return (
|
||||
<TooltipPrimitive.Portal>
|
||||
<TooltipPrimitive.Content
|
||||
data-slot="tooltip-content"
|
||||
sideOffset={sideOffset}
|
||||
className={cn(
|
||||
"fade-in-0 zoom-in-95 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in text-balance rounded-md bg-foreground px-3 py-1.5 text-background text-xs data-[state=closed]:animate-out",
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
<TooltipPrimitive.Arrow className="z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" />
|
||||
</TooltipPrimitive.Content>
|
||||
</TooltipPrimitive.Portal>
|
||||
);
|
||||
}
|
||||
|
||||
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
||||
@ -1,6 +0,0 @@
|
||||
import { clsx, type ClassValue } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
import type { NextConfig } from "next";
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
devIndicators: false,
|
||||
};
|
||||
|
||||
export default nextConfig;
|
||||
7776
frontend/package-lock.json
generated
@ -1,48 +0,0 @@
|
||||
{
|
||||
"name": "frontend",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev --turbopack",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"format": "biome format .",
|
||||
"format:fix": "biome format --write .",
|
||||
"lint": "biome check .",
|
||||
"lint:fix": "biome check --write ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@ai-sdk/openai": "^3.0.52",
|
||||
"@assistant-ui/react": "^0.12.25",
|
||||
"@assistant-ui/react-ai-sdk": "latest",
|
||||
"@assistant-ui/react-data-stream": "^0.12.11",
|
||||
"@assistant-ui/react-markdown": "latest",
|
||||
"@radix-ui/react-avatar": "^1.1.11",
|
||||
"@radix-ui/react-collapsible": "^1.1.12",
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@radix-ui/react-slot": "^1.2.4",
|
||||
"@radix-ui/react-tooltip": "^1.2.8",
|
||||
"ai": "^6.0.159",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"lucide-react": "^1.8.0",
|
||||
"next": "^16.2.3",
|
||||
"radix-ui": "^1.4.3",
|
||||
"react": "^19.2.5",
|
||||
"react-dom": "^19.2.5",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"tailwind-merge": "^3.5.0",
|
||||
"tw-animate-css": "^1.4.0",
|
||||
"tw-shimmer": "^0.4.10",
|
||||
"zustand": "^5.0.12"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.4.11",
|
||||
"@tailwindcss/postcss": "^4.2.2",
|
||||
"@types/node": "^25.6.0",
|
||||
"@types/react": "^19.2.14",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"tailwindcss": "^4.2.2",
|
||||
"typescript": "^6.0.2"
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
const config = {
|
||||
plugins: ["@tailwindcss/postcss"],
|
||||
};
|
||||
|
||||
export default config;
|
||||
175
frontend/public/custom.css
Normal file
@ -0,0 +1,175 @@
|
||||
/*
|
||||
/public/custom.css
|
||||
|
||||
1. changed welcome screen (text, logo, composer, starters, button, textarea)
|
||||
2. changed navbar (theme, readme, profiles desc)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* WELCOME SCREEN */
|
||||
#welcome-screen div[role="article"] {
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
position: relative;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
#welcome-screen div[role="article"]::after {
|
||||
content: "Legal AI Assistant";
|
||||
font-weight: bold;
|
||||
font-size: 24px;
|
||||
color: white;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#welcome-screen img.h-16.w-16.rounded-full {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#welcome-screen .flex-col.gap-2.mb-2.items-center::before {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 256px;
|
||||
height: 256px;
|
||||
background-image: url("/public/logo_dark.png");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
margin: 0 auto;
|
||||
filter: drop-shadow(0 0 2px #3D9FE0) drop-shadow(0 0 4px #3D9FE0);
|
||||
}
|
||||
|
||||
#message-composer {
|
||||
align-items: flex-end;
|
||||
padding: 12px;
|
||||
border-radius: 14px;
|
||||
margin: 0 auto;
|
||||
order: 2;
|
||||
}
|
||||
|
||||
/* CHAT SUBMIT (BUTTON) */
|
||||
#message-composer #chat-submit svg {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#message-composer #chat-submit {
|
||||
background-image: url("/public/icons/input-icon.svg");
|
||||
background-size: 20px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
border-radius: 10px;
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
||||
#message-composer #stop-button {
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
/* HEADERS */
|
||||
#header #theme-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#header #readme-button span{
|
||||
display: none;
|
||||
}
|
||||
|
||||
#header #readme-button::after{
|
||||
content: "About \1F6C8";
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
#chat-profile-description {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* STARTERS */
|
||||
#welcome-screen #starters {
|
||||
order: 1 !important;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
|
||||
#welcome-screen #starters button {
|
||||
height: auto !important;
|
||||
white-space: normal !important;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
text-align: left;
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
|
||||
#welcome-screen #starters button img {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
#welcome-screen #starters p {
|
||||
white-space: normal;
|
||||
overflow: visible;
|
||||
text-overflow: unset;
|
||||
}
|
||||
|
||||
|
||||
/*MATERMARKS*/
|
||||
.watermark div{
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* AI AVATAR*/
|
||||
img[alt="Avatar for Legal AI Assistant"] {
|
||||
content: url("/public/logo_dark.png");
|
||||
}
|
||||
|
||||
/* USER MESSAGES */
|
||||
div[data-step-type="user_message"] .rounded-3xl {
|
||||
border-radius: 14px;
|
||||
}
|
||||
|
||||
/*COPY TOOLTIP*/
|
||||
div[data-state="delayed-open"].bg-popover,
|
||||
div[data-state="instant-open"].bg-popover,
|
||||
div[data-state="closed"].bg-popover {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* THINKING MESSAGE */
|
||||
.ai-message.animate-pulse {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div[data-step-type="run"] img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.animate-pulse.bg-muted {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* MESSANGE CONTENT */
|
||||
|
||||
/* Hide like/dislike buttons */
|
||||
button[data-state="closed"].positive-feedback-off,
|
||||
button[data-state="closed"].negative-feedback-off {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* AUTH RIGHT SECTION */
|
||||
div.relative.hidden.bg-muted.lg\:block.overflow-hidden {
|
||||
background-color: hsl(0, 0%, 13%) !important;
|
||||
}
|
||||
|
||||
div.relative.hidden.bg-muted.lg\:block.overflow-hidden img {
|
||||
filter: none !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
img.absolute.inset-0.h-full.w-full.object-cover {
|
||||
filter: none !important;
|
||||
--tw-grayscale: grayscale(0%) !important;
|
||||
--tw-brightness: brightness(1) !important;
|
||||
}
|
||||
BIN
frontend/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 255 KiB |
BIN
frontend/public/frontend_start.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
1
frontend/public/icons/deepseek.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>DeepSeek</title><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z" fill="#4D6BFE"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
1
frontend/public/icons/gemini.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="#3186FF"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-0-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-1-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-2-_R_0_)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-0-_R_0_" x1="7" x2="11" y1="15.5" y2="12"><stop stop-color="#08B962"></stop><stop offset="1" stop-color="#08B962" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-1-_R_0_" x1="8" x2="11.5" y1="5.5" y2="11"><stop stop-color="#F94543"></stop><stop offset="1" stop-color="#F94543" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-2-_R_0_" x1="3.5" x2="17.5" y1="13.5" y2="12"><stop stop-color="#FABC12"></stop><stop offset=".46" stop-color="#FABC12" stop-opacity="0"></stop></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
1
frontend/public/icons/gpt.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="rgb(177, 151, 252)" d="M344 170.6C362.9 161.6 376 142.3 376 120C376 89.1 350.9 64 320 64C289.1 64 264 89.1 264 120C264 142.3 277.1 161.6 296 170.6L296 269.4C293.2 270.7 290.5 272.3 288 274.1L207.9 228.3C209.5 207.5 199.3 186.7 180 175.5C153.2 160 119 169.2 103.5 196C88 222.8 97.2 257 124 272.5C125.3 273.3 126.6 274 128 274.6L128 365.4C126.7 366 125.3 366.7 124 367.5C97.2 383 88 417.2 103.5 444C119 470.8 153.2 480 180 464.5C199.3 453.4 209.4 432.5 207.8 411.7L258.3 382.8C246.8 371.6 238.4 357.2 234.5 341.1L184 370.1C181.4 368.3 178.8 366.8 176 365.4L176 274.6C178.8 273.3 181.5 271.7 184 269.9L264.1 315.7C264 317.1 263.9 318.5 263.9 320C263.9 342.3 277 361.6 295.9 370.6L295.9 469.4C277 478.4 263.9 497.7 263.9 520C263.9 550.9 289 576 319.9 576C350.8 576 375.9 550.9 375.9 520C375.9 497.7 362.8 478.4 343.9 469.4L343.9 370.6C346.7 369.3 349.4 367.7 351.9 365.9L432 411.7C430.4 432.5 440.6 453.3 459.8 464.5C486.6 480 520.8 470.8 536.3 444C551.8 417.2 542.6 383 515.8 367.5C514.5 366.7 513.1 366 511.8 365.4L511.8 274.6C513.2 274 514.5 273.3 515.8 272.5C542.6 257 551.8 222.8 536.3 196C520.8 169.2 486.8 160 460 175.5C440.7 186.6 430.6 207.5 432.2 228.3L381.6 257.2C393.1 268.4 401.5 282.8 405.4 298.9L456 269.9C458.6 271.7 461.2 273.2 464 274.6L464 365.4C461.2 366.7 458.5 368.3 456 370L375.9 324.2C376 322.8 376.1 321.4 376.1 319.9C376.1 297.6 363 278.3 344.1 269.3L344.1 170.5z"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.6 KiB |
1
frontend/public/icons/input-icon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send-horizontal-icon lucide-send-horizontal"><path d="M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"/><path d="M6 12h16"/></svg>
|
||||
|
After Width: | Height: | Size: 409 B |
1
frontend/public/icons/ollama.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Ollama</title><path d="M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
1
frontend/public/icons/qwen.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Qwen</title><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-_R_0_)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-_R_0_" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
1
frontend/public/icons/scale-balanced.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="rgb(255, 212, 59)" d="M384 96L512 96C529.7 96 544 110.3 544 128C544 145.7 529.7 160 512 160L398.4 160C393.2 185.8 375.5 207.1 352 217.3L352 512L512 512C529.7 512 544 526.3 544 544C544 561.7 529.7 576 512 576L128 576C110.3 576 96 561.7 96 544C96 526.3 110.3 512 128 512L288 512L288 217.3C264.5 207 246.8 185.7 241.6 160L128 160C110.3 160 96 145.7 96 128C96 110.3 110.3 96 128 96L256 96C270.6 76.6 293.8 64 320 64C346.2 64 369.4 76.6 384 96zM439.6 384L584.4 384L512 259.8L439.6 384zM512 480C449.1 480 396.8 446 386 401.1C383.4 390.1 387 378.8 392.7 369L487.9 205.8C492.9 197.2 502.1 192 512 192C521.9 192 531.1 197.3 536.1 205.8L631.3 369C637 378.8 640.6 390.1 638 401.1C627.2 445.9 574.9 480 512 480zM126.8 259.8L54.4 384L199.3 384L126.8 259.8zM.9 401.1C-1.7 390.1 1.9 378.8 7.6 369L102.8 205.8C107.8 197.2 117 192 126.9 192C136.8 192 146 197.3 151 205.8L246.2 369C251.9 378.8 255.5 390.1 252.9 401.1C242.1 445.9 189.8 480 126.9 480C64 480 11.7 446 .9 401.1z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 286 KiB |