Module praisonai.auto
Classes
class AutoGenerator (topic='Movie Story writing about AI', agent_file='test.yaml', framework='crewai', config_list: Optional[List[Dict]] = None)
-
Initialize the AutoGenerator class with the specified topic, agent file, and framework. Note: autogen framework is different from this AutoGenerator class.
Args
topic
:str
, optional- The topic for the generated team structure. Defaults to "Movie Story writing about AI".
agent_file
:str
, optional- The name of the YAML file to save the generated team structure. Defaults to "test.yaml".
framework
:str
, optional- The framework for the generated team structure. Defaults to "crewai".
config_list
:Optional[List[Dict]]
, optional- A list containing the configuration details for the OpenAI API. If None, it defaults to using environment variables or hardcoded values.
Attributes
config_list
:list
- A list containing the configuration details for the OpenAI API.
topic
:str
- The specified topic for the generated team structure.
agent_file
:str
- The specified name of the YAML file to save the generated team structure.
framework
:str
- The specified framework for the generated team structure.
client
:instructor.Client
- An instance of the instructor.Client class initialized with the specified OpenAI API configuration.
Expand source code
class AutoGenerator: def __init__(self, topic="Movie Story writing about AI", agent_file="test.yaml", framework="crewai", config_list: Optional[List[Dict]] = None): """ Initialize the AutoGenerator class with the specified topic, agent file, and framework. Note: autogen framework is different from this AutoGenerator class. Args: topic (str, optional): The topic for the generated team structure. Defaults to "Movie Story writing about AI". agent_file (str, optional): The name of the YAML file to save the generated team structure. Defaults to "test.yaml". framework (str, optional): The framework for the generated team structure. Defaults to "crewai". config_list (Optional[List[Dict]], optional): A list containing the configuration details for the OpenAI API. If None, it defaults to using environment variables or hardcoded values. Attributes: config_list (list): A list containing the configuration details for the OpenAI API. topic (str): The specified topic for the generated team structure. agent_file (str): The specified name of the YAML file to save the generated team structure. framework (str): The specified framework for the generated team structure. client (instructor.Client): An instance of the instructor.Client class initialized with the specified OpenAI API configuration. """ self.config_list = config_list or [ { 'model': os.environ.get("OPENAI_MODEL_NAME", "gpt-4o"), 'base_url': os.environ.get("OPENAI_API_BASE", "https://api.openai.com/v1"), 'api_key': os.environ.get("OPENAI_API_KEY") } ] self.topic = topic self.agent_file = agent_file self.framework = framework or "crewai" self.client = instructor.patch( OpenAI( base_url=self.config_list[0]['base_url'], api_key=os.getenv("OPENAI_API_KEY"), ), mode=instructor.Mode.JSON, ) def generate(self): """ Generates a team structure for the specified topic. Args: None Returns: str: The full path of the YAML file containing the generated team structure. Raises: Exception: If the generation process fails. Usage: generator = AutoGenerator(framework="crewai", topic="Create a movie script about Cat in Mars") path = generator.generate() print(path) """ response = self.client.chat.completions.create( model=self.config_list[0]['model'], response_model=TeamStructure, max_retries=10, messages=[ {"role": "system", "content": "You are a helpful assistant designed to output complex team structures."}, {"role": "user", "content": self.get_user_content()} ] ) json_data = json.loads(response.model_dump_json()) self.convert_and_save(json_data) full_path = os.path.abspath(self.agent_file) return full_path def convert_and_save(self, json_data): """Converts the provided JSON data into the desired YAML format and saves it to a file. Args: json_data (dict): The JSON data representing the team structure. topic (str, optional): The topic to be inserted into the YAML. Defaults to "Artificial Intelligence". agent_file (str, optional): The name of the YAML file to save. Defaults to "test.yaml". """ yaml_data = { "framework": self.framework, "topic": self.topic, "roles": {}, "dependencies": [] } for role_id, role_details in json_data['roles'].items(): yaml_data['roles'][role_id] = { "backstory": "" + role_details['backstory'], "goal": role_details['goal'], "role": role_details['role'], "tasks": {}, # "tools": role_details.get('tools', []), "tools": [''] } for task_id, task_details in role_details['tasks'].items(): yaml_data['roles'][role_id]['tasks'][task_id] = { "description": "" + task_details['description'], "expected_output": "" + task_details['expected_output'] } # Save to YAML file, maintaining the order with open(self.agent_file, 'w') as f: yaml.dump(yaml_data, f, allow_unicode=True, sort_keys=False) def get_user_content(self): """ Generates a prompt for the OpenAI API to generate a team structure. Args: None Returns: str: The prompt for the OpenAI API. Usage: generator = AutoGenerator(framework="crewai", topic="Create a movie script about Cat in Mars") prompt = generator.get_user_content() print(prompt) """ user_content = """Generate a team structure for \"""" + self.topic + """\" task. No Input data will be provided to the team. The team will work in sequence. First role will pass the output to the next role, and so on. The last role will generate the final output. Think step by step. With maximum 3 roles, each with 1 task. Include role goals, backstories, task descriptions, and expected outputs. List of Available Tools: CodeDocsSearchTool, CSVSearchTool, DirectorySearchTool, DOCXSearchTool, DirectoryReadTool, FileReadTool, TXTSearchTool, JSONSearchTool, MDXSearchTool, PDFSearchTool, RagTool, ScrapeElementFromWebsiteTool, ScrapeWebsiteTool, WebsiteSearchTool, XMLSearchTool, YoutubeChannelSearchTool, YoutubeVideoSearchTool. Only use Available Tools. Do Not use any other tools. Example Below: Use below example to understand the structure of the output. The final role you create should satisfy the provided task: """ + self.topic + """. { "roles": { "narrative_designer": { "role": "Narrative Designer", "goal": "Create AI storylines", "backstory": "Skilled in narrative development for AI, with a focus on story resonance.", "tools": ["ScrapeWebsiteTool"], "tasks": { "story_concept_development": { "description": "Craft a unique AI story concept with depth and engagement using concept from this page the content https://www.asthebirdfliesblog.com/posts/how-to-write-book-story-development .", "expected_output": "Document with narrative arcs, character bios, and settings." } } }, "scriptwriter": { "role": "Scriptwriter", "goal": "Write scripts from AI concepts", "backstory": "Expert in dialogue and script structure, translating concepts into scripts.", "tasks": { "scriptwriting_task": { "description": "Turn narrative concepts into scripts, including dialogue and scenes.", "expected_output": "Production-ready script with dialogue and scene details." } } } } } """ return user_content
Methods
def convert_and_save(self, json_data)
-
Converts the provided JSON data into the desired YAML format and saves it to a file.
Args
json_data
:dict
- The JSON data representing the team structure.
topic
:str
, optional- The topic to be inserted into the YAML. Defaults to "Artificial Intelligence".
agent_file
:str
, optional- The name of the YAML file to save. Defaults to "test.yaml".
def generate(self)
-
Generates a team structure for the specified topic.
Args
None
Returns
str
- The full path of the YAML file containing the generated team structure.
Raises
Exception
- If the generation process fails.
Usage
generator = AutoGenerator(framework="crewai", topic="Create a movie script about Cat in Mars") path = generator.generate() print(path)
def get_user_content(self)
-
Generates a prompt for the OpenAI API to generate a team structure.
Args
None
Returns
str
- The prompt for the OpenAI API.
Usage
generator = AutoGenerator(framework="crewai", topic="Create a movie script about Cat in Mars") prompt = generator.get_user_content() print(prompt)
class RoleDetails (**data: Any)
-
Usage docs: https://docs.pydantic.dev/2.9/concepts/models/
A base class for creating Pydantic models.
Attributes
__class_vars__
- The names of the class variables defined on the model.
__private_attributes__
- Metadata about the private attributes of the model.
__signature__
- The synthesized
__init__
[Signature
][inspect.Signature] of the model. __pydantic_complete__
- Whether model building is completed, or if there are still undefined fields.
__pydantic_core_schema__
- The core schema of the model.
__pydantic_custom_init__
- Whether the model has a custom
__init__
function. __pydantic_decorators__
- Metadata containing the decorators defined on the model.
This replaces
Model.__validators__
andModel.__root_validators__
from Pydantic V1. __pydantic_generic_metadata__
- Metadata for generic models; contains data used for a similar purpose to args, origin, parameters in typing-module generics. May eventually be replaced by these.
__pydantic_parent_namespace__
- Parent namespace of the model, used for automatic rebuilding of models.
__pydantic_post_init__
- The name of the post-init method for the model, if defined.
__pydantic_root_model__
- Whether the model is a [
RootModel
][pydantic.root_model.RootModel]. __pydantic_serializer__
- The
pydantic-core
SchemaSerializer
used to dump instances of the model. __pydantic_validator__
- The
pydantic-core
SchemaValidator
used to validate instances of the model. __pydantic_extra__
- A dictionary containing extra values, if [
extra
][pydantic.config.ConfigDict.extra] is set to'allow'
. __pydantic_fields_set__
- The names of fields explicitly set during instantiation.
__pydantic_private__
- Values of private attributes set on the model instance.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError
][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.self
is explicitly positional-only to allowself
as a field name.Expand source code
class RoleDetails(BaseModel): role: str goal: str backstory: str tasks: Dict[str, TaskDetails] tools: List[str]
Ancestors
- pydantic.main.BaseModel
Class variables
var backstory : str
var goal : str
var model_computed_fields
var model_config
var model_fields
var role : str
var tasks : Dict[str, TaskDetails]
var tools : List[str]
class TaskDetails (**data: Any)
-
Usage docs: https://docs.pydantic.dev/2.9/concepts/models/
A base class for creating Pydantic models.
Attributes
__class_vars__
- The names of the class variables defined on the model.
__private_attributes__
- Metadata about the private attributes of the model.
__signature__
- The synthesized
__init__
[Signature
][inspect.Signature] of the model. __pydantic_complete__
- Whether model building is completed, or if there are still undefined fields.
__pydantic_core_schema__
- The core schema of the model.
__pydantic_custom_init__
- Whether the model has a custom
__init__
function. __pydantic_decorators__
- Metadata containing the decorators defined on the model.
This replaces
Model.__validators__
andModel.__root_validators__
from Pydantic V1. __pydantic_generic_metadata__
- Metadata for generic models; contains data used for a similar purpose to args, origin, parameters in typing-module generics. May eventually be replaced by these.
__pydantic_parent_namespace__
- Parent namespace of the model, used for automatic rebuilding of models.
__pydantic_post_init__
- The name of the post-init method for the model, if defined.
__pydantic_root_model__
- Whether the model is a [
RootModel
][pydantic.root_model.RootModel]. __pydantic_serializer__
- The
pydantic-core
SchemaSerializer
used to dump instances of the model. __pydantic_validator__
- The
pydantic-core
SchemaValidator
used to validate instances of the model. __pydantic_extra__
- A dictionary containing extra values, if [
extra
][pydantic.config.ConfigDict.extra] is set to'allow'
. __pydantic_fields_set__
- The names of fields explicitly set during instantiation.
__pydantic_private__
- Values of private attributes set on the model instance.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError
][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.self
is explicitly positional-only to allowself
as a field name.Expand source code
class TaskDetails(BaseModel): description: str expected_output: str
Ancestors
- pydantic.main.BaseModel
Class variables
var description : str
var expected_output : str
var model_computed_fields
var model_config
var model_fields
class TeamStructure (**data: Any)
-
Usage docs: https://docs.pydantic.dev/2.9/concepts/models/
A base class for creating Pydantic models.
Attributes
__class_vars__
- The names of the class variables defined on the model.
__private_attributes__
- Metadata about the private attributes of the model.
__signature__
- The synthesized
__init__
[Signature
][inspect.Signature] of the model. __pydantic_complete__
- Whether model building is completed, or if there are still undefined fields.
__pydantic_core_schema__
- The core schema of the model.
__pydantic_custom_init__
- Whether the model has a custom
__init__
function. __pydantic_decorators__
- Metadata containing the decorators defined on the model.
This replaces
Model.__validators__
andModel.__root_validators__
from Pydantic V1. __pydantic_generic_metadata__
- Metadata for generic models; contains data used for a similar purpose to args, origin, parameters in typing-module generics. May eventually be replaced by these.
__pydantic_parent_namespace__
- Parent namespace of the model, used for automatic rebuilding of models.
__pydantic_post_init__
- The name of the post-init method for the model, if defined.
__pydantic_root_model__
- Whether the model is a [
RootModel
][pydantic.root_model.RootModel]. __pydantic_serializer__
- The
pydantic-core
SchemaSerializer
used to dump instances of the model. __pydantic_validator__
- The
pydantic-core
SchemaValidator
used to validate instances of the model. __pydantic_extra__
- A dictionary containing extra values, if [
extra
][pydantic.config.ConfigDict.extra] is set to'allow'
. __pydantic_fields_set__
- The names of fields explicitly set during instantiation.
__pydantic_private__
- Values of private attributes set on the model instance.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError
][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.self
is explicitly positional-only to allowself
as a field name.Expand source code
class TeamStructure(BaseModel): roles: Dict[str, RoleDetails]
Ancestors
- pydantic.main.BaseModel
Class variables
var model_computed_fields
var model_config
var model_fields
var roles : Dict[str, RoleDetails]