Orami01's picture
Upload 274 files
9c48ae2
raw
history blame
2.53 kB
#!/usr/bin/env python
# coding: utf-8
"""
@Time : 2023/5/11 14:43
@Author : alexanderwu
@From : https://github.com/geekan/MetaGPT/blob/main/metagpt/actions/action.py
"""
from abc import ABC
from typing import Optional
from tenacity import retry, stop_after_attempt, wait_fixed
from .action_output import ActionOutput
from autoagents.system.llm import LLM
from autoagents.system.utils.common import OutputParser
from autoagents.system.logs import logger
class Action(ABC):
def __init__(self, name: str = '', context=None, llm: LLM = None, serpapi_api_key=None):
self.name: str = name
# if llm is None:
# llm = LLM(proxy, api_key)
self.llm = llm
self.context = context
self.prefix = ""
self.profile = ""
self.desc = ""
self.content = ""
self.serpapi_api_key = serpapi_api_key
self.instruct_content = None
def set_prefix(self, prefix, profile, proxy, api_key, serpapi_api_key):
"""Set prefix for later usage"""
self.prefix = prefix
self.profile = profile
self.llm = LLM(proxy, api_key)
self.serpapi_api_key = serpapi_api_key
def __str__(self):
return self.__class__.__name__
def __repr__(self):
return self.__str__()
async def _aask(self, prompt: str, system_msgs: Optional[list[str]] = None) -> str:
"""Append default prefix"""
if not system_msgs:
system_msgs = []
system_msgs.append(self.prefix)
return await self.llm.aask(prompt, system_msgs)
@retry(stop=stop_after_attempt(2), wait=wait_fixed(1))
async def _aask_v1(self, prompt: str, output_class_name: str,
output_data_mapping: dict,
system_msgs: Optional[list[str]] = None) -> ActionOutput:
"""Append default prefix"""
if not system_msgs:
system_msgs = []
system_msgs.append(self.prefix)
content = await self.llm.aask(prompt, system_msgs)
logger.debug(content)
output_class = ActionOutput.create_model_class(output_class_name, output_data_mapping)
parsed_data = OutputParser.parse_data_with_mapping(content, output_data_mapping)
logger.debug(parsed_data)
instruct_content = output_class(**parsed_data)
return ActionOutput(content, instruct_content)
async def run(self, *args, **kwargs):
"""Run action"""
raise NotImplementedError("The run method should be implemented in a subclass.")