Skip to content

feat(models): add safe description overlays for model metadata + surface descriptions in model picker/settings#349

Open
B-Deforce wants to merge 2 commits into
mpfaffenberger:mainfrom
B-Deforce:feat/model-description-overlay-port
Open

feat(models): add safe description overlays for model metadata + surface descriptions in model picker/settings#349
B-Deforce wants to merge 2 commits into
mpfaffenberger:mainfrom
B-Deforce:feat/model-description-overlay-port

Conversation

@B-Deforce
Copy link
Copy Markdown

Summary

What this changes

  • Adds code_puppy/model_descriptions.py with:

    • apply_description_overlays(...)
    • get_model_description(...)
    • default fallback text
  • Adds a new callback hook:

    • load_model_descriptions in code_puppy/callbacks.py
  • Updates ModelFactory.load_config() to apply description overlays after config merges:

    • bundled models.json descriptions
    • plugin-provided description overlays
    • only fills missing/blank descriptions (no clobbering of model settings)
  • Improves model UX:

    • /model completion now shows description metadata (with fallback)
    • model settings menu shows selected model description (with fallback)
  • Updates code_puppy/models.json descriptions for current OSS models.

  • Adds/updates tests:

    • new tests/test_model_descriptions.py
    • expanded picker + settings coverage for description/fallback behavior
    • updates docs hook table in AGENTS.md for load_model_descriptions

Why

Model configs are merged from multiple sources using shallow updates.
Without a description-only overlay pass, metadata can be lost or overwritten unintentionally.
This keeps descriptions reliable while preserving all non-description model fields.

Guardrails

apply_description_overlays(...) intentionally:

  • does not create new models
  • does not overwrite non-description fields
  • only sets description when missing/blank
  • ignores invalid/empty overlay values

Validation

Ran formatting/lint on touched files:

  • isort --profile black ...
  • ruff format ...
  • ruff check --fix ...
  • ruff check ...

Ran targeted tests:

  • tests/test_model_descriptions.py
  • tests/command_line/test_model_picker_completion.py
  • tests/command_line/test_model_settings_menu_coverage.py

All passed locally.

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.

1 participant