ttext / app.py
Ninjasharp's picture
Update app.py
69411dd verified
import streamlit as st
import os
from groq import Groq
# Streamlit page configuration
st.set_page_config(layout="wide")
# Supported models
SUPPORTED_MODELS = {
"Llama 3.2 1B (Preview)": "llama-3.2-1b-preview",
"Llama 3 70B": "llama3-70b-8192",
"Llama 3 8B": "llama3-8b-8192",
"Llama 3.1 70B": "llama-3.1-70b-versatile",
"Llama 3.1 8B": "llama-3.1-8b-instant",
"Mixtral 8x7B": "mixtral-8x7b-32768",
"Gemma 2 9B": "gemma2-9b-it",
"LLaVA 1.5 7B": "llava-v1.5-7b-4096-preview",
"Llama 3.2 3B (Preview)": "llama-3.2-3b-preview",
"Llama 3.2 11B Vision (Preview)": "llama-3.2-11b-vision-preview"
}
MAX_TOKENS = 1000
# Initialize Groq client with API key
groq_api_key = os.getenv("GROQ_API_KEY")
if not groq_api_key:
st.error("GROQ_API_KEY not found in environment variables. Please set it and restart the app.")
st.stop()
client = Groq(api_key=groq_api_key)
st.image("p1.png", width=300)
st.sidebar.image("p2.png", width=200)
def main():
st.title("Marketing tool App")
# Sidebar settings
st.sidebar.header("Configuration")
model = st.sidebar.selectbox("Select LLM Model", list(SUPPORTED_MODELS.keys()))
temperature = st.sidebar.slider("Temperature", 0.0, 1.0, 0.5)
output_size = st.sidebar.selectbox(
"Select Output Size",
["1-3 word sentences", "2-5 word sentences", "3-7 word sentences", "5-9 word sentences", "6-11 word sentences"]
)
bullet_points = st.sidebar.checkbox("Output as Bullet Points", value=True)
humanize_text = st.sidebar.checkbox("Humanize Text")
display_final_answer = st.sidebar.checkbox("Display Process")
reduce_words = st.sidebar.checkbox("Reduce Word Count by 50%") # New checkbox for reducing word count
# Clear and reset buttons in the sidebar
if st.sidebar.button("Clear Input Fields"):
st.session_state.system_prompt = "Create a revised [text] use 3-5 words concise and focused, Provide the output in short format plus in bullet points or a brief paragraph, plus offer 2-3 alternates - suggest areas for improvement. . list final answer in separate area"
st.session_state.user_query = ""
# Input fields for system prompt and query
default_prompt = "Create a revised [text] use 3-5 words concise and focused, Provide the output in short format plus in bullet points or a brief paragraph, plus offer 2-3 alternates - suggest areas for improvement. . list final answer in separate area"
system_prompt = st.text_area("System Prompt", value=st.session_state.get("system_prompt", default_prompt), key="system_prompt")
user_query = st.text_area("Enter Your Query", value=st.session_state.get("user_query", ""), key="user_query")
if st.button("Submit"):
with st.spinner("Generating response..."):
response = query_groq(model, temperature, system_prompt, user_query, output_size, humanize_text, reduce_words)
col1, col2 = st.columns(2)
with col1:
st.write("### Detailed Information")
st.write("Model:", model)
st.write("Temperature:", temperature)
st.write("Output Size:", output_size)
st.write("Bullet Points:")
st.write(bullet_points)
st.write("Humanize Text:", humanize_text)
st.write("Display Final Answer:", display_final_answer)
st.write("System Prompt:", system_prompt)
st.write("User Query:", user_query)
if display_final_answer:
st.write("### Original Response")
st.text_area("Original Response", value=response, height=600)
with col2:
if display_final_answer:
processed_response = process_response(response, output_size, bullet_points, humanize_text, reduce_words)
additional_text = "Please review the response carefully before proceeding."
st.write("### Processed Response with Review")
st.text_area(response, value=processed_response + "\n" + additional_text, height=200)
else:
st.write("### Output Response")
st.text(response)
def query_groq(model, temperature, system_prompt, user_query, output_size, humanize_text, reduce_words):
try:
completion = client.chat.completions.create(
model=SUPPORTED_MODELS[model],
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_query}
],
temperature=temperature,
max_tokens=MAX_TOKENS
)
if not completion.choices:
return "Error: No choices in the completion response."
return completion.choices[0].message.content
except Exception as e:
return f"Error: {str(e)}"
def process_response(text, output_size, bullet_points, humanize_text, reduce_words):
if reduce_words:
# Reduce word count by 50%
words = text.split()
text = " ".join(words[:len(words)//2])
if output_size == "1-3 word sentences":
text = reduce_to_sentences(text, 1, 3)
elif output_size == "2-5 word sentences":
text = reduce_to_sentences(text, 2, 5)
elif output_size == "3-7 word sentences":
text = reduce_to_sentences(text, 3, 7)
elif output_size == "5-9 word sentences":
text = reduce_to_sentences(text, 5, 9)
elif output_size == "6-11 word sentences":
text = reduce_to_sentences(text, 6, 11)
if bullet_points:
text = reduce_to_bullet_points(text, 1, 11)
if humanize_text:
text = humanize(text)
return text
def reduce_to_bullet_points(text, min_words, max_words):
sentences = text.split('.')
bullet_points = []
for sentence in sentences:
words = sentence.strip().split()
if min_words <= len(words) <= max_words:
bullet_points.append(f"- {' '.join(words)}")
return '\n'.join(bullet_points)
def reduce_to_sentences(text, min_words, max_words):
sentences = text.split('.')
filtered_sentences = []
for sentence in sentences:
words = sentence.strip().split()
if min_words <= len(words) <= max_words:
filtered_sentences.append(sentence.strip())
return ' '.join(filtered_sentences)
def humanize(text):
# This can be replaced with a more sophisticated humanization logic as needed
return text.replace(". ", ". Let's consider this further. ")
st.sidebar.info("build by dw")
if __name__ == "__main__":
main()