build_with_gemini / genbiasapp.py
Rahatara's picture
Update genbiasapp.py
32f04bc verified
raw
history blame
3.27 kB
import os
import google.generativeai as genai
import gradio as gr
from google.generativeai.types import HarmBlockThreshold, HarmCategory
# Configure Google API Key and model
GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
genai.configure(api_key=GOOGLE_API_KEY)
MODEL_ID = "gemini-1.5-pro-002"
model = genai.GenerativeModel(MODEL_ID)
example_model = genai.GenerativeModel(
MODEL_ID,
system_instruction=[
"You are an advocate against gender-based violence.",
"Analyze the content for signs of gender discrimination and provide actionable advice."
],
)
# Set model parameters
generation_config = genai.GenerationConfig(
temperature=0.9,
top_p=1.0,
top_k=32,
candidate_count=1,
max_output_tokens=8192,
)
# Safety and instruction settings
safety_settings = {
HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
}
# Function to analyze text with error handling
def analyze_text(text):
prompt = f"Analyze this text for any instances of gender-based discrimination and provide tips: {text}"
contents = [prompt]
response = example_model.generate_content(
contents,
generation_config=generation_config,
safety_settings=safety_settings,
)
return response.text if response else "No response generated."
# Custom CSS for branding and animation
css = """
body { font-family: 'Arial', sans-serif; background-color: #f0f0f0; }
h1 { color: #333; animation: fadeIn 2s; }
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
#logo { font-size: 48px; color: #5f4b8b; animation: slideIn 2s; }
@keyframes slideIn {
0% { margin-left: -200px; }
100% { margin-left: 0px; }
}
.button { background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; }
.button:hover { opacity: 0.8; }
.textbox { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; }
"""
example_scenarios= [["aa"], ["b"]]
# Gradio interface setup
with gr.Blocks(css=css) as app:
gr.Markdown("<div id='logo'>J<span>ustEva</span></div>")
gr.Markdown("<h1 style='text-align: center; color: #5f4b8b;'>Gender Bias Analysis Platform</h1>")
gr.Markdown("<p style='text-align: center; font-size: 16px; color: #4a4a4a;'>Powered by AI to advocate against gender-based violence</p>")
with gr.Tab("Text Analysis"):
text_input = gr.Textbox(label="Enter Text or Select an Example", placeholder="Type here or select an example...", lines=4)
analyze_text_btn = gr.Button("Analyze Text")
text_output = gr.Textbox(label="Analysis Output", lines=6)
examples = gr.Examples(
examples=example_scenarios,
inputs=text_input,
outputs=text_output
)
analyze_text_btn.click(
fn=analyze_text,
inputs=text_input,
outputs=text_output
)
app.launch()