# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
description: OpenTelemetry tracing with trace-based assertions

providers:
  - file://provider-simple-traced.js

prompts:
  - 'Explain how {{topic}} works in simple terms'

tests:
  - vars:
      topic: 'quantum computing'
    metadata:
      tracingEnabled: true
      testCaseId: 'test-case-1'
    assert:
      # Original javascript assertion
      - type: javascript
        value: file://trace-assertions.js

      # Ensure all expected spans are present
      - type: trace-span-count
        value:
          pattern: 'rag_agent_workflow'
          min: 1
          max: 1

      # Ensure we retrieve exactly 3 documents
      - type: trace-span-count
        value:
          pattern: 'retrieve_document_*'
          min: 3
          max: 3

      # Ensure all reasoning steps occur
      - type: trace-span-count
        value:
          pattern: 'reasoning_*'
          min: 3

      # Ensure the overall workflow completes quickly
      - type: trace-span-duration
        value:
          pattern: 'rag_agent_workflow'
          max: 5000 # 5 seconds max

      # Ensure individual operations don't take too long
      - type: trace-span-duration
        value:
          pattern: '*'
          max: 1000 # No single span should exceed 1 second

      # Ensure no errors occur
      - type: trace-error-spans
        value:
          max_count: 0

  - vars:
      topic: 'machine learning'
    metadata:
      tracingEnabled: true
      testCaseId: 'test-case-2'
    assert:
      # Original javascript assertion
      - type: javascript
        value: file://trace-assertions.js

      # Same trace assertions as above
      - type: trace-span-count
        value:
          pattern: 'rag_agent_workflow'
          min: 1
          max: 1

      - type: trace-span-count
        value:
          pattern: 'retrieve_document_*'
          min: 3
          max: 3

      - type: trace-span-count
        value:
          pattern: 'reasoning_*'
          min: 3

      - type: trace-span-duration
        value:
          pattern: 'rag_agent_workflow'
          max: 5000

      - type: trace-span-duration
        value:
          pattern: '*'
          max: 1000

      - type: trace-error-spans
        value:
          max_count: 0

# Default assertions that apply to all test cases
defaultTest:
  assert:
    # Monitor 95th percentile latency (metric only, won't fail tests)
    - type: trace-span-duration
      value:
        pattern: '*'
        max: 2000
        percentile: 95
      weight: 0 # This makes it a metric-only assertion
      metric: p95_latency

    # Ensure retrieval operations are fast
    - type: trace-span-duration
      value:
        pattern: 'retrieve_document_*'
        max: 300 # Each document retrieval should be under 300ms

    # Allow up to 5% error rate (more forgiving for production)
    - type: trace-error-spans
      value:
        max_percentage: 5
        pattern: '*'
      metric: error_rate

# Tracing configuration
tracing:
  enabled: true
  otlp:
    http:
      enabled: true
      port: 4318
      acceptFormats: ['json']
