20231128
This commit is contained in:
parent
51f33a9b6c
commit
3efe307ed3
|
@ -28,10 +28,11 @@ def resumer_texte(texte):
|
||||||
messages=[
|
messages=[
|
||||||
{"role": "system", "content": "Tu es un assistant personnel compétent, utile et pertinent."},
|
{"role": "system", "content": "Tu es un assistant personnel compétent, utile et pertinent."},
|
||||||
{"role": "user", "content": """
|
{"role": "user", "content": """
|
||||||
Tu dois résumer un texte qui est une transcription d'un enregistrement audio d'une intervention faite à l'occasion d'une conférence.
|
Tu dois résumer un texte qui est une transcription d'un enregistrement audio.
|
||||||
|
|
||||||
Tu dois d'abord proposer un court paragraphe de résumé du contexte global de l'intervention du conférencier.
|
Tu dois d'abord proposer un titre court, en maximum trois mots, pour identifier cette intervention orale.
|
||||||
Puis, tu dois proposer une synthèse de l'intervention sous forme d'une liste à puces.
|
Puis, tu dois proposer un court paragraphe de résumé du contexte global de l'intervention.
|
||||||
|
Enfin, tu dois proposer une synthèse de l'intervention sous forme d'une liste à puces.
|
||||||
La liste à puces doit être organisée sur au maximum 2 niveaux hiérarchiques.
|
La liste à puces doit être organisée sur au maximum 2 niveaux hiérarchiques.
|
||||||
Les entrées de la liste à puces doivent être très synthétiques, exprimées en quelques mots.
|
Les entrées de la liste à puces doivent être très synthétiques, exprimées en quelques mots.
|
||||||
Il est très important que le résumé n'omette pas d'informations importantes.
|
Il est très important que le résumé n'omette pas d'informations importantes.
|
||||||
|
@ -40,7 +41,7 @@ Tu dois bien mettre en relief les données chiffrées mentionnés durant le disc
|
||||||
Le résultat doit être au format Markdown. La réponse doit contenir uniquement le code Markdown et rien d'autre.
|
Le résultat doit être au format Markdown. La réponse doit contenir uniquement le code Markdown et rien d'autre.
|
||||||
Voici le modèle de réponse au format Markdown :
|
Voici le modèle de réponse au format Markdown :
|
||||||
|
|
||||||
# Un titre pour le résumé
|
# Titre (maximum 3 mots)
|
||||||
## Contexte
|
## Contexte
|
||||||
Court paragraphe qui résume le contexte de l'intervention.
|
Court paragraphe qui résume le contexte de l'intervention.
|
||||||
## Synthèse
|
## Synthèse
|
||||||
|
|
|
@ -11,10 +11,16 @@
|
||||||
<input type="file" id="audioFile" accept="audio/*" required>
|
<input type="file" id="audioFile" accept="audio/*" required>
|
||||||
<input type="submit" value="Transcrire et Résumer">
|
<input type="submit" value="Transcrire et Résumer">
|
||||||
</form>
|
</form>
|
||||||
|
<!-- Ajout du menu déroulant pour les résumés sauvegardés -->
|
||||||
|
<select id="savedTasks">
|
||||||
|
<option value="">Sélectionnez un résumé sauvegardé</option>
|
||||||
|
<!-- Les options seront ajoutées ici par JavaScript -->
|
||||||
|
</select>
|
||||||
|
<button onclick="showSavedResume()">Afficher le Résumé</button>
|
||||||
<div id="result"></div>
|
<div id="result"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.getElementById('uploadForm').addEventListener('submit', function(e) {
|
document.getElementById('uploadForm').addEventListener('submit', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
var formData = new FormData();
|
var formData = new FormData();
|
||||||
|
@ -34,6 +40,9 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
function checkResult(taskId) {
|
function checkResult(taskId) {
|
||||||
|
// Afficher l'image de chargement
|
||||||
|
document.getElementById('result').innerHTML = '<img src="static/wait.png" alt="Chargement...">';
|
||||||
|
|
||||||
fetch(`/result/${taskId}`)
|
fetch(`/result/${taskId}`)
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
@ -47,6 +56,43 @@ function checkResult(taskId) {
|
||||||
})
|
})
|
||||||
.catch(error => console.error('Erreur:', error));
|
.catch(error => console.error('Erreur:', error));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Au chargement de la page, récupérer la liste des tâches sauvegardées
|
||||||
|
window.onload = function() {
|
||||||
|
fetch('/tasks')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(taskIds => {
|
||||||
|
var select = document.getElementById('savedTasks');
|
||||||
|
taskIds.forEach(taskId => {
|
||||||
|
var option = document.createElement('option');
|
||||||
|
option.value = taskId;
|
||||||
|
option.text = taskId;
|
||||||
|
select.appendChild(option);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fonction pour afficher le résumé sauvegardé sélectionné
|
||||||
|
function showSavedResume() {
|
||||||
|
var taskId = document.getElementById('savedTasks').value;
|
||||||
|
if (taskId) {
|
||||||
|
fetch(`/resume/${taskId}`)
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.resume) {
|
||||||
|
var converter = new showdown.Converter();
|
||||||
|
var html = converter.makeHtml(data.resume);
|
||||||
|
document.getElementById('result').innerHTML = html;
|
||||||
|
} else {
|
||||||
|
document.getElementById('result').innerHTML = 'Résumé non trouvé.';
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Erreur:', error);
|
||||||
|
document.getElementById('result').innerHTML = 'Erreur lors de la récupération du résumé.';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Binary file not shown.
After Width: | Height: | Size: 1.8 MiB |
|
@ -10,9 +10,18 @@ app = Flask(__name__)
|
||||||
tasks = {} # Dictionnaire pour stocker l'état des tâches
|
tasks = {} # Dictionnaire pour stocker l'état des tâches
|
||||||
|
|
||||||
def handle_audio_processing(file_path, task_id):
|
def handle_audio_processing(file_path, task_id):
|
||||||
|
task_folder = os.path.join('../transcribe_data/backup', task_id)
|
||||||
|
os.makedirs(task_folder, exist_ok=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
transcription = transcrire_audio(file_path)
|
transcription = transcrire_audio(file_path)
|
||||||
|
with open(os.path.join(task_folder, 'transcription.txt'), 'w') as file:
|
||||||
|
file.write(transcription)
|
||||||
|
|
||||||
resume = resumer_texte(transcription)
|
resume = resumer_texte(transcription)
|
||||||
|
with open(os.path.join(task_folder, 'resume.md'), 'w') as file:
|
||||||
|
file.write(resume)
|
||||||
|
|
||||||
tasks[task_id] = {'status': 'completed', 'result': resume}
|
tasks[task_id] = {'status': 'completed', 'result': resume}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
tasks[task_id] = {'status': 'error', 'error': str(e)}
|
tasks[task_id] = {'status': 'error', 'error': str(e)}
|
||||||
|
@ -55,6 +64,22 @@ def get_result(task_id):
|
||||||
else: # Erreur dans le traitement
|
else: # Erreur dans le traitement
|
||||||
return jsonify(error=task.get('error', 'Erreur inconnue')), 500
|
return jsonify(error=task.get('error', 'Erreur inconnue')), 500
|
||||||
|
|
||||||
|
@app.route('/tasks', methods=['GET'])
|
||||||
|
def list_saved_tasks():
|
||||||
|
base_path = '../transcribe_data/backup'
|
||||||
|
task_ids = [d for d in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, d))]
|
||||||
|
return jsonify(task_ids)
|
||||||
|
|
||||||
|
@app.route('/resume/<task_id>', methods=['GET'])
|
||||||
|
def get_saved_resume(task_id):
|
||||||
|
resume_path = os.path.join('../transcribe_data/backup', task_id, 'resume.md')
|
||||||
|
if os.path.exists(resume_path):
|
||||||
|
with open(resume_path, 'r') as file:
|
||||||
|
resume = file.read()
|
||||||
|
return jsonify(resume=resume)
|
||||||
|
else:
|
||||||
|
return jsonify(error="Résumé non trouvé"), 404
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
def index():
|
def index():
|
||||||
return app.send_static_file('index.html')
|
return app.send_static_file('index.html')
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue