LionChurch / app.py
LlamaKing23's picture
update app.py
71a0d73 verified
import gradio as gr
import requests
import json
import os
from dotenv import load_dotenv
# Load environment variables for API key
load_dotenv()
# Get API key from environment variables - this is now hidden from users
OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY", "")
if not OPENROUTER_API_KEY:
print("Warning: OPENROUTER_API_KEY not found in environment variables.")
print("Please set it before running the app or the app won't function.")
def answer_bible_question(question, temperature=0.7, max_tokens=1000):
"""
Send a Bible question to the DeepSeek model via OpenRouter API
and return the response.
"""
if not OPENROUTER_API_KEY:
return "Error: API key not configured. Please set the OPENROUTER_API_KEY environment variable."
# Format the prompt to focus on ESV Bible information
prompt = f"""You are a helpful ESV Bible assistant. Please answer the following question
about the ESV Bible, providing relevant verses and explanations when appropriate: {question}"""
try:
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json",
"HTTP-Referer": "https://bible-assistant-app.com", # Replace with your site
"X-Title": "ESV Bible Assistant",
},
data=json.dumps({
"model": "tngtech/deepseek-r1t-chimera:free",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant that specializes in the ESV Bible. Provide accurate information, quote relevant verses when appropriate, and explain biblical concepts clearly."
},
{
"role": "user",
"content": prompt
}
],
"temperature": temperature,
"max_tokens": max_tokens
}),
timeout=60
)
response_json = response.json()
if "error" in response_json:
return f"Error: {response_json['error']}"
return response_json["choices"][0]["message"]["content"]
except requests.exceptions.RequestException as e:
return f"Network error: {str(e)}"
except json.JSONDecodeError:
return f"Error parsing response: {response.text[:100]}..."
except Exception as e:
return f"Unexpected error: {str(e)}"
# Create custom theme for better aesthetics
custom_theme = gr.themes.Soft().set(
body_background_fill="#f8f9fa",
block_background_fill="#ffffff",
block_label_background_fill="#e9ecef",
button_primary_background_fill="#6c757d",
button_primary_background_fill_hover="#495057",
)
# Create the Gradio interface with dual-panel layout
with gr.Blocks(title="ESV Bible Assistant", theme=custom_theme) as demo:
gr.Markdown("""
# ESV Bible Assistant
Ask any question about the ESV Bible, and get answers powered by DeepSeek AI.
""")
with gr.Row(equal_height=True):
# Left panel - Questions
with gr.Column():
gr.Markdown("### Your Question")
question_input = gr.Textbox(
placeholder="Example: What does John 3:16 say in the ESV?",
lines=8,
label="",
elem_id="question-input"
)
with gr.Accordion("Settings", open=False):
temperature_slider = gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.7,
step=0.1,
label="Temperature (Higher = more creative)"
)
max_tokens_slider = gr.Slider(
minimum=100,
maximum=4000,
value=1000,
step=100,
label="Maximum Response Length"
)
submit_btn = gr.Button("Ask", variant="primary", size="lg")
gr.Markdown("### Example Questions")
# Fixed Examples implementation
examples = gr.Examples(
examples=[
"What does John 3:16 say in the ESV?",
"Explain the concept of grace in the New Testament.",
"What are the fruits of the Spirit mentioned in Galatians?",
"Compare the creation accounts in Genesis 1 and 2.",
"What does the ESV Bible say about forgiveness?"
],
inputs=question_input
)
# Right panel - Answers
with gr.Column():
gr.Markdown("### Bible Answer")
answer_output = gr.Markdown(
value="Ask a question to receive an answer about the ESV Bible.",
elem_id="answer-output"
)
# Set up the click event
submit_btn.click(
fn=answer_bible_question,
inputs=[question_input, temperature_slider, max_tokens_slider],
outputs=answer_output
)
# Add custom CSS for better styling
gr.HTML("""
<style>
#question-input, #answer-output {
border: 1px solid #dee2e6;
border-radius: 0.375rem;
padding: 1rem;
min-height: 250px;
background-color: white;
}
.gradio-container {
max-width: 1200px !important;
margin-left: auto;
margin-right: auto;
}
footer {
text-align: center;
margin-top: 2rem;
color: #6c757d;
}
</style>
""")
gr.HTML("""
<footer>
<p>ESV Bible Assistant © 2025 | Powered by DeepSeek through OpenRouter</p>
<p><small>The ESV Bible text is copyrighted, but this application falls under fair use for educational purposes.</small></p>
</footer>
""")
# Launch the app
if __name__ == "__main__":
demo.launch()