| | import gradio as gr |
| | from transformers import pipeline |
| |
|
| | |
| | summarizer = pipeline( |
| | "summarization", |
| | model="plguillou/t5-base-fr-sum-cnndm", |
| | device="cuda" if gr.device=="cuda" else "cpu" |
| | ) |
| |
|
| | def generate_summary(text: str, min_length: int = 100, max_length: int = 256) -> str: |
| | """ |
| | Generate a summary of the input text using the pipeline |
| | |
| | Args: |
| | text (str): Input text to summarize |
| | min_length (int): Minimum length of the summary |
| | max_length (int): Maximum length of the summary |
| | |
| | Returns: |
| | str: Generated summary |
| | """ |
| | |
| | summary = summarizer( |
| | text, |
| | max_length=max_length, |
| | min_length=min_length, |
| | num_beams=4, |
| | length_penalty=0.2, |
| | no_repeat_ngram_size=3, |
| | early_stopping=True, |
| | do_sample=False, |
| | temperature=1.0, |
| | repetition_penalty=1.2 |
| | ) |
| | |
| | |
| | return summary[0]['summary_text'] |
| |
|
| | |
| | with gr.Blocks(title="French Text Summarizer") as demo: |
| | gr.Markdown("# 🇫🇷 French Text Summarizer") |
| | gr.Markdown("Enter your French text below to get a concise summary.") |
| | |
| | with gr.Tabs(): |
| | with gr.TabItem("Summarizer"): |
| | with gr.Row(): |
| | with gr.Column(): |
| | input_text = gr.Textbox( |
| | label="Input Text", |
| | placeholder="Paste your French text here...", |
| | lines=10 |
| | ) |
| | with gr.Row(): |
| | min_length = gr.Slider( |
| | minimum=50, |
| | maximum=200, |
| | value=100, |
| | step=10, |
| | label="Minimum Summary Length" |
| | ) |
| | max_length = gr.Slider( |
| | minimum=150, |
| | maximum=500, |
| | value=256, |
| | step=10, |
| | label="Maximum Summary Length" |
| | ) |
| | submit_btn = gr.Button("Generate Summary") |
| | |
| | with gr.Column(): |
| | output_text = gr.Textbox( |
| | label="Generated Summary", |
| | lines=10 |
| | ) |
| | |
| | with gr.TabItem("API Documentation"): |
| | gr.Markdown(""" |
| | # API Documentation |
| | |
| | This Gradio app exposes a REST API that you can use to generate summaries programmatically. |
| | |
| | ## Endpoint |
| | |
| | ``` |
| | POST /api/predict |
| | ``` |
| | |
| | ## Request Format |
| | |
| | Send a POST request with the following JSON payload: |
| | |
| | ```json |
| | { |
| | "data": [ |
| | "Your text to summarize", |
| | 100, // min_length (optional) |
| | 256 // max_length (optional) |
| | ] |
| | } |
| | ``` |
| | |
| | ## Example using cURL |
| | |
| | ```bash |
| | curl -X POST "http://localhost:7860/api/predict" \\ |
| | -H "Content-Type: application/json" \\ |
| | -d '{"data": ["Votre texte à résumer ici..."]}' |
| | ``` |
| | |
| | ## Example using Python requests |
| | |
| | ```python |
| | import requests |
| | |
| | response = requests.post( |
| | "http://localhost:7860/api/predict", |
| | json={ |
| | "data": [ |
| | "Votre texte à résumer ici...", |
| | 100, # min_length (optional) |
| | 256 # max_length (optional) |
| | ] |
| | } |
| | ) |
| | summary = response.json() |
| | print(summary) |
| | ``` |
| | |
| | ## Response Format |
| | |
| | ```json |
| | { |
| | "data": ["Generated summary text"], |
| | "duration": 0.123 // Time taken in seconds |
| | } |
| | ``` |
| | |
| | ## Error Handling |
| | |
| | In case of errors, the API will return appropriate HTTP status codes and error messages in the response body. |
| | |
| | ## Rate Limiting |
| | |
| | Please be mindful of rate limiting and API usage. Consider implementing your own rate limiting if making multiple requests. |
| | """) |
| | |
| | |
| | submit_btn.click( |
| | fn=generate_summary, |
| | inputs=[input_text, min_length, max_length], |
| | outputs=output_text, |
| | api_name="predict" |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | |
| | demo.queue().launch( |
| | server_name="0.0.0.0", |
| | server_port=7860, |
| | share=True, |
| | enable_queue=True, |
| | ) |