# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
description: Schema-enforced JSON recipe generation with Llama 4
prompts:
  - file://structured_prompts.txt
providers:
  - id: cerebras:llama-4-scout-17b-16e-instruct
    config:
      temperature: 0.7
      max_completion_tokens: 1024
      response_format:
        type: 'json_schema'
        json_schema:
          name: 'recipe_schema'
          strict: true
          schema:
            type: 'object'
            properties:
              name: { 'type': 'string' }
              cuisine: { 'type': 'string' }
              difficulty:
                type: 'string'
                enum: ['easy', 'medium', 'hard']
              prepTime: { 'type': 'integer' }
              cookTime: { 'type': 'integer' }
              ingredients:
                type: 'array'
                items:
                  type: 'object'
                  properties:
                    name: { 'type': 'string' }
                    amount: { 'type': 'string' }
                  required: ['name', 'amount']
              instructions:
                type: 'array'
                items: { 'type': 'string' }
            required: ['name', 'cuisine', 'difficulty', 'ingredients', 'instructions']
            additionalProperties: false
tests:
  - vars:
      cuisine: Italian
      dish: Cacio e Pepe
    assert:
      - type: json-schema-valid
        value: |
          {
            "type": "object",
            "required": ["name", "cuisine", "difficulty", "ingredients", "instructions"]
          }
  - vars:
      cuisine: Japanese
      dish: Okonomiyaki
    assert:
      - type: contains-json-property
        value: ['ingredients', 'instructions']
      - type: javascript
        value: |
          return output.ingredients.length >= 5 ? 'pass' : 'fail: needs at least 5 ingredients'
  - vars:
      cuisine: Mexican
      dish: Chiles en Nogada
    assert:
      - type: contains-json-property
        value: ['difficulty']
      - type: javascript
        value: |
          return output.instructions.length >= 3 ? 'pass' : 'fail: needs detailed instructions'
outputs:
  - type: json
