llmll's picture
Upload folder using huggingface_hub
02c783d verified
from agents.Base import SequentialBaseAgent, BaseAgent
from utils.utils import clear_code
from prompts import prompt_for_reflection
from memories.Memory import ReflexionMemory
from models.Base import BaseModel
class Reflexion(SequentialBaseAgent):
def __init__(self, model: BaseModel, dataset):
self.model = model
self.dataset = dataset
self.memories = self.memory_init()
def memory_init(self):
return [ReflexionMemory(ps) for ps in self.dataset.problem_states]
def run_single_pass(self, mem: ReflexionMemory, verbose=False):
if mem.ps.pass_call:
return
# generate solution
text = mem.ps.instruction
if mem.ps.solution:
text += f"\nPrevious attempt implementation:{mem.ps.solution}"
if mem.err_msg:
text += f"\nTest messages for previous attempt:{mem.err_msg}"
if mem.reflection:
text += f"\nReflection on previous attempt:{mem.reflection}"
text += "Please output the codes only without explanation, which we can run directly."
msg = [
{"role": "user", "content": text},
]
response = self.model.generate(msg)
mem.ps.solution = clear_code(response)
# run script on gpu
is_pass, err_msg = self.dataset.run_single_call(mem.ps)
# generate reflection
if not is_pass:
mem.err_msg = err_msg
reflect_txt = prompt_for_reflection.prompt.format(
problem=mem.ps.instruction,
solution=mem.ps.solution,
test_result=err_msg
)
reflect_msg = [
{
"role": "user",
"content": reflect_txt
}
]
mem.reflection = self.model.generate(reflect_msg)
# else:
# mem.ps.pass_call = True
return