mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-08 23:58:34 +00:00
* Exploring output being passed to tool selector to see if we can better format data * WIP. Adding JSON repair functionality * Almost done implementing JSON repair. Testing fixes vs current base case. * More action cleanup with additional tests * WIP. Trying to figure out what is going on with tool descriptions * Update tool description generation * WIP. Trying to find out what is causing the tools to duplicate * Replacing tools properly instead of duplicating them accidentally * Fixing issues for MR * Update dependencies for JSON_REPAIR * More cleaning up pull request * preppering for call * Fix type-checking issues --------- Co-authored-by: João Moura <joaomdmoura@gmail.com>
48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
from abc import ABC, abstractmethod
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class OutputConverter(BaseModel, ABC):
|
|
"""
|
|
Abstract base class for converting task results into structured formats.
|
|
|
|
This class provides a framework for converting unstructured text into
|
|
either Pydantic models or JSON, tailored for specific agent requirements.
|
|
It uses a language model to interpret and structure the input text based
|
|
on given instructions.
|
|
|
|
Attributes:
|
|
text (str): The input text to be converted.
|
|
llm (Any): The language model used for conversion.
|
|
model (Any): The target model for structuring the output.
|
|
instructions (str): Specific instructions for the conversion process.
|
|
max_attempts (int): Maximum number of conversion attempts (default: 3).
|
|
"""
|
|
|
|
text: str = Field(description="Text to be converted.")
|
|
llm: Any = Field(description="The language model to be used to convert the text.")
|
|
model: Any = Field(description="The model to be used to convert the text.")
|
|
instructions: str = Field(description="Conversion instructions to the LLM.")
|
|
max_attempts: Optional[int] = Field(
|
|
description="Max number of attempts to try to get the output formatted.",
|
|
default=3,
|
|
)
|
|
|
|
@abstractmethod
|
|
def to_pydantic(self, current_attempt=1):
|
|
"""Convert text to pydantic."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def to_json(self, current_attempt=1):
|
|
"""Convert text to json."""
|
|
pass
|
|
|
|
@property
|
|
@abstractmethod
|
|
def is_gpt(self) -> bool:
|
|
"""Return if llm provided is of gpt from openai."""
|
|
pass
|