Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 2,960 Bytes
a4577de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
from modules.llm.summarizer.helpers.db_helper import get_scripture_from_db
from modules.llm.summarizer.helpers.llm_helper import summarize_scripture_verse
from modules.llm.summarizer.models import ScriptureRequest, ScriptureVerseSummary
from google.cloud import firestore
import os
import json
from google.oauth2 import service_account
# Load Firebase credentials from environment variable
service_account_info = os.getenv("FIREBASE_SERVICE_ACCOUNT_JSON")
if not service_account_info:
raise ValueError("FIREBASE_SERVICE_ACCOUNT_JSON not found in environment variables.")
# Parse the JSON (it’s stored as a string in env)
credentials_dict = json.loads(service_account_info)
credentials = service_account.Credentials.from_service_account_info(credentials_dict)
# Initialize Firestore client with these credentials
db = firestore.AsyncClient(credentials=credentials, project=credentials.project_id)
# or db = firestore.Client(credentials=credentials, project=credentials.project_id)
async def svc_summarize_scripture_verse(req: ScriptureRequest) -> ScriptureVerseSummary:
"""
Summarizes a scripture verse, with Firestore caching per verse and language.
Firestore structure:
/scripture_summaries/{scripture_name_global_index}/meanings/{target_language}
"""
# Step 1: Get scripture data
scripture_data = await get_scripture_from_db(req)
scripture_name = scripture_data.get("scripture_name", "UnknownScripture")
global_index = scripture_data.get("_global_index", -1)
target_language = req.target_language.lower()
# Compose the document path
doc_id = f"{scripture_name}_{global_index}".replace(" ", "_")
base_ref = db.collection("scripture_summaries").document(doc_id)
meaning_ref = base_ref.collection("meanings").document(target_language)
# Step 2: Check for cached version
cached_doc = await meaning_ref.get()
if cached_doc.exists:
print(f"✅ Using cached summary for {scripture_name} {global_index} ({target_language})")
return ScriptureVerseSummary(**cached_doc.to_dict())
print(f"🧠 Generating new summary for {scripture_name} {global_index} ({target_language})")
# Step 3: Generate new summary with LLM
summary = summarize_scripture_verse(
scripture_data.get("text","--no lyrics available--"),
scripture_data.get("translation","--no translation available--"),
scripture_data.get("word_by_word_native","--no word-by-word meaning available--"),
target_language,
)
summary_data = summary.model_dump()
# Step 4: Ensure parent document exists
await base_ref.set(
{
"scripture_name": scripture_name,
"global_index": global_index,
},
merge=True,
)
# Step 5: Store meaning under nested language doc
await meaning_ref.set(summary_data)
print(f"✅ Stored summary for {scripture_name} {global_index} in Firestore")
return summary
|