NandanData commited on
Commit
3f97386
·
verified ·
1 Parent(s): 4e92722

Update backend/chat_endpoint.py

Browse files
Files changed (1) hide show
  1. backend/chat_endpoint.py +76 -23
backend/chat_endpoint.py CHANGED
@@ -9,33 +9,86 @@ def _headers():
9
  tok = os.getenv("HF_API_TOKEN")
10
  return {"Authorization": f"Bearer {tok}","Content-Type":"application/json"} if tok else {}
11
 
 
12
  def chat(user_message: str, mode: str = "patient"):
13
  url = active_chat_endpoint()
14
- if not _headers():
 
15
  return "⚠ Add HF_API_TOKEN in Settings → Secrets."
16
- system = AI_GYNO_PERSONA_V2 + ("\nPrefer plain-language for patients." if mode=='patient' else "\nProvide differentials, workup, and red flags.")
 
 
 
 
 
17
  payload = {
18
  "inputs": [
19
- {"role":"system","content": system},
20
- {"role":"user","content": user_message}
21
  ],
22
- "parameters": {"max_new_tokens": 400, "temperature": 0.2, "return_full_text": False}
 
 
 
 
23
  }
24
- for attempt in range(1, RETRIES_DEFAULT+1):
25
- try:
26
- r = requests.post(url, headers=_headers(), json=payload, timeout=REQUEST_TIMEOUT_SECONDS_DEFAULT)
27
- try:
28
- data = r.json()
29
- except Exception:
30
- txt = r.text
31
- if "loading" in txt.lower():
32
- time.sleep(BACKOFF_SECONDS_DEFAULT * attempt); continue
33
- return f"⚠ Non-JSON response:\n\n{txt[:1500]}"
34
- if isinstance(data, list) and data and "generated_text" in data[0]:
35
- return data[0]["generated_text"]
36
- if isinstance(data, dict) and "generated_text" in data:
37
- return data["generated_text"]
38
- return "⚠ Unexpected response:\n" + json.dumps(data)[:1200]
39
- except Exception as e:
40
- time.sleep(BACKOFF_SECONDS_DEFAULT * attempt)
41
- return "❌ Endpoint unavailable after retries."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  tok = os.getenv("HF_API_TOKEN")
10
  return {"Authorization": f"Bearer {tok}","Content-Type":"application/json"} if tok else {}
11
 
12
+
13
  def chat(user_message: str, mode: str = "patient"):
14
  url = active_chat_endpoint()
15
+ headers = _headers()
16
+ if not headers:
17
  return "⚠ Add HF_API_TOKEN in Settings → Secrets."
18
+
19
+ system = AI_GYNO_PERSONA_V2 + (
20
+ "\nUse simple, reassuring language." if mode=="patient"
21
+ else "\nUse clinical language, differentials, and red flags."
22
+ )
23
+
24
  payload = {
25
  "inputs": [
26
+ {"role": "system", "content": system},
27
+ {"role": "user", "content": user_message}
28
  ],
29
+ "parameters": {
30
+ "max_new_tokens": 400,
31
+ "temperature": 0.2,
32
+ "return_full_text": False
33
+ }
34
  }
35
+
36
+ try:
37
+ r = requests.post(url, headers=headers, json=payload, timeout=60)
38
+ except Exception as e:
39
+ return f"⚠ Network error: {str(e)}"
40
+
41
+ # --- SAFER PARSER ---
42
+ txt = r.text
43
+
44
+ # HTML clear signal model is loading or wrong
45
+ if "<html" in txt.lower():
46
+ if "loading" in txt.lower():
47
+ return "⏳ Model is loading on HuggingFace… try again in 20–30 sec."
48
+ return f"⚠ Endpoint returned HTML instead of JSON:\n\n{txt[:500]}"
49
+
50
+ # Try normal JSON
51
+ try:
52
+ data = r.json()
53
+ except:
54
+ return f"⚠ Non-JSON content returned:\n\n{txt[:500]}"
55
+
56
+ # Standard HF generation
57
+ if isinstance(data, list) and len(data) and "generated_text" in data[0]:
58
+ return data[0]["generated_text"]
59
+ if isinstance(data, dict) and "generated_text" in data:
60
+ return data["generated_text"]
61
+
62
+ return f"⚠ Unexpected JSON:\n{json.dumps(data)[:800]}"
63
+
64
+
65
+ # def chat(user_message: str, mode: str = "patient"):
66
+ # url = active_chat_endpoint()
67
+ # if not _headers():
68
+ # return "⚠ Add HF_API_TOKEN in Settings → Secrets."
69
+ # system = AI_GYNO_PERSONA_V2 + ("\nPrefer plain-language for patients." if mode=='patient' else "\nProvide differentials, workup, and red flags.")
70
+ # payload = {
71
+ # "inputs": [
72
+ # {"role":"system","content": system},
73
+ # {"role":"user","content": user_message}
74
+ # ],
75
+ # "parameters": {"max_new_tokens": 400, "temperature": 0.2, "return_full_text": False}
76
+ # }
77
+ # for attempt in range(1, RETRIES_DEFAULT+1):
78
+ # try:
79
+ # r = requests.post(url, headers=_headers(), json=payload, timeout=REQUEST_TIMEOUT_SECONDS_DEFAULT)
80
+ # try:
81
+ # data = r.json()
82
+ # except Exception:
83
+ # txt = r.text
84
+ # if "loading" in txt.lower():
85
+ # time.sleep(BACKOFF_SECONDS_DEFAULT * attempt); continue
86
+ # return f"⚠ Non-JSON response:\n\n{txt[:1500]}"
87
+ # if isinstance(data, list) and data and "generated_text" in data[0]:
88
+ # return data[0]["generated_text"]
89
+ # if isinstance(data, dict) and "generated_text" in data:
90
+ # return data["generated_text"]
91
+ # return "⚠ Unexpected response:\n" + json.dumps(data)[:1200]
92
+ # except Exception as e:
93
+ # time.sleep(BACKOFF_SECONDS_DEFAULT * attempt)
94
+ # return "❌ Endpoint unavailable after retries."