Team Ai
Apppublic

FerdinandPyCode/AuthringApp

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
pattern_en_plus.py109 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 "en plus" en début de phrase10class ReformulationDetail(BaseModel):11    original: str = Field(..., description="Phrase originale contenant 'en plus' en début de phrase.")12    explanation: str = Field(..., description="Explication sur pourquoi l'expression 'en plus' est mal placée en début de phrase.")13    reformulation_1: str = Field(..., description="Reformulation de la phrase avec 'en plus' déplacé.")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 'en plus' 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# Création du template pour la détection de l'utilisation de "en plus" en début de phrase47def en_plus_prompt_template():48    return """49Vous êtes un éditeur de texte IA extrêmement rigoureux. Votre tâche est d'analyser **précisément** le texte fourni pour détecter **toutes les occurrences** de l'expression **"en plus"** utilisée **en début de phrase**, sans "de".50 51Pour chaque phrase trouvée, vous devez impérativement :52 531. **Citer exactement** la phrase originale contenant "en plus".542. **Expliquer brièvement et clairement** pourquoi "en plus" est mal placé en début de phrase et préciser qu'il doit être reformulé au cœur de la phrase.553. **Proposer trois alternatives plus correctes**, telles que "de plus", "en outre", "par ailleurs", "aussi", mais **placées au milieu de la phrase**.564. **Assurer** que chaque reformulation est **fluide**, **naturelle** et que l'alternative n'est pas placée au début ou à la fin de la phrase.57 58**Consignes supplémentaires :**59 60- **Ne pas ajouter** d'informations ou de commentaires non demandés.61- Présenter les résultats de manière **claire**, **structurée** et en respectant le format indiqué.62- **Ne pas analyser** ou modifier d'autres parties du texte que les phrases contenant "en plus" en début de phrase.63 64### Format attendu pour chaque occurrence :65 66- **Original** : "[Phrase originale]"67    - **Explication** : "[Explication concise]"68    - **Reformulation 1** : "[Reformulation ici]"69    - **Reformulation 2** : "[Reformulation ici]"70    - **Reformulation 3** : "[Reformulation ici]"71 72Le texte à analyser est le suivant :73```{text}```74 75{format_instruction}76"""77 78def detect_en_plus(text):79    # Création du modèle de sortie avec Pydantic80    output_parser = PydanticOutputParser(pydantic_object=DetectionResult)81 82    # Génération du prompt à partir du modèle83    gen_prompt_template = PromptTemplate(84        input_variables=["text"],85        template=en_plus_prompt_template(),86        partial_variables={'format_instruction': output_parser.get_format_instructions()}87    )88 89    # Création du modèle de langage (avec LLM)90    llm = ChatOpenAI(model='gpt-4', temperature=0.5, api_key="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")91 92    # Chaîne de traitement du prompt avec le modèle et le parseur93    llm_chain = gen_prompt_template | llm | output_parser94 95    # Appel du modèle avec le texte fourni96    result_dict = llm_chain.invoke({"text": text}).to_dict()97 98    # Conversion du résultat en JSON99    json_result = json.dumps(result_dict, indent=8, ensure_ascii=False)100 101    # Génération du prompt final102    final_prompt = gen_prompt_template.format(text=text)103 104    # Retour des résultats105    return {106        "result": json_result,107        "prompt": final_prompt108    }109