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}") | |