Merge pull request #46 from shivenmian/u/shivenmian/teachimprove

nit: add "task complete" btn to Teach UI
pull/47/head^2
killian 11 months ago committed by GitHub
commit b034e35537
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -1,9 +1,7 @@
from datetime import datetime from datetime import datetime
from .utils.logs import setup_logging, logger from .utils.logs import setup_logging, logger
import tkinter as tk
import tkinter.simpledialog
from interpreter import interpreter from interpreter import interpreter
from tkinter import messagebox from tkinter import messagebox, Button, simpledialog, Tk, Label, Frame, LEFT, ACTIVE
from ..utils.accumulator import Accumulator from ..utils.accumulator import Accumulator
import time import time
import os import os
@ -17,6 +15,39 @@ class Skill:
self.steps = [] self.steps = []
self.code = "" self.code = ""
class StepCheckDialog(simpledialog.Dialog):
def body(self, master):
self.title("Step Check") # Set the title of the dialog window
description = "Did I do this step correctly?" # Add window description
Label(master, text=description).pack() # Display window description
def buttonbox(self):
box = Frame(self)
Button(box, text="Yes", width=10, command=self.yes_action, default=ACTIVE).pack(side=LEFT, padx=5, pady=5)
Button(box, text="No", width=10, command=self.no_action).pack(side=LEFT, padx=5, pady=5)
Button(box, text="Task Complete", width=10, command=self.task_complete_action).pack(side=LEFT, padx=5, pady=5)
self.bind("<Return>", self.yes_action)
self.bind("<Escape>", self.no_action)
box.pack()
def yes_action(self, event=None):
self.result = "Yes"
self.destroy()
def no_action(self, event=None):
self.result = "No"
self.destroy()
def task_complete_action(self, event=None):
self.result = "Task Complete"
self.destroy()
def done(self, result):
self.result = result
self.destroy()
def to_camel_case(text): def to_camel_case(text):
words = text.split() words = text.split()
camel_case_string = words[0].lower() + ''.join(word.title() for word in words[1:]) camel_case_string = words[0].lower() + ''.join(word.title() for word in words[1:])
@ -36,34 +67,38 @@ def generate_python_steps(function_name, steps):
return code_string return code_string
def teach(): def teach():
root = tk.Tk() root = Tk()
root.withdraw() root.withdraw()
skill_name = simpledialog.askstring("Skill Name", "Please enter the name for the skill:", parent=root)
skill_name = tkinter.simpledialog.askstring("Skill Name", "Please enter the name for the skill:") if skill_name:
skill = Skill(skill_name) skill = Skill(skill_name)
while True: while True:
step = tkinter.simpledialog.askstring("Next Step", "Enter the next step (or 'end' to finish): ") step = simpledialog.askstring("Next Step", "Enter the next step (or 'end' to finish): ", parent=root)
logger.info(f"Performing step: {step}") if step is None or step == "end":
if step == "end": break
break elif step.strip() == "":
continue
chunk_code = "" logger.info(f"Performing step: {step}")
interpreter.computer.languages = [l for l in interpreter.computer.languages if l.name.lower() == "python"] chunk_code = ""
interpreter.force_task_completion = True interpreter.computer.languages = [l for l in interpreter.computer.languages if l.name.lower() == "python"]
for chunk in interpreter.chat(step, stream=True, display=False): interpreter.force_task_completion = True
if "format" in chunk and chunk["format"] == "execution": for chunk in interpreter.chat(step, stream=True, display=False):
content = chunk["content"] if "format" in chunk and chunk["format"] == "execution":
language = content["format"] content = chunk["content"]
code = content["content"] language = content["format"]
chunk_code += code code = content["content"]
interpreter.computer.run(code, language) chunk_code += code
time.sleep(0.05) interpreter.computer.run(code, language)
accumulator.accumulate(chunk) time.sleep(0.05)
accumulator.accumulate(chunk)
isCorrect = messagebox.askyesno("To Proceed?", "Did I do this step right?")
if isCorrect: stepCheckDialog = StepCheckDialog(root)
skill.steps.append(step) stepCheckResult = stepCheckDialog.result
skill.code += chunk_code if stepCheckResult == "Yes" or stepCheckResult == "Task Complete":
skill.steps.append(step)
skill.code += chunk_code
if stepCheckResult == "Task Complete":
break
# Uncomment this incase you want steps instead of code # Uncomment this incase you want steps instead of code
#python_code = generate_python_steps(skill.skill_name, skill.steps) #python_code = generate_python_steps(skill.skill_name, skill.steps)
@ -71,5 +106,6 @@ def teach():
python_code = generate_python_code(skill.skill_name, skill.code) python_code = generate_python_code(skill.skill_name, skill.code)
SKILLS_DIR = os.path.dirname(__file__) + "/skills" SKILLS_DIR = os.path.dirname(__file__) + "/skills"
filename = os.path.join(SKILLS_DIR, f"{skill.skill_name.replace(' ', '_')}.py") filename = os.path.join(SKILLS_DIR, f"{skill.skill_name.replace(' ', '_')}.py")
logger.info(f"Saving skill to: {filename}")
with open(filename, "w") as file: with open(filename, "w") as file:
file.write(python_code) file.write(python_code)

Loading…
Cancel
Save