machineuser commited on
Commit
575ec75
1 Parent(s): b6c4534

Sync widgets demo

Browse files
packages/widgets/src/lib/components/InferenceWidget/widgets/ConversationalWidget/ConversationalWidget.svelte CHANGED
@@ -203,8 +203,15 @@
203
  } else {
204
  error = `Something went wrong with the request.`;
205
  }
 
 
206
  }
207
  } finally {
 
 
 
 
 
208
  isLoading = false;
209
  abort = undefined;
210
  }
@@ -224,10 +231,14 @@
224
  }
225
 
226
  async function applyWidgetExample(example: Example, opts: ExampleRunOpts = {}): Promise<void> {
227
- if ("text" in example) {
228
- messages = [{ role: "user", content: example.text }];
 
 
 
 
229
  } else {
230
- messages = [...example.messages];
231
  }
232
  if (opts.isPreview) {
233
  return;
 
203
  } else {
204
  error = `Something went wrong with the request.`;
205
  }
206
+ } else {
207
+ clearConversation();
208
  }
209
  } finally {
210
+ const isLastMsgFromUser = messages.at(-1)?.role === "user";
211
+ if (error && isLastMsgFromUser) {
212
+ // roles should alternate. therefore, if there was an error, we should remove last user message so that user can submit new user message afterwards
213
+ messages = messages.slice(0, -1);
214
+ }
215
  isLoading = false;
216
  abort = undefined;
217
  }
 
231
  }
232
 
233
  async function applyWidgetExample(example: Example, opts: ExampleRunOpts = {}): Promise<void> {
234
+ clearConversation();
235
+ if (opts.inferenceOpts?.isOnLoadCall) {
236
+ // if isOnLoadCall do NOT trigger svelte UI update, the UI update will be triggered by getOutput if the example succeeds
237
+ // otherwise, error will be suppressed so that user doesn't come to errored page on load
238
+ // however, the user will still get the error after manually interacting with the widget if it is not isOnLoadCall
239
+ "text" in example ? messages.push({ role: "user", content: example.text }) : messages.push(...example.messages);
240
  } else {
241
+ "text" in example ? (messages = [{ role: "user", content: example.text }]) : (messages = [...example.messages]);
242
  }
243
  if (opts.isPreview) {
244
  return;