From 7556607f89dededd87f29dcaca5d9b21170dee26 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Thu, 26 Sep 2024 05:09:21 +0000 Subject: [PATCH] Finish prototype --- main.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..3995f2a --- /dev/null +++ b/main.py @@ -0,0 +1,86 @@ +import os, logging +DEBUG = os.environ.get('DEBUG') +logging.basicConfig( + format='[%(asctime)s] %(levelname)s %(module)s/%(funcName)s - %(message)s', + level=logging.DEBUG if DEBUG else logging.INFO) + +import requests +import subprocess + +LLAMA_URL = 'http://10.55.0.105:11434/api/generate' +NOTES_DIR = '/home/tanner/notes-git/notes' +#NOTES_DIR = '/home/tanner/' + +def llama(prompt): + data = dict(model='llama3.1', prompt=prompt, stream=False) + r = requests.post(LLAMA_URL, json=data, timeout=10) + r = r.json() + return r['response'] + +def git_diff(): + result = subprocess.run(['git', 'diff', '--cached', '-U0'], stdout=subprocess.PIPE, cwd=NOTES_DIR) + diff = result.stdout.decode() + + if diff: + logging.info('Analyzing diff:\n%s', diff) + + return diff + +def git_add(): + result = subprocess.run(['git', 'add', '-A'], stdout=subprocess.PIPE, cwd=NOTES_DIR) + +def git_commit(message): + result = subprocess.run(['git', 'commit', '-m', message], stdout=subprocess.PIPE, cwd=NOTES_DIR) + return result.stdout.decode() + + +def generate_message(diff): + prompt = ''' +Write a ONE LINE git commit message for the following diff. +Respond with only the commit message. +Do not include quotes. +Do not include file extensions. +DO NOT just say "Update notes", "Add new notes", "Refactor notes". +Tersely summarize how each note changed. +Write in imperitive tense. +\n\n==============\n\n''' + + prompt += diff + + message = llama(prompt) + + logging.info('Generated message: %s', message) + + if '.md' in message.lower(): + logging.info(' Message contains .md extension, aborting') + return False + elif 'notes/' in message.lower(): + logging.info(' Message contains notes directory, aborting') + return False + + return message + + + +def main(): + git_add() # add so we can diff new files + + diff = git_diff() + + if not diff: + logging.info('No diff, exiting.') + exit(0) + + for _ in range(5): + message = generate_message(diff) + if message: + break + else: # for loop never broke + logging.info('Unable to generate acceptable message, exiting.') + exit(1) + + git_commit(message) + + +if __name__ == '__main__': + main()