Skip to content

Feature/spec generator - #117

Merged
KristinaGlyzina merged 16 commits into
masterfrom
feature/spec_generator
Oct 12, 2026
Merged

KristinaGlyzina merged 16 commits into
masterfrom
feature/spec_generator

Conversation

@KristinaGlyzina

Copy link
Copy Markdown
Collaborator

No description provided.

@Mr-Cool-in-Git

Mr-Cool-in-Git commented Jul 20, 2026 •

Copy link
Copy Markdown
Collaborator

md файл переименуй в README.md

и добавь пример использования пайплайн с CoolPrompt методом

@@ -1,7 +1,40 @@
from pydantic import BaseModel, Field

SUPPORTED_TASK_AREAS = [

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

дубль с schema.py (разберись)

либо удали его тут

SUPPORTED_TASK_AREAS в кортеж

Comment thread coolprompt/spec_generator/schema.py Outdated
from pathlib import Path
from pydantic import BaseModel, Field

TaskType = Literal[

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

с 9 по 44 можно закинуть в utils


class RequestBuilder:
def regular(self, spec: TaskSpec, task: Task, n: int) -> str:
return _REGULAR_TEMPLATES[task].format(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

прямой индекс _REGULAR_TEMPLATES[task] / _CORNER_TEMPLATES[task] даст KeyError при неподдерживаемом Task (если использовать RequestBuilder вне текущего пайплайна).

можно сделать обработку возможной ошибки

_DEFAULT_MAX_LEN = 4000

_LEN_HINT_RE = re.compile(
r"(\d+)\s*(?:-|–|to)\s*(\d+)\s*(chars?|characters?|words?|symbols?)",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ругается тут на регекс посмотри

@Mr-Cool-in-Git

Copy link
Copy Markdown
Collaborator

Будет ли работать пайплайн для генерации нового датасета (не из списка бенчмарков)?

@Mr-Cool-in-Git

Copy link
Copy Markdown
Collaborator

И добавь докстринги где их нет по классам и функциям

@KristinaGlyzina
KristinaGlyzina changed the base branch from stage to master September 10, 2026 16:20
chat_model = resolve_chat_model(self._spec_model)

model = (
chat_model.with_structured_output(schema=TaskSpec, method="json_schema")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(применимо в случае передачи TrackedLLMWrapper) resolve_chat_model() вытаскивает из TrackedLLMWrapper внутреннюю langchain модель, поэтому этот вызов обходит TrackedLLMWrapper.invoke() и get_openai_callback(), из-за чего вызовы не попадают в телеметрию. Нужно вызывать with_structured_output() на исходной модели либо изменить resolver так, чтобы он сохранял wrapper, если тот поддерживает этот метод.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Исправила: resolver теперь сохраняет исходную обёртку, а with_structured_output() возвращает обёрнутую модель. Поэтому structured-output вызовы проходят через TrackedLLMWrapper.invoke() и учитываются в телеметрии.

@Mr-Cool-in-Git Mr-Cool-in-Git left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Non-chat LangChain модели больше не работают.
    model_utils.py (line 11) считает наличие with_structured_output признаком поддержки structured output. Однако метод унаследован всеми BaseLanguageModel и может выбрасывать NotImplementedError.
    Воспроизведено на FakeListLLM. Старый генератор корректно уходил в обычный invoke. Нужно проверять BaseChatModel либо перехватывать NotImplementedError и использовать JSON fallback.

  2. Сломана обратная совместимость публичного API.
    Пакет coolprompt.data_generator удалён, а API нового generator.py (line 147) имеет другую сигнатуру и возвращает GenerationResult вместо tuple.
    Старый импорт теперь воспроизводимо падает:
    from coolprompt.data_generator.generator import SyntheticDataGenerator

ModuleNotFoundError

Нужен compatibility shim либо major-version breaking change с migration guide.

  1. corner_ratio превратился в скрытую ошибку.
    Параметр удалён из PromptTuner.run, но благодаря **kwargs старый вызов всё ещё принимается и затем передаётся оптимизатору на assistant.py. Для стандартного hyper_light это заканчивается TypeError внутри MetaPromptOptimizer.
    Следует сохранить deprecated-параметр и явно обработать его либо сразу выдавать понятную ошибку.

  2. Контракт промпта противоречит default feedback-controlled режиму.
    Инструкции требуют возвращать axis_tags в snippets_templates.py но финальный и наиболее строгий Return only показывает JSON только с input и output в spec_generator_templates.py
    Unstructured-модель, следующая этому контракту, возвращает примеры без тегов; default feedback pipeline их отклоняет. JSON-пример должен включать axis_tags.

  3. Заявленная проверка покрытия фактически доверяет самоотчёту LLM.
    validate_axis_tags проверяет только существование axis/value ID. Семантическая связь тега с input/output не проверяется, после чего тег засчитывается как покрытие.
    Это расходится с README, где говорится, что условие должно присутствовать в самом примере. Нужна независимая валидация либо документация должна честно называть это model-annotated coverage.

  4. BRAVE потерял информацию о classification labels.
    В brave/run.py generate_problem_description получает task и examples, но не получает labels, хотя они доступны в ctx.dataset_split[2]. Предыдущая реализация явно извлекала классы. Для classification benchmark описание может не объяснить классы оптимизатору.

Недостаток тестов
test_generator.py проверяет генерацию только с:
use_task_distribution=False
feedback_controlled=False

Основной production-default путь остаётся без end-to-end теста. Нужен детерминированный тест распределения, axis_tags, top-up, deduplication и интеграции через PromptTuner.

@KristinaGlyzina
KristinaGlyzina merged commit 3894161 into master Oct 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants