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 | |
| from langchain.chat_models import ChatOpenAI | |
| import json | |
| # Modèle de sortie (adapté pour la détection des formes du verbe "permettre" avec reformulations) | |
| class PermettreDetection(BaseModel): | |
| pattern: str = Field(..., description="Forme verbale du verbe 'permettre' détectée.") | |
| indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.") | |
| sentence: str = Field(..., description="Phrase complète où l'expression apparaît.") | |
| alternative_suggestions: List[str] = Field(..., description="Suggestions alternatives pour la reformulation de la phrase.") | |
| def to_dict(self): | |
| return { | |
| "pattern": self.pattern, | |
| "indices": self.indices, | |
| "sentence": self.sentence, | |
| "alternative_suggestions": self.alternative_suggestions | |
| } | |
| class Summary(BaseModel): | |
| total_patterns_detected: int = Field(..., description="Nombre total de formes du verbe 'permettre' détectées.") | |
| alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.") | |
| occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.") | |
| def to_dict(self): | |
| return { | |
| "total_patterns_detected": self.total_patterns_detected, | |
| "alternative_suggestions_provided": self.alternative_suggestions_provided, | |
| "occurrences": self.occurrences | |
| } | |
| class DetectionResult(BaseModel): | |
| patterns: List[PermettreDetection] = Field(..., description="Liste des formes verbales détectées.") | |
| summary: Summary = Field(..., description="Résumé de la détection.") | |
| def to_dict(self): | |
| return { | |
| "patterns": [pattern.to_dict() for pattern in self.patterns], | |
| "summary": self.summary.to_dict() | |
| } | |
| # Création du template pour la détection avec reformulations | |
| def permettre_prompt_template(): | |
| return """ | |
| Tu es un détecteur de texte AI très performant et précis. Ta mission est la suivante : | |
| - **Objectif :** Identifier toutes les formes conjuguées du verbe **"permettre"** dans le texte ci-dessous (ex : **"permet"**, **"permettra"**, **"permis"** en tant que verbe, etc.). | |
| - **Exclusions :** Ignore les cas où **"permis"** est utilisé comme **nom commun** (ex : **"permis de conduire"**, **"permis de construire"**, etc.). | |
| **Instructions supplémentaires :** | |
| - Analyse grammaticale : identifie les mots dont le **lemme** est **"permettre"**. | |
| - Ne pas considérer **"permis"** comme nom commun, mais bien comme verbe uniquement. | |
| - Couvre toutes les formes verbales, y compris les participes passés, infinitifs, et les temps futurs, présents, etc. | |
| - Ne pas dupliquer les détections des mêmes formes verbales. | |
| Pour chaque occurrence trouvée, veuillez : | |
| - Citer la phrase complète où l'expression apparaît. | |
| - Indiquer l'expression exacte utilisée dans le texte. | |
| - Expliquer pourquoi ces expressions peuvent alourdir ou rendre l'introduction trop familière, directe ou directive. | |
| - Proposer deux reformulations plus simples, fluides et naturelles pour rendre la phrase plus concise ou directe, | |
| en évitant d'utiliser l'expression "permettre" ou ses variantes. Assurez-vous que la reformulation conserve le sens original | |
| tout en étant plus formelle et professionnelle. | |
| Assurez-vous également de respecter les règles suivantes : | |
| 1. Les expressions comme "crucial", "essentiel", "important", "fondamental" ne doivent pas être utilisées plus d'une fois dans l'introduction. | |
| 2. Les expressions comme "il existe", "il faut", "cependant", "de plus", "en revanche", "néanmoins", "toutefois" ne doivent pas être utilisées en début de phrase. | |
| 3. Les expressions comme "joue un rôle", "il est", ou "est une étape" ne doivent pas être associées à des adjectifs tels qu'"important", "essentiel", etc. | |
| 4. "En plus" ne doit pas être utilisé seul en début de phrase. | |
| **Format de sortie requis :** | |
| - "pattern": "mot ou expression détectée", | |
| - "indices": [[index de début, index de fin pour chaque occurrence]], | |
| - "sentence": "phrase où l'expression est utilisée", | |
| - "alternative_suggestions": ["suggestion 1", "suggestion 2"] | |
| Si aucun pattern n'est trouvé, retournez un JSON avec : | |
| - "pattern0": "", | |
| - "occurrences": 0, | |
| À la fin, ajoutez un résumé avec : | |
| - "total_patterns_detected": nombre total de patterns détectés, | |
| - "alternative_suggestions_provided": nombre de suggestions données, | |
| - "occurrences": nombre d'occurrences. | |
| Le texte à analyser est le suivant : | |
| ```{text}``` | |
| \n{format_instruction} | |
| """ | |
| def permettre_detection(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=permettre_prompt_template(), | |
| partial_variables={'format_instruction': output_parser.get_format_instructions()} | |
| ) | |
| # Création du modèle de langage (avec LLM) | |
| llm = ChatOpenAI(model='gpt-4o', 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 | |
| } | |