PeterPinetree commited on
Commit
3d6904e
·
verified ·
1 Parent(s): b377514

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -8
app.py CHANGED
@@ -103,10 +103,28 @@ def create_story_summary(chat_history):
103
  }
104
  return summary_instruction
105
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  def respond(message, chat_history, genre=None, use_full_memory=True):
107
  """Generate a response based on the current message and conversation history"""
108
  system_message = get_enhanced_system_prompt(genre)
109
 
 
110
  formatted_history = []
111
  for user_msg, bot_msg in chat_history:
112
  formatted_history.append({"role": "user", "content": user_msg})
@@ -114,8 +132,9 @@ def respond(message, chat_history, genre=None, use_full_memory=True):
114
 
115
  api_messages = [{"role": "system", "content": system_message}]
116
 
 
117
  if use_full_memory and formatted_history:
118
- if len(formatted_history) > 20: # Arbitrary threshold
119
  summary_instruction = create_story_summary(chat_history[:len(chat_history)-5])
120
  if summary_instruction:
121
  api_messages.append(summary_instruction)
@@ -130,8 +149,10 @@ def respond(message, chat_history, genre=None, use_full_memory=True):
130
  for msg in formatted_history[-memory_length*2:]:
131
  api_messages.append(msg)
132
 
 
133
  api_messages.append({"role": "user", "content": message})
134
 
 
135
  if not chat_history or message.lower() in ["start", "begin", "begin my adventure"]:
136
  api_messages.append({
137
  "role": "system",
@@ -150,12 +171,15 @@ def respond(message, chat_history, genre=None, use_full_memory=True):
150
  delta = response_chunk.choices[0].delta.content
151
  if delta:
152
  bot_message += delta
 
153
  new_history = chat_history.copy()
154
  new_history.append((message, bot_message))
155
- yield new_history
 
156
  except Exception as e:
157
  error_message = f"Story magic temporarily interrupted. Please try again. (Error: {str(e)})"
158
- yield chat_history + [(message, error_message)]
 
159
 
160
  def save_story(chat_history):
161
  """Convert chat history to markdown for download"""
@@ -222,7 +246,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
222
  def update_starter_buttons(selected_genre):
223
  # Grab up to 4 examples from the chosen genre
224
  examples = get_examples_for_genre(selected_genre)
225
- # If there are fewer than 4, fill the rest with placeholders or hide them
226
  button_updates = []
227
  for i in range(4):
228
  if i < len(examples):
@@ -233,9 +256,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
233
 
234
  # Function that populates the msg with the chosen starter text, then calls respond
235
  def pick_starter(starter_text, chat_history, selected_genre, memory_flag):
236
- # The function returns the text to put in msg
237
- # but we also chain the respond function via .then
238
- return starter_text
239
 
240
  # Hook each starter button:
241
  # 1) Put the chosen text into 'msg'
@@ -273,7 +294,6 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
273
  save_btn = gr.Button("Download My Story", variant="secondary")
274
  story_output = gr.Markdown(visible=False)
275
 
276
- # "Download My Story" logic
277
  save_btn.click(save_story, inputs=[chatbot], outputs=[story_output])
278
  save_btn.click(
279
  fn=lambda: True,
 
103
  }
104
  return summary_instruction
105
 
106
+ # NEW HELPER: Convert (user, bot) tuples into the "role/content" dictionaries Gradio needs
107
+ def format_history_for_gradio(history_tuples):
108
+ """
109
+ Convert a list of (user_msg, bot_msg) tuples
110
+ into a list of dicts for 'type="messages"':
111
+ [
112
+ {"role": "user", "content": "foo"},
113
+ {"role": "assistant", "content": "bar"},
114
+ ...
115
+ ]
116
+ """
117
+ messages = []
118
+ for user_msg, bot_msg in history_tuples:
119
+ messages.append({"role": "user", "content": user_msg})
120
+ messages.append({"role": "assistant", "content": bot_msg})
121
+ return messages
122
+
123
  def respond(message, chat_history, genre=None, use_full_memory=True):
124
  """Generate a response based on the current message and conversation history"""
125
  system_message = get_enhanced_system_prompt(genre)
126
 
127
+ # Convert your existing (user, bot) history into a format for the API request
128
  formatted_history = []
129
  for user_msg, bot_msg in chat_history:
130
  formatted_history.append({"role": "user", "content": user_msg})
 
132
 
133
  api_messages = [{"role": "system", "content": system_message}]
134
 
135
+ # Use full memory or partial memory
136
  if use_full_memory and formatted_history:
137
+ if len(formatted_history) > 20:
138
  summary_instruction = create_story_summary(chat_history[:len(chat_history)-5])
139
  if summary_instruction:
140
  api_messages.append(summary_instruction)
 
149
  for msg in formatted_history[-memory_length*2:]:
150
  api_messages.append(msg)
151
 
152
+ # Add current user message
153
  api_messages.append({"role": "user", "content": message})
154
 
155
+ # Special handling for story initialization
156
  if not chat_history or message.lower() in ["start", "begin", "begin my adventure"]:
157
  api_messages.append({
158
  "role": "system",
 
171
  delta = response_chunk.choices[0].delta.content
172
  if delta:
173
  bot_message += delta
174
+ # Keep storing your conversation as (user, bot) tuples
175
  new_history = chat_history.copy()
176
  new_history.append((message, bot_message))
177
+ # Yield in the new dictionary format for Gradio
178
+ yield format_history_for_gradio(new_history)
179
  except Exception as e:
180
  error_message = f"Story magic temporarily interrupted. Please try again. (Error: {str(e)})"
181
+ broken_history = chat_history + [(message, error_message)]
182
+ yield format_history_for_gradio(broken_history)
183
 
184
  def save_story(chat_history):
185
  """Convert chat history to markdown for download"""
 
246
  def update_starter_buttons(selected_genre):
247
  # Grab up to 4 examples from the chosen genre
248
  examples = get_examples_for_genre(selected_genre)
 
249
  button_updates = []
250
  for i in range(4):
251
  if i < len(examples):
 
256
 
257
  # Function that populates the msg with the chosen starter text, then calls respond
258
  def pick_starter(starter_text, chat_history, selected_genre, memory_flag):
259
+ return starter_text # This goes into 'msg'
 
 
260
 
261
  # Hook each starter button:
262
  # 1) Put the chosen text into 'msg'
 
294
  save_btn = gr.Button("Download My Story", variant="secondary")
295
  story_output = gr.Markdown(visible=False)
296
 
 
297
  save_btn.click(save_story, inputs=[chatbot], outputs=[story_output])
298
  save_btn.click(
299
  fn=lambda: True,