File size: 4,542 Bytes
55f834a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from langchain.prompts import PromptTemplate
from langchain.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
from typing import List
import json
from langchain.chat_models import ChatOpenAI


# Modèle de sortie pour la détection de l'expression "il suffit de"
class ReformulationDetail(BaseModel):
    original: str = Field(..., description="Phrase originale contenant 'il suffit de'.")
    explanation: str = Field(..., description="Explication sur pourquoi l'expression 'il suffit de' est inadaptée.")
    reformulation_1: str = Field(..., description="Première reformulation de la phrase.")
    reformulation_2: str = Field(..., description="Seconde reformulation de la phrase.")
    reformulation_3: str = Field(..., description="Troisième reformulation de la phrase.")

    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 'il suffit de' détectées.")
    reformulations_provided: int = Field(..., description="Nombre de reformulations fournies.")

    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.")
    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()
        }

# Génération du prompt pour la détection de "il suffit de"
def il_suffit_de_prompt_template():
    return """
Veuillez analyser le texte ci-dessous pour détecter toutes les occurrences de l'expression "il suffit de".

Pour chaque phrase trouvée :

1. **Citez exactement** la phrase originale contenant "il suffit de".
2. **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.
3. **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.
4. **Assurez-vous** que chaque reformulation est naturelle, fluide et conserve le sens original sans insister sur l'importance de l'action.

**Format attendu pour chaque occurrence** :

- **Original** : "[Phrase originale]"
    - **Explication** : "[Explication concise sur l'inadéquation de 'il suffit de']"
    - **Reformulation 1** : "[Première reformulation]"
    - **Reformulation 2** : "[Seconde reformulation]"
    - **Reformulation 3** : "[Troisième reformulation]"

Le texte à analyser est le suivant :
```{text}```

{format_instruction}
"""

def detect_il_suffit_de(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=il_suffit_de_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
    }