Spaces:
Sleeping
Sleeping
UPDATE: activity log
Browse files- app.py +14 -1
- functions.py +5 -1
app.py
CHANGED
|
@@ -252,6 +252,7 @@ async def newChatbot(chatbotName: str, username: str):
|
|
| 252 |
|
| 253 |
@app.post("/loadPDF")
|
| 254 |
async def loadPDF(vectorstore: str, pdf: UploadFile = File(...)):
|
|
|
|
| 255 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 256 |
source = pdf.filename
|
| 257 |
pdf = await pdf.read()
|
|
@@ -285,6 +286,7 @@ async def loadPDF(vectorstore: str, pdf: UploadFile = File(...)):
|
|
| 285 |
|
| 286 |
@app.post("/loadImagePDF")
|
| 287 |
async def loadImagePDF(vectorstore: str, pdf: UploadFile = File(...)):
|
|
|
|
| 288 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 289 |
source = pdf.filename
|
| 290 |
pdf = await pdf.read()
|
|
@@ -319,6 +321,7 @@ class AddText(BaseModel):
|
|
| 319 |
|
| 320 |
@app.post("/loadText")
|
| 321 |
async def loadText(addTextConfig: AddText):
|
|
|
|
| 322 |
vectorstore, text = addTextConfig.vectorstore, addTextConfig.text
|
| 323 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 324 |
text = cleanText(text = text)
|
|
@@ -379,6 +382,7 @@ class LoadWebsite(BaseModel):
|
|
| 379 |
@app.post("/loadWebURLs")
|
| 380 |
async def loadWebURLs(loadWebsite: LoadWebsite):
|
| 381 |
vectorstore, urls, source = loadWebsite.vectorstore, loadWebsite.urls, loadWebsite.source
|
|
|
|
| 382 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 383 |
text = extractTextFromUrlList(urls=urls)
|
| 384 |
dct = {
|
|
@@ -406,6 +410,7 @@ async def loadWebURLs(loadWebsite: LoadWebsite):
|
|
| 406 |
|
| 407 |
@app.post("/answerQuery")
|
| 408 |
async def answerQuestion(request: Request, query: str, vectorstore: str, llmModel: str = "llama3-70b-8192"):
|
|
|
|
| 409 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 410 |
output = answerQuery(query=query, vectorstore=vectorstore, llmModel=llmModel)
|
| 411 |
ip_address = request.client.host
|
|
@@ -424,6 +429,7 @@ async def answerQuestion(request: Request, query: str, vectorstore: str, llmMode
|
|
| 424 |
|
| 425 |
@app.post("/deleteChatbot")
|
| 426 |
async def deleteChatbot(vectorstore: str):
|
|
|
|
| 427 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 428 |
supabase.table('ConversAI_ChatbotInfo').delete().eq('user_id', username).eq('chatbotname', chatbotName).execute()
|
| 429 |
return deleteTable(tableName=vectorstore)
|
|
@@ -459,6 +465,7 @@ class YtTranscript(BaseModel):
|
|
| 459 |
@app.post("/loadYoutubeTranscript")
|
| 460 |
async def loadYoutubeTranscript(ytTranscript: YtTranscript):
|
| 461 |
vectorstore, urls = ytTranscript.vectorstore, ytTranscript.urls
|
|
|
|
| 462 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 463 |
text = getTranscript(urls=urls)
|
| 464 |
dct = {
|
|
@@ -507,6 +514,7 @@ async def analyzeAndAnswer(query: str, file: UploadFile = File(...)):
|
|
| 507 |
|
| 508 |
@app.post("/getChatHistory")
|
| 509 |
async def chatHistory(vectorstore: str):
|
|
|
|
| 510 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 511 |
response = supabase.table("ConversAI_ChatHistory").select("timestamp", "question", "response").eq("username",
|
| 512 |
username).eq(
|
|
@@ -516,6 +524,7 @@ async def chatHistory(vectorstore: str):
|
|
| 516 |
|
| 517 |
@app.post("/listChatbotSources")
|
| 518 |
async def listChatbotSources(vectorstore: str):
|
|
|
|
| 519 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 520 |
result = supabase.table("ConversAI_ChatbotDataSources").select("*").eq("username", username).eq("chatbotName",
|
| 521 |
chatbotName).execute().data
|
|
@@ -523,7 +532,8 @@ async def listChatbotSources(vectorstore: str):
|
|
| 523 |
|
| 524 |
|
| 525 |
@app.post("/deleteChatbotSource")
|
| 526 |
-
async def deleteChatbotSource(dataSourceName: str):
|
|
|
|
| 527 |
response = supabase.table("ConversAI_ChatbotDataSources").delete().eq("dataSourceName", dataSourceName).execute()
|
| 528 |
response = supabase.storage.from_('ConversAI').remove(f"{dataSourceName}_data.json")
|
| 529 |
return {
|
|
@@ -541,6 +551,7 @@ class LoadEditedJson(BaseModel):
|
|
| 541 |
@app.post("/loadEditedJson")
|
| 542 |
async def loadEditedJson(loadEditedJsonConfig: LoadEditedJson):
|
| 543 |
username, chatbotName = loadEditedJsonConfig.vectorstore.split("$")[1], loadEditedJsonConfig.vectorstore.split("$")[2]
|
|
|
|
| 544 |
jsonData = json.dumps(loadEditedJsonConfig.jsonData, indent = 1).encode("utf-8")
|
| 545 |
fileName = createDataSourceName(loadEditedJsonConfig.dataSourceName)
|
| 546 |
response = supabase.storage.from_("ConversAI").upload(file=jsonData, path=f"{fileName}_data.json")
|
|
@@ -561,6 +572,7 @@ async def loadEditedJson(loadEditedJsonConfig: LoadEditedJson):
|
|
| 561 |
|
| 562 |
@app.post("/publicOrPrivate")
|
| 563 |
async def publicOrPrivate(vectorstore: str, mode: str = "public"):
|
|
|
|
| 564 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 565 |
response = (
|
| 566 |
supabase.table("ConversAI_ChatbotInfo")
|
|
@@ -583,6 +595,7 @@ class TrainChatbot(BaseModel):
|
|
| 583 |
@app.post("/trainChatbot")
|
| 584 |
async def trainChatbot(trainChatbotConfig: TrainChatbot):
|
| 585 |
vectorstore, UrlSources = trainChatbotConfig.vectorstore, trainChatbotConfig.urls
|
|
|
|
| 586 |
texts = []
|
| 587 |
sources = []
|
| 588 |
fileTypes = [supabase.table("ConversAI_ChatbotDataSources").select("sourceEndpoint").eq("sourceContentURL",
|
|
|
|
| 252 |
|
| 253 |
@app.post("/loadPDF")
|
| 254 |
async def loadPDF(vectorstore: str, pdf: UploadFile = File(...)):
|
| 255 |
+
trackUsage(vectorstore=vectorstore, endpoint="/loadPDF")
|
| 256 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 257 |
source = pdf.filename
|
| 258 |
pdf = await pdf.read()
|
|
|
|
| 286 |
|
| 287 |
@app.post("/loadImagePDF")
|
| 288 |
async def loadImagePDF(vectorstore: str, pdf: UploadFile = File(...)):
|
| 289 |
+
trackUsage(vectorstore=vectorstore, endpoint="/loadImagePDF")
|
| 290 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 291 |
source = pdf.filename
|
| 292 |
pdf = await pdf.read()
|
|
|
|
| 321 |
|
| 322 |
@app.post("/loadText")
|
| 323 |
async def loadText(addTextConfig: AddText):
|
| 324 |
+
trackUsage(vectorstore=vectorstore, endpoint="/loadText")
|
| 325 |
vectorstore, text = addTextConfig.vectorstore, addTextConfig.text
|
| 326 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 327 |
text = cleanText(text = text)
|
|
|
|
| 382 |
@app.post("/loadWebURLs")
|
| 383 |
async def loadWebURLs(loadWebsite: LoadWebsite):
|
| 384 |
vectorstore, urls, source = loadWebsite.vectorstore, loadWebsite.urls, loadWebsite.source
|
| 385 |
+
trackUsage(vectorstore=vectorstore, endpoint="/loadWebURLs")
|
| 386 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 387 |
text = extractTextFromUrlList(urls=urls)
|
| 388 |
dct = {
|
|
|
|
| 410 |
|
| 411 |
@app.post("/answerQuery")
|
| 412 |
async def answerQuestion(request: Request, query: str, vectorstore: str, llmModel: str = "llama3-70b-8192"):
|
| 413 |
+
trackUsage(vectorstore=vectorstore, endpoint="/answerQuery")
|
| 414 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 415 |
output = answerQuery(query=query, vectorstore=vectorstore, llmModel=llmModel)
|
| 416 |
ip_address = request.client.host
|
|
|
|
| 429 |
|
| 430 |
@app.post("/deleteChatbot")
|
| 431 |
async def deleteChatbot(vectorstore: str):
|
| 432 |
+
trackUsage(vectorstore=vectorstore, endpoint="/deleteChatbot")
|
| 433 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 434 |
supabase.table('ConversAI_ChatbotInfo').delete().eq('user_id', username).eq('chatbotname', chatbotName).execute()
|
| 435 |
return deleteTable(tableName=vectorstore)
|
|
|
|
| 465 |
@app.post("/loadYoutubeTranscript")
|
| 466 |
async def loadYoutubeTranscript(ytTranscript: YtTranscript):
|
| 467 |
vectorstore, urls = ytTranscript.vectorstore, ytTranscript.urls
|
| 468 |
+
trackUsage(vectorstore=vectorstore, endpoint="/loadYoutubeTranscript")
|
| 469 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 470 |
text = getTranscript(urls=urls)
|
| 471 |
dct = {
|
|
|
|
| 514 |
|
| 515 |
@app.post("/getChatHistory")
|
| 516 |
async def chatHistory(vectorstore: str):
|
| 517 |
+
trackUsage(vectorstore=vectorstore, endpoint="/getChatHistory")
|
| 518 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 519 |
response = supabase.table("ConversAI_ChatHistory").select("timestamp", "question", "response").eq("username",
|
| 520 |
username).eq(
|
|
|
|
| 524 |
|
| 525 |
@app.post("/listChatbotSources")
|
| 526 |
async def listChatbotSources(vectorstore: str):
|
| 527 |
+
trackUsage(vectorstore=vectorstore, endpoint="/listChatbotSources")
|
| 528 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 529 |
result = supabase.table("ConversAI_ChatbotDataSources").select("*").eq("username", username).eq("chatbotName",
|
| 530 |
chatbotName).execute().data
|
|
|
|
| 532 |
|
| 533 |
|
| 534 |
@app.post("/deleteChatbotSource")
|
| 535 |
+
async def deleteChatbotSource(vectorstore: str, dataSourceName: str):
|
| 536 |
+
trackUsage(vectorstore=vectorstore, endpoint="/deleteChatbotSource")
|
| 537 |
response = supabase.table("ConversAI_ChatbotDataSources").delete().eq("dataSourceName", dataSourceName).execute()
|
| 538 |
response = supabase.storage.from_('ConversAI').remove(f"{dataSourceName}_data.json")
|
| 539 |
return {
|
|
|
|
| 551 |
@app.post("/loadEditedJson")
|
| 552 |
async def loadEditedJson(loadEditedJsonConfig: LoadEditedJson):
|
| 553 |
username, chatbotName = loadEditedJsonConfig.vectorstore.split("$")[1], loadEditedJsonConfig.vectorstore.split("$")[2]
|
| 554 |
+
trackUsage(vectorstore=loadEditedJsonConfig.vectorstore, endpoint="/loadEditedJson")
|
| 555 |
jsonData = json.dumps(loadEditedJsonConfig.jsonData, indent = 1).encode("utf-8")
|
| 556 |
fileName = createDataSourceName(loadEditedJsonConfig.dataSourceName)
|
| 557 |
response = supabase.storage.from_("ConversAI").upload(file=jsonData, path=f"{fileName}_data.json")
|
|
|
|
| 572 |
|
| 573 |
@app.post("/publicOrPrivate")
|
| 574 |
async def publicOrPrivate(vectorstore: str, mode: str = "public"):
|
| 575 |
+
trackUsage(vectorstore=vectorstore, endpoint="/publicOrPrivate")
|
| 576 |
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 577 |
response = (
|
| 578 |
supabase.table("ConversAI_ChatbotInfo")
|
|
|
|
| 595 |
@app.post("/trainChatbot")
|
| 596 |
async def trainChatbot(trainChatbotConfig: TrainChatbot):
|
| 597 |
vectorstore, UrlSources = trainChatbotConfig.vectorstore, trainChatbotConfig.urls
|
| 598 |
+
trackUsage(vectorstore=vectorstore, endpoint="/trainChatbot")
|
| 599 |
texts = []
|
| 600 |
sources = []
|
| 601 |
fileTypes = [supabase.table("ConversAI_ChatbotDataSources").select("sourceEndpoint").eq("sourceContentURL",
|
functions.py
CHANGED
|
@@ -368,4 +368,8 @@ def createDataSourceName(sourceName):
|
|
| 368 |
while True:
|
| 369 |
sourceName = sourceName + "-" + str(i)
|
| 370 |
return createDataSourceName(sourceName)
|
| 371 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 368 |
while True:
|
| 369 |
sourceName = sourceName + "-" + str(i)
|
| 370 |
return createDataSourceName(sourceName)
|
| 371 |
+
|
| 372 |
+
|
| 373 |
+
def trackUsage(vectorstore: str, endpoint: str):
|
| 374 |
+
username, chatbotName = vectorstore.split("$")[1], vectorstore.split("$")[2]
|
| 375 |
+
client.table("ConversAI_ActivityLog").insert({"username": username, "chatbotName": chatbotName, "endpointUsed": endpoint}).execute()
|