Spaces:
Runtime error
Runtime error
| import os | |
| import gradio as gr | |
| import requests | |
| import json | |
| from cachetools import TTLCache, cached | |
| # Retrieve the API token from secrets | |
| api_token = os.getenv("API_TOKEN") | |
| if not api_token: | |
| raise ValueError("API token not found. Make sure 'API_TOKEN' is set in the Secrets.") | |
| # Use the token in your request headers | |
| API_URL = "https://api-inference.huggingface.co/models/meta-llama/Llama-3.3-70B-Instruct" | |
| HEADERS = {"Authorization": f"Bearer {api_token}"} | |
| # Cache to store API responses for 10 minutes | |
| cache = TTLCache(maxsize=100, ttl=600) | |
| def generate_exegesis(passage): | |
| if not passage.strip(): | |
| return "Please enter a Bible passage." | |
| prompt = f"""<s>[INST] You are a professional Bible Scholar. Provide a detailed exegesis of the following biblical verse, including: | |
| The original Greek text and transliteration with word-by-word analysis and meanings, historical and cultural context, and theological significance for: | |
| {passage} [/INST] Exegesis:</s>""" | |
| payload = {"inputs": prompt} | |
| try: | |
| response = requests.post(API_URL, headers=HEADERS, json=payload) | |
| response.raise_for_status() | |
| result = response.json() | |
| if isinstance(result, list) and len(result) > 0: | |
| generated_text = result[0].get("generated_text", "") | |
| marker = "Exegesis:" # Marker to split on | |
| if marker in generated_text: | |
| generated_text = generated_text.split(marker, 1)[1].strip() | |
| return generated_text or "Error: No response from model." | |
| else: | |
| return "Error: Unexpected response format." | |
| except requests.exceptions.RequestException as e: | |
| return f"API Error: {e}" | |
| def answer_question(question): | |
| if not question.strip(): | |
| return "Please enter a question." | |
| prompt = f"""<s>[INST] You are a knowledgeable theologian. Answer the following question about the Bible and Christianity: | |
| {question} [/INST] Answer:</s>""" | |
| payload = {"inputs": prompt} | |
| try: | |
| response = requests.post(API_URL, headers=HEADERS, json=payload) | |
| response.raise_for_status() | |
| result = response.json() | |
| if isinstance(result, list) and len(result) > 0: | |
| generated_text = result[0].get("generated_text", "") | |
| marker = "Answer:" # Marker to split on | |
| if marker in generated_text: | |
| generated_text = generated_text.split(marker, 1)[1].strip() | |
| return generated_text or "Error: No response from model." | |
| else: | |
| return "Error: Unexpected response format." | |
| except requests.exceptions.RequestException as e: | |
| return f"API Error: {e}" | |
| def create_sermon(topic): | |
| if not topic.strip(): | |
| return "Please enter a sermon topic." | |
| prompt = f"""<s>[INST] You are a skilled pastor. Create a sermon outline with linked Bible verses for the following topic: | |
| {topic} [/INST] Sermon Outline:</s>""" | |
| payload = {"inputs": prompt} | |
| try: | |
| response = requests.post(API_URL, headers=HEADERS, json=payload) | |
| response.raise_for_status() | |
| result = response.json() | |
| if isinstance(result, list) and len(result) > 0: | |
| generated_text = result[0].get("generated_text", "") | |
| marker = "Sermon Outline:" # Marker to split on | |
| if marker in generated_text: | |
| generated_text = generated_text.split(marker, 1)[1].strip() | |
| return generated_text or "Error: No response from model." | |
| else: | |
| return "Error: Unexpected response format." | |
| except requests.exceptions.RequestException as e: | |
| return f"API Error: {e}" | |
| # Gradio Interface with Tabs | |
| with gr.Blocks(theme="huggingface") as demo: | |
| gr.Markdown("# JR Study Bible") | |
| gr.Markdown("A multifunctional Bible study group app that performs exegesis, answers questions, and helps create sermon outlines.") | |
| with gr.Tab("Exegesis"): | |
| passage_input = gr.Textbox(label="Enter Bible Passage", placeholder="e.g., John 3:16") | |
| exegesis_output = gr.Textbox(label="Exegesis Commentary") | |
| passage_input.change(generate_exegesis, inputs=passage_input, outputs=exegesis_output) | |
| with gr.Tab("Question Answering"): | |
| question_input = gr.Textbox(label="Ask a Question", placeholder="e.g., What is the meaning of life?") | |
| question_output = gr.Textbox(label="Answer") | |
| question_input.change(answer_question, inputs=question_input, outputs=question_output) | |
| with gr.Tab("Sermon Creation"): | |
| topic_input = gr.Textbox(label="Enter Sermon Topic", placeholder="e.g., Faith") | |
| sermon_output = gr.Textbox(label="Sermon Outline") | |
| topic_input.change(create_sermon, inputs=topic_input, outputs=sermon_output) | |
| if __name__ == "__main__": | |
| demo.launch() |