First commit
This is base for automatization translating
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
-- Таблица документов (исходных файлов)
|
||||
CREATE TABLE IF NOT EXISTS documents (
|
||||
id SERIAL PRIMARY KEY,
|
||||
filename VARCHAR(255) NOT NULL,
|
||||
file_type VARCHAR(20) NOT NULL, -- pdf, docx, txt, ...
|
||||
original_path TEXT NOT NULL, -- путь к файлу в /data/input
|
||||
output_path TEXT, -- итоговый PDF с переводом
|
||||
source_language VARCHAR(10) DEFAULT 'zh',
|
||||
target_language VARCHAR(10) DEFAULT 'ru',
|
||||
page_count INT,
|
||||
status VARCHAR(30) DEFAULT 'pending', -- pending, processing, completed, failed
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -0,0 +1,37 @@
|
||||
CREATE TABLE IF NOT EXISTS translations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
source_text TEXT NOT NULL,
|
||||
translated_text TEXT NOT NULL,
|
||||
raw_output TEXT,
|
||||
model_name VARCHAR(100) NOT NULL,
|
||||
prompt TEXT NOT NULL,
|
||||
prompt_id INT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS golden_examples (
|
||||
id SERIAL PRIMARY KEY,
|
||||
source_text TEXT NOT NULL, -- китайский
|
||||
reference_text TEXT NOT NULL, -- идеальный русский перевод
|
||||
domain VARCHAR(50) DEFAULT 'tech',
|
||||
description TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
||||
created_by VARCHAR(100)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS prompt_runs (
|
||||
id SERIAL PRIMARY KEY,
|
||||
prompt_id INT NOT NULL REFERENCES prompts(id),
|
||||
model_name VARCHAR(100) NOT NULL,
|
||||
golden_example_id INT NOT NULL REFERENCES golden_examples(id),
|
||||
|
||||
source_text TEXT NOT NULL,
|
||||
reference_text TEXT NOT NULL,
|
||||
model_output TEXT NOT NULL,
|
||||
|
||||
llm_score NUMERIC, -- оценка LLM-оценщика (0..10)
|
||||
bleu_score NUMERIC,
|
||||
other_metrics JSONB,
|
||||
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -0,0 +1,10 @@
|
||||
CREATE TABLE IF NOT EXISTS translations (
|
||||
id SERIAL PRIMARY KEY,
|
||||
source_text TEXT NOT NULL,
|
||||
translated_text TEXT NOT NULL,
|
||||
raw_output TEXT,
|
||||
model_name VARCHAR(100) NOT NULL,
|
||||
prompt TEXT NOT NULL,
|
||||
prompt_id INT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -0,0 +1,40 @@
|
||||
-- docker/db/prompts.sql
|
||||
-- Таблица для хранения версий промптов
|
||||
|
||||
CREATE TABLE IF NOT EXISTS prompts (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL, -- логическое имя, напр. 'zh_ru_tech'
|
||||
version INT NOT NULL, -- 1,2,3...
|
||||
body TEXT NOT NULL, -- текст промпта
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
comment TEXT,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS ux_prompts_name_version
|
||||
ON prompts(name, version);
|
||||
|
||||
-- Первая версия системного промпта zh_ru_tech (config/prompts/zh_ru_tech.v1.md)
|
||||
INSERT INTO prompts (name, version, body, is_active, comment)
|
||||
VALUES (
|
||||
'zh_ru_tech',
|
||||
1,
|
||||
$PROMPT$
|
||||
Ты профессиональный переводчик технической документации с китайского языка на русский.
|
||||
|
||||
Требования к переводу:
|
||||
- Переводи строго на РУССКИЙ язык.
|
||||
- Не добавляй объяснений, комментариев, рассуждений или перевода на другие языки.
|
||||
- Сохраняй структуру исходного текста: абзацы, списки, заголовки.
|
||||
- Не изменяй числа, формулы, единицы измерения и обозначения.
|
||||
- Код, псевдокод и конфигурации оставляй без изменений, переводить можно только комментарии.
|
||||
- Термины переводи последовательно: если один раз перевёл термин определённым образом, используй тот же перевод далее.
|
||||
|
||||
Ответ:
|
||||
- Выведи только готовый перевод на русском языке.
|
||||
- Не добавляй пояснений до или после перевода.
|
||||
$PROMPT$,
|
||||
TRUE,
|
||||
'Базовая версия промпта для техдокументации'
|
||||
)
|
||||
ON CONFLICT (name, version) DO NOTHING;
|
||||
@@ -0,0 +1,82 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
worker:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: docker/worker/Dockerfile
|
||||
container_name: doc_translator_worker
|
||||
environment:
|
||||
DB_DSN: "postgresql://doc_user:doc_password@db:5432/doc_translator"
|
||||
OUTPUT_DIR: "/data/output"
|
||||
volumes:
|
||||
- ../data:/data
|
||||
depends_on:
|
||||
- db
|
||||
ports:
|
||||
- "8000:8000"
|
||||
command: ["uvicorn", "worker.app:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||
db:
|
||||
image: postgres:16
|
||||
container_name: doc_translator_db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: doc_translator
|
||||
POSTGRES_USER: doc_user
|
||||
POSTGRES_PASSWORD: doc_password
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: doc_translator_ollama
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11434:11434"
|
||||
environment:
|
||||
OLLAMA_HOST: 0.0.0.0
|
||||
volumes:
|
||||
- ollama_data:/root/.ollama
|
||||
n8n:
|
||||
image: docker.n8n.io/n8nio/n8n:latest
|
||||
container_name: doc_translator_n8n
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- db
|
||||
- ollama
|
||||
ports:
|
||||
- "5678:5678"
|
||||
environment:
|
||||
# базовые настройки n8n
|
||||
N8N_HOST: localhost
|
||||
N8N_PORT: 5678
|
||||
N8N_PROTOCOL: http
|
||||
N8N_EDITOR_BASE_URL: "http://localhost:5678"
|
||||
WEBHOOK_URL: "http://localhost:5678"
|
||||
|
||||
# подключение к Postgres
|
||||
DB_TYPE: postgresdb
|
||||
DB_POSTGRESDB_HOST: db
|
||||
DB_POSTGRESDB_PORT: 5432
|
||||
DB_POSTGRESDB_DATABASE: doc_translator
|
||||
DB_POSTGRESDB_USER: doc_user
|
||||
DB_POSTGRESDB_PASSWORD: doc_password
|
||||
|
||||
# доступ к файлам
|
||||
N8N_RESTRICT_FILE_ACCESS_TO: /data; /home/node/.n8n-files
|
||||
N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES: "false"
|
||||
|
||||
# часовой пояс
|
||||
GENERIC_TIMEZONE: Europe/Moscow
|
||||
TZ: Europe/Moscow
|
||||
volumes:
|
||||
- ../data:/data
|
||||
- n8n_data:/home/node/.n8n
|
||||
|
||||
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
n8n_data:
|
||||
ollama_data:
|
||||
@@ -0,0 +1,23 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Системные зависимости для PyMuPDF, psycopg2 и т.п.
|
||||
RUN apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
poppler-utils \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY requirements.txt /app/requirements.txt
|
||||
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY src/worker /app/worker
|
||||
|
||||
# Логи и данные
|
||||
RUN mkdir -p /app/logs
|
||||
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
|
||||
CMD ["python", "-m", "worker.app"]
|
||||
Reference in New Issue
Block a user