from pathlib import Path import subprocess import sys # Make sure we can import from root/src ROOT_DIR = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT_DIR)) from src.llm_client import prompt_llm # File paths (relative to project root) prompt_base = ROOT_DIR / "prompts" / "base_instruction.txt" prompt_examples = ROOT_DIR / "prompts" / "example_code.txt" GEN_SCRIPT = ROOT_DIR / "generated" / "result_script.py" RUN_SCRIPT = ROOT_DIR / "src" / "run_freecad.py" # Snippet to adjust FreeCAD GUI view GUI_SNIPPET = """ import FreeCADGui FreeCADGui.activeDocument().activeView().viewAxometric() FreeCADGui.SendMsgToActiveView("ViewFit") """ def main(): # Step 1: Get user input user_input = input("Describe your FreeCAD part: ") # Step 2: Build prompt base_prompt = prompt_base.read_text(encoding="utf-8").strip() example_prompt = prompt_examples.read_text(encoding="utf-8").strip() full_prompt = f"{base_prompt}\n\nExamples:\n{example_prompt}\n\nUser instruction: {user_input.strip()}" # Step 3: Get response from LLM generated_code = prompt_llm(full_prompt) # Step 4: Clean up ```python code blocks if any if generated_code.startswith("```"): generated_code = generated_code.strip("`\n ") if generated_code.lower().startswith("python"): generated_code = generated_code[len("python"):].lstrip() # Step 5: Append GUI snippet for viewing generated_code += "\n\n" + GUI_SNIPPET # Step 6: Save to script file GEN_SCRIPT.write_text(generated_code, encoding="utf-8") print(f"\n Code generated and written to {GEN_SCRIPT}")