This explorer agent use ReAct format to call tools
| 17 | 'What is the {name_for_human} API useful for? {description_for_model} Parameters: {parameters} {args_format}') |
| 18 | |
| 19 | class WebWalker(FnCallAgent): |
| 20 | """This explorer agent use ReAct format to call tools""" |
| 21 | |
| 22 | def __init__(self, |
| 23 | function_list: Optional[List[Union[str, Dict, BaseTool]]] = None, |
| 24 | llm: Optional[Union[Dict, BaseChatModel]] = None, |
| 25 | system_message: Optional[str] = DEFAULT_SYSTEM_MESSAGE, |
| 26 | name: Optional[str] = None, |
| 27 | description: Optional[str] = None, |
| 28 | files: Optional[List[str]] = None, |
| 29 | **kwargs): |
| 30 | super().__init__(function_list=function_list, |
| 31 | llm=llm, |
| 32 | system_message=system_message, |
| 33 | name=name, |
| 34 | description=description, |
| 35 | files=files, |
| 36 | **kwargs) |
| 37 | self.extra_generate_cfg = merge_generate_cfgs( |
| 38 | base_generate_cfg=self.extra_generate_cfg, |
| 39 | new_generate_cfg={'stop': ['Observation:', 'Observation:\n']}, |
| 40 | ) |
| 41 | self.client = OpenAI( |
| 42 | api_key=llm['api_key'], |
| 43 | base_url=llm['model_server'], |
| 44 | ) |
| 45 | self.llm_cfg = llm |
| 46 | self.momery = [] |
| 47 | |
| 48 | def observation_information_extraction(self, query, observation): |
| 49 | user_prompt = "- Query: {query}\n- Observation: {observation}".format(query=query, observation=observation) |
| 50 | messages = [ |
| 51 | {'role': 'system', 'content': STSTEM_CRITIIC_INFORMATION}, |
| 52 | {'role': 'user', 'content': user_prompt}] |
| 53 | max_retries = 10 |
| 54 | for attempt in range(max_retries): |
| 55 | try: |
| 56 | response = self.client.chat.completions.create( |
| 57 | model=self.llm_cfg['model'], |
| 58 | response_format={"type": "json_object"}, |
| 59 | messages=messages |
| 60 | ) |
| 61 | print(response.choices[0].message.content) |
| 62 | # response_content = json.loads(response.choices[0].message.content) |
| 63 | if "true" in response.choices[0].message.content: |
| 64 | try: |
| 65 | return json.loads(response.choices[0].message.content)["information"] |
| 66 | except: |
| 67 | return response.choices[0].message.content |
| 68 | else: |
| 69 | return None |
| 70 | except Exception as e: |
| 71 | print(e) |
| 72 | if attempt < max_retries - 1: |
| 73 | time.sleep(1 * (2 ** attempt)) # Exponential backoff |
| 74 | else: |
| 75 | raise e # Raise the exception if the last retry fails |
| 76 |