|
import gradio as gr |
|
import os |
|
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Settings |
|
from llama_index.llms.openai import OpenAI |
|
|
|
|
|
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
Settings.llm = OpenAI(model="gpt-4.1-nano") |
|
|
|
|
|
documents = SimpleDirectoryReader("documents").load_data() |
|
index = VectorStoreIndex.from_documents(documents) |
|
|
|
|
|
query_engine = index.as_query_engine() |
|
|
|
def chatbot_response(message): |
|
response = query_engine.query(message) |
|
return str(response) |
|
|
|
|
|
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() |