diff --git a/worker_api/llm/llm_service.py b/worker_api/llm/llm_service.py
index ccda716..535f047 100644
--- a/worker_api/llm/llm_service.py
+++ b/worker_api/llm/llm_service.py
@@ -1,4 +1,5 @@
import asyncio
+import logging
from typing import Optional
from google import genai
from google.genai import types
@@ -6,6 +7,8 @@
from worker_api.config import get
+logger = logging.getLogger(__name__)
+
DEFAULT_MODEL = "gemini-2.5-flash"
@@ -15,6 +18,8 @@ def _chat_with_gemini_sync(
model: Optional[str] = None
) -> dict:
api_key = get("GEMINI_API_KEY")
+ logger.info(f"GEMINI_API_KEY configured: {bool(api_key)}, key prefix: {api_key[:10] if api_key else 'N/A'}...")
+
if not api_key:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
@@ -24,6 +29,7 @@ def _chat_with_gemini_sync(
client = genai.Client(api_key=api_key)
model_name = model or DEFAULT_MODEL
+ logger.info(f"Requested model: {model}, Using model: {model_name}")
config = types.GenerateContentConfig(
temperature=1.0,
@@ -40,15 +46,18 @@ def _chat_with_gemini_sync(
]
try:
+ logger.info(f"Calling Gemini API with prompt length: {len(prompt)}")
response = client.models.generate_content(
model=model_name,
contents=contents,
config=config,
)
+ logger.info("Gemini API call successful")
except Exception as e:
+ logger.error(f"Gemini API error: {type(e).__name__}: {str(e)}", exc_info=True)
raise HTTPException(
status_code=status.HTTP_502_BAD_GATEWAY,
- detail=f"Gemini API error: {str(e)}"
+ detail=f"Gemini API error: {type(e).__name__}: {str(e)}"
)
if not response.candidates or not response.candidates[0].content.parts:
diff --git a/worker_api/llm/llm_views.py b/worker_api/llm/llm_views.py
index 6858e16..92e0970 100644
--- a/worker_api/llm/llm_views.py
+++ b/worker_api/llm/llm_views.py
@@ -1,4 +1,5 @@
from fastapi import APIRouter
+from fastapi.responses import HTMLResponse
from starlette import status
from worker_api.llm.llm_response_models import LLMChatRequest, LLMChatResponse
@@ -15,3 +16,857 @@ async def chat(request: LLMChatRequest) -> LLMChatResponse:
model=request.model
)
return LLMChatResponse(**result)
+
+
+@llm_router.get("/view", response_class=HTMLResponse)
+async def view():
+ html_content = """
+
+
+
+
+
+ Buddhist Tradition Onboarding
+
+
+
+
+
Onboarding step: choose your Buddhist tradition by typing it or picking from a list. You can add more than one.
+
9:41
+
+
Which Buddhist tradition feels closest to your practice?
+
Choose one or more — we'll use them to personalize your experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"""
+ return html_content
diff --git a/worker_api/llm/traditions_condensed.json b/worker_api/llm/traditions_condensed.json
new file mode 100644
index 0000000..29f6641
--- /dev/null
+++ b/worker_api/llm/traditions_condensed.json
@@ -0,0 +1,98 @@
+[
+ {"id":"theravada","name":"Theravāda","level":1,"parent":null},
+ {"id":"thai-buddhism","name":"Thai Buddhism","level":2,"parent":"theravada"},
+ {"id":"dhammayut","name":"Dhammayuttika Nikāya","level":3,"parent":"thai-buddhism"},
+ {"id":"maha-nikaya-th","name":"Mahā Nikāya","level":3,"parent":"thai-buddhism"},
+ {"id":"thai-forest","name":"Thai Forest Tradition","level":3,"parent":"thai-buddhism"},
+ {"id":"burmese-buddhism","name":"Burmese Buddhism","level":2,"parent":"theravada"},
+ {"id":"thudhamma","name":"Thudhamma Nikāya","level":3,"parent":"burmese-buddhism"},
+ {"id":"shwekyin","name":"Shwekyin Nikāya","level":3,"parent":"burmese-buddhism"},
+ {"id":"mahasi","name":"Mahasi Tradition","level":3,"parent":"burmese-buddhism"},
+ {"id":"pa-auk","name":"Pa-Auk Tradition","level":3,"parent":"burmese-buddhism"},
+ {"id":"sri-lankan-buddhism","name":"Sri Lankan Buddhism","level":2,"parent":"theravada"},
+ {"id":"siam-nikaya","name":"Siam Nikāya","level":3,"parent":"sri-lankan-buddhism"},
+ {"id":"amarapura-nikaya","name":"Amarapura Nikāya","level":3,"parent":"sri-lankan-buddhism"},
+ {"id":"ramanna-nikaya","name":"Rāmañña Nikāya","level":3,"parent":"sri-lankan-buddhism"},
+ {"id":"cambodian-buddhism","name":"Cambodian Buddhism","level":2,"parent":"theravada"},
+ {"id":"mohanikay","name":"Mohanikay","level":3,"parent":"cambodian-buddhism"},
+ {"id":"lao-buddhism","name":"Lao Buddhism","level":2,"parent":"theravada"},
+ {"id":"vipassana-goenka","name":"Vipassana (Goenka Tradition)","level":2,"parent":"theravada"},
+ {"id":"insight-meditation","name":"Insight Meditation","level":2,"parent":"theravada"},
+ {"id":"navayana","name":"Navayana / Ambedkarite Buddhism","level":2,"parent":"theravada"},
+ {"id":"mahayana","name":"Mahāyāna","level":1,"parent":null},
+ {"id":"chinese-buddhism","name":"Chinese Buddhism","level":2,"parent":"mahayana"},
+ {"id":"pure-land-chinese","name":"Pure Land (Chinese)","level":3,"parent":"chinese-buddhism"},
+ {"id":"chan","name":"Chan","level":3,"parent":"chinese-buddhism"},
+ {"id":"tiantai","name":"Tiantai","level":3,"parent":"chinese-buddhism"},
+ {"id":"huayan","name":"Huayan","level":3,"parent":"chinese-buddhism"},
+ {"id":"chinese-esoteric","name":"Chinese Esoteric Buddhism","level":3,"parent":"chinese-buddhism"},
+ {"id":"dharma-drum","name":"Dharma Drum Mountain","level":3,"parent":"chinese-buddhism"},
+ {"id":"fo-guang-shan","name":"Fo Guang Shan","level":3,"parent":"chinese-buddhism"},
+ {"id":"chung-tai-shan","name":"Chung Tai Shan","level":3,"parent":"chinese-buddhism"},
+ {"id":"japanese-buddhism","name":"Japanese Buddhism","level":2,"parent":"mahayana"},
+ {"id":"zen","name":"Zen","level":3,"parent":"japanese-buddhism"},
+ {"id":"rinzai","name":"Rinzai","level":4,"parent":"zen"},
+ {"id":"soto","name":"Sōtō","level":4,"parent":"zen"},
+ {"id":"obaku","name":"Ōbaku","level":4,"parent":"zen"},
+ {"id":"sanbo-zen","name":"Sanbo Zen","level":4,"parent":"zen"},
+ {"id":"jodo-shu","name":"Jōdo-shū","level":3,"parent":"japanese-buddhism"},
+ {"id":"jodo-shinshu","name":"Jōdo Shinshū","level":3,"parent":"japanese-buddhism"},
+ {"id":"nishi-honganji","name":"Nishi Honganji","level":4,"parent":"jodo-shinshu"},
+ {"id":"higashi-honganji","name":"Higashi Honganji","level":4,"parent":"jodo-shinshu"},
+ {"id":"bca","name":"Buddhist Churches of America","level":4,"parent":"jodo-shinshu"},
+ {"id":"nichiren","name":"Nichiren Buddhism","level":3,"parent":"japanese-buddhism"},
+ {"id":"nichiren-shu","name":"Nichiren Shū","level":4,"parent":"nichiren"},
+ {"id":"nichiren-shoshu","name":"Nichiren Shōshū","level":4,"parent":"nichiren"},
+ {"id":"sgi","name":"Sōka Gakkai International","level":4,"parent":"nichiren"},
+ {"id":"kempon-hokke","name":"Kempon Hokke","level":4,"parent":"nichiren"},
+ {"id":"tendai","name":"Tendai","level":3,"parent":"japanese-buddhism"},
+ {"id":"shingon","name":"Shingon","level":3,"parent":"japanese-buddhism"},
+ {"id":"koyasan-shingon","name":"Koyasan Shingon","level":4,"parent":"shingon"},
+ {"id":"rissho-koseikai","name":"Risshō Kōsei-kai","level":3,"parent":"japanese-buddhism"},
+ {"id":"korean-buddhism","name":"Korean Buddhism","level":2,"parent":"mahayana"},
+ {"id":"jogye","name":"Jogye Order","level":3,"parent":"korean-buddhism"},
+ {"id":"taego","name":"Taego Order","level":3,"parent":"korean-buddhism"},
+ {"id":"cheontae","name":"Cheontae","level":3,"parent":"korean-buddhism"},
+ {"id":"won-buddhism","name":"Won Buddhism","level":3,"parent":"korean-buddhism"},
+ {"id":"jingak","name":"Jingak Order","level":3,"parent":"korean-buddhism"},
+ {"id":"vietnamese-buddhism","name":"Vietnamese Buddhism","level":2,"parent":"mahayana"},
+ {"id":"thien","name":"Thiền","level":3,"parent":"vietnamese-buddhism"},
+ {"id":"truc-lam","name":"Trúc Lâm","level":4,"parent":"thien"},
+ {"id":"lam-te","name":"Lâm Tế","level":4,"parent":"thien"},
+ {"id":"tinh-do","name":"Tịnh Độ","level":3,"parent":"vietnamese-buddhism"},
+ {"id":"khat-si","name":"Khất Sĩ Order","level":3,"parent":"vietnamese-buddhism"},
+ {"id":"plum-village","name":"Plum Village","level":3,"parent":"vietnamese-buddhism"},
+ {"id":"vajrayana","name":"Vajrayāna","level":1,"parent":null},
+ {"id":"tibetan-buddhism","name":"Tibetan Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"nyingma","name":"Nyingma","level":3,"parent":"tibetan-buddhism"},
+ {"id":"katok","name":"Katok","level":4,"parent":"nyingma"},
+ {"id":"palyul","name":"Palyul","level":4,"parent":"nyingma"},
+ {"id":"mindrolling","name":"Mindrolling","level":4,"parent":"nyingma"},
+ {"id":"shechen","name":"Shechen","level":4,"parent":"nyingma"},
+ {"id":"dorje-drag","name":"Dorje Drak","level":4,"parent":"nyingma"},
+ {"id":"dzogchen-monastery","name":"Dzogchen Monastery","level":4,"parent":"nyingma"},
+ {"id":"kagyu","name":"Kagyu","level":3,"parent":"tibetan-buddhism"},
+ {"id":"karma-kagyu","name":"Karma Kagyu","level":4,"parent":"kagyu"},
+ {"id":"drikung-kagyu","name":"Drikung Kagyu","level":4,"parent":"kagyu"},
+ {"id":"drukpa-kagyu","name":"Drukpa Kagyu","level":4,"parent":"kagyu"},
+ {"id":"shangpa-kagyu","name":"Shangpa Kagyu","level":4,"parent":"kagyu"},
+ {"id":"taklung-kagyu","name":"Taklung Kagyu","level":4,"parent":"kagyu"},
+ {"id":"sakya","name":"Sakya","level":3,"parent":"tibetan-buddhism"},
+ {"id":"ngorpa","name":"Ngorpa","level":4,"parent":"sakya"},
+ {"id":"tsarpa","name":"Tsarpa","level":4,"parent":"sakya"},
+ {"id":"dzongsar","name":"Dzongsar","level":4,"parent":"sakya"},
+ {"id":"gelug","name":"Gelug","level":3,"parent":"tibetan-buddhism"},
+ {"id":"jonang","name":"Jonang","level":3,"parent":"tibetan-buddhism"},
+ {"id":"rime","name":"Rimé","level":3,"parent":"tibetan-buddhism"},
+ {"id":"mongolian-buddhism","name":"Mongolian Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"buryat-buddhism","name":"Buryat Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"kalmyk-buddhism","name":"Kalmyk Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"tuvan-buddhism","name":"Tuvan Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"newar-buddhism","name":"Newar Buddhism","level":2,"parent":"vajrayana"},
+ {"id":"bon","name":"Bön","level":1,"parent":null},
+ {"id":"western-contemporary","name":"Western / Contemporary","level":1,"parent":null},
+ {"id":"secular-buddhism","name":"Secular Buddhism","level":2,"parent":"western-contemporary"},
+ {"id":"triratna","name":"Triratna","level":2,"parent":"western-contemporary"},
+ {"id":"nkt","name":"New Kadampa","level":2,"parent":"western-contemporary"},
+ {"id":"shambhala","name":"Shambhala","level":2,"parent":"western-contemporary"}
+]