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