6Genix commited on
Commit
8a76939
·
1 Parent(s): 79db9e6

Enhance XAI transparency and user experience: Added real-time conversation display during model interactions, limited model exchanges to 3 rounds, improved response quality and clarity, and refined summary generation. Integrated spinner feedback for better UI responsiveness.

Browse files
Files changed (1) hide show
  1. app.py +55 -49
app.py CHANGED
@@ -38,21 +38,21 @@ def generate_engineer_response(user_text, tokenizer, model):
38
  """
39
  prompt = f"""
40
  User text: {user_text}
41
- Provide a technical approach or solution.
42
  """
43
  inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
44
  outputs = model.generate(
45
  inputs["input_ids"],
46
  attention_mask=inputs["attention_mask"],
47
- max_new_tokens=100, # Generate up to 100 new tokens
48
  temperature=0.7,
49
  do_sample=True,
50
- top_p=0.9,
51
- repetition_penalty=1.3,
52
  no_repeat_ngram_size=2,
53
  pad_token_id=tokenizer.pad_token_id
54
  )
55
- explanation = f"Generated based on user input: {user_text}"
56
  return tokenizer.decode(outputs[0], skip_special_tokens=True), explanation
57
 
58
  def generate_analyst_response(user_text, engineer_output, tokenizer, model):
@@ -62,31 +62,31 @@ def generate_analyst_response(user_text, engineer_output, tokenizer, model):
62
  prompt = f"""
63
  Engineer provided the following: {engineer_output}
64
 
65
- Provide an approach or solution from a data-centric perspective.
66
  """
67
  inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
68
  outputs = model.generate(
69
  inputs["input_ids"],
70
  attention_mask=inputs["attention_mask"],
71
- max_new_tokens=100, # Generate up to 100 new tokens
72
  temperature=0.7,
73
  do_sample=True,
74
- top_p=0.9,
75
- repetition_penalty=1.3,
76
  no_repeat_ngram_size=2,
77
  pad_token_id=tokenizer.pad_token_id
78
  )
79
- explanation = f"Generated based on Engineer's output: {engineer_output}"
80
  return tokenizer.decode(outputs[0], skip_special_tokens=True), explanation
81
 
82
  def summarize_conversation(conversation):
83
  """
84
  Summarize the entire conversation to produce a comprehensive plan.
