Redécoupage des fichiers et sortie des prompts dans leurs propre fichiers pour ne pas tout mélanger ensemble.

On garde malgrès tout les promps à coté des parseurs car ils évoluent généralement ensemble.
This commit is contained in:
2026-06-15 10:16:01 +02:00
parent 84025911f8
commit 1fb4563557
22 changed files with 525 additions and 435 deletions

View File

@@ -6,8 +6,9 @@ from pydantic import BaseModel, Field
from app.api.deps import get_generate_page_use_case, get_llm_provider
from app.application.generate_page import GeneratePageUseCase
from app.application.prompts import conversation_title as title_prompts
from app.core.config import Settings, get_settings
from app.core.language import get_user_language, language_name
from app.core.language import get_user_language
from app.domain.models import PageGenerationContext
from app.domain.ports import LLMProvider, LLMProviderError
@@ -103,20 +104,6 @@ class SummarizeTitleResponseDTO(BaseModel):
title: str
# Titre de repli (LLM injoignable / réponse vide), localisé selon la langue UI.
_TITLE_FALLBACK = {"fr": "Nouvelle conversation", "en": "New conversation"}
def _title_system_prompt(language: str) -> str:
"""Consigne d'auto-titre, avec la langue du titre pilotée par l'utilisateur."""
return (
"Tu generes un titre court (4 a 7 mots max) qui resume le sujet de la "
"conversation ci-dessous. Reponds UNIQUEMENT par le titre, sans guillemets, "
"sans ponctuation finale, sans prefixe type 'Titre :'. Le titre doit etre "
f"en {language_name(language)} et capturer le sujet metier (pas 'Conversation IA')."
)
@router.post("/summarize/conversation-title", response_model=SummarizeTitleResponseDTO)
async def summarize_conversation_title(
body: SummarizeTitleRequestDTO,
@@ -132,7 +119,7 @@ async def summarize_conversation_title(
raise HTTPException(status_code=422, detail="Au moins un message requis")
transcript = "\n".join(f"{m.role.upper()}: {m.content}" for m in body.messages[:6])
prompt = f"{_title_system_prompt(language)}\n\nConversation :\n{transcript}\n\nTitre :"
prompt = f"{title_prompts.title_system_prompt(language)}\n\nConversation :\n{transcript}\n\nTitre :"
try:
raw = await llm.generate(prompt)
except LLMProviderError as exc:
@@ -142,5 +129,5 @@ async def summarize_conversation_title(
if len(title) > 80:
title = title[:80].rstrip()
if not title:
title = _TITLE_FALLBACK.get(language, _TITLE_FALLBACK["fr"])
title = title_prompts.TITLE_FALLBACK.get(language, title_prompts.TITLE_FALLBACK["fr"])
return SummarizeTitleResponseDTO(title=title)