Place your prompt in the ./prompts folder.
Install python dependencies:
pip install -r requirements.txtUsage:
python copilot.py instruction.md| import sys | |
| from utils import read_file_to_string, write_file, parse_go_code_snippets | |
| from llm import ask_together | |
| from prompt_toolkit import prompt as get_input | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| messages = [] | |
| def reset_messages(): | |
| prompt = read_file_to_string("./prompts/module_generator_prompt.md") | |
| messages.append({"role": "system", "content": prompt}) | |
| def ask(question): | |
| messages.append({"role": "user", "content": question}) | |
| response = ask_together(messages) | |
| messages.append({"role": "assistant", "content": response}) | |
| return response | |
| reset_messages() | |
| args = sys.argv[1:] | |
| if len(args) > 0: | |
| prompt_file_path = args[0] | |
| output = ask(read_file_to_string(prompt_file_path)) | |
| write_file("example_output_prompt.md", output.strip()) | |
| print("Output written to example_output_prompt.md") | |
| text = read_file_to_string("example_output_prompt.md") | |
| code_snippets = parse_go_code_snippets(text) | |
| for snippet in code_snippets: | |
| print(f"Create file: {snippet['file_path']}") | |
| write_file("../" +snippet['file_path'], snippet['code']) | |
| # print(snippet['code']) | |
| elif len(args) == 0: | |
| try: | |
| while True: | |
| user_input = get_input("Ask ai: ") | |
| if user_input.lower() == 'exit' or user_input.lower() == 'q': | |
| print("") | |
| break | |
| if user_input.lower() == 'reset': | |
| reset_messages() | |
| print("cleared...") | |
| continue | |
| if user_input == '': | |
| continue | |
| ask(question=user_input) | |
| except KeyboardInterrupt: | |
| print("") | |
| except: | |
| print("Unexpected error:", sys.exc_info()[0]) |
| import os | |
| from together import Together | |
| together_client = Together(api_key=os.environ.get("TOGETHER_API_KEY")) | |
| def ask_together(messages): | |
| response = together_client.chat.completions.create( | |
| messages=messages, | |
| # model="meta-llama/Llama-3-8b-chat-hf", | |
| model="mistralai/Mixtral-8x22B-Instruct-v0.1", | |
| stream=True, | |
| ) | |
| result = "" | |
| for chunk in response: | |
| result += chunk.choices[0].delta.content | |
| print(chunk.choices[0].delta.content, end="", flush=True) | |
| print("\n") | |
| return result |
| together | |
| prompt_toolkit | |
| python-dotenv | |
| pathlib |
| import re | |
| from pathlib import Path | |
| def create_file_if_not_exists(file_path): | |
| """ | |
| Creates a file with the given path if it doesn't already exist. | |
| Creates the necessary directories if they don't exist. | |
| Args: | |
| file_path (str): The path of the file to be created. | |
| Returns: | |
| bool: True if the file was created, False if the file already existed. | |
| """ | |
| path = Path(file_path) | |
| try: | |
| path.parent.mkdir(parents=True, exist_ok=True) | |
| path.touch(exist_ok=True) | |
| return True | |
| except Exception as e: | |
| print(f"Error creating file or directory: {e}") | |
| return False | |
| def read_file_to_string(file_path): | |
| """ | |
| Reads the contents of a file into a string. | |
| Args: | |
| file_path (str): The path to the file to be read. | |
| Returns: | |
| str: The contents of the file as a string. | |
| """ | |
| try: | |
| with open(file_path, "r") as file: | |
| file_contents = file.read() | |
| return file_contents | |
| except FileNotFoundError: | |
| print(f"Error: File '{file_path}' not found.") | |
| except Exception as e: | |
| print(f"Error: {e}") | |
| def write_file(file_path, data): | |
| create_file_if_not_exists(file_path) | |
| try: | |
| with open(file_path, 'a') as file: | |
| file.write(data) | |
| except IOError: | |
| print(f"An error occurred while writing to {file_path}.") | |
| def parse_go_code_snippets(text): | |
| pattern = r'\*\*(.+?):\*\*\s*```go(.*?)```' | |
| matches = re.findall(pattern, text, re.DOTALL) | |
| code_snippets = [] | |
| for match in matches: | |
| file_path, code = match | |
| code_snippets.append({ | |
| 'file_path': file_path.strip(), | |
| 'code': code.strip() | |
| }) | |
| return code_snippets |