File size: 4,385 Bytes
3e6b9d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"""
Agent 2: Agent avec outils (Tools) pour calculs financiers

Cet agent démontre l'utilisation d'outils Python que l'agent peut appeler
pour effectuer des calculs financiers complexes.
"""

import asyncio
from typing import Annotated
from pydantic import BaseModel
from pydantic_ai import Agent, ModelSettings

from app.models import finance_model


# Outils que l'agent peut utiliser
def calculer_valeur_future(
    capital_initial: float,
    taux_annuel: float,
    duree_annees: float
) -> str:
    """Calcule la valeur future avec intérêts composés.
    
    Args:
        capital_initial: Montant initial en euros
        taux_annuel: Taux d'intérêt annuel (ex: 0.05 pour 5%)
        duree_annees: Durée en années
    
    Returns:
        Valeur future calculée
    """
    valeur_future = capital_initial * (1 + taux_annuel) ** duree_annees
    interets = valeur_future - capital_initial
    return (
        f"Valeur future: {valeur_future:,.2f}€\n"
        f"Intérêts générés: {interets:,.2f}€\n"
        f"Capital initial: {capital_initial:,.2f}€"
    )


def calculer_versement_mensuel(
    capital_emprunte: float,
    taux_annuel: float,
    duree_mois: int
) -> str:
    """Calcule le versement mensuel pour un prêt.
    
    Args:
        capital_emprunte: Montant emprunté en euros
        taux_annuel: Taux d'intérêt annuel (ex: 0.04 pour 4%)
        duree_mois: Durée du prêt en mois
    
    Returns:
        Versement mensuel calculé
    """
    taux_mensuel = taux_annuel / 12
    versement = capital_emprunte * (
        taux_mensuel * (1 + taux_mensuel) ** duree_mois
    ) / ((1 + taux_mensuel) ** duree_mois - 1)
    
    total_rembourse = versement * duree_mois
    cout_total = total_rembourse - capital_emprunte
    
    return (
        f"Versement mensuel: {versement:,.2f}€\n"
        f"Total remboursé: {total_rembourse:,.2f}€\n"
        f"Coût total du crédit: {cout_total:,.2f}€"
    )


def calculer_performance_portfolio(
    valeur_initiale: float,
    valeur_actuelle: float,
    duree_jours: int
) -> str:
    """Calcule la performance d'un portfolio.
    
    Args:
        valeur_initiale: Valeur initiale en euros
        valeur_actuelle: Valeur actuelle en euros
        duree_jours: Durée en jours
    
    Returns:
        Performance calculée
    """
    gain_absolu = valeur_actuelle - valeur_initiale
    gain_pourcentage = (gain_absolu / valeur_initiale) * 100
    rendement_annuelise = ((valeur_actuelle / valeur_initiale) ** (365 / duree_jours) - 1) * 100
    
    return (
        f"Gain absolu: {gain_absolu:+,.2f}€ ({gain_pourcentage:+.2f}%)\n"
        f"Rendement annualisé: {rendement_annuelise:+.2f}%\n"
        f"Durée: {duree_jours} jours"
    )


# Agent avec outils
finance_calculator_agent = Agent(
    finance_model,
    model_settings=ModelSettings(max_output_tokens=1500),  # For explanations with calculations
    system_prompt=(
        "Vous êtes un conseiller financier expert. "
        "Quand un client vous pose une question nécessitant un calcul financier, "
        "utilisez les outils de calcul disponibles pour fournir des résultats précis. "
        "Expliquez toujours les résultats dans le contexte de la question du client. "
        "Répondez en français."
    ),
    tools=[calculer_valeur_future, calculer_versement_mensuel, calculer_performance_portfolio],
)


async def exemple_agent_avec_outils():
    """Exemple d'utilisation d'un agent avec outils."""
    print("\n🔧 Agent 2: Agent avec outils de calcul")
    print("=" * 60)
    
    question = (
        "J'ai un capital de 50 000€ que je veux placer à 4% par an pendant 10 ans. "
        "Combien aurai-je à la fin ? Et si j'emprunte 200 000€ sur 20 ans à 3.5% "
        "pour acheter un appartement, combien paierai-je par mois ?"
    )
    
    print(f"Question:\n{question}\n")
    
    result = await finance_calculator_agent.run(question)
    
    print("✅ Réponse de l'agent avec calculs:")
    print(result.output)
    print()
    
    # Afficher quels outils ont été utilisés
    if hasattr(result, 'usage') and result.usage:
        print("📊 Utilisation des outils:")
        print(f"  - Tokens utilisés: {result.usage.total_tokens if hasattr(result.usage, 'total_tokens') else 'N/A'}")


if __name__ == "__main__":
    asyncio.run(exemple_agent_avec_outils())