Spaces:
Running
Running
import os | |
tools_text = """code_interpreter: Call this tool to interact with the Code Interpreter API. | |
What is the Code Interpreter API useful for? | |
Code Interpreter is used to execute Python code to deal with the following tasks: | |
1. Solving mathematical problems, both quantitative and qualitative | |
2. Doing data analysis and visualization | |
3. Converting files between formats | |
Parameters: | |
```py | |
code | |
``` | |
Enclose the code within triple backticks (```) at the beginning and end of the code. | |
""" | |
REACT_PROMPT = """Answer the following questions as best you can. You have access to the following tools: | |
{tools_text} | |
Use the following format: | |
Question: the input question you must answer | |
Thought: you should always think about what to do | |
Action: the action to take, should be one of [{tools_name_text}] | |
Action Input: the input to the action | |
Observation: the result of the action | |
(this Thought/Action/Action Input/Observation can be repeated zero or more times) | |
Thought: I now know the final answer | |
Final Answer: the final answer to the original input question | |
Begin! | |
Question: {query}""" | |
fname_template = { | |
'zh': '文件{fname_str},', | |
'en_multi': 'Files {fname_str}. ', | |
'en': 'File {fname_str}. ', | |
} | |
class ReAct(object): | |
def __init__(self, query, lang='en', upload_file_paths=[]): | |
self.query = query | |
self.lang = lang | |
self.upload_file_paths = [ | |
f'`{os.path.basename(fname)}`' for fname in upload_file_paths | |
] | |
self.fname_template = fname_template | |
self.react_template = REACT_PROMPT | |
self.prompt = '' | |
def build_prompt(self): | |
query = self._format_upload_fname() + self.query | |
tools_text = self._build_tools_text() | |
tools_name_text = self._build_tools_name_text() | |
planning_prompt = self.react_template.format( | |
query=query, | |
tools_text=tools_text, | |
tools_name_text=tools_name_text) | |
self.prompt = planning_prompt | |
return planning_prompt | |
def _format_upload_fname(self): | |
prefix = '' | |
if self.upload_file_paths: | |
fname_str = ', '.join(self.upload_file_paths) | |
lang_key = 'en_multi' if self.lang == 'en' and len( | |
self.upload_file_paths) > 1 else self.lang | |
fname_template = self.fname_template[lang_key] | |
prefix = fname_template.format(fname_str=fname_str) | |
return prefix | |
def _build_tools_text(self): | |
return tools_text | |
def _build_tools_name_text(self): | |
return 'code_interpreter' | |
def build_observation(self, observation): | |
return f'\nObservation: {observation}\nThought:' | |
def get_stop_words_list(self): | |
return ['Observation:', 'Observation:\n'] | |