Spaces:
Sleeping
Sleeping
File size: 5,257 Bytes
78e3911 a83203d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | 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") |