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:
@@ -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✨ Готово!")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user