Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from streamlit_option_menu import option_menu | |
| from transformers import pipeline | |
| import torch | |
| import time | |
| import requests | |
| import io | |
| import os | |
| from PIL import Image | |
| # Load models | |
| translator = pipeline("translation", model="Helsinki-NLP/opus-mt-dra-en") | |
| # for summarizer api | |
| SUMMARIZER_API_URL = "https://api.groq.com/openai/v1/chat/completions" | |
| summarizer_headers = {"Authorization": f"Bearer {os.getenv('GROQ_API_TOKEN')}", | |
| "Content-Type": "application/json"} | |
| # for image api | |
| IMAGE_API_URL = "https://api-inference.huggingface.co/models/ZB-Tech/Text-to-Image" | |
| img_headers = {"Authorization": f"Bearer {os.getenv('HF_API_TOKEN')}"} | |
| # Functions for each task | |
| def translate_tamil_to_english(text): | |
| time.sleep(2) | |
| result = translator(text) | |
| return result[0]['translation_text'] | |
| def summarize_english_text(paragraph): | |
| time.sleep(2) | |
| # Request payload | |
| payload = { | |
| "model": "mixtral-8x7b-32768", | |
| "messages": [ | |
| {"role": "system", "content": "Create a summary of below paragraph in 30 words max"}, | |
| {"role": "user", "content": paragraph} | |
| ], | |
| "max_tokens": 100 # number of words in the output. | |
| } | |
| # Send POST request to Groq API | |
| response = requests.post(SUMMARIZER_API_URL, json=payload, headers=summarizer_headers) | |
| # Check if the request was successful | |
| if response.status_code == 200: | |
| # Parse the JSON response | |
| result = response.json() | |
| # Extract and print the generated text | |
| generated_text = result['choices'][0]['message']['content'] | |
| return generated_text | |
| else: | |
| return f"Error: {response.status_code}, {response.text}" | |
| def english_text_to_image(prompt): | |
| payload = { | |
| "inputs": prompt, | |
| } | |
| response = requests.post(IMAGE_API_URL, headers=img_headers, json=payload) | |
| image_bytes = response.content | |
| image = Image.open(io.BytesIO(image_bytes)) | |
| return image | |
| # Custom CSS | |
| # st.markdown(""" | |
| # <style> | |
| # /* Background color */ | |
| # body { | |
| # background-color: #f0f0f5; | |
| # } | |
| # /* Text color and font */ | |
| # .stApp { | |
| # font-family: 'Arial', sans-serif; | |
| # color: #333; | |
| # } | |
| # /* Titles and subtitles styling */ | |
| # h1 { | |
| # color: #2E8B57; | |
| # text-align: center; | |
| # text-shadow: 2px 2px 5px #aaaaaa; | |
| # } | |
| # h2, h3 { | |
| # color: #4682B4; | |
| # text-shadow: 1px 1px 3px #aaaaaa; | |
| # } | |
| # /* Background texture */ | |
| # .stApp { | |
| # background: linear-gradient(to bottom right, #fff7e6, #e6f7ff); | |
| # } | |
| # /* Button styling */ | |
| # button[kind="primary"] { | |
| # background-color: #4682B4; | |
| # color: white; | |
| # border-radius: 8px; | |
| # padding: 0.5rem 1rem; | |
| # } | |
| # button[kind="primary"]:hover { | |
| # background-color: #5b9bd5; | |
| # } | |
| # /* Text area and input field styling */ | |
| # textarea, input { | |
| # border-radius: 10px; | |
| # padding: 1rem; | |
| # border: 2px solid #ccc; | |
| # background-color: #f9f9f9; | |
| # } | |
| # /* Styling the output boxes */ | |
| # .stMarkdown { | |
| # background-color: #e6f9ff; | |
| # padding: 1rem; | |
| # border-radius: 10px; | |
| # box-shadow: 2px 2px 10px #ccc; | |
| # } | |
| # </style> | |
| # """, unsafe_allow_html=True) | |
| # #sidebar styling | |
| # st.markdown(""" | |
| # <style> | |
| # [data-testid=stSidebar] { | |
| # background-color: #FFFFFF; | |
| # margin-right: 20px; | |
| # border-right: 2px solid #FFFFFF | |
| # } | |
| # </style> | |
| # """, unsafe_allow_html=True) | |
| #options styling in sidebar and added image in sidebar | |
| with st.sidebar: | |
| selected = option_menu( | |
| menu_title="", | |
| options=['Home','Tool'], | |
| icons=['house-door-fill','setting'], | |
| menu_icon='truck-front-fill', | |
| default_index=0, | |
| styles={ | |
| "container": {'padding':'5!important','background-color':'#FAF9F6'}, | |
| "icon": {'color':"#000000", "font-size":"23px"}, | |
| "nav-link": {'font-size':'16px','text-align':'left','margin':'0px','--hover-color':'#EDEADE','font-weight':'bold'}, | |
| "nav-link-selector":{'background-color':'#E6E6FA','font-weight':'bold'} | |
| } | |
| ) | |
| if selected == "Home": | |
| # Page title and header | |
| st.title(":blue[Multi-Purpose Tool] - Empowering Educators π") | |
| # Subheader for the app description | |
| st.subheader("A versatile tool designed to assist teachers in translating, summarizing, and visualizing concepts.") | |
| # Main description with detailed information about the app | |
| st.markdown(""" | |
| The **Multi-Purpose Tool** is a user-friendly platform developed for educators, | |
| enabling them to enhance their teaching experience. Whether it's translating content | |
| into different languages, summarizing lengthy materials, or visualizing concepts | |
| through images, this tool provides a one-stop solution for modern teaching needs. | |
| ### Key Features: | |
| - **Translation**: Translate text seamlessly between languages (e.g., Tamil to English). | |
| - **Summarization**: Quickly generate summaries of long passages for easy understanding. | |
| - **Text to Image**: Visualize difficult concepts by generating images from text descriptions. | |
| ### Available Worldwide: | |
| The Multi-Purpose Tool is deployed on Hugging Face and accessible globally to teachers | |
| and educators at the click of a button. Visit the [app here](https://huggingface.co/spaces/Jesivn/Multi_purpose_Software). | |
| Empower your classroom with advanced AI tools today! | |
| """) | |
| elif selected=="Tool": | |
| # Row 1: Tamil to English translation | |
| st.subheader("π Translate Tamil to English") | |
| tamil_input = st.text_area("Enter Tamil text", "") | |
| if st.button("Translate"): | |
| english_output = translate_tamil_to_english(tamil_input) | |
| st.markdown(f"**Translated English Text**: {english_output}") | |
| # Row 2: English paragraph summarization | |
| st.subheader("π Summarize English Paragraph") | |
| english_paragraph = st.text_area("Enter English paragraph", "") | |
| if st.button("Summarize"): | |
| summary_output = summarize_english_text(english_paragraph) | |
| st.markdown(f"**Summary**: {summary_output}") | |
| # Row 3: English text to image generation | |
| st.subheader("π¨ Generate Image from English Text") | |
| image_text = st.text_input("Enter description for image generation", "") | |
| if st.button("Generate Image"): | |
| generated_image = english_text_to_image(image_text) | |
| st.image(generated_image, caption="Generated Image") | |