mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-07 07:08:31 +00:00
* feat: Add task guardrails feature Add support for custom code guardrails in tasks that validate outputs before proceeding to the next task. Features include: - Optional task-level guardrail function - Pre-next-task execution timing - Tuple return format (success, data) - Automatic result/error routing - Configurable retry mechanism - Comprehensive documentation and tests Link to Devin run: https://app.devin.ai/sessions/39f6cfd6c5a24d25a7bd70ce070ed29a Co-Authored-By: Joe Moura <joao@crewai.com> * fix: Add type check for guardrail result and remove unused import Co-Authored-By: Joe Moura <joao@crewai.com> * fix: Remove unnecessary f-string prefix Co-Authored-By: Joe Moura <joao@crewai.com> * feat: Add guardrail validation improvements - Add result/error exclusivity validation in GuardrailResult - Make return type annotations optional in Task guardrail validator - Improve error messages for validation failures Co-Authored-By: Joe Moura <joao@crewai.com> * docs: Add comprehensive guardrails documentation - Add type hints and examples - Add error handling best practices - Add structured error response patterns - Document retry mechanisms - Improve documentation organization Co-Authored-By: Joe Moura <joao@crewai.com> * refactor: Update guardrail functions to handle TaskOutput objects Co-Authored-By: Joe Moura <joao@crewai.com> * feat: Add task guardrails feature Add support for custom code guardrails in tasks that validate outputs before proceeding to the next task. Features include: - Optional task-level guardrail function - Pre-next-task execution timing - Tuple return format (success, data) - Automatic result/error routing - Configurable retry mechanism - Comprehensive documentation and tests Link to Devin run: https://app.devin.ai/sessions/39f6cfd6c5a24d25a7bd70ce070ed29a Co-Authored-By: Joe Moura <joao@crewai.com> * fix: Add type check for guardrail result and remove unused import Co-Authored-By: Joe Moura <joao@crewai.com> * fix: Remove unnecessary f-string prefix Co-Authored-By: Joe Moura <joao@crewai.com> * feat: Add guardrail validation improvements - Add result/error exclusivity validation in GuardrailResult - Make return type annotations optional in Task guardrail validator - Improve error messages for validation failures Co-Authored-By: Joe Moura <joao@crewai.com> * docs: Add comprehensive guardrails documentation - Add type hints and examples - Add error handling best practices - Add structured error response patterns - Document retry mechanisms - Improve documentation organization Co-Authored-By: Joe Moura <joao@crewai.com> * refactor: Update guardrail functions to handle TaskOutput objects Co-Authored-By: Joe Moura <joao@crewai.com> * style: Fix import sorting in task guardrails files Co-Authored-By: Joe Moura <joao@crewai.com> * fixing docs * Fixing guardarils implementation * docs: Enhance guardrail validator docstring with runtime validation rationale Co-Authored-By: Joe Moura <joao@crewai.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com> Co-authored-by: Brandon Hancock (bhancock_ai) <109994880+bhancockio@users.noreply.github.com> Co-authored-by: João Moura <joaomdmoura@gmail.com>
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""
|
|
Module for handling task guardrail validation results.
|
|
|
|
This module provides the GuardrailResult class which standardizes
|
|
the way task guardrails return their validation results.
|
|
"""
|
|
|
|
from typing import Any, Optional, Tuple, Union
|
|
|
|
from pydantic import BaseModel, field_validator
|
|
|
|
|
|
class GuardrailResult(BaseModel):
|
|
"""Result from a task guardrail execution.
|
|
|
|
This class standardizes the return format of task guardrails,
|
|
converting tuple responses into a structured format that can
|
|
be easily handled by the task execution system.
|
|
|
|
Attributes:
|
|
success (bool): Whether the guardrail validation passed
|
|
result (Any, optional): The validated/transformed result if successful
|
|
error (str, optional): Error message if validation failed
|
|
"""
|
|
success: bool
|
|
result: Optional[Any] = None
|
|
error: Optional[str] = None
|
|
|
|
@field_validator("result", "error")
|
|
@classmethod
|
|
def validate_result_error_exclusivity(cls, v: Any, info) -> Any:
|
|
values = info.data
|
|
if "success" in values:
|
|
if values["success"] and v and "error" in values and values["error"]:
|
|
raise ValueError("Cannot have both result and error when success is True")
|
|
if not values["success"] and v and "result" in values and values["result"]:
|
|
raise ValueError("Cannot have both result and error when success is False")
|
|
return v
|
|
|
|
@classmethod
|
|
def from_tuple(cls, result: Tuple[bool, Union[Any, str]]) -> "GuardrailResult":
|
|
"""Create a GuardrailResult from a validation tuple.
|
|
|
|
Args:
|
|
result: A tuple of (success, data) where data is either
|
|
the validated result or error message.
|
|
|
|
Returns:
|
|
GuardrailResult: A new instance with the tuple data.
|
|
"""
|
|
success, data = result
|
|
return cls(
|
|
success=success,
|
|
result=data if success else None,
|
|
error=data if not success else None
|
|
)
|