Стандарты Python для promptfoo: ruff, type hints, unittest
Гайд по Python-коду для провайдеров и ассертов promptfoo: ruff, type hints, unittest, минимум зависимостей.
Гайд по Python-коду для провайдеров и ассертов promptfoo: ruff, type hints, unittest, минимум зависимостей.
Гайд задаёт стандарты кода для Python-компонентов в promptfoo. Если оператор пишет кастомные провайдеры, промпты или ассерты на Python, эти правила помогут поддерживать качество и совместимость. Конкретно: использовать ruff для автоматической проверки, type hints для надёжности, unittest для тестов. Это ускорит разработку и уменьшит ошибки в оркестрации.
расшифровка ролика ↓
Title:
URL Source: https://raw.githubusercontent.com/promptfoo/promptfoo/main/docs/agents/python.md
Markdown Content: # Python Guidelines
For Python providers, prompts, assertions, and scripts.
## Requirements
- Python 3.8 or later - Follow [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) - Use type hints for readability and error catching
## Linting & Formatting
Use `ruff` for both:
```bash ruff check --fix # Lint with auto-fix ruff check --select I --fix # Sort imports ruff format # Format code ```
## Testing
Use the built-in `unittest` module for new Python tests.
## Best Practices
- Keep dependencies minimal - avoid unnecessary external packages - When adding examples, update relevant `requirements.txt` files - Follow promptfoo API patterns for custom providers/prompts/assertions - Write unit tests for new Python functions
## Provider Pattern
```python def call_api(prompt: str, options: dict, context: dict) -> dict: """ Args: prompt: The prompt string options: Provider configuration context: Variables from the test case
Returns: dict with 'output' key (and optionally 'error') """ # Implementation return {"output": response_text} ```
## Assertion Pattern
```python def get_assert(output: str, context: dict) -> dict: """ Args: output: The provider's output context: Test context including vars
Returns: dict with 'pass' (bool) and optionally 'reason' """ return {"pass": True, "reason": "Validation passed"} ```