# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json description: OpenAI function calling with weather API integration prompts: - 'What is the weather like in {{city}}?' providers: - id: 'openai:chat:gpt-4.1-mini' label: 'functions-defined-in-external-file' config: functions: file://get_current_weather.yaml - id: 'openai:chat:gpt-4.1-mini' label: 'functions-defined-in-config' config: functions: [ { 'name': 'get_current_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'], }, }, ] tests: - vars: city: Boston assert: - type: is-json - type: is-valid-openai-function-call - type: javascript value: output.name === 'get_current_weather' - type: javascript value: JSON.parse(output.arguments).location === 'Boston, MA' - vars: city: New York assert: - type: equals value: get_current_weather # Transform is a cleaner way to pick out specific properties. # This transform returns only the 'name' property transform: output.name - type: similar value: NYC threshold: 0.5 # This transform returns only the parsed location argument. transform: JSON.parse(output.arguments).location - vars: city: Paris - vars: city: Mars