Files
Broken_Code_Generation.1.0/README.md
ModelHub XC b0af1ebc67 初始化项目,由ModelHub XC社区提供模型
Model: Vilyam888/Broken_Code_Generation.1.0
Source: Original Platform
2026-06-16 06:33:19 +08:00

293 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
license: other
library_name: transformers
pipeline_tag: text-generation
base_model: Qwen/Qwen2.5-Coder-3B-Instruct
tags:
- qwen
- qwen2.5-coder
- transformers
- text-generation
- code
- fine-tuned
- russian
---
# Broken_Code_Generation1.0
`Broken_Code_Generation1.0` - это модель для генерации задач по программированию в стиле ML bugfix.
Если совсем просто: ты задаешь **3 тега** и **сложность**, а модель возвращает **одну готовую задачу** в JSON-формате: с названием, контекстом, тестами, требованиями, ограничениями и сломанным кодом, который нужно исправить.
Модель основана на `Qwen/Qwen2.5-Coder-3B-Instruct`, была дообучена через `QLoRA`, а затем смержена в полноценную модель для инференса и публикации.
Built with Qwen.
## Что делает модель
Модель принимает:
- ровно 3 тега
- одну сложность: `easy`, `medium` или `hard`
И возвращает:
- один JSON-объект
- без Markdown
- без дополнительных пояснений
- в формате, похожем на обучающий датасет
## Что будет в ответе
На выходе ожидается JSON с такими полями:
- `id`
- `title`
- `difficulty`
- `topic_tags`
- `task_context`
- `tests`
- `expected_output`
- `input_example`
- `output_example`
- `requirements`
- `constraints`
- `broken_code`
## Где модель полезна
Эта модель подойдет, если тебе нужно:
- генерировать новые ML bugfix-задачи
- собирать учебные примеры для студентов
- делать синтетические данные для обучения и тестирования
- быстро получать задачи в одном и том же структурированном формате
- использовать ее вместе с анализом кода
## Основное подключение
Подключение через `transformers` напрямую:
```python
import json
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_path = "Vilyam888/Broken_Code_Generation.1.0"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "left"
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.bfloat16 if torch.cuda.is_available() and torch.cuda.is_bf16_supported() else (
torch.float16 if torch.cuda.is_available() else torch.float32
),
device_map="auto",
trust_remote_code=True,
)
SYSTEM_PROMPT = (
"Ты генерируешь новую ML bugfix-задачу строго в формате объектов из датасета. "
"Верни только один JSON-объект без Markdown и без пояснений. "
"Порядок полей должен быть ровно таким: "
"`title`, `difficulty`, `topic_tags`, `task_context`, `tests`, "
"`expected_output`, `input_example`, `output_example`, `requirements`, "
"`constraints`, `broken_code`. "
"`tests`, `requirements` и `constraints` должны быть массивами строк. "
"`broken_code` должен быть одной строкой с полным Python-кодом и символами `\\n`. "
"Не добавляй лишние поля и не обрывай JSON."
)
topic_tags = {
"TabularData": 0.4,
"Statistics": 0.3,
"DataPreprocessing": 0.3,
}
payload = {
"difficulty": "medium",
"topic_tags": topic_tags,
}
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{
"role": "user",
"content": (
"Сгенерируй новую ML bugfix-задачу по параметрам.\n"
"Формат должен совпадать со структурой датасета: "
"все поля обязательны, `tests`/`requirements`/`constraints` - это списки строк, "
"`broken_code` - полная строка кода с ошибками и комментариями `ВОТ ТУТ НУЖНО ИСПРАВИТЬ КОД`.\n"
"Поля должны идти в порядке: "
"title, difficulty, topic_tags, task_context, tests, expected_output, "
"input_example, output_example, requirements, constraints, broken_code.\n"
+ json.dumps(payload, ensure_ascii=False, indent=2)
),
},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_length = inputs["input_ids"].shape[1]
with torch.no_grad():
output = model.generate(
**inputs,
max_new_tokens=1200,
temperature=0.7,
top_p=0.95,
do_sample=True,
pad_token_id=tokenizer.pad_token_id,
eos_token_id=tokenizer.eos_token_id,
)
completion_tokens = output[0][prompt_length:]
completion = tokenizer.decode(completion_tokens, skip_special_tokens=True).strip()
print(completion)
```
После этого модели нужно передать:
- 3 тега
- сложность `easy`, `medium` или `hard`
- промпт с просьбой вернуть один JSON-объект
Для этой модели это важно: она обучена не на обычный разговорный чат, а на генерацию задач.
Поэтому хороший запрос для нее выглядит так:
- "Сгенерируй ML bugfix-задачу по таким тегам и такой сложности"
А вот запросы вроде:
- `Who are you?`
- `Hello`
- `Tell me a joke`
для этой модели не являются целевым сценарием и обычно не дают полезного результата.
Если нужен более простой запуск именно внутри этого проекта, ниже есть второй вариант через готовый скрипт.
Если говорить совсем коротко: для обычного подключения другим людям достаточно `transformers`, `torch` и имени репозитория:
- `Vilyam888/Broken_Code_Generation.1.0`
## Основной инференс в проекте
Самый простой и понятный способ запуска в этом проекте:
```powershell
.\.venv\Scripts\python.exe .\HF_Release\infer_merged_model.py --tag1 TabularData --tag2 Statistics --tag3 DataPreprocessing --difficulty medium
```
Что произойдет после запуска:
- загрузится смерженная модель
- в модель передадутся 3 тега и сложность
- модель сгенерирует задачу
- готовый JSON сохранится в `HF_Release/inference_output/generated_task.json`
- сырой текст ответа сохранится в `HF_Release/inference_output/raw_output.txt`
Еще один пример:
```powershell
.\.venv\Scripts\python.exe .\HF_Release\infer_merged_model.py --tag1 Classification --tag2 Evaluation --tag3 Metrics --difficulty hard
```
## Что можно менять
В основной команде ты обычно меняешь только это:
- `--tag1`, `--tag2`, `--tag3` - любые 3 нужных тега
- `--difficulty` - `easy`, `medium` или `hard`
Например, если хочешь другую генерацию, просто подставляешь другие значения в ту же команду.
## Как это работает
Внутри все довольно просто:
1. из трех тегов собирается `topic_tags`
2. в промпт подставляются теги и сложность
3. модель генерирует текст
4. из текста извлекается JSON
5. JSON сохраняется в итоговый файл
То есть в обычной работе тебе не нужно менять код модели. Достаточно менять входные теги и сложность.
## Совместимость с Code Analyze
Эта модель хорошо работает в связке с [`Vilyam888/Code_analyze.1.0`](https://huggingface.co/Vilyam888/Code_analyze.1.0).
Удобный сценарий такой:
1. `Code_analyze.1.0` анализирует код и определяет тип ошибки
2. по этому анализу выбираются подходящие теги
3. `Broken_Code_Generation1.0` генерирует новую bugfix-задачу в нужном формате
Это удобно для:
- учебных пайплайнов
- генерации новых примеров
- полуавтоматической подготовки задач
- систем, где сначала анализируется решение, а потом создается похожая задача на закрепление
## Как лучше формулировать запрос
Модель обычно отвечает лучше, если:
- давать ровно 3 тега
- явно указывать сложность
- просить вернуть ровно один JSON-объект
- отдельно писать, что не нужно добавлять Markdown и пояснения
## Ограничения
Важно помнить:
- модель все еще может иногда выдавать неполный JSON
- качество зависит от промпта и параметров генерации
- иногда ответы могут быть стилистически похожими друг на друга
- генерации лучше просматривать вручную перед использованием в важном датасете или продукте
## Кратко об обучении
- Базовая модель: `Qwen/Qwen2.5-Coder-3B-Instruct`
- Метод дообучения: `QLoRA`
- Итоговая версия: merged-модель после вливания LoRA-адаптера в базовую
- Целевая задача: генерация структурированных ML bugfix-задач
## Что лежит в репозитории
Главные файлы:
- шарды модели: `model-00001-of-00004.safetensors` ... `model-00004-of-00004.safetensors`
- файлы токенизатора
- `chat_template.jinja`
- `config.json`
- `generation_config.json`
## Лицензия
Этот репозиторий является производной работой от `Qwen/Qwen2.5-Coder-3B-Instruct`.
Базовая модель распространяется по лицензии `Qwen RESEARCH LICENSE AGREEMENT`. На Hugging Face для этой модели используется `license: other`.
Важно:
- лицензия Qwen ориентирована на research / non-commercial использование
- для коммерческого использования нужно отдельно проверить условия исходной лицензии
- при распространении нужно сохранять `LICENSE` и `NOTICE`
## Атрибуция
Improved using Qwen.