:gem: [Feature] Support table and footnote rendering
Browse files
apps/llm_mixer/js/buttons_binder.js
CHANGED
@@ -4,6 +4,7 @@ import {
|
|
4 |
stop_latest_message_animation,
|
5 |
start_latest_message_animation,
|
6 |
create_new_chat_session,
|
|
|
7 |
} from "./chat_operator.js";
|
8 |
|
9 |
export function bind_chat_buttons() {
|
@@ -79,6 +80,7 @@ class SendUserInputButtonBinder {
|
|
79 |
.addClass("fa fa-paper-plane")
|
80 |
.addClass("icon-success");
|
81 |
hljs.highlightAll();
|
|
|
82 |
}
|
83 |
}
|
84 |
|
|
|
4 |
stop_latest_message_animation,
|
5 |
start_latest_message_animation,
|
6 |
create_new_chat_session,
|
7 |
+
get_latest_message_content_displayer,
|
8 |
} from "./chat_operator.js";
|
9 |
|
10 |
export function bind_chat_buttons() {
|
|
|
80 |
.addClass("fa fa-paper-plane")
|
81 |
.addClass("icon-success");
|
82 |
hljs.highlightAll();
|
83 |
+
console.log(get_latest_message_content_displayer().data("raw_content"));
|
84 |
}
|
85 |
}
|
86 |
|
apps/llm_mixer/js/chat_operator.js
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import { Messager, MessagerList } from "./messager.js";
|
|
|
2 |
|
3 |
let messagers_container = $("#messagers-container");
|
4 |
let available_models_select = $("#available-models-select");
|
@@ -7,6 +8,7 @@ let temperature_select = $("#temperature-select");
|
|
7 |
let messager_list = new MessagerList(messagers_container);
|
8 |
let chat_history = [messager_list];
|
9 |
let md_to_html_converter = new showdown.Converter();
|
|
|
10 |
|
11 |
export function get_active_messager_list() {
|
12 |
return chat_history[chat_history.length - 1];
|
@@ -103,10 +105,12 @@ export function update_message(json_chunks, content_displayer = null) {
|
|
103 |
content;
|
104 |
content_displayer.html(
|
105 |
md_to_html_converter.makeHtml(
|
106 |
-
content_displayer.
|
107 |
)
|
108 |
);
|
109 |
-
content_displayer
|
|
|
|
|
110 |
}
|
111 |
if (finish_reason === "stop") {
|
112 |
console.log("[STOP]");
|
|
|
1 |
import { Messager, MessagerList } from "./messager.js";
|
2 |
+
import { transform_footnote } from "./stream_jsonizer.js";
|
3 |
|
4 |
let messagers_container = $("#messagers-container");
|
5 |
let available_models_select = $("#available-models-select");
|
|
|
8 |
let messager_list = new MessagerList(messagers_container);
|
9 |
let chat_history = [messager_list];
|
10 |
let md_to_html_converter = new showdown.Converter();
|
11 |
+
md_to_html_converter.setFlavor("github");
|
12 |
|
13 |
export function get_active_messager_list() {
|
14 |
return chat_history[chat_history.length - 1];
|
|
|
105 |
content;
|
106 |
content_displayer.html(
|
107 |
md_to_html_converter.makeHtml(
|
108 |
+
transform_footnote(content_displayer.data("raw_content"))
|
109 |
)
|
110 |
);
|
111 |
+
content_displayer
|
112 |
+
.find("table")
|
113 |
+
.addClass("table table-bordered table-hover");
|
114 |
}
|
115 |
if (finish_reason === "stop") {
|
116 |
console.log("[STOP]");
|
apps/llm_mixer/js/default.css
CHANGED
@@ -60,6 +60,10 @@
|
|
60 |
display: inline-block;
|
61 |
}
|
62 |
|
|
|
|
|
|
|
|
|
63 |
@keyframes blink {
|
64 |
0% {
|
65 |
background-color: transparent;
|
@@ -83,7 +87,3 @@
|
|
83 |
.icon-success {
|
84 |
color: green;
|
85 |
}
|
86 |
-
|
87 |
-
.no-margin-bottom {
|
88 |
-
margin-bottom: 0;
|
89 |
-
}
|
|
|
60 |
display: inline-block;
|
61 |
}
|
62 |
|
63 |
+
.message-viewer * {
|
64 |
+
margin-bottom: 0;
|
65 |
+
}
|
66 |
+
|
67 |
@keyframes blink {
|
68 |
0% {
|
69 |
background-color: transparent;
|
|
|
87 |
.icon-success {
|
88 |
color: green;
|
89 |
}
|
|
|
|
|
|
|
|
apps/llm_mixer/js/stream_jsonizer.js
CHANGED
@@ -18,3 +18,9 @@ export function jsonize_stream_data(data) {
|
|
18 |
});
|
19 |
return json_chunks;
|
20 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
});
|
19 |
return json_chunks;
|
20 |
}
|
21 |
+
|
22 |
+
export function transform_footnote(text) {
|
23 |
+
return text
|
24 |
+
.replace(/\[\^(\d+)\^\]\[\d+\]/g, "[$1]")
|
25 |
+
.replace(/\[(\d+)\]:\s*(.*)\s*""/g, "[$1] $2 \n");
|
26 |
+
}
|