# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
description: Tool use evaluation with function calling capabilities

prompts:
  - Tell me about the weather in {{city}} in the default unit for the location.

providers:
  - id: anthropic:messages:claude-sonnet-4-6
    config:
      tools:
        - name: get_weather
          description: Get the current weather in a given location
          input_schema:
            type: object
            properties:
              location:
                type: string
                description: The city and state, e.g. San Francisco, CA
              unit:
                type: string
                enum:
                  - celsius
                  - fahrenheit
            required:
              - location
  - id: anthropic:messages:claude-sonnet-4-6
    label: With Strict Mode
    config:
      tools:
        - name: get_weather
          description: Get the current weather in a given location
          strict: true # Enable strict mode for guaranteed schema validation
          input_schema:
            type: object
            properties:
              location:
                type: string
                description: The city and state, e.g. San Francisco, CA
              unit:
                type: string
                enum:
                  - celsius
                  - fahrenheit
            required:
              - location
            additionalProperties: false
  - id: openai:chat:gpt-5.4-mini
    config:
      tools:
        - type: function
          function:
            name: get_weather
            description: Get the current weather in a given location
            input_schema:
              type: object
              properties:
                location:
                  type: string
                  description: The city and state, e.g. San Francisco, CA
                unit:
                  type: string
                  enum:
                    - celsius
                    - fahrenheit
              required:
                - location
  - id: openai:chat:gpt-5.4-mini
    label: External Tools
    config:
      tools: file://external_tools.yaml
  - id: groq:llama-4-scout-17b-16e-instruct
    config:
      tools:
        - type: function
          function:
            name: get_weather
            description: 'Get the current weather in a given location'
            parameters:
              type: object
              properties:
                location:
                  type: string
                  description: 'The city and state, e.g. San Francisco, CA'
                unit:
                  type: string
                  enum:
                    - celsius
                    - fahrenheit
              required:
                - 'location'
      tool_choice: auto

tests:
  # Test that tool calls result in 'tool_calls' finish reason
  - vars:
      city: Boston
    assert:
      - type: finish-reason
        value: tool_calls # Should trigger tool use for weather lookup

  - vars:
      city: New York
    assert:
      - type: finish-reason
        value: tool_calls

  - vars:
      city: Paris
    assert:
      - type: finish-reason
        value: tool_calls

  # Negative test case - Mars is not a real city, behavior may vary by provider
  - vars:
      city: Mars
