An open API service indexing awesome lists of open source software.

https://github.com/ark2016/vk-technopark-project-2024

course work
https://github.com/ark2016/vk-technopark-project-2024

ai bmstu ml technopark test-generation vk

Last synced: about 1 month ago
JSON representation

course work

Awesome Lists containing this project

README

          

---

# Курсовая работа VK: Автоматизированное создание тестов и оценка метрик

Этот репозиторий предоставляет решение на основе FastAPI для генерации, анализа и оценки тестов Python-кода. Реализована интеграция с большими языковыми моделями (LLM) и кастомные алгоритмы оценки метрик.

---

## Содержание

- [Особенности](#особенности)
- [Структура проекта](#структура-проекта)
- [Установка](#установка)
- [Использование](#использование)
- [API эндпоинты](#api-эндпоинты)
- [Разработка](#разработка)
- [Как внести вклад](#как-внести-вклад)
- [Лицензия](#лицензия)

---

## Особенности

- **Интеграция с LLM**: Генерация и анализ тестов для Python-кода с использованием продвинутых моделей.
- **Оценка метрик**: Анализ покрытия тестов с помощью кастомных алгоритмов.
- **Готовность API**: Функциональность доступна через RESTful API на FastAPI.
- **Легкий запуск**: Запуск сервера с минимальными настройками.

---

## Структура проекта

```
LLM
├── main.py # Точка входа в приложение
├── app
│ ├── routers
│ │ └── questions.py # Маршруты API для генерации, анализа тестов и метрик
│ ├── schemas # Pydantic-схемы для проверки запросов и ответов
│ │ └── questions.py
│ ├── utils # Вспомогательные утилиты
│ ├── Metrics
│ │ ├── metric_evaluation.py
│ │ └── metric_module_v2
│ │ ├── mertic.py
│ └── Mistral
│ ├── mistral.py
│ ├── inference_gptbigcode.py
│ └── config.py # Файл конфигурации, куда необходимо поместить API key
```

---

### Использование Docker

1. **Сборка Docker-образа:**
```bash
docker build -t vk-course-work-python-3.12 .
```

2. **Запуск контейнера:**
```bash
docker run -p 8000:8000 vk-course-work-python-3.12
```

После запуска приложение будет доступно по адресу `http://127.0.0.1:8000`.

3. **Выключение контейнера:**
- Чтобы завершить работу контейнера, используйте сочетание клавиш `Ctrl+C` в терминале, где он запущен.
- Если контейнер работает в фоновом режиме, остановите его командой:
```bash
docker stop
```
Узнать идентификатор контейнера можно с помощью:
```bash
docker ps
```

4. **Удаление контейнеров:**
Если нужно удалить все остановленные контейнеры, выполните:
```bash
docker container prune
```
---
## Установка

### Требования

- Python 3.9+
- pip (менеджер пакетов Python)

### Шаги

1. Клонируйте репозиторий:

```bash
git clone
cd LLM
```

2. Создайте виртуальное окружение:

```bash
python3 -m venv venv
source venv/bin/activate # Для Windows: venv\Scripts\activate
```

3. Установите зависимости:

```bash
pip install -r requirements.txt
```

4. Настройте API-ключи и конфигурации:
- Поместите ваш API-ключ `Mistral` в файл `utils/Mistral/config.py`:

```python
# config.py
api_key = "ВАШ_API_КЛЮЧ"
```

---

## Использование

### Запуск сервера

Для запуска FastAPI-сервера выполните:

```bash
uvicorn main:app --reload
```

По умолчанию сервер будет доступен по адресу `http://127.0.0.1:8000`.

---

## API эндпоинты

### Проверка работоспособности

- **URL**: `/ping`
- **Метод**: `GET`
- **Ответ**: `{ "status": "OK" }`

### Генерация ответа

- **URL**: `/get_chat_response`
- **Метод**: `POST`
- **Тело запроса**:
```json
{
"prompt": "Ваш запрос",
"context": "Необязательный контекст",
"model": "Название модели"
}
```
- **Ответ**:
```json
{
"response": "Сгенерированный ответ"
}
```

### Генерация тестов

- **URL**: `/generate_tests`
- **Метод**: `POST`
- **Тело запроса**:
```json
{
"code": "Код Python-функции"
}
```
- **Ответ**:
```json
{
"generated_tests": "Сгенерированные тесты"
}
```

### Анализ тестов

- **URL**: `/analyze_tests`
- **Метод**: `POST`
- **Тело запроса**:
```json
{
"code": "Код Python-функции",
"tests": "Необязательные тесты для анализа"
}
```
- **Ответ**:
```json
{
"analysis": "Результаты анализа"
}
```

### Оценка метрик

- **URL**: `/evaluate_metrics`
- **Метод**: `POST`
- **Тело запроса**:
```json
{
"csv_path": "Путь к CSV-файлу"
}
```
- **Ответ**:
```json
{
"metric_frame": [],
"mean_failed": 0.0,
"mean_coverage_percent": 100.0,
"output_file": "calculated_metrics.csv"
}
```
- Для корректной обработки, входной `.csv` файл должен ОБЯЗАТЕЛЬНО иметь столбцы `Function` и `Test`!

- Выходной файл содержит те же столбцы + `coverage_percent` и `Errors`, содержащих статистику для каждой пары функция/тест.

---

## Разработка

### Стиль кода

- Соблюдайте стандарты PEP 8.
- Используйте аннотации типов и docstring.

### Тестирование

Для запуска тестов выполните:

```bash
pytest
```

### Прехуки

Настройте прехуки для линтинга и форматирования:

```bash
pip install pre-commit
pre-commit install
```

---

## Как внести вклад

Мы рады любым улучшениям! Следуйте этим шагам:

1. Форкните репозиторий.
2. Создайте ветку для изменений: `git checkout -b feature-name`.
3. Сделайте коммит изменений: `git commit -m "Добавлено улучшение"`.
4. Отправьте изменения: `git push origin feature-name`.
5. Создайте Pull Request.

---

## Лицензия

Этот проект распространяется под лицензией MIT. Подробности см. в файле `LICENSE`.

---