File size: 5,034 Bytes
4f0de92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
141
142
143
144
145
146
147
148
149
150
151
152
153
from flask import Flask, render_template, request, jsonify, send_file, session
from google import genai
from google.genai import types
import os
from datetime import datetime
import uuid
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_JUSTIFY
import io

app = Flask(__name__)
app.secret_key = 'votre_cle_secrete_ici'  # Changez cette clé en production

# Configuration de l'API Gemini
GEMINI_API_KEY = os.environ.get('GEMINI_API_KEY')
client = genai.Client(api_key=GEMINI_API_KEY)

# Initialiser les discussions en session
def init_session():
    if 'discussions' not in session:
        session['discussions'] = []
        session.modified = True

@app.route('/')
def index():
    init_session()
    return render_template('index.html')

@app.route('/api/resume', methods=['POST'])
def resume_content():
    init_session()
    
    try:
        content = request.form.get('content')
        resume_type = request.form.get('type', 'court')
        
        if not content:
            return jsonify({'error': 'Aucun contenu fourni'}), 400
        
        # Définir les prompts selon le type de résumé
        prompts = {
            'court': "Fais un résumé court et concis (3-5 phrases) du texte suivant :\n\n",
            'detaille': "Fais un résumé détaillé et structuré du texte suivant, en gardant les points importants :\n\n",
            'points_cles': "Extrais les points clés du texte suivant sous forme de liste à puces :\n\n"
        }
        
        prompt = prompts.get(resume_type, prompts['court']) + content
        
        # Appel à l'API Gemini
        response = client.models.generate_content(
            model='gemini-2.5-flash',
            contents=[prompt]
        )
        
        resume = response.text
        
        # Sauvegarder dans la session
        discussion = {
            'id': str(uuid.uuid4()),
            'timestamp': datetime.now().isoformat(),
            'content': content[:200] + '...' if len(content) > 200 else content,
            'type': resume_type,
            'resume': resume
        }
        
        discussions = session.get('discussions', [])
        discussions.insert(0, discussion)  # Ajouter au début
        session['discussions'] = discussions[-50:]  # Garder les 50 dernières
        session.modified = True
        
        return jsonify({
            'success': True,
            'resume': resume,
            'id': discussion['id']
        })
        
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/discussions', methods=['GET'])
def get_discussions():
    init_session()
    return jsonify({'discussions': session.get('discussions', [])})

@app.route('/api/discussion/<discussion_id>', methods=['DELETE'])
def delete_discussion(discussion_id):
    init_session()
    discussions = session.get('discussions', [])
    discussions = [d for d in discussions if d['id'] != discussion_id]
    session['discussions'] = discussions
    session.modified = True
    return jsonify({'success': True})

@app.route('/api/download/<discussion_id>', methods=['GET'])
def download_pdf(discussion_id):
    init_session()
    discussions = session.get('discussions', [])
    discussion = next((d for d in discussions if d['id'] == discussion_id), None)
    
    if not discussion:
        return jsonify({'error': 'Discussion non trouvée'}), 404
    
    # Créer le PDF
    buffer = io.BytesIO()
    doc = SimpleDocTemplate(buffer, pagesize=letter)
    styles = getSampleStyleSheet()
    story = []
    
    # Titre
    title_style = ParagraphStyle(
        'CustomTitle',
        parent=styles['Heading1'],
        fontSize=18,
        textColor='#2c3e50'
    )
    story.append(Paragraph(f"Résumé - {discussion['type'].upper()}", title_style))
    story.append(Spacer(1, 12))
    
    # Date
    date_text = f"Généré le : {datetime.fromisoformat(discussion['timestamp']).strftime('%d/%m/%Y %H:%M')}"
    story.append(Paragraph(date_text, styles['Normal']))
    story.append(Spacer(1, 20))
    
    # Contenu original
    story.append(Paragraph("Contenu original :", styles['Heading2']))
    story.append(Spacer(1, 6))
    content_style = ParagraphStyle(
        'ContentStyle',
        parent=styles['Normal'],
        alignment=TA_JUSTIFY
    )
    story.append(Paragraph(discussion['content'].replace('\n', '<br/>'), content_style))
    story.append(Spacer(1, 20))
    
    # Résumé
    story.append(Paragraph("Résumé :", styles['Heading2']))
    story.append(Spacer(1, 6))
    story.append(Paragraph(discussion['resume'].replace('\n', '<br/>'), content_style))
    
    doc.build(story)
    buffer.seek(0)
    
    return send_file(
        buffer,
        as_attachment=True,
        download_name=f"resume_{discussion_id[:8]}.pdf",
        mimetype='application/pdf'
    )

if __name__ == '__main__':
    app.run(debug=True)