Spaces:
Sleeping
Sleeping
import asyncio | |
import json | |
import chainlit as cl | |
from datetime import datetime | |
from utils_chain_parameters import prepare_chain_parameters | |
from utils_output import display_evaluation_results | |
from utils_voice import reply_with_voice | |
async def do_simulation(client, session_state, message): | |
if session_state.status == "active": | |
chain = cl.user_session.get("chain") | |
history = cl.user_session.get("history", []) | |
history.append({"role": "user", "content": message}) | |
session_state.previous_answer = message.content | |
prompt_parm = prepare_chain_parameters(session_state, message, history) | |
session_state.queries.append(prompt_parm) | |
response_content = chain.invoke(prompt_parm) | |
json_str = response_content.content.strip('```json\n').strip('```') | |
try: | |
this_response = json.loads(json_str) | |
except json.JSONDecodeError as e: | |
print(f"JSON Decode Error: {e}") | |
print(response_content.content) | |
print(f"Error at position {e.pos}: {json_str[max(0, e.pos-10):e.pos+10]}") | |
this_response = {"Response": "Error receiving response from LLM"} | |
llm_response = this_response.get("Response", "No response from LLM") | |
print("LLM Response:") | |
print(llm_response) | |
session_state.llm_responses.append(this_response) | |
print("Next question:") | |
print(this_response.get("Question", "No question")) | |
if session_state.question != "": | |
session_state.responses.append({ | |
"question_number": session_state.current_question_index, | |
"question": session_state.question, | |
"response": session_state.rep_answer, | |
"ground_truth": session_state.ground_truth, | |
"response_score": this_response.get("Score", "No score"), | |
"response_evaluation": this_response.get("Evaluation", "No evaluation"), | |
"mood_score": this_response.get("Mood Score", "No mood score"), | |
"overall_score": this_response.get("Overall Score", "No overall score"), | |
"overall_evaluation": this_response.get("Overall Evaluation", "No overall evaluation"), | |
}) | |
message_to_rep = llm_response + "\n\n" + this_response.get("Question", "No question") | |
print("Checking to continue") | |
print(session_state.current_question_index) | |
print(len(session_state.questions)) | |
if session_state.current_question_index < len(session_state.questions): | |
if session_state.do_voice: | |
await reply_with_voice(cl, client, message_to_rep) | |
else: | |
await cl.Message(message_to_rep).send() | |
# await cl.Message(this_response).send() | |
history.append({"role": "assistant", "content": response_content}) | |
cl.user_session.set("history", history) | |
session_state.current_question_index += 1 | |
else: | |
final_message = message_to_rep | |
conclusion = this_response.get("Conclusion", "") | |
if conclusion != "": | |
final_message = final_message + "\n\n" + conclusion | |
if session_state.do_voice: | |
await reply_with_voice(cl, client, final_message) | |
else: | |
await cl.Message(message_to_rep).send() | |
session_state.status = "complete" | |
end_time = datetime.now() | |
duration = end_time - session_state.start_time | |
duration_minutes = round(duration.total_seconds() / 60) | |
session_state.end_time = end_time | |
session_state.duration_minutes = duration_minutes | |
if session_state.do_evaluation: | |
await display_evaluation_results(cl, session_state) | |
else: | |
evaluate_actions = [ | |
cl.Action(name="Evaluate Performance", value="evaluate", description="Evaluate Performance"), | |
cl.Action(name="Display Queries and Responses", value="display_llm_responses", description="Display LLM Responses") | |
] | |
await cl.Message(content="Click to evaluate", actions=evaluate_actions).send() |