|
|
| |
| const TABS = { |
| "chat-tab": "chat-tab-contents", |
| "explore-tab": "explore-tab-contents" |
| }; |
|
|
| |
| function switchTab(newTab) { |
| Object.keys(TABS).forEach(tabId => { |
| const tabElement = document.getElementById(tabId); |
| if (tabElement) { |
| tabElement.classList.remove("tab-active"); |
| } |
| }); |
|
|
| |
| Object.values(TABS).forEach(contentId => { |
| const contentElement = document.getElementById(contentId); |
| if (contentElement) { |
| contentElement.classList.add("hidden"); |
| } |
| }); |
|
|
| |
| if (newTab in TABS) { |
| const newTabElement = document.getElementById(newTab); |
| const newContentElement = document.getElementById(TABS[newTab]); |
|
|
| if (newTabElement) newTabElement.classList.add("tab-active"); |
| if (newContentElement) newContentElement.classList.remove("hidden"); |
| } |
| } |
|
|
| function addMessage(message, role = "user") { |
| const chatContainer = document.getElementById("chat-messages-container"); |
|
|
| const chatDiv = document.createElement("div"); |
| chatDiv.classList.add("chat"); |
|
|
| if (role === "user") |
| chatDiv.classList.add("chat-end"); |
| else if (role === "bot") |
| chatDiv.classList.add("chat-start"); |
| else |
| chatDiv.classList.add("chat-start"); |
|
|
| const bubbleDiv = document.createElement("div"); |
| bubbleDiv.classList.add("chat-bubble"); |
|
|
| if (role === "user") |
| bubbleDiv.classList.add("chat-bubble-primary"); |
| else if (role === "bot") |
| bubbleDiv.classList.add("chat-bubble-secondary"); |
| else |
| bubbleDiv.classList.add("chat-bubble-secondary"); |
|
|
| bubbleDiv.textContent = message; |
|
|
| chatDiv.appendChild(bubbleDiv); |
| chatContainer.appendChild(chatDiv); |
| chatContainer.scrollTop = chatContainer.scrollHeight; |
| } |
|
|
|
|
| function escapeString(str) { |
| return str |
| .replace(/\\/g, '\\\\') |
| .replace(/"/g, '\\"') |
| .replace(/\n/g, '\\n') |
| .replace(/\r/g, '\\r') |
| .replace(/\t/g, '\\t'); |
| } |
|
|
| |
| async function extractEntities(text) { |
| let escaped_text = escapeString(text); |
|
|
| try { |
| let graph_data_req = await fetch("/extract_entities", { |
| method: "POST", |
| headers: new Headers({ |
| "Content-Type": "application/json" |
| }), |
| body: JSON.stringify({ |
| content: escaped_text |
| }) |
| }) |
|
|
| let graph_data = await graph_data_req.json(); |
|
|
| console.log(graph_data); |
|
|
| var options = {}; |
| var network = new vis.Network(document.getElementById('grapha'), graph_data, options); |
| addMessage("I've created a knowledge graph based on what you've provided me. Check the explore tab !", "bot"); |
| } catch (e) { |
| console.error("Error while trying to extract entities into a KG", e); |
| } |
| } |
|
|
|
|
| document.addEventListener('DOMContentLoaded', _ => { |
| document.getElementById('chat-send-input').addEventListener('click', (ev) => { |
| let textbox = document.getElementById('chat-input'); |
| let text = textbox.value; |
|
|
| addMessage(text, "user"); |
| extractEntities(text); |
| textbox.value = ""; |
| }); |
| }) |