Spaces:
Sleeping
Sleeping
| import os | |
| import pdfplumber | |
| import streamlit as st | |
| from groq import Groq | |
| from fpdf import FPDF | |
| import tempfile | |
| from datetime import datetime | |
| # Initialize the Groq client with the API key from environment variable | |
| client = Groq( | |
| api_key=os.environ.get("GROQ_API_KEY"), | |
| ) | |
| # Streamlit app | |
| st.image("p0.PNG", width=260) | |
| st.title("Welcome to trans-text GChat AI") | |
| # Sidebar | |
| st.sidebar.title("Query Box") | |
| # Model selection in the sidebar | |
| model = st.sidebar.selectbox( | |
| "Choose a model:", | |
| ["llama3-8b-8192", "Gemma2-9b-it", "mixtral-8x7b-32768"], | |
| index=0 | |
| ) | |
| # System prompt input in the sidebar | |
| system_prompt = st.sidebar.text_area("Enter system prompt (optional):", value="", height=100) | |
| # User prompt input in the sidebar | |
| prompt = st.sidebar.text_area("Enter your prompt:", value="", height=150) | |
| # File upload input in the sidebar | |
| uploaded_file = st.sidebar.file_uploader("Upload a text or PDF file", type=["txt", "pdf"]) | |
| # Function to read the contents of the uploaded text file | |
| def read_uploaded_text(file): | |
| return file.read().decode("utf-8") | |
| # Function to read the contents of the uploaded PDF file | |
| def read_uploaded_pdf(file): | |
| text = "" | |
| with pdfplumber.open(file) as pdf: | |
| for page in pdf.pages: | |
| text += page.extract_text() | |
| return text | |
| # Read the content of the uploaded file, if any | |
| file_content = "" | |
| if uploaded_file is not None: | |
| if uploaded_file.type == "application/pdf": | |
| file_content = read_uploaded_pdf(uploaded_file) | |
| elif uploaded_file.type == "text/plain": | |
| file_content = read_uploaded_text(uploaded_file) | |
| # Function to query Groq API | |
| def query_groq(system_prompt, combined_prompt, selected_model): | |
| try: | |
| messages = [] | |
| if system_prompt: | |
| messages.append({ | |
| "role": "system", | |
| "content": system_prompt, | |
| }) | |
| messages.append({ | |
| "role": "user", | |
| "content": combined_prompt, | |
| }) | |
| chat_completion = client.chat.completions.create( | |
| messages=messages, | |
| model=selected_model, # Use the selected model | |
| ) | |
| return chat_completion.choices[0].message.content | |
| except Exception as e: | |
| st.error(f"An error occurred: {e}") | |
| return None | |
| # Improved function to save the reply as a PDF | |
| def save_as_pdf(reply_text, filename=None): | |
| try: | |
| pdf = FPDF() | |
| pdf.add_page() | |
| pdf.set_font("Arial", size=12) | |
| pdf.set_auto_page_break(auto=True, margin=15) | |
| # Add a title | |
| pdf.set_font("Arial", 'B', 16) | |
| pdf.cell(0, 10, "Translated Text", 0, 1, 'C') | |
| pdf.ln(10) | |
| # Reset font for content | |
| pdf.set_font("Arial", size=12) | |
| # Split text into lines and write to PDF | |
| for line in reply_text.split('\n'): | |
| pdf.multi_cell(0, 10, line) | |
| # Generate unique filename if not provided | |
| if filename is None: | |
| timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") | |
| filename = f"translated_text_{timestamp}.pdf" | |
| # Save PDF to a temporary file | |
| with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmpfile: | |
| pdf.output(tmpfile.name) | |
| # Provide download button | |
| with open(tmpfile.name, "rb") as f: | |
| st.download_button( | |
| label="Download PDF", | |
| data=f, | |
| file_name=filename, | |
| mime="application/pdf" | |
| ) | |
| st.success(f"The translation has been saved as '{filename}'. Click the button above to download.") | |
| except Exception as e: | |
| st.error(f"An error occurred while saving the PDF: {e}") | |
| # Button to submit the query | |
| if st.sidebar.button("Submit"): | |
| if prompt or file_content: | |
| with st.spinner("Querying the chatbot..."): | |
| # Combine file content and user prompt | |
| combined_prompt = f"{file_content}\n{prompt}" | |
| # Query Groq's API with the selected model | |
| reply = query_groq(system_prompt, combined_prompt, model) | |
| if reply: | |
| st.success("Query completed!") | |
| st.info(reply) | |
| # Option to save the response as a PDF | |
| if st.button("Save as PDF"): | |
| save_as_pdf(reply) | |
| else: | |
| st.error("No response found.") | |
| else: | |
| st.sidebar.warning("Please enter a prompt or upload a file.") | |
| # Reset button | |
| if st.sidebar.button("Reset"): | |
| st.experimental_rerun() | |
| # Instructions | |
| st.write("Enter a system prompt (optional) and a user prompt in the sidebar, then click 'Submit' to get a response from the LLM.") | |
| st.write("Alternatively, you can upload a text or PDF file to use its content as the prompt.") | |
| st.write(f"Model: {model}") | |
| st.info("build by DW v1 8-19-24") #v1 | |
| st.warning("translate text from many languages to and from English, format - translate text ") | |
| st.image("wa3.PNG") | |
| st.image("p1.PNG") | |
| st.image("p2.PNG") |