diff --git a/coder.py b/coder.py index 2c15ceb7b..06632e68b 100755 --- a/coder.py +++ b/coder.py @@ -18,10 +18,8 @@ openai.api_key = os.getenv("OPENAI_API_KEY") prompt_webdev = ''' I want you to act as a web development expert. -I want you to answer only with code. -Make the requested change to the provided code and output the changed code. -MAKE NO OTHER CHANGES! -Do not provide explanations! +You are to carefully study the provided code and follow the user instructions. +Be detail oriented, explicit and thorough in following user instructions. ''' class Chat: @@ -33,8 +31,20 @@ class Chat: def request(self, prompt): self.request_prompt = prompt - def run(self): - prompt = self.request_prompt + '\n###\n' + def plan(self): + prompt = ''' +Briefly describe all the code changes needed to complete the user request. +Think carefully about the code and the request! +Just describe ALL the changes needed to complete the request. +Just describe the changes, don't output code for them. +Be thorough. Describe ALL the changes needed to complete the request. +Only describe changes related to the request. +Don't output the changed code! +Just briefly describe the changes. + +Request: +''' + prompt += self.request_prompt + '\n###\n' for fname in self.fnames: prompt += '\n' @@ -43,36 +53,70 @@ class Chat: prompt += fname.read_text() prompt += '\n```\n' - messages = [ + ### + #print(self.system_prompt) + #print(prompt) + #sys.exit() + + self.messages = [ dict(role = 'system', content = self.system_prompt), dict(role = 'user', content = prompt), ] + self.plan = self.send(self.messages) + self.messages.append(dict(role = 'assistant', content = self.plan)) + def send(self, messages): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages, - stream = True + temperature=0, + stream = True, ) + resp = [] for chunk in completion: try: text = chunk.choices[0].delta.content + resp.append(text) except AttributeError: continue sys.stdout.write(text) sys.stdout.flush() + print() + print('='*40) + + resp = ''.join(resp) + return resp + + def update_files(self): + for fname in self.fnames: + self.update_file(fname) + + def update_file(self, fname): + messages = list(self.messages) + messages.append( + dict(role = 'user', + content = f''' +Make the requested changes to {fname.name} and output the changed code. +MAKE NO OTHER CHANGES! +JUST OUTPUT CODE. +NO EXPLANATIONS. +''' + )) + new_content = chat.send(messages) + fname.write_text(new_content) chat = Chat() chat.system(prompt_webdev) -chat.request(''' -Replace *ALL* the speaker icons with a speech bubble icon. -''') - dname = Path('../easy-chat') chat.file(dname / 'index.html') -chat.file(dname / 'chat.js') chat.file(dname / 'chat.css') +chat.file(dname / 'chat.js') -chat.run() +chat.request('Change ALL the speaker icons to speech bubble icons.') + +chat.plan() + +chat.update_files()