Team Ai
Apppublic

FerdinandPyCode/AuthringApp

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
pattern_permettre.py126 linesDownload Raw Back to root
1from langchain.prompts import PromptTemplate2from langchain.output_parsers import PydanticOutputParser3from pydantic import BaseModel, Field4from typing import List, Tuple5from langchain.chat_models import ChatOpenAI6import json7 8# Modèle de sortie (adapté pour la détection des formes du verbe "permettre" avec reformulations)9class PermettreDetection(BaseModel):10    pattern: str = Field(..., description="Forme verbale du verbe 'permettre' détectée.")11    indices: List[Tuple[int, int]] = Field(..., description="Indices de début et de fin pour chaque occurrence dans le texte.")12    sentence: str = Field(..., description="Phrase complète où l'expression apparaît.")13    alternative_suggestions: List[str] = Field(..., description="Suggestions alternatives pour la reformulation de la phrase.")14 15    def to_dict(self):16        return {17            "pattern": self.pattern,18            "indices": self.indices,19            "sentence": self.sentence,20            "alternative_suggestions": self.alternative_suggestions21        }22 23class Summary(BaseModel):24    total_patterns_detected: int = Field(..., description="Nombre total de formes du verbe 'permettre' détectées.")25    alternative_suggestions_provided: int = Field(..., description="Nombre total de suggestions fournies.")26    occurrences: int = Field(..., description="Nombre total d'occurrences trouvées dans le texte.")27 28    def to_dict(self):29        return {30            "total_patterns_detected": self.total_patterns_detected,31            "alternative_suggestions_provided": self.alternative_suggestions_provided,32            "occurrences": self.occurrences33        }34 35class DetectionResult(BaseModel):36    patterns: List[PermettreDetection] = Field(..., description="Liste des formes verbales détectées.")37    summary: Summary = Field(..., description="Résumé de la détection.")38 39    def to_dict(self):40        return {41            "patterns": [pattern.to_dict() for pattern in self.patterns],42            "summary": self.summary.to_dict()43        }44 45# Création du template pour la détection avec reformulations46def permettre_prompt_template():47    return """48Tu es un détecteur de texte AI très performant et précis. Ta mission est la suivante :49 50- **Objectif :** Identifier toutes les formes conjuguées du verbe **"permettre"** dans le texte ci-dessous (ex : **"permet"**, **"permettra"**, **"permis"** en tant que verbe, etc.).51 52- **Exclusions :** Ignore les cas où **"permis"** est utilisé comme **nom commun** (ex : **"permis de conduire"**, **"permis de construire"**, etc.).53 54**Instructions supplémentaires :**55   - Analyse grammaticale : identifie les mots dont le **lemme** est **"permettre"**.56   - Ne pas considérer **"permis"** comme nom commun, mais bien comme verbe uniquement.57   - Couvre toutes les formes verbales, y compris les participes passés, infinitifs, et les temps futurs, présents, etc.58   - Ne pas dupliquer les détections des mêmes formes verbales.59 60Pour chaque occurrence trouvée, veuillez :61   - Citer la phrase complète où l'expression apparaît.62   - Indiquer l'expression exacte utilisée dans le texte.63   - Expliquer pourquoi ces expressions peuvent alourdir ou rendre l'introduction trop familière, directe ou directive.64   - Proposer deux reformulations plus simples, fluides et naturelles pour rendre la phrase plus concise ou directe,65     en évitant d'utiliser l'expression "permettre" ou ses variantes. Assurez-vous que la reformulation conserve le sens original66     tout en étant plus formelle et professionnelle.67 68Assurez-vous également de respecter les règles suivantes :691. Les expressions comme "crucial", "essentiel", "important", "fondamental" ne doivent pas être utilisées plus d'une fois dans l'introduction.702. 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.713. 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.724. "En plus" ne doit pas être utilisé seul en début de phrase.73 74**Format de sortie requis :**75- "pattern": "mot ou expression détectée",76- "indices": [[index de début, index de fin pour chaque occurrence]],77- "sentence": "phrase où l'expression est utilisée",78- "alternative_suggestions": ["suggestion 1", "suggestion 2"]79 80Si aucun pattern n'est trouvé, retournez un JSON avec :81- "pattern0": "",82- "occurrences": 0,83 84À la fin, ajoutez un résumé avec :85- "total_patterns_detected": nombre total de patterns détectés,86- "alternative_suggestions_provided": nombre de suggestions données,87- "occurrences": nombre d'occurrences.88 89Le texte à analyser est le suivant :90```{text}```91 92\n{format_instruction}93"""94 95def permettre_detection(text):96    # Création du modèle de sortie avec Pydantic97    output_parser = PydanticOutputParser(pydantic_object=DetectionResult)98 99    # Génération du prompt à partir du modèle100    gen_prompt_template = PromptTemplate(101        input_variables=["text"],102        template=permettre_prompt_template(),103        partial_variables={'format_instruction': output_parser.get_format_instructions()}104    )105 106    # Création du modèle de langage (avec LLM)107    llm = ChatOpenAI(model='gpt-4o', temperature=0.5, api_key="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")108 109    # Chaîne de traitement du prompt avec le modèle et le parseur110    llm_chain = gen_prompt_template | llm | output_parser111 112    # Appel du modèle avec le texte fourni113    result_dict = llm_chain.invoke({"text": text}).to_dict()114 115    # Conversion du résultat en JSON116    json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)117 118    # Génération du prompt final119    final_prompt = gen_prompt_template.format(text=text)120 121    # Retour des résultats122    return {123        "result": json_result,124        "prompt": final_prompt125    }126