| import os | |
| import json | |
| import re | |
| from groq import Groq | |
| class NagaMLOpsAgent: | |
| def __init__( | |
| self, | |
| api_key: str = "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", | |
| model: str = "llama-3.3-70b-versatile" | |
| ): | |
| self.api_key = api_key | |
| self.primary_model = model | |
| self.fallback_models = [ | |
| "llama-3.3-70b-versatile", | |
| "llama-3.1-8b-instant", | |
| "deepseek-r1-distill-llama-70b", | |
| "mixtral-8x7b-32768" | |
| ] | |
| self.client = Groq(api_key=self.api_key) | |
| def diagnose_and_heal( | |
| self, | |
| script_code: str, | |
| execution_logs: str, | |
| telemetry: dict, | |
| fault_name: str = None | |
| ) -> dict: | |
| """ | |
| Sends error logs, broken python code, and telemetry context to Groq ultra-fast API. | |
| Returns a structured dictionary containing root cause diagnosis and executable patched code. | |
| """ | |
| system_prompt = ( | |
| "You are an expert Autonomous MLOps & AI Infrastructure Diagnostic Agent.\n" | |
| "Your task is to analyze failing machine learning pipelines, identify root causes, " | |
| "and generate production-grade, fully working Python code patches to fix the issue.\n\n" | |
| "CRITICAL INSTRUCTION: You MUST return your answer in valid JSON format matching this EXACT schema:\n" | |
| "{\n" | |
| ' "fault_category": "DATA_DRIFT | CODE_RUNTIME_ERROR | NAN_LOSS | OOM_SPIKE | MODEL_ACCURACY_DROP",\n' | |
| ' "severity": "CRITICAL | HIGH | MEDIUM",\n' | |
| ' "root_cause_analysis": "Detailed explanation of why the crash/degradation happened.",\n' | |
| ' "explanation_for_engineers": "Actionable summary for MLOps dashboard.",\n' | |
| ' "patch_code": "FULL valid Python script replacing the broken code completely without placeholder comments.",\n' | |
| ' "verification_checklist": ["Check 1", "Check 2"]\n' | |
| "}" | |
| ) | |
| user_content = ( | |
| f"=== REPORTED FAULT SCENARIO ===\n{fault_name or 'Auto-Detected Anomaly'}\n\n" | |
| f"=== PIPELINE TELEMETRY ===\n{json.dumps(telemetry, indent=2)}\n\n" | |
| f"=== BROKEN PIPELINE CODE ===\n```python\n{script_code}\n```\n\n" | |
| f"=== EXECUTION LOGS & STACKTRACE ===\n{execution_logs}\n\n" | |
| "Perform root cause analysis and produce the fixed `patch_code` Python script. " | |
| "Ensure the patch is self-contained, syntax-correct, and completely resolves the error." | |
| ) | |
| response_text = "" | |
| last_error = None | |
| models_to_try = [self.primary_model] + [m for m in self.fallback_models if m != self.primary_model] | |
| for m in models_to_try: | |
| try: | |
| completion = self.client.chat.completions.create( | |
| model=m, | |
| messages=[ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": user_content} | |
| ], | |
| temperature=0.1, | |
| response_format={"type": "json_object"} | |
| ) | |
| response_text = completion.choices[0].message.content.strip() | |
| if response_text: | |
| print(f"[AgentBrain] Super-fast Groq diagnosis generated using model: {m}") | |
| break | |
| except Exception as e: | |
| print(f"[AgentBrain] Model {m} failed: {e}. Trying next fallback...") | |
| last_error = e | |
| if not response_text: | |
| return self._generate_fallback_diagnosis(script_code, str(last_error)) | |
| return self._parse_agent_response(response_text, script_code) | |
| def _parse_agent_response(self, raw_text: str, original_code: str) -> dict: | |
| clean_text = raw_text | |
| if "```json" in clean_text: | |
| clean_text = clean_text.split("```json")[1].split("```")[0].strip() | |
| elif "```" in clean_text and clean_text.strip().startswith("```"): | |
| clean_text = clean_text.split("```")[1].split("```")[0].strip() | |
| try: | |
| parsed = json.loads(clean_text) | |
| patch = parsed.get("patch_code", original_code) | |
| if isinstance(patch, dict): | |
| patch = patch.get("code", patch.get("script", str(patch))) | |
| elif not isinstance(patch, str): | |
| patch = str(patch) | |
| if "```python" in patch: | |
| patch = patch.split("```python")[1].split("```")[0].strip() | |
| elif "```" in patch: | |
| patch = patch.split("```")[1].split("```")[0].strip() | |
| parsed["patch_code"] = str(patch) | |
| return parsed | |
| except Exception as json_err: | |
| print(f"[AgentBrain] JSON parsing failed: {json_err}. Extracting code via regex fallback...") | |
| code_match = re.search(r"```python(.*?)```", raw_text, re.DOTALL) | |
| patch_code = code_match.group(1).strip() if code_match else original_code | |
| return { | |
| "fault_category": "CODE_RUNTIME_ERROR", | |
| "severity": "HIGH", | |
| "root_cause_analysis": raw_text[:300] + "...", | |
| "explanation_for_engineers": "Agent generated fix. Extracted code patch successfully.", | |
| "patch_code": patch_code, | |
| "verification_checklist": ["Execute patched script", "Verify pipeline telemetry"] | |
| } | |
| def _generate_fallback_diagnosis(self, original_code: str, error_msg: str) -> dict: | |
| return { | |
| "fault_category": "CODE_RUNTIME_ERROR", | |
| "severity": "HIGH", | |
| "root_cause_analysis": f"Local Fallback Diagnosis: Pipeline exception detected ({error_msg}).", | |
| "explanation_for_engineers": "Network issue reaching LLM API. Initiated local safety patch.", | |
| "patch_code": original_code.replace("/ 0", "/ 1.0").replace("np.nan", "0.0"), | |
| "verification_checklist": ["Local syntax check", "Re-run safety sandbox"] | |
| } | |