Spaces:
Runtime error
Runtime error
| from langchain.prompts import PromptTemplate | |
| from langchain.output_parsers import PydanticOutputParser | |
| from pydantic import BaseModel, Field | |
| from typing import List, Tuple | |
| import json | |
| from langchain.chat_models import ChatOpenAI | |
| # Modèle de sortie pour la détection des expressions "VOICI" et "DÉCOUVREZ" | |
| class ReformulationDetail(BaseModel): | |
| original: str = Field(..., description="Phrase originale contenant 'VOICI' ou 'DÉCOUVREZ'.") | |
| explanation: str = Field(..., description="Explication sur pourquoi l'expression alourdit la phrase.") | |
| reformulation_1: str = Field(..., description="Reformulation basée sur l'approche Anticipation/Intrigue.") | |
| reformulation_2: str = Field(..., description="Reformulation basée sur l'approche Conversationnel.") | |
| reformulation_3: str = Field(..., description="Reformulation basée sur l'approche Accompagnement doux.") | |
| def to_dict(self): | |
| return { | |
| "original": self.original, | |
| "explanation": self.explanation, | |
| "reformulation_1": self.reformulation_1, | |
| "reformulation_2": self.reformulation_2, | |
| "reformulation_3": self.reformulation_3, | |
| } | |
| class Summary(BaseModel): | |
| total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'VOICI' et 'DÉCOUVREZ'.") | |
| reformulations_provided: int = Field(..., description="Nombre de reformulations proposées.") | |
| def to_dict(self): | |
| return { | |
| "total_occurrences": self.total_occurrences, | |
| "reformulations_provided": self.reformulations_provided, | |
| } | |
| class DetectionResult(BaseModel): | |
| reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées pour chaque occurrence.") | |
| summary: Summary = Field(..., description="Résumé de la détection.") | |
| def to_dict(self): | |
| return { | |
| "reformulations": [reformulation.to_dict() for reformulation in self.reformulations], | |
| "summary": self.summary.to_dict() | |
| } | |
| # Création du template pour la détection de l'utilisation de "VOICI" et "DÉCOUVREZ" à la fin d'une introduction | |
| def voici_decouvrez_prompt_template(): | |
| return """ | |
| Tu es un éditeur de texte IA extrêmement performant et rigoureux. Ta tâche est d'analyser **précisément** le texte fourni pour détecter **toutes les occurrences** des expressions **"VOICI"** et **"DÉCOUVREZ"** situées **à la fin d'une introduction**. | |
| L'introduction , c'est le premier paragraphe. | |
| Pour chaque occurrence identifiée, tu dois obligatoirement : | |
| 1. **Citer exactement** la phrase originale contenant "VOICI" ou "DÉCOUVREZ". | |
| 2. **Expliquer brièvement et clairement** pourquoi l'utilisation de ce terme peut alourdir ou rendre la transition vers le contenu moins fluide. | |
| 3. **Proposer trois reformulations distinctes**, selon les approches suivantes : | |
| - **Anticipation/Intrigue** : Créer de l'attente ou de l'intrigue pour susciter l'intérêt du lecteur. | |
| - **Conversationnel** : Formuler la phrase de manière plus engageante et naturelle. | |
| - **Accompagnement doux** : Offrir une transition progressive et moins directive vers le contenu. | |
| ### Format attendu pour chaque occurrence : | |
| - **Original** : "[Phrase originale]" | |
| - **Explication** : "[Explication concise]" | |
| - **Reformulation 1 (Anticipation/Intrigue)** : "[Reformulation ici]" | |
| - **Reformulation 2 (Conversationnel)** : "[Reformulation ici]" | |
| - **Reformulation 3 (Accompagnement doux)** : "[Reformulation ici]" | |
| Le texte à analyser est le suivant : | |
| ```{text}``` | |
| Le format de la sortie doit être en JSON. | |
| ```{format_instruction}``` | |
| """ | |
| def detect_voici_decouvrez(text): | |
| # Création du modèle de sortie avec Pydantic | |
| output_parser = PydanticOutputParser(pydantic_object=DetectionResult) | |
| # Génération du prompt à partir du modèle | |
| gen_prompt_template = PromptTemplate( | |
| input_variables=["text"], | |
| template=voici_decouvrez_prompt_template(), | |
| partial_variables={'format_instruction': output_parser.get_format_instructions()} | |
| ) | |
| # Création du modèle de langage (avec LLM) | |
| llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="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") | |
| # Chaîne de traitement du prompt avec le modèle et le parseur | |
| llm_chain = gen_prompt_template | llm | output_parser | |
| # Appel du modèle avec le texte fourni | |
| result_dict = llm_chain.invoke({"text": text}).to_dict() | |
| # Conversion du résultat en JSON | |
| json_result = json.dumps(result_dict, indent=8, ensure_ascii=False) | |
| # Génération du prompt final | |
| final_prompt = gen_prompt_template.format(text=text) | |
| # Retour des résultats | |
| return { | |
| "result": json_result, | |
| "prompt": final_prompt | |
| } |