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 с такими полями:
idtitledifficultytopic_tagstask_contexttestsexpected_outputinput_exampleoutput_examplerequirementsconstraintsbroken_code
Где модель полезна
Эта модель подойдет, если тебе нужно:
- генерировать новые ML bugfix-задачи
- собирать учебные примеры для студентов
- делать синтетические данные для обучения и тестирования
- быстро получать задачи в одном и том же структурированном формате
- использовать ее вместе с анализом кода
Основное подключение
Подключение через transformers напрямую:
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?HelloTell me a joke
для этой модели не являются целевым сценарием и обычно не дают полезного результата.
Если нужен более простой запуск именно внутри этого проекта, ниже есть второй вариант через готовый скрипт.
Если говорить совсем коротко: для обычного подключения другим людям достаточно transformers, torch и имени репозитория:
Vilyam888/Broken_Code_Generation.1.0
Основной инференс в проекте
Самый простой и понятный способ запуска в этом проекте:
.\.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
Еще один пример:
.\.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
Например, если хочешь другую генерацию, просто подставляешь другие значения в ту же команду.
Как это работает
Внутри все довольно просто:
- из трех тегов собирается
topic_tags - в промпт подставляются теги и сложность
- модель генерирует текст
- из текста извлекается JSON
- JSON сохраняется в итоговый файл
То есть в обычной работе тебе не нужно менять код модели. Достаточно менять входные теги и сложность.
Совместимость с Code Analyze
Эта модель хорошо работает в связке с Vilyam888/Code_analyze.1.0.
Удобный сценарий такой:
Code_analyze.1.0анализирует код и определяет тип ошибки- по этому анализу выбираются подходящие теги
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.jinjaconfig.jsongeneration_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.
- Downloads last month
- 248