File size: 3,782 Bytes
7bb4d19
d1f0f2d
7bb4d19
 
fb77726
bdd842c
af38c19
 
 
a53437c
d1f0f2d
fb77726
af38c19
 
 
 
4b68ad4
 
 
 
7bb4d19
 
 
 
 
 
 
 
 
 
 
 
 
af38c19
7bb4d19
 
fb77726
 
 
 
bdd842c
68f11c9
bdd842c
 
ac03bb3
af38c19
ac03bb3
4a8deab
ac03bb3
 
 
c98264e
 
 
 
ac03bb3
c98264e
 
 
 
ac03bb3
c98264e
ac03bb3
c98264e
7bb4d19
ac03bb3
 
c98264e
 
 
 
ac03bb3
c98264e
ac03bb3
c98264e
ac03bb3
 
7bb4d19
af38c19
7bb4d19
 
077080c
af38c19
077080c
 
4a8deab
 
 
7bb4d19
 
 
 
 
 
 
 
 
 
 
7445f95
 
 
a53437c
4b68ad4
 
a53437c
 
d1f0f2d
a53437c
 
d1f0f2d
 
 
7bb4d19
 
 
 
 
 
 
 
af38c19
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { Messager, MessagerList } from "./messager.js";
import { transform_footnote } from "./stream_jsonizer.js";

let messagers_container = $("#messagers-container");
let available_models_select = $("#available-models-select");
let temperature_select = $("#temperature-select");

let messager_list = new MessagerList(messagers_container);
let chat_history = [messager_list];
let md_to_html_converter = new showdown.Converter();
md_to_html_converter.setFlavor("github");

export function get_active_messager_list() {
    return chat_history[chat_history.length - 1];
}

export function get_latest_messager() {
    return get_active_messager_list().messagers.slice(-1)[0];
}

export function create_messager(
    role,
    content = "",
    model = "",
    temperature = ""
) {
    let message = {
        role: role,
        content: content,
        model: model,
        temperature: temperature,
    };
    let messager = new Messager(message);
    get_active_messager_list().push(messager);
}

export function get_selected_llm_model() {
    return available_models_select.val();
}

export function get_selected_temperature() {
    return Number(temperature_select.val());
}

export function get_latest_messager_container() {
    return get_active_messager_list().messagers_container.children().last();
}
export function get_latest_message_content_displayer() {
    return get_latest_messager_container().find(".content-displayer");
}

export function get_latest_user_messager() {
    return $(".message-user").last();
}

export function start_latest_message_animation() {
    get_latest_messager_container()
        .find(".content-displayer")
        .addClass("blinking");
    get_latest_user_messager()
        .find(".button-group")
        .find(".regenerate-button")
        .find("i")
        .addClass("fa-spin-fast");
}

export function stop_latest_message_animation() {
    get_latest_messager_container()
        .find(".content-displayer")
        .removeClass("blinking");
    get_latest_user_messager()
        .find(".button-group")
        .find(".regenerate-button")
        .find("i")
        .removeClass("fa-spin-fast");
}

export function get_request_messages() {
    return get_active_messager_list().get_request_messages();
}

export function pop_messager(n = 2) {
    return get_active_messager_list().pop(n);
}

export function update_message(json_chunks, content_displayer = null) {
    if (content_displayer === null) {
        content_displayer = get_latest_message_content_displayer();
    }
    json_chunks.forEach(function (item) {
        let choice = item.choices[0];
        let content = choice.delta.content;
        let role = choice.delta.role;
        let finish_reason = choice.finish_reason;
        if (role) {
            console.log("role: " + role);
        }
        if (content) {
            console.log(content);
            content_displayer.data(
                "raw_content",
                content_displayer.data("raw_content") + content
            );
            get_active_messager_list().messagers.slice(-1)[0].message.content +=
                content;
            content_displayer.html(
                md_to_html_converter.makeHtml(
                    transform_footnote(content_displayer.data("raw_content"))
                )
            );
            content_displayer
                .find("table")
                .addClass("table table-bordered table-hover");
        }
        if (finish_reason === "stop") {
            console.log("[STOP]");
        }
        console.log(item);
    });
    return json_chunks;
}

export function create_new_chat_session() {
    let new_messager_list = new MessagerList(messagers_container);
    chat_history.push(new_messager_list);
    messagers_container.empty();
}