85
  """
86
- summary = "Here is the summarized plan based on the discussion:\n"
87
  for speaker, text in conversation:
88
  if speaker != "User":
89
- summary += f"- {speaker}: {text}\n"
90
  return summary
91
 
92
  ##############################################################################
@@ -109,48 +109,23 @@ if st.button("Start/Continue Conversation"):
109
  st.session_state.conversation.append(("User", user_text))
110
 
111
  # Engineer generates a response
112
- engineer_resp, engineer_explanation = generate_engineer_response(
113
- user_text=user_text,
114
- tokenizer=tokenizerE,
115
- model=modelE
116
- )
117
- st.session_state.conversation.append(("Engineer", engineer_resp))
118
- st.session_state.conversation.append(("Engineer Explanation", engineer_explanation))
119
-
120
- # Display Engineer response immediately
121
- st.markdown(f"**Engineer:** {engineer_resp}")
122
- st.markdown(f"<i>{engineer_explanation}</i>", unsafe_allow_html=True)
123
-
124
- # Analyst generates a response based on engineer's output
125
- analyst_resp, analyst_explanation = generate_analyst_response(
126
- user_text=user_text,
127
- engineer_output=engineer_resp,
128
- tokenizer=tokenizerA,
129
- model=modelA
130
- )
131
- st.session_state.conversation.append(("Analyst", analyst_resp))
132
- st.session_state.conversation.append(("Analyst Explanation", analyst_explanation))
133
-
134
- # Display Analyst response immediately
135
- st.markdown(f"**Analyst:** {analyst_resp}")
136
- st.markdown(f"<i>{analyst_explanation}</i>", unsafe_allow_html=True)
137
-
138
- # Limit the conversation to 3 exchanges between Engineer and Analyst
139
- for _ in range(2):
140
  engineer_resp, engineer_explanation = generate_engineer_response(
141
- user_text=analyst_resp,
142
  tokenizer=tokenizerE,
143
  model=modelE
144
  )
145
  st.session_state.conversation.append(("Engineer", engineer_resp))
146
  st.session_state.conversation.append(("Engineer Explanation", engineer_explanation))
147
 
148
- # Display Engineer response immediately
149
- st.markdown(f"**Engineer:** {engineer_resp}")
150
- st.markdown(f"<i>{engineer_explanation}</i>", unsafe_allow_html=True)
151
 
 
 
152
  analyst_resp, analyst_explanation = generate_analyst_response(
153
- user_text=engineer_resp,
154
  engineer_output=engineer_resp,
155
  tokenizer=tokenizerA,
156
  model=modelA
@@ -158,14 +133,43 @@ if st.button("Start/Continue Conversation"):
158
  st.session_state.conversation.append(("Analyst", analyst_resp))
159
  st.session_state.conversation.append(("Analyst Explanation", analyst_explanation))
160
 
161
- # Display Analyst response immediately
162
- st.markdown(f"**Analyst:** {analyst_resp}")
163
- st.markdown(f"<i>{analyst_explanation}</i>", unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
 
165
  # Generate the summary after the conversation
166
  final_plan = summarize_conversation(st.session_state.conversation)
167
  st.session_state.conversation.append(("Summary", final_plan))
168
- st.markdown(f"**Summary:** {final_plan}")
169
 
170
  for speaker, text in st.session_state.conversation:
171
  if speaker == "User":
@@ -174,3 +178,5 @@ for speaker, text in st.session_state.conversation:
174
  st.markdown(f"**{speaker}:** {text}")
175
  elif "Explanation" in speaker:
176
  st.markdown(f"<i>{speaker}: {text}</i>", unsafe_allow_html=True)
 
 
 
38
  """
39
  prompt = f"""
40
  User text: {user_text}
41
+ Provide a technical approach or solution that directly addresses the problem. Ensure your response is actionable and concise.
42
  """
43
  inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
44
  outputs = model.generate(
45
  inputs["input_ids"],
46
  attention_mask=inputs["attention_mask"],
47
+ max_new_tokens=80, # Generate up to 80 new tokens
48
  temperature=0.7,
49
  do_sample=True,
50
+ top_p=0.85,
51
+ repetition_penalty=1.2,
52
  no_repeat_ngram_size=2,
53
  pad_token_id=tokenizer.pad_token_id
54
  )
55
+ explanation = f"Engineer response based on user input: '{user_text}'"
56
  return tokenizer.decode(outputs[0], skip_special_tokens=True), explanation
57
 
58
  def generate_analyst_response(user_text, engineer_output, tokenizer, model):
 
62
  prompt = f"""
63
  Engineer provided the following: {engineer_output}
64
 
65
+ Based on this, provide an actionable data-driven approach or solution to complement the engineer's perspective.
66
  """
67
  inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
68
  outputs = model.generate(
69
  inputs["input_ids"],
70
  attention_mask=inputs["attention_mask"],
71
+ max_new_tokens=80, # Generate up to 80 new tokens
72
  temperature=0.7,
73
  do_sample=True,
74
+ top_p=0.85,
75
+ repetition_penalty=1.2,
76
  no_repeat_ngram_size=2,
77
  pad_token_id=tokenizer.pad_token_id
78
  )
79
+ explanation = f"Analyst response based on Engineer's output: '{engineer_output}'"
80
  return tokenizer.decode(outputs[0], skip_special_tokens=True), explanation
81
 
82
  def summarize_conversation(conversation):
