Generate a Pydantic model class based on this description:

**DESCRIPTION**: {description}

{model_name_hint}

**INSTRUCTIONS**:
Generate Python code for a Pydantic BaseModel class. For each field, decide whether it should be:

1. **Distribution-sampled** (for numeric/categorical data that follows patterns):
   - Use `Annotated[type, Distribution(...)]` syntax
   - Salary, price, age → `Normal(mean=..., std=...)` or `Uniform(min=..., max=...)`
   - Categorical fields (department, status, category) → `Categorical(weights={{...}})`
   - Count data → `Poisson(lam=...)`
   - Skewed positive values → `LogNormal(mean=..., sigma=...)`
   - Probabilities/rates (0-1) → `Beta(alpha=..., beta=...)`

2. **LLM-generated** (for semantic/text content):
   - Use plain type annotation (no Annotated wrapper)
   - Names, descriptions, bios, emails → plain `str`
   - These will be generated by the LLM with context awareness

**AVAILABLE DISTRIBUTIONS**:
- `Normal(mean: float, std: float)` - Bell curve, good for salaries, scores, measurements
- `Uniform(min: float, max: float)` - Even spread, good for ages, dates, random IDs
- `Categorical(weights: dict)` - Categories with proportions, e.g., {{"Engineering": 0.4, "Sales": 0.3, "HR": 0.3}}
- `LogNormal(mean: float, sigma: float)` - Right-skewed, good for incomes, file sizes
- `Poisson(lam: float)` - Count data, good for number of events
- `Exponential(scale: float)` - Wait times, decay processes
- `Beta(alpha: float, beta: float)` - Probabilities, rates, percentages (0-1 range)

**CORRELATIONS & COPULAS**:
After defining fields, specify correlations between distribution-sampled fields.
Think about real-world relationships:

- Age and experience → strong positive correlation (0.8+)
- Experience and salary → moderate positive (0.5-0.7)
- Performance and bonus → strong positive with upper tail (use "gumbel" copula)
- Risk and returns → may crash together (use "clayton" copula)

**COPULA TYPES**:
- `"gaussian"` - Standard correlation, no tail dependence (default, most common)
- `"student_t"` - Heavy tails, extreme values occur together (financial data)
- `"clayton"` - Lower tail dependence, things crash together (risk modelling)
- `"gumbel"` - Upper tail dependence, things boom together (success metrics)
- `"frank"` - Symmetric, no tail dependence (weak correlations)

**CODE FORMAT**:
```python
class ModelName(BaseModel):
    \"\"\"Description of the model.\"\"\"

    # LLM-generated fields (semantic content)
    name: str
    description: str

    # Distribution-sampled fields (statistical patterns)
    age: Annotated[int, Uniform(min=22, max=65)]
    years_experience: Annotated[int, Uniform(min=0, max=40)]
    salary: Annotated[float, Normal(mean=75000, std=20000)]
    performance_score: Annotated[float, Beta(alpha=5, beta=2)]
    department: Annotated[str, Categorical(weights={{"Engineering": 0.4, "Sales": 0.3, "HR": 0.3}})]

    # Correlations between distribution fields
    __correlations__ = Correlations(
        ("age", "years_experience", 0.85),          # Strong positive (gaussian default)
        ("years_experience", "salary", 0.6),        # Moderate positive
        ("performance_score", "salary", 0.5, "gumbel"),  # Upper tail - high performers get big raises
    )

    # Optional fields
    manager_id: Optional[int] = None
```

**RULES**:
1. DO NOT include any import statements - they are provided automatically
2. Choose realistic distribution parameters based on the domain
3. Categorical weights must sum to 1.0
4. Use Field() for additional constraints if needed: `Field(ge=0, le=100)`
5. Add docstring describing the model
6. Use clear, descriptive field names
7. Add correlations between related distribution fields - think about real-world relationships
8. Choose appropriate copula types based on the nature of the relationship
9. Correlation values: -1 to 1 (0.8+ strong, 0.4-0.7 moderate, <0.4 weak)

Generate ONLY the class definition code, no imports or other code.
