mvi-ai-engine / generation /responder.py
Musombi's picture
Update generation/responder.py
8daf6f0
# responder.py
import os
class Responder:
"""
Converts structured reasoning output from mvi_ai_full.py
into a human-facing response.
"""
SUPPORTED_LANGUAGES = {
"python": "generated.py",
"javascript": "generated.js",
"java": "Generated.java",
"cpp": "generated.cpp",
"c": "generated.c",
"csharp": "generated.cs",
"go": "generated.go",
"rust": "generated.rs",
"php": "generated.php",
"ruby": "generated.rb",
"swift": "generated.swift",
"kotlin": "generated.kt",
"r": "generated.R",
"matlab": "generated.m",
"sql": "generated.sql",
"bash": "generated.sh",
"assembly": "generated.asm"
}
# ---------------------------------------------------
# Code Utilities
# ---------------------------------------------------
def detect_language(self, code_text: str):
code_lower = code_text.lower()
for lang, fname in self.SUPPORTED_LANGUAGES.items():
if lang == "python" and (
"def " in code_lower or "import " in code_lower or "print(" in code_lower
):
return lang, fname
if lang == "javascript" and (
"console.log(" in code_lower or "function " in code_lower
):
return lang, fname
if lang == "java" and "public class " in code_lower:
return lang, fname
if lang in ["cpp", "c"] and (
"#include" in code_lower or "std::cout" in code_lower
):
return lang, fname
return None, None
def save_code_file(self, filename: str, code: str):
os.makedirs("generated_files", exist_ok=True)
path = os.path.join("generated_files", filename)
with open(path, "w", encoding="utf-8") as f:
f.write(code)
print(f"[INFO] File saved: {path}")
return path
# ---------------------------------------------------
# Main Generator (MATCHES mvi_ai_full.py)
# ---------------------------------------------------
def generate(
self,
text: str,
intent: str,
emotion: str,
strategy: str,
plan: dict,
persona: dict
):
"""
Accepts structured reasoning from core engine
and converts it into final user response.
"""
response_parts = []
# 1️⃣ Emotion Handling
if emotion == "negative":
response_parts.append("I understand this might feel frustrating.")
elif emotion == "positive":
response_parts.append("That’s great energy!")
else:
response_parts.append("Understood. Let’s work through this.")
# 2️⃣ Strategy Framing
if strategy == "explain":
response_parts.append("Here’s a clear explanation:")
elif strategy == "advise":
response_parts.append("Here’s what I suggest:")
elif strategy == "analyze":
response_parts.append("Let’s analyze this step by step:")
else:
response_parts.append("Here’s my response:")
if "introduce" in text.lower():
response_parts.append(
"Hello! I am MVI-AI, a multimodal AI system capable of analyzing text, images, audio, and video. "
"I combine reasoning, emotion awareness, and adaptive strategies to provide thoughtful responses."
)
# 3️⃣ Use template phrase as core message
if isinstance(plan, dict):
template_phrase = plan.get("template")
if template_phrase:
response_parts.append(template_phrase)
else:
response_parts.append(text)
# 4️⃣ Persona Influence (Optional Styling)
if persona and isinstance(persona, dict):
tone = persona.get("tone")
if tone:
response_parts.append(f"(Response tone adjusted to: {tone})")
# 5️⃣ Code Handling (if plan includes generated_code)
saved_path = None
lang = None
generated_code = plan.get("generated_code") if isinstance(plan, dict) else None
if generated_code:
lang, filename = self.detect_language(generated_code)
if lang:
saved_path = self.save_code_file(filename, generated_code)
response_parts.append(
f"I've generated a {lang.upper()} file for you: {filename}"
)
return {
"response_text": "\n".join(response_parts),
"intent": intent,
"emotion": emotion,
"strategy": strategy,
"file_created": saved_path,
"language": lang
}