Skip to content

Instantly share code, notes, and snippets.

@am-shb
Last active July 7, 2023 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save am-shb/cbac06e4631c519c60f309633ac1ca56 to your computer and use it in GitHub Desktop.
Save am-shb/cbac06e4631c519c60f309633ac1ca56 to your computer and use it in GitHub Desktop.
A chatbot using GPT and semantic search from a large knowledge base - live demo at https://shahbandegan.me
@import "https://fonts.googleapis.com/css?family=Noto+Sans";
.chatbox ::-webkit-scrollbar {
width: 10px;
}
.chatbox ::-webkit-scrollbar-track {
border-radius: 10px;
background-color: rgba(25, 147, 212, 0.1);
}
.chatbox ::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: rgba(25, 147, 212, 0.8);
}
.chat-thread {
margin: 24px auto 0 auto;
padding: 0 20px 0 0;
list-style: none;
overflow-y: scroll;
overflow-x: hidden;
}
.chat-thread li {
position: relative;
clear: both;
display: inline-block;
padding: 16px 40px 16px 20px;
margin: 0 0 20px 0;
font: 16px/20px "Noto Sans", sans-serif;
border-radius: 10px;
background-color: rgba(25, 147, 212, 0.8);
}
/* Chat - Avatar */
.chat-thread li:before {
position: absolute;
top: 0;
width: 50px;
height: 50px;
border-radius: 50px;
content: "";
}
/* Chat - Speech Bubble Arrow */
.chat-thread li:after {
position: absolute;
top: 15px;
content: "";
width: 0;
height: 0;
border-top: 15px solid rgba(25, 147, 212, 0.8);
}
.chat-thread li:nth-child(odd) {
animation: show-chat-odd 0.15s 1 ease-in;
-moz-animation: show-chat-odd 0.15s 1 ease-in;
-webkit-animation: show-chat-odd 0.15s 1 ease-in;
float: right;
margin-right: 80px;
color: white;
}
.chat-thread li:nth-child(odd):before {
right: -80px;
background-image: url("data:image/jpg;base64,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u08ososrLutu/spA6l3sshqgq1JXcURQRacbfffffY378QeWZVQUQQeYgovk1gwgogkouu9vqvv6jkd7VjgiAnijvjpVdRQYYTbfXfffefrvrTTWRQcUQQRwgglogohgggghmmkppnjtPDn5AgEjAkuhtluQUYQQaRaXfefcfffvteUYTQYQQeQ9ggggggggggkgkpghmFvuFvPLH/b8AgggktDXTQaVbaWQdcQUdfvPFfSQ2QQEcRechigwghggogggwggggnvlunvHvPPMi4iggt3LDPPCEjaTWrXpPfvvvaQTwggghjwwm4xgoghioogggoggh3+t+vvvPvp/jigpjv8AbLpqKIHln0Ej573T77sEEOoYIIIMMJuMacctIfYIIJIIJIoKKr9/77L/AP8AO4gg8qkkgglw7BDVUTW+3ZVEYI8gw8log4wwwgwksngogogggioiogqsovuvqvuvoggiwwojygwwxzikwbdb/QYQQKQYShiggmg4hgp2wgkgigggggggkhgtugtvvPnuIIglgkqhgwzw8+4hyw5//UQUQAYUashgwkigggwggngkggggggggggggsgkgkvvvEoggikgkkg3ln/yhgwwx/XYQQA4tEhokwjggggAAhgoggggggggggggggjkhmtrrKjhEoAjggk49/wDussPMNf2kEGAsIIIIMIZMIMIAIIIIIMMIIIBIIAIIAYgKggjBDzBowqBCJdKqspL+seKIpblFEEiANMMMIIIIsMIJgBwoIYZOIIKIkAEF0gwAABCFjzyzzSzRAgaIoIIIIYIINL1FEEBoIIIIIIIIIIDZT81ueeb8iUGAIo2jBhCSwgBaU3km3sMhAhBDIr4Z5uJINb0EEEAIIIIIoAIIBYp56fHHONEDU2IAFR7/ALiPLUBF891RBVEKI8882OC//wDynqrgPUQSYQwgwgggggkDBfvL/dPPvnfvCAAVlfltuqiQcfPvvvmvuuOAPJEItL3fvrryvYQUQRkqigggkiGAHMHPLPPPPPPvgFAFPfPogooQjhPvvtvvvhT/AFsJpI72/wD3z349BBABKC+2GCfYMvSjT2888888808oAlI+d9GO++uWu8++++++6LCpzsGynvpHFNBxJhHNCCWgCAI0YVGCDU8488+++2+kBxNA88qe+c8e+8+4++8+srsnICSWR/j/ABdQUYWFQagntoEpPEB+RBbvrLtPvPqvt5fdzNvvvnvtvPPvPPPPPP8A339dJr576u3kkHGEl23r5KaAhNKU1VT/AO88e++c+8+fc0s+++u++++++652u6+/+3+5DL3H/wCv7QSQaRafSUogigBAX/TXPftuPvuvvvvOvvvvPvvPvnvvvnPPvqtvPvvvqxwgnv8A6NlEVmlU33kQoEKZDR/23qIIJKrIoST7z7zx7zzzTb77r7rz7zz/AP8AvvvnoQ0Itv8A+sEEUVE3Vmki4IIgD312kIIIIIYY4J67577b776qKIKoNKIZLJrC6/8A2ePUTiS/f3/BBRBplllpGGMoAACyATCTDzxxjb3jnDzjj+++8pABRwBBZhjhRygiEIcDe+/7rvrhBBdBpBlBCBFOKAEAAAAAVcQsAEGSAAAAB++6OpAGCCA0CKDAAAAIYssWe+6DL7Locht99BVBCGOWIBQAAAAAM88+vDWyEAAAx99++lACCGCDTDPbEDjT89em22iiOCD1B999dpVDAAHZgAMFToQ36gSqyGBNIKiAmuOu+BDCWTMtjV6+zS5MJxpWe+iGCDDk8s9tFR5AAAAAEkedBofg+uhD0Z0soEKCCAigQQECGaKSNA699XhPiDDFuKiCjCDkB941F1dACAFBAAirBz7n8coV8VBlkbCCCCCCACAG+hqD6TWdoiDEBICF+2CCIICUkJVZdpVQAAABQSCCG5ojA2M4vLWtFEDCDCCAkgwG+pCRPD8/++PwrCSDO88VIAiYgtZNNZd9CHWJwGiCG4v4Rn485YQgojiCVaSCSrISCBGB9/8AsNuuehgik6MdBfnrmcXcfSafY1irABCrgQKBqzoZKSHQneYQgh+fPPEwYwgROP0JYLjxoRAgg6AjyClqBkQTVXfcw/ruCARKgUEo60Z9Xv8A/wDPcOCLPh081Glc9DV9DdBEtb8JDCGXiCGpDe8OBB9Z999DCCWoBAKAIFNzDSV++2iemSeAGd//AH2NW6w04QcQF4kW4ogggQghnP8AfmoE32X333wIC71UgB8FAVUNdFOsIIMIEEb5f/8A/FLjDTLGCDDBKCDDDFNhCCSs9/pKFZBl599yd5XbnvCCkM8MN/v8c4QMAOcut29+/pww00495yM9+fPuvPOB99x+jPqIB9lZ999mthnjDYjH+++6+++++O2S2e++8fd9yzuKW+2++CI6e3+8888889pwA9vLVJ1ot19ajN0TC2n+ua8+U++6+e29+++8y996WWuue+64YWi28y48888889tkByXrZNd199d9Qg1AAQW7smyakY+uWsu8+++98882++++6+8IOGM+Uqk888pw0wwPMNNU951919pJBAW7jj7U0o88eY806+s//wDvghj31fvbPvvnOFKOPOsmPOKAEOsb4AQcUceXfVXVeRQQgwkg/ff/AChD7zzzz77774dr/wDedse++88+W4M8c888+8qSbH2IBhFV9JtVBRF5lhWCDG/9999+588888++++89P8c9vz34+88/++s88+888scm7LSgBBB1V9ZZRhBlBBQCDDC4wV9+8++0+8+/+++8L999Hv0+88++++8+8u08+5jzrHCgRJtxd9dhh5BVRBGDDLeZBU9888+884888+8c+q+8++++28+6+++8c88+8eWvvaiIRFl1dpBtBBhFlhUTh2eYBC88888+88e+++8+++K++++++++42+4e8+++ELD3TrioNBRBlJBJBBBBhBUUcYyJBEH884w88988038s82u+882+8+8++++8++2+6kJWrPSol5tdVBVBJhBVRtSSgyv+E+I1888++8+6+a4u+8+88++++++++++e6e7xr9DEQ4GENR1Rdh5hFJBBRVBNBB6jUZ0/+98++c+c988+/wDvPvPvvPvPvvvvunPvmi7jgLfQSfeeXSeWTYQQcTQQSbQSghvnv/8A/wC88+/++2++889+++2+8+6/+++qGe/+baKEJ95pJp99dZtdFhBJNBlxJx9wssj6+Q3/ADtPLvvPvvv/AP8Ae++/++++++29df7qO1laZFZx95d9pt19tBNt1t5pBBNFBDjxAoEu8+22o8++u98+/wD/AHr/AOq+++7t1zzmIdNZd99l55d59tN9hpVtt9ZhtNl1BXDDAgr+8ss+ee++888+++8ss+6+6++QvDiAt999d9dd1JNpd9lV5J9lJ9tVVRhhxR7DUcb7886+8++8+98++u888+y+c/8AwEhzmMPfefffXccdfYUaVdXefRfTfYUYcYQ8493OQu+vvqLvvPrPmnvPPPPfPv8AorMIoCAv333332l1G2EGkFklnX33S0EUVkEGFEGFf7hfA76r7r77774zxTz7z77b4IMUEEnX3333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");
background-size: contain;
}
.chat-thread li:nth-child(odd):after {
border-right: 15px solid transparent;
right: -15px;
}
.chat-thread li:nth-child(even) {
animation: show-chat-even 0.15s 1 ease-in;
-moz-animation: show-chat-even 0.15s 1 ease-in;
-webkit-animation: show-chat-even 0.15s 1 ease-in;
float: left;
margin-left: 30px;
color: white;
}
.chat-thread li:nth-child(even):after {
border-left: 15px solid transparent;
left: -15px;
}
.chat-window {
width: 100%;
}
.chat-window-message {
width: 100%;
height: 48px;
font: 32px/48px "Noto Sans", sans-serif;
background: none;
color: rgb(25, 147, 212);
border: 0;
border-bottom: 1px solid rgba(25, 147, 212, 0.8);
outline: none;
padding-right: 45px;
}
.chat-thread {
width: calc(100% - 20px);
height: 320px;
}
.chat-send {
width: 32px;
height: 32px;
position: relative;
right: 6px;
top: -38px;
float: right;
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+CiAgPGRlZnMgaWQ9ImRlZnMzMDUxIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9ImN1cnJlbnQtY29sb3Itc2NoZW1lIj4KICAgICAgLkNvbG9yU2NoZW1lLVRleHQgewogICAgICAgIGNvbG9yOiM0ZDRkNGQ7CiAgICAgIH0KICAgICAgPC9zdHlsZT4KICA8L2RlZnM+CiA8cGF0aCBzdHlsZT0iZmlsbDpjdXJyZW50Q29sb3I7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIAogICAgIGQ9Ik0gMSwyIDQsOCAxLDE0IDEsMTQgMTUsOCBaIE0gMy4xMTUyMzQ0LDMuOTk2MDkzOCAxMi40NTg5ODQsOCAzLjExNTIzNDQsMTIuMDAzOTA2IDUuMTE3MTg3NSw4IFoiCiAgICAgY2xhc3M9IkNvbG9yU2NoZW1lLVRleHQiCiAgICAgLz4KPC9zdmc+Cg==");
cursor: pointer;
}
@keyframes show-chat-even {
0% {
margin-left: -480px;
}
100% {
margin-left: 0;
}
}
@-moz-keyframes show-chat-even {
0% {
margin-left: -480px;
}
100% {
margin-left: 0;
}
}
@-webkit-keyframes show-chat-even {
0% {
margin-left: -480px;
}
100% {
margin-left: 0;
}
}
@keyframes show-chat-odd {
0% {
margin-right: -480px;
}
100% {
margin-right: 0;
}
}
@-moz-keyframes show-chat-odd {
0% {
margin-right: -480px;
}
100% {
margin-right: 0;
}
}
@-webkit-keyframes show-chat-odd {
0% {
margin-right: -480px;
}
100% {
margin-right: 0;
}
}
<div class="chatbox">
<ul class="chat-thread" id="chat-thread">
<li>Hello! Would you like to get to know more about me?</li>
</ul>
<form
class="chat-window"
id="chat-window"
onsubmit="handleMessage(event)"
>
<input
class="chat-window-message"
id="chat-window-message"
name="chat-window-message"
type="text"
autocomplete="off"
autofocus
placeholder="What do you want to know?"
/>
<div class="chat-send" onclick="handleMessage(event)"></div>
</form>
</div>
let loading = false;
function insert_chat(chatThread, msg) {
const chatNewThread = document.createElement("li"),
chatNewMessage = document.createTextNode(msg);
// Add message to chat thread and scroll to bottom
chatNewThread.appendChild(chatNewMessage);
chatThread.appendChild(chatNewThread);
chatThread.scrollTop = chatThread.scrollHeight;
return chatNewThread;
}
function handleMessage(e) {
e.preventDefault();
if (loading) {
return false;
}
loading = true;
const chatWindowMessage = document.getElementById("chat-window-message");
const chatThread = document.getElementById("chat-thread");
const msg = chatWindowMessage.value.trim();
if (!msg) return false;
insert_chat(chatThread, msg);
chatWindowMessage.value = "";
const conversation = Array.from(chatThread.children).map((c) => c.innerHTML);
const responseElement = insert_chat(chatThread, "Thinking...");
fetchResponse(conversation)
.then(function (response) {
responseElement.innerHTML = response.response;
chatThread.scrollTop = chatThread.scrollHeight;
loading = false;
})
.catch(function (e) {
console.log("error", e);
responseElement.innerHTML =
"Error in fetching response! Please try again.";
loading = false;
});
return false;
}
function fetchResponse(conversation) {
return new Promise(async (resolve, reject) => {
try {
const response = await fetch("/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ conversation }),
});
const result = await response.json();
resolve(result);
} catch (error) {
reject(error);
}
});
}
/**
* POST /chat
*/
let OPENAI_API_KEY = null;
let PINECONE_API_KEY = null;
let PINECONE_BASE_URL = null;
export async function onRequestPost(context) {
OPENAI_API_KEY = context.env.OPENAI_API_KEY;
PINECONE_API_KEY = context.env.PINECONE_API_KEY;
PINECONE_BASE_URL = context.env.PINECONE_BASE_URL;
if (!OPENAI_API_KEY || !PINECONE_API_KEY || !PINECONE_BASE_URL) {
return new Response("Server Error!", { status: 500 });
}
try {
// Get input from request
const input = await context.request.json();
const conversation = input.conversation;
const last_message = conversation[conversation.length - 1];
// Get embeddings for last message
const last_message_embedding = await get_embedding(
last_message,
"text-embedding-ada-002"
);
// Search for similar embeddings in knowledge base
const context_ids = await query_knowledge_base(last_message_embedding, 3);
const { results } = await context.env.DB.prepare(
`SELECT * FROM knowledge_base WHERE id IN (${context_ids.join(",")})`
)
// .bind(context_ids)
.all();
const context_texts = results.map((row) => row.text);
// Prepare conversation for OpenAI
const messages = prepare_conversation(conversation, context_texts);
// Get response from OpenAI
const response = await get_chat_completion(messages);
// Log conversation and response to database
await context.env.DB.prepare(
"INSERT INTO chat_logs (conversation, last_message, response, created_at) VALUES (?, ?, ?, ?)"
)
.bind(
JSON.stringify(conversation),
last_message,
response,
new Date().toISOString()
)
.run();
// Return success
return new Response(JSON.stringify({ response }), {
headers: {
"Content-Type": "application/json;charset=utf-8",
},
});
} catch (err) {
console.log(err);
return new Response("Server Error!", { status: 500 });
}
}
const get_embedding = async (text, engine) => {
const apiRequest = new Request("https://api.openai.com/v1/embeddings", {
method: "POST",
body: JSON.stringify({
input: text,
model: engine,
}),
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
});
const apiResponse = await fetch(apiRequest);
if (apiResponse.status !== 200) {
console.log(apiResponse);
throw new Error("Embeddings API Error.");
}
return (await apiResponse.json()).data[0].embedding;
};
const prepare_conversation = (conversation, context) => {
const last_message = conversation.splice(-1)[0];
let messages = [];
messages.push({
role: "system",
content: `You are AmirBot. A bot that can answer questions about Amir.
User can only ask you about Amir's career and hobbies. You do not
respond to personal questions. You will not respond to any other
queries unrelated to Amir's professional resume. Use the given
context in the message to answer the questions.`,
});
for (let i = 0; i < conversation.length; i++) {
messages.push({
role: i % 2 ? "user" : "assistant",
content: conversation[i],
});
}
messages.push({
role: "user",
content: `Answer the question, if the question is unrelated based on the
system message, say "I can't answer this question.". Use the context to
find relevant information. If the context is not relevant to the
question, say "I don't know.".
Context: ${context} \n\n
---\n\n
Question: ${last_message}\n
Answer: `,
});
return messages;
};
const get_chat_completion = async (
messages,
model = "gpt-3.5-turbo",
temperature = 0.1
) => {
const apiRequest = new Request("https://api.openai.com/v1/chat/completions", {
method: "POST",
body: JSON.stringify({
model,
messages,
temperature,
}),
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
});
const apiResponse = await fetch(apiRequest);
if (apiResponse.status !== 200) {
console.log(apiResponse);
throw new Error("Chat API Error.");
}
return (await apiResponse.json()).choices[0].message.content;
};
const query_knowledge_base = async (vector, top_k = 1) => {
const apiRequest = new Request(`${PINECONE_BASE_URL}/query`, {
method: "POST",
body: JSON.stringify({
vector,
top_k,
includeValues: false,
}),
headers: {
"Content-Type": "application/json",
"Api-Key": PINECONE_API_KEY,
},
});
const apiResponse = await fetch(apiRequest);
if (apiResponse.status !== 200) {
console.log(apiResponse);
throw new Error("Pinecone Query API Error.");
}
return (await apiResponse.json()).matches.map((m) => m.id);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment