refine code. remove useless aio session, move lc parser to utils

This commit is contained in:
geekan 2023-07-04 23:50:08 +08:00
parent e5b9633c62
commit bcc29690e1
6 changed files with 36 additions and 96 deletions

View file

@ -6,14 +6,15 @@
@File : common.py
"""
import os
import re
import ast
import subprocess
import inspect
from pathlib import Path
import re
from metagpt.const import PROJECT_ROOT, TMP
from typing import Union
from metagpt.logs import logger
from langchain.schema import AgentAction, AgentFinish, OutputParserException
FINAL_ANSWER_ACTION = "Final Answer:"
def check_cmd_exists(command) -> int:
@ -124,3 +125,33 @@ def print_members(module, indent=0):
print(f'{prefix}Function: {name}')
elif inspect.ismethod(obj):
print(f'{prefix}Method: {name}')
class BasicParser:
def parse(self, text: str) -> Union[AgentAction, AgentFinish]:
if FINAL_ANSWER_ACTION in text:
return AgentFinish(
{"output": text.split(FINAL_ANSWER_ACTION)[-1].strip()}, text
)
# \s matches against tab/newline/whitespace
regex = (
r"Action\s*\d*\s*:[\s]*(.*?)[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)"
)
match = re.search(regex, text, re.DOTALL)
if not match:
raise OutputParserException(f"Could not parse LLM output: `{text}`")
action = match.group(1).strip()
action_input = match.group(2)
return AgentAction(action, action_input.strip(" ").strip('"'), text)
if __name__ == '__main__':
parser = BasicParser()
action_sample = "I need to calculate the 0.23 power of Elon Musk's current age.\nAction: Calculator\nAction Input: 49 raised to the 0.23 power"
final_answer_sample = "I now know the answer to the question.\nFinal Answer: 2.447626228522259"
rsp = parser.parse(action_sample)
logger.info(rsp)
rsp = parser.parse(final_answer_sample)
logger.info(rsp)

View file

@ -1,29 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2023/5/7 16:43
@Author : alexanderwu
@File : custom_aio_session.py
"""
import ssl
import aiohttp
import openai
class CustomAioSession:
async def __aenter__(self):
"""暂时使用自签署的ssl先忽略验证问题"""
# ssl_context = ssl.create_default_context()
# ssl_context.check_hostname = False
# ssl_context.verify_mode = ssl.CERT_NONE
headers = {"Accept-Encoding": "identity"} # Disable gzip encoding
custom_session = aiohttp.ClientSession(headers=headers)
openai.aiosession.set(custom_session)
return custom_session
async def __aexit__(self, exc_type, exc_val, exc_tb):
session = openai.aiosession.get()
if session:
await session.close()
openai.aiosession.set(None)