Hamdy005 commited on
Commit
d052f4f
·
1 Parent(s): 64f7965

feat: optimize auth concurrency and enable full account deletion

Browse files
Files changed (3) hide show
  1. auth/routes.py +11 -1
  2. rag/constants.py +5 -5
  3. rag/rag.py +8 -8
auth/routes.py CHANGED
@@ -80,8 +80,18 @@ async def upload_avatar(
80
 
81
  @router.delete("/me")
82
  async def delete_account(user_id: str = Depends(get_current_user_id)):
 
83
  delete_user_data(user_id)
84
- return {"status": "success", "message": "Account data deleted"}
 
 
 
 
 
 
 
 
 
85
 
86
 
87
  @router.get("/profile")
 
80
 
81
  @router.delete("/me")
82
  async def delete_account(user_id: str = Depends(get_current_user_id)):
83
+ # 1. Delete all DB data (materials, quizzes, profile, etc.)
84
  delete_user_data(user_id)
85
+
86
+ # 2. Delete the Supabase Auth user so they can't sign in again
87
+ admin_client = get_supabase()
88
+ if admin_client:
89
+ try:
90
+ admin_client.auth.admin.delete_user(user_id)
91
+ except Exception as e:
92
+ raise HTTPException(500, f"Account data deleted but failed to remove auth user: {e}")
93
+
94
+ return {"status": "success", "message": "Account deleted successfully"}
95
 
96
 
97
  @router.get("/profile")
rag/constants.py CHANGED
@@ -6,15 +6,15 @@ WARMUP_INTERVAL_S = 300
6
 
7
  # Web search configuration — Wiki + DDG for topics, DDG only for PDF/URL materials.
8
  WIKI_TOP_K_RESULTS = 1 # Number of top Wikipedia articles retrieved
9
- WIKI_DOC_CONTENT_CHARS_MAX = 1200 # Max chars from Wikipedia result
10
 
11
  # DuckDuckGO Search
12
- DUCKDUCKGO_NUM_RESULTS = 4 # Number of DDG snippet results returned per search
13
- DUCKDUCKGO_DOC_CONTENT_CHARS_MAX = 2500 # Max chars kept from combined DDG result block
14
 
15
  # RAG & Memory Configuration
16
- MEMORY_WINDOW_SIZE = 12 # Number of previous conversation turns preserved in memory window
17
- TOP_K_CHUNKS = 4 # Number of top relevant material chunks retrieved for context
18
 
19
  RAG_PROMPT_TEMPLATE_BASE = """\
20
  <role>
 
6
 
7
  # Web search configuration — Wiki + DDG for topics, DDG only for PDF/URL materials.
8
  WIKI_TOP_K_RESULTS = 1 # Number of top Wikipedia articles retrieved
9
+ WIKI_DOC_CONTENT_CHARS_MAX = 1000 # Max chars from Wikipedia result
10
 
11
  # DuckDuckGO Search
12
+ DUCKDUCKGO_NUM_RESULTS = 3 # Number of DDG snippet results returned per search
13
+ DUCKDUCKGO_DOC_CONTENT_CHARS_MAX = 1500 # Max chars kept from combined DDG result block
14
 
15
  # RAG & Memory Configuration
16
+ MEMORY_WINDOW_SIZE = 8 # Number of previous conversation turns preserved in memory window
17
+ TOP_K_CHUNKS = 3 # Number of top relevant material chunks retrieved for context
18
 
19
  RAG_PROMPT_TEMPLATE_BASE = """\
20
  <role>
rag/rag.py CHANGED
@@ -386,7 +386,7 @@ def rag_answer(
386
  return any(t.startswith(p) for p in _REFUSAL_PREFIXES)
387
 
388
  try:
389
- primary_llm = get_gemma_31b_llm()
390
  chain = prompt | primary_llm
391
 
392
  memory_vars = memory.load_memory_variables({"input": query})
@@ -405,9 +405,9 @@ def rag_answer(
405
  memory.save_context({"input": query}, {"output": answer})
406
  return answer, memory
407
  except Exception as e:
408
- logger.warning(f"Gemma 4 31B API call failed or rate-limited: {e}. Falling back to gemma-4-26b-a4b-it immediately.")
409
  try:
410
- fallback_llm = get_gemma_26b_llm()
411
  chain = prompt | fallback_llm
412
  memory_vars = memory.load_memory_variables({"input": query})
413
  chat_history = memory_vars.get("chat_history", [])
@@ -424,7 +424,7 @@ def rag_answer(
424
  memory.save_context({"input": query}, {"output": answer})
425
  return answer, memory
426
  except Exception as fallback_err:
427
- logger.error(f"Fallback Gemma 4 26B LLM call also failed: {fallback_err}")
428
  raise fallback_err
429
 
430
  def extract_chat_title(query: str, material_title: Optional[str] = None) -> str:
@@ -440,17 +440,17 @@ def extract_chat_title(query: str, material_title: Optional[str] = None) -> str:
440
  )
441
 
442
  try:
443
- primary_llm = get_gemma_31b_llm()
444
  chain = prompt | primary_llm
445
  response = chain.invoke({"query": query})
446
  except Exception as e:
447
- logger.warning(f"Gemma 4 31B API call failed or rate-limited in extract_chat_title: {e}. Falling back to gemma-4-26b-a4b-it immediately.")
448
  try:
449
- fallback_llm = get_gemma_26b_llm()
450
  chain = prompt | fallback_llm
451
  response = chain.invoke({"query": query})
452
  except Exception as fallback_err:
453
- logger.error(f"Fallback Gemma 4 26B LLM call also failed in extract_chat_title: {fallback_err}")
454
  raise fallback_err
455
 
456
  title = _clean_llm_response(response.content).strip().strip('"').strip("'")
 
386
  return any(t.startswith(p) for p in _REFUSAL_PREFIXES)
387
 
388
  try:
389
+ primary_llm = get_gemma_26b_llm()
390
  chain = prompt | primary_llm
391
 
392
  memory_vars = memory.load_memory_variables({"input": query})
 
405
  memory.save_context({"input": query}, {"output": answer})
406
  return answer, memory
407
  except Exception as e:
408
+ logger.warning(f"Gemma 4 26B API call failed or rate-limited: {e}. Falling back to gemma-4-31b-it immediately.")
409
  try:
410
+ fallback_llm = get_gemma_31b_llm()
411
  chain = prompt | fallback_llm
412
  memory_vars = memory.load_memory_variables({"input": query})
413
  chat_history = memory_vars.get("chat_history", [])
 
424
  memory.save_context({"input": query}, {"output": answer})
425
  return answer, memory
426
  except Exception as fallback_err:
427
+ logger.error(f"Fallback Gemma 4 31B LLM call also failed: {fallback_err}")
428
  raise fallback_err
429
 
430
  def extract_chat_title(query: str, material_title: Optional[str] = None) -> str:
 
440
  )
441
 
442
  try:
443
+ primary_llm = get_gemma_26b_llm()
444
  chain = prompt | primary_llm
445
  response = chain.invoke({"query": query})
446
  except Exception as e:
447
+ logger.warning(f"Gemma 4 26B API call failed or rate-limited in extract_chat_title: {e}. Falling back to gemma-4-31b-it immediately.")
448
  try:
449
+ fallback_llm = get_gemma_31b_llm()
450
  chain = prompt | fallback_llm
451
  response = chain.invoke({"query": query})
452
  except Exception as fallback_err:
453
+ logger.error(f"Fallback Gemma 4 31B LLM call also failed in extract_chat_title: {fallback_err}")
454
  raise fallback_err
455
 
456
  title = _clean_llm_response(response.content).strip().strip('"').strip("'")