dtuckchat / app.py
Unizomby's picture
Upload app.py
d24ae42 verified
import gradio as gr
import os
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings
from llama_index.llms.openai import OpenAI
# Set OpenAI API key from environment
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
# Configure the default LLM
Settings.llm = OpenAI(model="gpt-4.1-nano")
# Load documents and build index
documents = SimpleDirectoryReader("documents").load_data()
index = VectorStoreIndex.from_documents(documents)
# Create query engine
query_engine = index.as_query_engine()
def chatbot_response(message):
response = query_engine.query(message)
return str(response)
# Custom CSS for purple button styling - Target Submit button specifically
custom_css = """
/* Target Submit button with all its classes */
button.lg.primary.svelte-cmf5ev,
button.primary.svelte-cmf5ev,
button.lg.primary,
button.primary {
background: linear-gradient(45deg, #8B5CF6, #A855F7) !important;
border: none !important;
color: white !important;
border-radius: 8px !important;
}
button.lg.primary.svelte-cmf5ev:hover,
button.primary.svelte-cmf5ev:hover,
button.lg.primary:hover,
button.primary:hover {
background: linear-gradient(45deg, #7C3AED, #9333EA) !important;
transform: translateY(-2px) !important;
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3) !important;
transition: all 0.2s ease !important;
}
/* Keep Clear button as secondary (gray) */
button.lg.secondary.svelte-cmf5ev,
button.secondary.svelte-cmf5ev,
button.lg.secondary,
button.secondary {
background: #E5E7EB !important;
color: #374151 !important;
border: 1px solid #D1D5DB !important;
border-radius: 8px !important;
}
button.lg.secondary.svelte-cmf5ev:hover,
button.secondary.svelte-cmf5ev:hover,
button.lg.secondary:hover,
button.secondary:hover {
background: #F3F4F6 !important;
color: #374151 !important;
transform: translateY(-1px) !important;
}
/* Example buttons - ensure they stay readable */
button.gallery-item.svelte-p5q82i,
.gallery-item.svelte-p5q82i,
button.gallery-item,
.gallery-item {
background: white !important;
color: #374151 !important;
border: 1px solid #D1D5DB !important;
border-radius: 8px !important;
}
button.gallery-item.svelte-p5q82i:hover,
.gallery-item.svelte-p5q82i:hover,
button.gallery-item:hover,
.gallery-item:hover {
background: #F9FAFB !important;
color: #374151 !important;
border-color: #9CA3AF !important;
transform: translateY(-1px) !important;
}
/* Force text color in example buttons to be dark */
button.gallery-item.svelte-p5q82i,
button.gallery-item.svelte-p5q82i *,
.gallery-item.svelte-p5q82i,
.gallery-item.svelte-p5q82i *,
button.gallery-item,
button.gallery-item *,
.gallery-item,
.gallery-item * {
color: #374151 !important;
}
/* Additional selectors for HF Spaces compatibility */
.gradio-container button.primary,
.gradio-container .primary,
[data-testid="primary-button"] {
background: linear-gradient(45deg, #8B5CF6, #A855F7) !important;
border: none !important;
color: white !important;
}
.gradio-container button.primary:hover,
.gradio-container .primary:hover,
[data-testid="primary-button"]:hover {
background: linear-gradient(45deg, #7C3AED, #9333EA) !important;
}
"""
iface = gr.Interface(
fn=chatbot_response,
inputs="text",
outputs="text",
title="Ask about me",
description="Ask questions and receive answers based on my bio.",
examples=[["Provide a summary of Donald"],
["Has Donald worked with Python or machine learning?"],
["Tell me something interesting about Donald"],
["What technical skills does Donald have?"],
["How did Donald build this RAG chatbot?"]
],
css=custom_css
)
iface.launch()