jmisak commited on
Commit
e32ff62
·
verified ·
1 Parent(s): 36183ed

Update engine/responder.py

Browse files
Files changed (1) hide show
  1. engine/responder.py +12 -22
engine/responder.py CHANGED
@@ -47,46 +47,38 @@ def generate_response(student_prompt, persona, conversation_history, force_mode=
47
 
48
 
49
  def generate_response_hf(student_prompt, persona, conversation_history, force_mode=None):
50
- """
51
- Generate response using Hugging Face Inference API (free, non-gated models).
52
- """
53
  try:
54
  from huggingface_hub import InferenceClient
55
 
56
- # Initialize state and mode
57
  state = persona.get("default_state", {}).copy()
58
  if force_mode:
59
  state["mode"] = force_mode
60
 
61
  mode = get_current_mode(state)
62
-
63
- # Apply response effects
64
  state = apply_response_effects(state, student_prompt)
65
  mode = get_current_mode(state)
66
 
67
- # Build prompt components
68
  system_prompt = build_system_prompt_for_ai(persona, state, mode)
69
  name = persona.get("persona_name", "Client")
70
 
71
- # Format conversation history
72
  messages = [{"role": "system", "content": system_prompt}]
73
  for turn in conversation_history[-3:]:
74
  if "student" in turn:
75
  messages.append({"role": "user", "content": turn["student"]})
76
  if "client" in turn:
77
  messages.append({"role": "assistant", "content": turn["client"]})
78
-
79
- # Add current student prompt
80
  messages.append({"role": "user", "content": student_prompt})
81
 
82
- # Initialize client
83
- client = InferenceClient(token=os.getenv("HF_TOKEN"))
 
84
 
85
- # Model priority list (fastest first)
86
  models = [
87
- "microsoft/Phi-3-mini-4k-instruct", # ✅ Fast and capable
88
- "HuggingFaceH4/zephyr-7b-beta", # Good instruction following
89
- "mistralai/Mistral-7B-Instruct-v0.2", # Higher quality, slower
90
  ]
91
 
92
  response_text = None
@@ -100,17 +92,16 @@ def generate_response_hf(student_prompt, persona, conversation_history, force_mo
100
  stream=False
101
  )
102
  response_text = response.choices[0].message.content.strip()
103
- break # Success
 
104
  except Exception as model_error:
105
  from engine.utils import safe_log
106
  safe_log(f"HF model {model} failed", str(model_error))
107
- continue # Try next model
108
 
109
- # If all models failed
110
  if not response_text:
111
  raise Exception("All HF models failed")
112
 
113
- # Update emotional memory
114
  if "emotional_memory" in state:
115
  if not isinstance(state["emotional_memory"], list):
116
  state["emotional_memory"] = []
@@ -118,9 +109,8 @@ def generate_response_hf(student_prompt, persona, conversation_history, force_mo
118
  state["emotional_memory"].append(memory_tag)
119
  state["emotional_memory"] = state["emotional_memory"][-5:]
120
 
121
- # Generate teaching note
122
  teaching_note = generate_teaching_note(state, student_prompt, mode)
123
- teaching_note += "\n\n💡 Response generated using AI (Hugging Face)"
124
 
125
  return response_text, state, teaching_note
126
 
 
47
 
48
 
49
  def generate_response_hf(student_prompt, persona, conversation_history, force_mode=None):
50
+ """Generate response using Hugging Face Inference API (free, non-gated models)."""
 
 
51
  try:
52
  from huggingface_hub import InferenceClient
53
 
 
54
  state = persona.get("default_state", {}).copy()
55
  if force_mode:
56
  state["mode"] = force_mode
57
 
58
  mode = get_current_mode(state)
 
 
59
  state = apply_response_effects(state, student_prompt)
60
  mode = get_current_mode(state)
61
 
 
62
  system_prompt = build_system_prompt_for_ai(persona, state, mode)
63
  name = persona.get("persona_name", "Client")
64
 
 
65
  messages = [{"role": "system", "content": system_prompt}]
66
  for turn in conversation_history[-3:]:
67
  if "student" in turn:
68
  messages.append({"role": "user", "content": turn["student"]})
69
  if "client" in turn:
70
  messages.append({"role": "assistant", "content": turn["client"]})
 
 
71
  messages.append({"role": "user", "content": student_prompt})
72
 
73
+ print("[DEBUG] Prompt sent to model:")
74
+ import pprint
75
+ pprint.pprint(messages)
76
 
77
+ client = InferenceClient(token=os.getenv("HF_TOKEN"))
78
  models = [
79
+ "microsoft/Phi-3-mini-4k-instruct",
80
+ "HuggingFaceH4/zephyr-7b-beta",
81
+ "mistralai/Mistral-7B-Instruct-v0.2",
82
  ]
83
 
84
  response_text = None
 
92
  stream=False
93
  )
94
  response_text = response.choices[0].message.content.strip()
95
+ if response_text:
96
+ break
97
  except Exception as model_error:
98
  from engine.utils import safe_log
99
  safe_log(f"HF model {model} failed", str(model_error))
100
+ continue
101
 
 
102
  if not response_text:
103
  raise Exception("All HF models failed")
104
 
 
105
  if "emotional_memory" in state:
106
  if not isinstance(state["emotional_memory"], list):
107
  state["emotional_memory"] = []
 
109
  state["emotional_memory"].append(memory_tag)
110
  state["emotional_memory"] = state["emotional_memory"][-5:]
111
 
 
112
  teaching_note = generate_teaching_note(state, student_prompt, mode)
113
+ teaching_note += f"\n\n💡 Response generated using {model}"
114
 
115
  return response_text, state, teaching_note
116