resumemoica / app.py
Marc de Falco
Controles
25d90fc
import gradio as gr
import requests
import os
from io import BytesIO
import PyPDF2
from youtube_transcript_api import YouTubeTranscriptApi
from huggingface_hub import login, InferenceClient
HF_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
login(token=HF_TOKEN)
client = InferenceClient(token=HF_TOKEN)
system_prompt_base = '''Voici le contenu d'un article ou d'une conférence scientifique. Je te demande de réaliser un résumé à destination d'experts à des fins de veille scientifique et technologique. Tu dois réaliser une analyse des principaux apports et tu dois les restituer sous la forme d'un paragraphe qui pourrait accompagner une notice sur ces documents. Tu écris en français avec des phrases courtes et précises.'''
def summarizer(text, system_prompt, max_length):
model = 'meta-llama/Llama-3.1-70B-Instruct'
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": text}
]
try:
response = client.chat_completion(
messages=messages,
model=model,
max_tokens=max_length,
)
return response["choices"][0]["message"]["content"]
except Exception as e:
return f"Erreur : {str(e)}"
# Fonction pour résumer un article arXiv
def summarize_arxiv(arxiv_id, system_prompt, max_length):
try:
if arxiv_id.startswith('https'):
url = arxiv_id
else:
url = f'https://arxiv.org/pdf/{arxiv_id}.pdf'
response = requests.get(url)
pdf_file = BytesIO(response.content)
reader = PyPDF2.PdfReader(pdf_file)
text = ""
for page in reader.pages:
text += page.extract_text()
summary = summarizer(text, system_prompt, max_length)
return summary
except Exception as e:
return f"Erreur : {str(e)}"
# Fonction pour résumer une vidéo YouTube
def summarize_youtube(video_url, system_prompt, max_length):
try:
# Extraire l'ID de la vidéo
if "watch?v=" in video_url:
video_id = video_url.split('watch?v=')[-1]
else:
video_id = video_url.split('/')[-1]
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['fr', 'en'])
text = " ".join([t['text'] for t in transcript])
summary = summarizer(text, system_prompt, max_length)
return summary
except Exception as e:
return f"Erreur : {str(e)}"
# Interface Gradio
with gr.Blocks() as demo:
gr.Markdown("# Résumé d'articles arXiv et de vidéos YouTube")
max_length_slider= gr.Slider(
minimum=50, maximum=3000, step=50, value=500,
label="Longueur maximale du résumé (tokens)"
)
system_prompt = gr.Textbox(label="Le prompt système",
value=system_prompt_base)
with gr.Tab("arXiv"):
arxiv_id = gr.Textbox(label="Entrez l'ID arXiv (par ex., 2101.00001)")
arxiv_summary = gr.Textbox(label="Résumé")
arxiv_button = gr.Button("Résumer")
arxiv_button.click(summarize_arxiv, inputs=[arxiv_id, system_prompt,
max_length_slider], outputs=arxiv_summary)
with gr.Tab("YouTube"):
youtube_url = gr.Textbox(label="Entrez l'URL de la vidéo YouTube")
youtube_summary = gr.Textbox(label="Résumé")
youtube_button = gr.Button("Résumer")
youtube_button.click(summarize_youtube, inputs=[youtube_url,
system_prompt,
max_length_slider], outputs=youtube_summary)
demo.launch()