Josebert commited on
Commit
823834e
·
verified ·
1 Parent(s): fbc8dab

Update App.py

Browse files
Files changed (1) hide show
  1. App.py +53 -48
App.py CHANGED
@@ -1,61 +1,66 @@
1
- import json
2
  import gradio as gr
3
- from transformers import pipeline
 
4
 
5
- # Load the text generation model (can swap for a Bible-specific LLM)
6
- model_name = "google/flan-t5-large" # Change if needed
7
- generator = pipeline("text2text-generation", model=model_name, trust_remote_code=True)
 
8
 
9
- def analyze_bible_figure_of_speech(verse):
10
- """
11
- Analyzes a Bible verse for figures of speech.
12
-
13
- The function constructs a structured prompt for an LLM, requesting it to:
14
- - Identify any figure of speech in the verse (e.g., Metaphor, Hyperbole, Synecdoche, Paradox, Simile).
15
- - Extract the phrase demonstrating the figure of speech.
16
- - Explain why it's a figure of speech in biblical context.
17
-
18
- Expected Output:
19
- A structured JSON array with:
20
- - "figure": Type of figure of speech.
21
- - "phrase": The phrase in the verse.
22
- - "explanation": Explanation in biblical context.
23
- """
24
  if not verse.strip():
25
  return "Please enter a Bible verse."
26
-
27
- prompt = f"""
28
- Analyze the following Bible verse and identify any figures of speech present (e.g., Metaphor, Hyperbole, Synecdoche, Paradox, Simile).
29
- Provide a JSON response with:
30
- - "figure": Type of figure of speech.
31
- - "phrase": The phrase in the verse.
32
- - "explanation": Why it is a figure of speech in biblical context.
33
-
34
- Bible Verse: \"{verse}\"
35
- """
 
 
 
 
36
 
37
  try:
38
- # Generate the output from the LLM
39
- result = generator(prompt, max_length=512, num_return_sequences=1)
40
- generated_text = result[0]['generated_text']
41
 
42
- # Try parsing the output as JSON
43
- try:
44
- output_json = json.loads(generated_text)
45
- return json.dumps(output_json, indent=2) # Pretty-print JSON
46
- except json.JSONDecodeError:
47
- return generated_text # Return raw text if JSON parsing fails
48
- except Exception as e:
49
- return f"Error: {str(e)}"
 
 
 
 
 
 
50
 
51
- # Gradio UI
52
- interface = gr.Interface(
53
- fn=analyze_bible_figure_of_speech,
54
- inputs=gr.Textbox(label="Enter a Bible Verse", placeholder="E.g., 'I am the vine, you are the branches' - John 15:5", lines=3),
 
 
 
55
  outputs=gr.Textbox(label="Figures of Speech Analysis (JSON)"),
56
- title="Bible Figures of Speech Detector",
57
- description="Enter a Bible verse to analyze its figures of speech, such as metaphor, simile, or hyperbole. The app will identify the figure, extract the phrase, and provide an explanation."
58
  )
59
 
60
  if __name__ == "__main__":
61
- interface.launch()
 
1
+ import os
2
  import gradio as gr
3
+ import requests
4
+ import json
5
 
6
+ # Retrieve the API token from secrets
7
+ api_token = os.getenv("API_TOKEN")
8
+ if not api_token:
9
+ raise ValueError("API token not found. Make sure 'API_TOKEN' is set in the Secrets.")
10
 
11
+ # Use the token in your request headers
12
+ API_URL = "https://api-inference.huggingface.co/models/mistralai/Mistral-7B-Instruct-v0.3"
13
+ HEADERS = {"Authorization": f"Bearer {api_token}"}
14
+
15
+ def analyze_figure_of_speech(verse):
 
 
 
 
 
 
 
 
 
 
16
  if not verse.strip():
17
  return "Please enter a Bible verse."
18
+
19
+ # Construct a prompt to instruct the model to analyze figures of speech in the verse.
20
+ prompt = f"""<s>[INST] You are JR-Sacred Syntax, an expert biblical scholar specializing in the analysis of Bible verses.
21
+ Analyze the following Bible verse to identify any figures of speech (e.g., Metaphor, Synecdoche, Hyperbole, Simile, Paradox).
22
+ Return your answer as a JSON array where each element contains:
23
+ - "figure": the type of figure of speech,
24
+ - "phrase": the exact phrase in the verse,
25
+ - "explanation": a brief explanation of why it qualifies as that figure in a biblical context.
26
+ Bible Verse: "{verse}"
27
+ [/INST] Figures:</s>"""
28
+
29
+ payload = {
30
+ "inputs": prompt,
31
+ }
32
 
33
  try:
34
+ response = requests.post(API_URL, headers=HEADERS, json=payload)
35
+ response.raise_for_status()
36
+ result = response.json()
37
 
38
+ if isinstance(result, list) and len(result) > 0:
39
+ generated_text = result[0].get("generated_text", "")
40
+ marker = "Figures:" # Marker to help extract the output
41
+ if marker in generated_text:
42
+ generated_text = generated_text.split(marker, 1)[1].strip()
43
+ try:
44
+ output_json = json.loads(generated_text)
45
+ return json.dumps(output_json, indent=2)
46
+ except json.JSONDecodeError:
47
+ return generated_text
48
+ else:
49
+ return "Error: Unexpected response format."
50
+ except requests.exceptions.RequestException as e:
51
+ return f"API Error: {e}"
52
 
53
+ demo = gr.Interface(
54
+ fn=analyze_figure_of_speech,
55
+ inputs=gr.Textbox(
56
+ label="Enter Bible Verse",
57
+ placeholder="e.g., 'I am the vine, you are the branches' - John 15:5",
58
+ lines=3
59
+ ),
60
  outputs=gr.Textbox(label="Figures of Speech Analysis (JSON)"),
61
+ title="JR-Sacred Syntax: Bible Figures of Speech Detector",
62
+ description="Enter a Bible verse to detect and analyze figures of speech with detailed biblical explanations."
63
  )
64
 
65
  if __name__ == "__main__":
66
+ demo.launch()