Spaces:
Sleeping
Sleeping
| # pipeline.py | |
| import os | |
| from additional_function import get_llm | |
| from generator import generate_full_project, generate_django_model_prompt | |
| from spec_validator import generate_valid_json_spec | |
| from settings_generator import update_settings_py | |
| def run_pipeline( | |
| spec: dict, | |
| run_dir: str, | |
| llm_provider: str, | |
| api_key: str, | |
| log_callback=None, | |
| progress_callback=None, | |
| retries: int = 3, | |
| ): | |
| """ | |
| Orchestrates full backend generation pipeline. | |
| """ | |
| def log(msg: str): | |
| if log_callback: | |
| log_callback(msg) | |
| def progress(val: int): | |
| if progress_callback: | |
| progress_callback(val) | |
| # ------------------------------------------------- | |
| # STEP 0 β Init | |
| # ------------------------------------------------- | |
| progress(0) | |
| log("π Starting generation pipeline") | |
| # ------------------------------------------------- | |
| # STEP 1 β Create LLM | |
| # ------------------------------------------------- | |
| try: | |
| progress(10) | |
| log("π Initializing LLM") | |
| llm = get_llm(llm_provider, api_key) | |
| log("β LLM initialized successfully") | |
| except Exception as e: | |
| raise RuntimeError("LLM initialization failed") from e | |
| # ------------------------------------------------- | |
| # STEP 2 β Build user prompt | |
| # ------------------------------------------------- | |
| try: | |
| progress(25) | |
| log("π§ Preparing user prompt") | |
| if spec.get("use_ai_models", True): | |
| log("Using AI to generate models") | |
| user_prompt = generate_django_model_prompt( | |
| project_name=spec.get("project_name"), | |
| description=spec.get("description"), | |
| llm=llm | |
| ) | |
| else: | |
| log("Using manually defined models") | |
| model_summary = [] | |
| for model_name, model_def in spec["apps"]["core"]["models"].items(): | |
| fields = ", ".join(model_def["fields"].keys()) | |
| model_summary.append(f"{model_name}({fields})") | |
| user_prompt = f""" | |
| Project Name: {spec.get("project_name")} | |
| Description: {spec.get("description")} | |
| Models: | |
| {', '.join(model_summary)} | |
| """ | |
| log("β User prompt prepared") | |
| except Exception as e: | |
| raise RuntimeError("User prompt generation failed") from e | |
| # ------------------------------------------------- | |
| # STEP 3 β Generate JSON Spec | |
| # ------------------------------------------------- | |
| try: | |
| progress(45) | |
| log("π Generating JSON specification") | |
| cleaned_spec = generate_valid_json_spec( | |
| user_prompt=user_prompt, | |
| llm=llm, | |
| retries=retries | |
| ) | |
| log("β JSON spec generated successfully") | |
| except Exception as e: | |
| raise RuntimeError("JSON spec generation failed") from e | |
| # ------------------------------------------------- | |
| # STEP 4 β Generate Django Project | |
| # ------------------------------------------------- | |
| try: | |
| progress(75) | |
| project_name = spec.get("project_name") | |
| log("π Generating Django project") | |
| generate_full_project( | |
| spec_json=cleaned_spec, | |
| output_dir=run_dir, | |
| llm=llm, | |
| project_name =project_name | |
| ) | |
| log("β Django project created") | |
| except Exception as e: | |
| log("β INTERNAL ERROR during Django project generation:") | |
| log(repr(e)) # <-- THIS IS CRITICAL | |
| raise RuntimeError("Django project generation failed") from e | |
| # ------------------------------------------------- | |
| # STEP 5 β Update settings.py | |
| # ------------------------------------------------- | |
| try: | |
| progress(90) | |
| log("β Updating Django settings") | |
| settings_path = os.path.join( | |
| run_dir, | |
| cleaned_spec["project_name"], | |
| cleaned_spec["project_name"], | |
| "settings.py" | |
| ) | |
| update_settings_py( | |
| settings_path=settings_path, | |
| db_spec=cleaned_spec.get("database", {}) | |
| ) | |
| log("β settings.py updated") | |
| except Exception as e: | |
| raise RuntimeError("Django settings update failed") from e | |
| # ------------------------------------------------- | |
| # DONE | |
| # ------------------------------------------------- | |
| progress(100) | |
| log("π Generation completed successfully") | |
| return run_dir | |