#import openai import os import backoff import time import random import traceback #from openai.error import RateLimitError, APIError, ServiceUnavailableError, APIConnectionError #from .openai_utils import OutOfQuotaException, AccessTerminatedException #from .openai_utils import num_tokens_from_string, model2max_context from together import Together class Agent: def __init__(self, model_name: str, name: str, temperature: float, sleep_time: float=0) -> None: """Create an agent Args: model_name(str): model name name (str): name of this agent temperature (float): higher values make the output more random, while lower values make it more focused and deterministic sleep_time (float): sleep because of rate limits """ self.model_name = model_name self.name = name self.temperature = temperature self.memory_lst = [] self.sleep_time = sleep_time self.client = Together(api_key=os.environ.get('TOGETHER_API_KEY')) def query(self, messages: "list[dict]", max_tokens: int, temperature: float) -> str: """make a query Args: messages (list[dict]): chat history in turbo format max_tokens (int): max token in api call api_key (str): openai api key temperature (float): sampling temperature Raises: OutOfQuotaException: the apikey has out of quota AccessTerminatedException: the apikey has been ban Returns: str: the return msg """ time.sleep(self.sleep_time) try: #response = openai.ChatCompletion.create( # model=self.model_name, # messages=messages, # temperature=temperature, # max_tokens=max_tokens, # api_key=api_key, #) #gen = response['choices'][0]['message']['content'] response = self.client.chat.completions.create( model=self.model_name, messages=messages, max_tokens=512, temperature=0.7, top_p=0.7, top_k=50, repetition_penalty=1, stop=["<|im_start|>","<|im_end|>"], stream=False ) #print(response.choices[0].message.content) gen = response.choices[0].message.content # 去除字符串中的所有 ``` cleaned_text = gen.replace('```', '') return cleaned_text except Exception as e: print(f"An error occurred: {e}") traceback.print_exc() # 打印详细的错误堆栈信息 def set_meta_prompt(self, meta_prompt: str): """Set the meta_prompt Args: meta_prompt (str): the meta prompt """ self.memory_lst.append({"role": "system", "content": f"{meta_prompt}"}) def add_event(self, event: str): """Add an new event in the memory Args: event (str): string that describe the event. """ self.memory_lst.append({"role": "user", "content": f"{event}"}) def add_memory(self, memory: str): """Monologue in the memory Args: memory (str): string that generated by the model in the last round. """ self.memory_lst.append({"role": "assistant", "content": f"{memory}"}) print(f"----- {self.name} -----\n{memory}\n") def ask(self, temperature: float=None): """Query for answer Args: """ # query #num_context_token = sum([num_tokens_from_string(m["content"], self.model_name) for m in self.memory_lst]) #max_token = model2max_context - num_context_token return self.query(self.memory_lst, 100, temperature=temperature if temperature else self.temperature)