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 напрямую:

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

Основной инференс в проекте

Самый простой и понятный способ запуска в этом проекте:

.\.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

Например, если хочешь другую генерацию, просто подставляешь другие значения в ту же команду.

Как это работает

Внутри все довольно просто:

  1. из трех тегов собирается topic_tags
  2. в промпт подставляются теги и сложность
  3. модель генерирует текст
  4. из текста извлекается JSON
  5. JSON сохраняется в итоговый файл

То есть в обычной работе тебе не нужно менять код модели. Достаточно менять входные теги и сложность.

Совместимость с Code Analyze

Эта модель хорошо работает в связке с 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.

Downloads last month
248
Safetensors
Model size
3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Vilyam888/Broken_Code_Generation.1.0

Base model

Qwen/Qwen2.5-3B
Finetuned
(111)
this model