blessingmwiti Codex commited on
Commit
d256fda
·
1 Parent(s): f1440ce

Sanitize streamed local model output

Browse files

Co-authored-by: Codex <codex@openai.com>

Files changed (2) hide show
  1. static/engine.js +8 -4
  2. static/ui.js +9 -2
static/engine.js CHANGED
@@ -33,6 +33,7 @@ export async function loadModel(onProgress) {
33
 
34
  export async function generateCode(prompt, language, onToken, onComplete) {
35
  if (!generator) throw new Error("Model not loaded");
 
36
 
37
  const messages = [
38
  {
@@ -54,20 +55,23 @@ export async function generateCode(prompt, language, onToken, onComplete) {
54
 
55
  const streamer = new TextStreamer(generator.tokenizer, {
56
  skip_prompt: true,
57
- callback_function: onToken,
 
 
 
58
  });
59
 
60
  const result = await generator(messages, {
61
  max_new_tokens: 1024,
62
- temperature: 0.2,
63
- do_sample: true,
64
  streamer,
65
  });
66
 
67
  const generated = result?.[0]?.generated_text;
68
- const fullCodeRaw = Array.isArray(generated)
69
  ? generated.at(-1).content
70
  : String(generated || "");
 
71
  const fullCode = stripMarkdownCodeFence(fullCodeRaw);
72
  onComplete(fullCode);
73
  return fullCode;
 
33
 
34
  export async function generateCode(prompt, language, onToken, onComplete) {
35
  if (!generator) throw new Error("Model not loaded");
36
+ let streamedText = "";
37
 
38
  const messages = [
39
  {
 
55
 
56
  const streamer = new TextStreamer(generator.tokenizer, {
57
  skip_prompt: true,
58
+ callback_function: (token) => {
59
+ streamedText += token;
60
+ onToken(token);
61
+ },
62
  });
63
 
64
  const result = await generator(messages, {
65
  max_new_tokens: 1024,
66
+ do_sample: false,
 
67
  streamer,
68
  });
69
 
70
  const generated = result?.[0]?.generated_text;
71
+ const resultText = Array.isArray(generated)
72
  ? generated.at(-1).content
73
  : String(generated || "");
74
+ const fullCodeRaw = resultText && resultText.trim() ? resultText : streamedText;
75
  const fullCode = stripMarkdownCodeFence(fullCodeRaw);
76
  onComplete(fullCode);
77
  return fullCode;
static/ui.js CHANGED
@@ -7,7 +7,7 @@ export function appendToken(token) {
7
 
8
  const display = document.getElementById("stream-display");
9
  if (display) {
10
- display.textContent = streamBuffer;
11
  display.scrollTop = display.scrollHeight;
12
  }
13
  }
@@ -67,7 +67,7 @@ export async function rollbackAndReplace(correctedCode, reason, verdict = "FIX")
67
  }
68
 
69
  export function getCurrentCode() {
70
- return streamBuffer;
71
  }
72
 
73
  export function setCode(code) {
@@ -96,6 +96,13 @@ function sleep(ms) {
96
  return new Promise((resolve) => setTimeout(resolve, ms));
97
  }
98
 
 
 
 
 
 
 
 
99
  Object.assign(window, {
100
  appendToken,
101
  setStatus,
 
7
 
8
  const display = document.getElementById("stream-display");
9
  if (display) {
10
+ display.textContent = cleanVisibleStream(streamBuffer);
11
  display.scrollTop = display.scrollHeight;
12
  }
13
  }
 
67
  }
68
 
69
  export function getCurrentCode() {
70
+ return cleanVisibleStream(streamBuffer);
71
  }
72
 
73
  export function setCode(code) {
 
96
  return new Promise((resolve) => setTimeout(resolve, ms));
97
  }
98
 
99
+ function cleanVisibleStream(code) {
100
+ if (typeof window.stripMarkdownCodeFence === "function") {
101
+ return window.stripMarkdownCodeFence(code);
102
+ }
103
+ return code;
104
+ }
105
+
106
  Object.assign(window, {
107
  appendToken,
108
  setStatus,