LemmaTeks / app.py
Ci-Dave's picture
Removed user auth
fe4f037
# - Modified based on given code with corrections and improvements
# - Fixed Gemini API integration by using google.generativeai instead of manual API requests
# - Added support for multiple responses (though Gemini API requires handling this differently)
# - Improved error handling for better reliability
# - Refined creative mode and fact-checking integration into the prompt
# - Optimized token handling for better text generation performance
# - Added support for multiple languages (English and Tagalog)
# - Added Streamlit Secrets for secure API key storage
# - Added Streamlit Session State for persistent model initialization
# - Added Streamlit Sidebar for configuration settings
# - Added Streamlit Warnings and Errors for better user feedback
# - Added Streamlit Markdown for better text formatting
# - Added Streamlit Title and Header for better UI design
# - Added Streamlit Selectbox, Slider, Number Input, Text Area, Button, and Checkbox for user input
import streamlit as st # Import Streamlit for building the web app
import google.generativeai as genai # Import Google Generative AI SDK for text generation
# Load Gemini API key from Streamlit Secrets configuration
api_key = st.secrets["gemini"]["api_key"]
# Configure the generative AI model with API key
genai.configure(api_key=api_key)
# Define the model ID for the AI-powered text generation
MODEL_ID = "gemini-1.5-flash"
# Initialize the model if it is not already in session state
if "model" not in st.session_state:
st.session_state.model = genai.GenerativeModel(MODEL_ID)
# Retrieve the AI model instance
model = st.session_state.model
# Page title
st.title("LemmaTeks: AI-Powered Text Generator")
# Sidebar for settings
with st.sidebar:
st.header("Configuration")
# Dropdown menu for selecting output format (e.g., Story, Poem, Article, Code)
output_format = st.selectbox("Choose Output Format:", ["Story", "Poem", "Article", "Code"])
# Dropdown menu for selecting tone/style of generated text
tone_style = st.selectbox("Select Tone/Style:", ["Formal", "Informal", "Humorous", "Technical"])
# Dropdown menu for selecting the language of the generated text
language = st.selectbox("Select Language:", ["English", "Tagalog"])
# Slider for specifying text length in words
text_length = st.slider("Text Length (words):", min_value=50, max_value=1000, step=50)
# Slider for adjusting creativity level of AI-generated response
creativity_level = st.slider("Creativity Level:", min_value=0.0, max_value=1.0, step=0.1)
# Input box to set the number of responses to generate
num_responses = st.number_input("Number of Responses:", min_value=1, max_value=5, step=1)
# Checkbox to enable creative mode, which enhances creativity in AI responses
creative_mode = st.checkbox("Enable Creative Mode")
# Checkbox to enable fact-checking, ensuring responses are supported by evidence
fact_checking = st.checkbox("Enable Fact-Checking")
# Text input field for user prompt
user_prompt = st.text_area("Enter Your Prompt Here:")
# Modify the prompt based on selected settings
if creative_mode:
user_prompt += " Optimize the creativity of your response."
if fact_checking:
user_prompt += " Support your answer with evidence."
# Adjust prompt for language selection
if language != "English":
user_prompt = f"Write in {language}: {user_prompt}"
if language != "Tagalog":
user_prompt = f"Sumulat sa {language}: {user_prompt}"
# Submit button to generate AI-powered text
if st.button("Generate"):
# Check if prompt is empty
if user_prompt.strip() == "":
st.warning("Please enter a prompt before generating!")
else:
st.write("Generating responses...")
try:
# Generate AI content based on user settings
response = model.generate_content(
f"Format: {output_format}\nTone: {tone_style}\nPrompt: {user_prompt}",
generation_config=genai.GenerationConfig(
max_output_tokens=text_length * 2, # Convert word count to token estimate
temperature=creativity_level # Control randomness of response
)
)
# Display generated text
st.markdown(response.text)
except Exception as e:
# Handle errors gracefully
st.error(f"An unexpected error occurred: {e}")