83
  """
84
  Summarize the entire conversation to produce a comprehensive plan.
85
  """
86
+ summary = "**Final Plan:**\n"
87
  for speaker, text in conversation:
88
  if speaker != "User":
89
+ summary += f"- **{speaker}:** {text}\n"
90
  return summary
91
 
92
  ##############################################################################
 
109
  st.session_state.conversation.append(("User", user_text))
110
 
111
  # Engineer generates a response
112
+ with st.spinner("Engineer is formulating a solution..."):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  engineer_resp, engineer_explanation = generate_engineer_response(
114
+ user_text=user_text,
115
  tokenizer=tokenizerE,
116
  model=modelE
117
  )
118
  st.session_state.conversation.append(("Engineer", engineer_resp))
119
  st.session_state.conversation.append(("Engineer Explanation", engineer_explanation))
120
 
121
+ # Display Engineer response immediately
122
+ st.markdown(f"**Engineer:** {engineer_resp}")
123
+ st.markdown(f"<i>{engineer_explanation}</i>", unsafe_allow_html=True)
124
 
125
+ # Analyst generates a response based on engineer's output
126
+ with st.spinner("Analyst is analyzing data and providing insights..."):
127
  analyst_resp, analyst_explanation = generate_analyst_response(
128
+ user_text=user_text,
129
  engineer_output=engineer_resp,
130
  tokenizer=tokenizerA,
131
  model=modelA
 
133
  st.session_state.conversation.append(("Analyst", analyst_resp))
134
  st.session_state.conversation.append(("Analyst Explanation", analyst_explanation))
135
 
136
+ # Display Analyst response immediately
137
+ st.markdown(f"**Analyst:** {analyst_resp}")
138
+ st.markdown(f"<i>{analyst_explanation}</i>", unsafe_allow_html=True)
139
+
140
+ # Limit the conversation to 3 exchanges between Engineer and Analyst
141
+ for _ in range(2):
142
+ with st.spinner("Engineer is formulating a solution..."):
143
+ engineer_resp, engineer_explanation = generate_engineer_response(
144
+ user_text=analyst_resp,
145
+ tokenizer=tokenizerE,
146
+ model=modelE
147
+ )
148
+ st.session_state.conversation.append(("Engineer", engineer_resp))
149
+ st.session_state.conversation.append(("Engineer Explanation", engineer_explanation))
150
+
151
+ # Display Engineer response immediately
152
+ st.markdown(f"**Engineer:** {engineer_resp}")
153
+ st.markdown(f"<i>{engineer_explanation}</i>", unsafe_allow_html=True)
154
+
155
+ with st.spinner("Analyst is analyzing data and providing insights..."):
156
+ analyst_resp, analyst_explanation = generate_analyst_response(
157
+ user_text=engineer_resp,
158
+ engineer_output=engineer_resp,
159
+ tokenizer=tokenizerA,
160
+ model=modelA
161
+ )
162
+ st.session_state.conversation.append(("Analyst", analyst_resp))
163
+ st.session_state.conversation.append(("Analyst Explanation", analyst_explanation))
164
+
165
+ # Display Analyst response immediately
166
+ st.markdown(f"**Analyst:** {analyst_resp}")
167
+ st.markdown(f"<i>{analyst_explanation}</i>", unsafe_allow_html=True)
168
 
169
  # Generate the summary after the conversation
170
  final_plan = summarize_conversation(st.session_state.conversation)
171
  st.session_state.conversation.append(("Summary", final_plan))
172
+ st.markdown(final_plan)
173
 
174
  for speaker, text in st.session_state.conversation:
175
  if speaker == "User":
 
178
  st.markdown(f"**{speaker}:** {text}")
179
  elif "Explanation" in speaker:
180
  st.markdown(f"<i>{speaker}: {text}</i>", unsafe_allow_html=True)
181
+ else:
182
+ st.markdown(f"**{speaker}:** {text}")