Team Ai
Apppublic

FerdinandPyCode/AuthringApp

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
pattern_il_suffit_de.py102 linesDownload Raw Back to root
1from langchain.prompts import PromptTemplate2from langchain.output_parsers import PydanticOutputParser3from pydantic import BaseModel, Field4from typing import List5import json6from langchain.chat_models import ChatOpenAI7 8 9# Modèle de sortie pour la détection de l'expression "il suffit de"10class ReformulationDetail(BaseModel):11    original: str = Field(..., description="Phrase originale contenant 'il suffit de'.")12    explanation: str = Field(..., description="Explication sur pourquoi l'expression 'il suffit de' est inadaptée.")13    reformulation_1: str = Field(..., description="Première reformulation de la phrase.")14    reformulation_2: str = Field(..., description="Seconde reformulation de la phrase.")15    reformulation_3: str = Field(..., description="Troisième reformulation de la phrase.")16 17    def to_dict(self):18        return {19            "original": self.original,20            "explanation": self.explanation,21            "reformulation_1": self.reformulation_1,22            "reformulation_2": self.reformulation_2,23            "reformulation_3": self.reformulation_324        }25 26class Summary(BaseModel):27    total_occurrences: int = Field(..., description="Nombre total d'occurrences de 'il suffit de' détectées.")28    reformulations_provided: int = Field(..., description="Nombre de reformulations fournies.")29 30    def to_dict(self):31        return {32            "total_occurrences": self.total_occurrences,33            "reformulations_provided": self.reformulations_provided34        }35 36class DetectionResult(BaseModel):37    reformulations: List[ReformulationDetail] = Field(..., description="Liste des reformulations proposées.")38    summary: Summary = Field(..., description="Résumé de la détection.")39 40    def to_dict(self):41        return {42            "reformulations": [reformulation.to_dict() for reformulation in self.reformulations],43            "summary": self.summary.to_dict()44        }45 46# Génération du prompt pour la détection de "il suffit de"47def il_suffit_de_prompt_template():48    return """49Veuillez analyser le texte ci-dessous pour détecter toutes les occurrences de l'expression "il suffit de".50 51Pour chaque phrase trouvée :52 531. **Citez exactement** la phrase originale contenant "il suffit de".542. **Expliquez** pourquoi l'expression "il suffit de" est inadaptée dans un contexte professionnel ou formel, et pourquoi elle simplifie à l'excès ou n'indique pas assez d'importance.553. **Proposez trois reformulations** de la phrase, sans utiliser des expressions qui soulignent l'importance (comme "il est nécessaire de", "il est important de", etc.). Utilisez des formulations à l'impératif pour rendre les instructions plus directes, précises, et professionnelles.564. **Assurez-vous** que chaque reformulation est naturelle, fluide et conserve le sens original sans insister sur l'importance de l'action.57 58**Format attendu pour chaque occurrence** :59 60- **Original** : "[Phrase originale]"61    - **Explication** : "[Explication concise sur l'inadéquation de 'il suffit de']"62    - **Reformulation 1** : "[Première reformulation]"63    - **Reformulation 2** : "[Seconde reformulation]"64    - **Reformulation 3** : "[Troisième reformulation]"65 66Le texte à analyser est le suivant :67```{text}```68 69{format_instruction}70"""71 72def detect_il_suffit_de(text):73    # Création du modèle de sortie avec Pydantic74    output_parser = PydanticOutputParser(pydantic_object=DetectionResult)75 76    # Génération du prompt à partir du modèle77    gen_prompt_template = PromptTemplate(78        input_variables=["text"],79        template=il_suffit_de_prompt_template(),80        partial_variables={'format_instruction': output_parser.get_format_instructions()}81    )82 83    # Création du modèle de langage (avec LLM)84    llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="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")85 86    # Chaîne de traitement du prompt avec le modèle et le parseur87    llm_chain = gen_prompt_template | llm | output_parser88 89    # Appel du modèle avec le texte fourni90    result_dict = llm_chain.invoke({"text": text}).to_dict()91 92    # Conversion du résultat en JSON93    json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)94 95    # Génération du prompt final96    final_prompt = gen_prompt_template.format(text=text)97 98    # Retour des résultats99    return {100        "result": json_result,101        "prompt": final_prompt102    }