import datetime import re import sys from io import StringIO from openai import InvalidRequestError from openai.error import RateLimitError, AuthenticationError from config.config import BUG_FOUND_MSG, AUTHORIZATION_ERROR_MESSAGE def run_chain(chain, inp, capture_hidden_text): output = "" hidden_text = None if capture_hidden_text: error_msg = None tmp = sys.stdout hidden_text_io = StringIO() sys.stdout = hidden_text_io try: output = chain.run(input=inp) except AuthenticationError as ae: error_msg = AUTHORIZATION_ERROR_MESSAGE + str(datetime.datetime.now()) + ". " + str(ae) print("error_msg", error_msg) except RateLimitError as rle: error_msg = "\n\nRateLimitError: " + str(rle) except ValueError as ve: error_msg = "\n\nValueError: " + str(ve) except InvalidRequestError as ire: error_msg = "\n\nInvalidRequestError: " + str(ire) except Exception as e: error_msg = "\n\n" + BUG_FOUND_MSG + ":\n\n" + str(e) sys.stdout = tmp hidden_text = hidden_text_io.getvalue() # remove escape characters from hidden_text hidden_text = re.sub(r'\x1b[^m]*m', '', hidden_text) # remove "Entering new AgentExecutor chain..." from hidden_text hidden_text = re.sub(r"Entering new AgentExecutor chain...\n", "", hidden_text) # remove "Finished chain." from hidden_text hidden_text = re.sub(r"Finished chain.", "", hidden_text) # Add newline after "Thought:" "Action:" "Observation:" "Input:" and "AI:" hidden_text = re.sub(r"Thought:", "\n\nThought:", hidden_text) hidden_text = re.sub(r"Action:", "\n\nAction:", hidden_text) hidden_text = re.sub(r"Observation:", "\n\nObservation:", hidden_text) hidden_text = re.sub(r"Input:", "\n\nInput:", hidden_text) hidden_text = re.sub(r"AI:", "\n\nAI:", hidden_text) if error_msg: hidden_text += error_msg print("hidden_text: ", hidden_text) else: try: output = chain.run(input=inp) except AuthenticationError as ae: output = AUTHORIZATION_ERROR_MESSAGE + str(datetime.datetime.now()) + ". " + str(ae) print("output", output) except RateLimitError as rle: output = "\n\nRateLimitError: " + str(rle) except ValueError as ve: output = "\n\nValueError: " + str(ve) except InvalidRequestError as ire: output = "\n\nInvalidRequestError: " + str(ire) except Exception as e: output = "\n\n" + BUG_FOUND_MSG + ":\n\n" + str(e) return output, hidden_text