File size: 6,450 Bytes
064fb37
e608215
dfc6217
 
 
e3f1fd9
dfc6217
e608215
d763513
e608215
6bd3f87
e608215
 
dfc6217
6bd3f87
dfc6217
 
e608215
6bd3f87
 
e3f1fd9
 
6bd3f87
e3f1fd9
 
6bd3f87
e608215
 
dfc6217
6bd3f87
dfc6217
 
e608215
6bd3f87
e3f1fd9
e608215
6bd3f87
e608215
 
dfc6217
6bd3f87
e608215
dfc6217
 
b0a7e96
 
6bd3f87
e608215
 
6bd3f87
e608215
 
dfc6217
e608215
dfc6217
e608215
 
dfc6217
e608215
 
 
 
 
6bd3f87
e608215
 
dfc6217
 
6bd3f87
e608215
dfc6217
 
b0a7e96
 
6bd3f87
 
e608215
 
6bd3f87
e3f1fd9
 
dfc6217
e608215
 
 
 
 
dfc6217
e608215
dfc6217
6bd3f87
dfc6217
 
e608215
 
6bd3f87
e608215
 
 
dfc6217
6bd3f87
dfc6217
 
 
b0a7e96
 
6bd3f87
dfc6217
 
6bd3f87
 
dfc6217
 
 
 
6bd3f87
dfc6217
 
 
 
6bd3f87
 
dfc6217
 
6bd3f87
e3f1fd9
dfc6217
 
 
6bd3f87
dfc6217
e608215
aa217cb
 
 
 
 
 
8231b85
 
 
aa217cb
 
 
 
 
 
 
 
 
 
 
 
e608215
dfc6217
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// application/static/js/components/initialize.js
import requests from "./request.js";

class Initialize {
    constructor(uiManager) {
        this.convId = null;
        this.convTitle = null;
        this.uiManager = uiManager;
        this.systemPrompt = `your response syntax should be: ###for heading### \n ** for sub heading ** \n *** for text highlight/bold text ***`;
        this.model = null;
        console.log("Initialize constructor called"); // Initial log
    }

    async initialize(model = null) {
        console.log("initialize called with model:", model);
        this.convTitle = null;
        this.convId = null;
        this.uiManager.messagesDiv.innerHTML = '';
        this.uiManager.prevChatsCont.innerHTML = '';
        console.log("initialize: UI reset");

        await this.fetchModels(model);
        console.log("initialize: fetchModels completed");

        await this.fetchConvs();
        console.log("initialize: fetchConvs completed");
    }

    async reInitialize(id) {
        console.log("reInitialize called with id:", id);
        this.convTitle = null;
        this.convId = id;
        this.uiManager.messagesDiv.innerHTML = '';
        console.log("reInitialize: UI reset");

        await this.fetchConv(id);
        console.log("reInitialize: fetchConv completed");
    }

    async fetchConv(id) {
        console.log("fetchConv called with id:", id);
        try {
            const response = await requests.request('POST', '/fetch', { "Content-Type": "application/json" }, JSON.stringify({ "convId": id }), false);
            if (!response.ok) {
                // const errorText = await response.text(); // REMOVED - rely on request.js
                console.error(`Error fetching conversation: ${response.status}`); // Simplified
                return; // Early return on error
            }
            const data = await response.json();
            console.log("fetchConv: data received:", data);
            this.convTitle = data['title'];
            const arr = data['messages'];
            for (let i = 0; i < arr.length; i++) {
                const dict = arr[i];
                if (dict['role'] == 'user') {
                    this.uiManager.appendUserMsg(dict['content'])
                }
                else if (dict['role'] == 'assistant') {
                    this.uiManager.appendAiMsg(dict['content']);
                    this.uiManager.renderSymbols.renderAll(this.uiManager.aiP);
                }
            }
        } catch (error) {
            console.error("fetchConv: Error:", error);
        }
    }

    async fetchConvs() {
        console.log("fetchConvs called");
        try {
            const response = await requests.request('GET', '/convs', { "Content-Type": "application/json" }, null, false);
            if (!response.ok) {
                //const errorText = await response.text(); // REMOVED - rely on request.js
                console.error(`Error fetching conversations: ${response.status}`); // Simplified
                return; // Early return on error

            }
            const data = await response.json();
            console.log("fetchConvs: data received:", data);
            this.uiManager.prevChatsCont.innerHTML = '';

            for (let i = 0; i < data.length; i++) {
                const prevChat = document.createElement('div');
                const dict = data[i];
                prevChat.id = dict['convId'];
                prevChat.className = 'prevChat';
                prevChat.innerText = dict['title'];
                this.uiManager.prevChatsCont.appendChild(prevChat);

                prevChat.addEventListener('click', () => {
                    console.log("prevChat clicked, id:", prevChat.id); // Log click
                    this.reInitialize(prevChat.id);
                });
            }
        } catch (error) {
            console.error("fetchConvs: Error:", error);
        }
    }

    async fetchModels(initialModel) {
        console.log("fetchModels called with initialModel:", initialModel);
        try {
            const response = await requests.request('GET', '/models', { "Content-Type": "application/json" }, null, false);
            if (!response.ok) {
                //const errorText = await response.text(); // REMOVED - rely on request.js
                console.error(`Error fetching models: ${response.status}`); // Simplified
                return; // Early return on error
            }
            const data = await response.json();
            console.log("fetchModels: data received:", data);
            this.uiManager.models.innerHTML = '';

            for (let i = 0; i < data.length; i++) {
                const opt = document.createElement('option');
                opt.innerText = data[i];
                opt.value = data[i];
                this.uiManager.models.appendChild(opt);
            }

            this.model = initialModel || data[0];
            this.uiManager.models.value = this.model;
            console.log("fetchModels: model set to:", this.model);

            this.uiManager.models.addEventListener('change', (e) => {
                console.log("Model changed to:", e.target.value);
                this.model = e.target.value;
            });

        } catch (error) {
            console.error("fetchModels: Error:", error);
        }
    }
    // ADD THIS NEW METHOD
    async createConv() {
        console.log("createConv called");
        try {
            const response = await requests.request('POST', '/create', { "Content-Type": "application/json" }, JSON.stringify({ "system_prompt": this.systemPrompt }), false);
            if (!response.ok) {
                // No need to call response.text() here.  The error is already being thrown by request.js
                // const errorText = await response.text(); // THIS LINE IS REMOVED
                throw new Error(`Error creating conversation: ${response.status}`); // Simplified error
            }
            const data = await response.json();
            this.convId = data['convId'];  // Set the convId
            console.log("createConv: New convId:", this.convId);
            return this.convId; // Return the new convId

        } catch (error) {
            alert(`An error occurred creating a conversation: ${error}`);
            console.error(error);
            return null; // Return null on error
        }
    }
}
export default Initialize