ams-core-api / engines /content_engine.py
ONYX AI
Centralize AI client configuration
b3a9019
Raw
History Blame Contribute Delete
5.13 kB
import logging
from core.ai_client import chat_completion_text, get_ai_settings
logger = logging.getLogger("ONYX")
class ContentEngine:
def __init__(self):
self.settings = get_ai_settings()
def _call_openai(
self,
system_prompt: str,
user_prompt: str,
temperature: float = 0.5,
max_tokens: int = 220
):
return chat_completion_text(
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt},
],
model=self.settings.text_model,
temperature=temperature,
max_tokens=max_tokens,
engine_name="ContentEngine",
)
def chat(self, message: str) -> str:
system_prompt = """
Tu es Onyx, un assistant intelligent naturel.
Règles :
- Réponds uniquement en français.
- Réponse claire, directe et utile.
- Ton humain.
- Pas d'histoire.
- Pas de narration cinématique.
- Pas d'invention inutile.
- Si la question est simple, réponds simplement.
"""
user_prompt = f"""
Réponds à ce message de manière utile et naturelle :
{message}
"""
result = self._call_openai(
system_prompt=system_prompt,
user_prompt=user_prompt,
temperature=0.5,
max_tokens=180
)
return result or "Je n’ai pas pu générer une réponse claire."
def business(self, message: str) -> str:
system_prompt = """
Tu es Onyx, un assistant business et marketing.
Règles :
- Réponds uniquement en français.
- Ne raconte pas d'histoire.
- Ne crée pas de scènes narratives.
- Donne une réponse concrète, utile et professionnelle.
- Va droit au but.
- Structure en 3 à 5 points maximum si utile.
- Donne des actions simples, réalistes et directement applicables.
"""
user_prompt = f"""
Question business :
{message}
"""
result = self._call_openai(
system_prompt=system_prompt,
user_prompt=user_prompt,
temperature=0.4,
max_tokens=260
)
return result or "Je n’ai pas pu générer une réponse business."
def script(self, message: str) -> str:
system_prompt = """
Tu es Onyx, un assistant expert en script court et viral.
Règles :
- Réponds uniquement en français.
- Crée un script court.
- Format très visuel et accrocheur.
- Style moderne.
- Impact rapide.
"""
user_prompt = f"""
Crée un script court à partir de cette demande :
{message}
"""
result = self._call_openai(
system_prompt=system_prompt,
user_prompt=user_prompt,
temperature=0.8,
max_tokens=240
)
return result or "Je n’ai pas pu générer de script."
def latest_info_guard(self, message: str) -> str:
return (
"Je ne peux pas garantir une information à jour en temps réel dans ce mode. "
"Pour les dernières sorties, dates précises ou actualités récentes, il faut utiliser une source web en direct."
)
def generate(self, message=None, theme=None, vision_description=None):
try:
if message:
msg = message.lower()
if any(k in msg for k in [
"dernière sortie", "derniere sortie", "à jour", "a jour",
"actualité", "actualite", "latest", "news"
]):
return {
"mode": "latest_info",
"script": self.latest_info_guard(message),
"image": None
}
if any(k in msg for k in [
"business", "vente", "marketing", "client", "rentable",
"attirer plus de clients", "magasin", "réparation téléphone",
"reparation telephone"
]):
return {
"mode": "business",
"script": self.business(message),
"image": None
}
if any(k in msg for k in ["script", "tiktok", "short", "hook"]):
return {
"mode": "script",
"script": self.script(message),
"image": None
}
return {
"mode": "chat",
"script": self.chat(message),
"image": None
}
if theme:
return {
"mode": "script",
"script": self.script(theme),
"image": None
}
return {
"mode": "chat",
"script": "Je suis prêt.",
"image": None
}
except Exception as e:
logger.error(f"ContentEngine generate error: {e}")
return {
"mode": "error",
"script": "Erreur génération.",
"image": None
}