|
import json |
|
import os |
|
import sys |
|
import time |
|
import re |
|
from pathlib import Path |
|
from typing import List, Literal, Optional, Tuple, TypedDict, Dict |
|
|
|
prj_root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
|
sys.path.append(prj_root_path) |
|
|
|
import torch |
|
import transformers |
|
from transformers import LlamaForCausalLM, LlamaTokenizer |
|
|
|
import nbformat |
|
|
|
|
|
|
|
|
|
from utils.const import * |
|
from utils.cleaner import clean_error_msg |
|
from colorama import init, Fore, Style |
|
from rich.markdown import Markdown |
|
import base64 |
|
|
|
import openai |
|
from retrying import retry |
|
import logging |
|
from termcolor import colored |
|
from code_interpreter.JuypyterClient import JupyterNotebook |
|
|
|
|
|
class BaseCodeInterpreter: |
|
def __init__(self): |
|
self.dialog = [ |
|
{ |
|
"role": "system", |
|
"content": CODE_INTERPRETER_SYSTEM_PROMPT, |
|
}, |
|
|
|
|
|
] |
|
|
|
self.nb = JupyterNotebook() |
|
|
|
@staticmethod |
|
def extract_code_blocks(text: str): |
|
pattern = r"```(?:python\n)?(.*?)```" |
|
code_blocks = re.findall(pattern, text, re.DOTALL) |
|
return [block.strip() for block in code_blocks] |
|
|
|
@staticmethod |
|
def parse_last_answer(text: str) -> str: |
|
return text.split(E_INST)[-1] |
|
|
|
def execute_code_and_return_output(self, code_str: str): |
|
outputs, error_flag = self.nb.add_and_run(code_str) |
|
return outputs, error_flag |
|
|