config-skills

Original🇺🇸 English
Translated

Configuration module patterns for LlamaFarm. Covers Pydantic v2 models, JSONSchema generation, YAML processing, and validation.

2installs
Added on

NPX Install

npx skill4agent add llama-farm/llamafarm config-skills

Config Skills for LlamaFarm

Specialized patterns and best practices for the LlamaFarm configuration module (
config/
).

Module Overview

The config module provides YAML/TOML/JSON configuration loading with JSONSchema validation:
FilePurpose
datamodel.py
Generated Pydantic v2 models from JSONSchema
schema.yaml
Source JSONSchema with
$ref
references
compile_schema.py
Dereferences
$ref
to create
schema.deref.yaml
generate_types.py
Generates Python types via
datamodel-codegen
validators.py
Custom validators beyond JSONSchema capabilities
helpers/loader.py
Config loading, saving, and format detection
helpers/generator.py
Template-based config generation

Links to Shared Skills

This module follows Python conventions from the shared skills:
TopicLinkKey Relevance
Patternspython-skills/patterns.mdPydantic v2, dataclasses
Typingpython-skills/typing.mdType hints, constrained types
Testingpython-skills/testing.mdPytest fixtures, temp files
Errorspython-skills/error-handling.mdCustom exceptions
Securitypython-skills/security.mdPath traversal prevention

Framework-Specific Checklists

ChecklistDescription
pydantic.mdPydantic v2 configuration patterns, nested models, constraints
jsonschema.mdJSONSchema generation, dereferencing, validation

Tech Stack

  • Python: 3.11+
  • Pydantic: v2 with
    ConfigDict
    ,
    Field
    , constrained types
  • JSONSchema: Draft-07 with
    $ref
    dereferencing via
    jsonref
  • YAML:
    ruamel.yaml
    for comment-preserving read/write
  • Code Generation:
    datamodel-codegen
    for schema-to-Pydantic

Key Patterns

Generated Pydantic Models

The
datamodel.py
file is auto-generated from JSONSchema:
python
# Generated by datamodel-codegen from schema.deref.yaml
from pydantic import BaseModel, ConfigDict, Field, conint, constr

class Database(BaseModel):
    model_config = ConfigDict(extra="forbid")
    name: constr(pattern=r"^[a-z][a-z0-9_]*$", min_length=1, max_length=50)
    type: Type
    config: dict[str, Any] | None = Field(None, description="Database-specific configuration")

Custom Validators for Cross-Field Constraints

JSONSchema draft-07 cannot express all constraints. Custom validators extend validation:
python
def validate_llamafarm_config(config_dict: dict[str, Any]) -> None:
    """Validate constraints beyond JSONSchema (uniqueness, references)."""
    # Check for duplicate prompt names
    prompt_names = [p.get("name") for p in config_dict.get("prompts", [])]
    duplicates = [name for name in prompt_names if prompt_names.count(name) > 1]
    if duplicates:
        raise ValueError(f"Duplicate prompt set names: {', '.join(set(duplicates))}")

Comment-Preserving YAML with ruamel.yaml

Configuration files preserve user comments when modified:
python
from ruamel.yaml import YAML
from ruamel.yaml.comments import CommentedMap

def _get_ruamel_yaml() -> YAML:
    yaml_instance = YAML()
    yaml_instance.preserve_quotes = True
    yaml_instance.indent(mapping=2, sequence=4, offset=2)
    return yaml_instance

Directory Structure

config/
├── pyproject.toml       # UV-managed dependencies
├── schema.yaml          # Source JSONSchema with $ref
├── schema.deref.yaml    # Dereferenced schema (generated)
├── datamodel.py         # Pydantic models (generated)
├── compile_schema.py    # Schema compilation script
├── generate_types.py    # Type generation script
├── validators.py        # Custom validation beyond JSONSchema
├── validate_config.py   # CLI validation wrapper
├── __init__.py          # Public API exports
├── helpers/
│   ├── loader.py        # Config loading/saving
│   └── generator.py     # Template-based generation
├── templates/
│   └── default.yaml     # Default config template
└── tests/
    ├── conftest.py      # Shared fixtures
    └── test_*.py        # Test modules

Workflow: Schema Changes

When modifying the configuration schema:
  1. Edit
    schema.yaml
    (or referenced schemas like
    ../rag/schema.yaml
    )
  2. Run
    nx run generate-types
    to compile and generate types
  3. Update
    validators.py
    if new cross-field constraints are needed
  4. Test with
    uv run pytest config/tests/

Common Commands

bash
# Generate types from schema
nx run generate-types

# Validate a config file
uv run python config/validate_config.py path/to/llamafarm.yaml --verbose

# Run tests
uv run pytest config/tests/ -v

# Lint and format
ruff check config/ --fix
ruff format config/