feat: add MongoDB test generation and update dependencies

- Added pymongo==3.13.0 to requirements.txt for MongoDB connectivity
- Implemented generate_summarization_from_mongo.py script to generate summarization tests from MongoDB
- Updated run.sh to support 'gen-mongo' command for MongoDB test generation
- Enhanced scripts/README.md with documentation for new MongoDB functionality
- Improved help text in run.sh to clarify available commands and usage examples
```

This commit adds MongoDB integration for test generation and updates the documentation and scripts accordingly.
This commit is contained in:
2026-01-22 20:11:52 +03:00
parent f117c7b23c
commit 8ef3a16e3a
41 changed files with 728 additions and 164 deletions

View File

@@ -21,6 +21,7 @@ from typing import Dict, List, Optional
sys.path.insert(0, str(Path(__file__).parent.parent))
from src.models.ollama_client import OllamaClient
from src.constants import TEST_SEPARATOR
def generate_translation_test(ollama: OllamaClient, model: str) -> Dict[str, str]:
"""Генерирует тест для перевода через LLM."""
@@ -126,23 +127,33 @@ def validate_all_tests(test_dir: str) -> None:
valid_count = 0
invalid_count = 0
for json_file in test_dir_path.glob("*.json"):
for txt_file in test_dir_path.glob("*.txt"):
try:
with open(json_file, "r", encoding="utf-8") as f:
test_data = json.load(f)
with open(txt_file, "r", encoding="utf-8") as f:
content = f.read()
# Разделяем по разделителю
parts = content.split(TEST_SEPARATOR, 1)
if len(parts) != 2:
invalid_count += 1
print(f"{txt_file.name} - некорректный формат (отсутствует разделитель)")
continue
prompt, expected = parts
test_data = {
"prompt": prompt,
"expected": expected
}
if validate_test(test_data):
valid_count += 1
print(f"{json_file.name} - валиден")
print(f"{txt_file.name} - валиден")
else:
invalid_count += 1
print(f"{json_file.name} - не валиден")
except json.JSONDecodeError:
invalid_count += 1
print(f"{json_file.name} - некорректный JSON")
print(f"{txt_file.name} - не валиден")
except Exception as e:
invalid_count += 1
print(f"{json_file.name} - ошибка: {str(e)}")
print(f"{txt_file.name} - ошибка: {str(e)}")
print(f"\nРезультаты валидации:")
print(f"Валидных тестов: {valid_count}")
@@ -165,12 +176,12 @@ def generate_tests(ollama: OllamaClient, model: str, count: int, category: str,
# Проверяем, существует ли уже тест с таким номером
test_num = 1
while True:
test_file = cat_dir / f"test{test_num}.json"
test_file = cat_dir / f"test{test_num}.txt"
if not test_file.exists():
break
test_num += 1
print(f"🤖 Генерирую тест {cat}/test{test_num}.json...")
print(f"🤖 Генерирую тест {cat}/test{test_num}.txt...")
# Генерируем тест через LLM
test_data = generate_test(ollama, model, cat)
@@ -180,11 +191,11 @@ def generate_tests(ollama: OllamaClient, model: str, count: int, category: str,
print(f"❌ Сгенерирован невалидный тест для {cat}, тест номер {test_num}")
continue
# Сохраняем тест
# Сохраняем тест в формате TXT с разделителем
with open(test_file, "w", encoding="utf-8") as f:
json.dump(test_data, f, ensure_ascii=False, indent=2)
f.write(f"{test_data['prompt']}{TEST_SEPARATOR}{test_data['expected']}")
print(f"✅ Создан тест {cat}/test{test_num}.json")
print(f"✅ Создан тест {cat}/test{test_num}.txt")
def main():
"""Основная функция скрипта."""
@@ -211,14 +222,12 @@ def main():
parser.add_argument(
"--model",
type=str,
required=True,
help="Название модели для генерации тестов (обязательный параметр)"
help="Название модели для генерации тестов (требуется при генерации тестов)"
)
parser.add_argument(
"--ollama-url",
type=str,
required=True,
help="URL подключения к Ollama серверу (обязательный параметр)"
help="URL подключения к Ollama серверу (требуется при генерации тестов)"
)
parser.add_argument(
"--validate",
@@ -231,17 +240,28 @@ def main():
if args.validate:
print(f"🔍 Начинаю валидацию тестов в {args.validate}")
validate_all_tests(args.validate)
else:
print(f"🤖 Подключаюсь к Ollama серверу: {args.ollama_url}")
print(f"📝 Генерирую {args.count} тест(ов) для категории: {args.category}")
print(f"🎯 Используемая модель: {args.model}")
print("\n✨ Готово!")
sys.exit(0)
try:
ollama = OllamaClient(args.ollama_url)
generate_tests(ollama, args.model, args.count, args.category, "tests")
except Exception as e:
print(f"❌ Ошибка при генерации тестов: {e}")
sys.exit(1)
# Проверяем обязательные параметры для генерации тестов
if not args.model:
print("❌ Ошибка: параметр --model обязателен при генерации тестов")
sys.exit(1)
if not args.ollama_url:
print("❌ Ошибка: параметр --ollama-url обязателен при генерации тестов")
sys.exit(1)
print(f"🤖 Подключаюсь к Ollama серверу: {args.ollama_url}")
print(f"📝 Генерирую {args.count} тест(ов) для категории: {args.category}")
print(f"🎯 Используемая модель: {args.model}")
try:
ollama = OllamaClient(args.ollama_url)
generate_tests(ollama, args.model, args.count, args.category, "tests")
except Exception as e:
print(f"❌ Ошибка при генерации тестов: {e}")
sys.exit(1)
print("\n✨ Готово!")