admin / app.py
sharjeel1477's picture
Duplicate from sharjeel1477/admin2
bca1dd0
raw
history blame contribute delete
No virus
6.33 kB
import gradio as gr
import pinecone
import time
import os
from pymongo.mongo_client import MongoClient
pinecone_key = os.environ['PINECONE_KEY']
def getBrains():
pinecone.init(api_key=pinecone_key,
environment="us-west4-gcp")
active_indexes = pinecone.list_indexes()
#print(active_indexes)
return gr.update(choices=active_indexes)
def isBrainFound(brainName):
pinecone.init(api_key=pinecone_key,
environment="us-west4-gcp")
active_indexes = pinecone.list_indexes()
print(active_indexes)
brainName = brainName.lower()
if brainName in active_indexes:
return True
else:
return False
def createBrain(brainName):
pinecone.init(api_key=pinecone_key,
environment="us-west4-gcp")
pinecone.create_index(
brainName,
dimension=1536,
metric="cosine",
pod_type="p1"
)
return brainName+" Brain Created!"
def delete_all_files(username):
client = MongoClient(os.environ["MONGO_KEY"])
db = client['nbrain']
collection = db['files']
query = {"brain": username}
collection.delete_many(query)
def deleteBrain(brainName):
pinecone.init(api_key=pinecone_key,
environment="us-west4-gcp")
pinecone.delete_index(brainName)
delete_all_files(brainName)
return brainName+" Brain Deleted!"
def onChange(optionVal):
if optionVal == "Create New Brain":
return [gr.update(visible=True), gr.update(visible=False)]
else:
return [gr.update(visible=False), gr.update(visible=True)]
def is_valid_string(s):
"""
Checks if a string contains only lowercase letters, numbers, and hyphens.
"""
# Define allowed characters
allowed_chars = set("abcdefghijklmnopqrstuvwxyz0123456789-")
# Check each character in the string
for char in s:
if char not in allowed_chars:
return False
# All characters are allowed
return True
get_window_url_params = """
function(url_params) {
console.log(url_params);
const params = new URLSearchParams(window.location.search);
url_params = Object.fromEntries(params);
console.log(url_params)
return url_params;
}
"""
def checkAuth(params):
print (params)
if ("password" in params):
if (params["password"] == os.environ['PASSWORD']):
return ["""# Build Brain!""", gr.update(visible=True)]
else:
return ["""# Authorization Failed!""", gr.update(visible=False)]
def handleSubmit(option, newBrainName, prevBrainName):
if option == "Create New Brain":
if (newBrainName == ""):
return "Please Enter Brain Name!"
if (isBrainFound(newBrainName) == False):
if (is_valid_string(newBrainName) == False):
return "Brain Name can only contain lowercase letters, numbers, and hyphens!"
return createBrain(newBrainName)
return newBrainName+" Brain is already created.."
if option == "Delete Brain":
print(prevBrainName)
if (prevBrainName == ""):
return "Please Select Any Brain!"
return deleteBrain(prevBrainName)
bg_color = "#c5dde0"
s_color = "#1d2230"
mycss = """
.gradio-container {{background-color: {bgcolor}}}
#title {{margin-top:6%;margin-bottom:16px;display:flex;justify-content:center;align-items:center}}
#title h1 {{font-weight:900;color:{scolor}}}
#secondrow {{padding:0 6%;gap:30px;display:flex;justify-content:center;align-items:center;padding-left:30%;padding-right:30%}}
#choose {{background-color: {bgcolor};border-style:none;border-width:0;box-shadow:none;padding-left:0;padding-right:0}}
#choose .svelte-1gfkn6j {{background-color:{bgcolor};color:{scolor};font-size:17px}}
#namedr {{background-color: {bgcolor};border-style:none;border-width:0;box-shadow:none;padding-left:0;padding-right:0}}
#namedr .svelte-1gfkn6j {{background-color:{bgcolor};color:{scolor};font-size:17px}}
#name {{background-color: {bgcolor};border-style:none;box-shadow:none;padding-left:0;padding-right:0}}
#name span {{background-color:{bgcolor};color:{scolor};font-size:17px}}
#file .svelte-1frtwj3 {{background-color:#ffffff;color:{scolor};font-size:17px}}
#file .svelte-xwlu1w {{color:{scolor};min-height:fit-content}}
#file .svelte-116rqfv {{height:15vh}}
#file .file-preview-holder {{overflow-y:scroll;max-height:17vh}}
#status {{display:flex;justify-content:center;align-items:center;margin-top:20px;font-size:20px;font-weight:700;color:{scolor}}}
#output {{background-color: {bgcolor};border-style:none;border-width:0;box-shadow:none}}
#output span {{background-color:{bgcolor};color:{scolor};font-size:18px}}
#button {{background-color:{scolor};color:#ffffff;margin-top:14px}}
"""
formatted_css = mycss.format(bgcolor=bg_color, scolor=s_color)
with gr.Blocks(theme=gr.themes.Soft(), css=formatted_css) as block_demo:
with gr.Row(elem_id="first"):
with gr.Column():
title=gr.Markdown(
"""
# Admin!
""", elem_id="title")
with gr.Row(elem_id="secondrow"):
with gr.Column(scale=1, elem_id="inputsCol") as myrow:
choose = gr.Dropdown(
label="Select Operation", value="Create New Brain", choices=["Create New Brain", "Delete Brain"], elem_id="choose", multiselect=False, interactive=True)
brain_name = gr.Textbox(
label="Brain Name", elem_id="name")
brain_name_dr = gr.Dropdown(
label="Select Brain", choices=None, elem_id="namedr", multiselect=False, interactive=True, visible=False)
choose.change(onChange, choose, [
brain_name, brain_name_dr])
submit_button = gr.Button(value="Submit", elem_id="button")
status = gr.Markdown(
"""
""", elem_id="status")
#
submit_button.click(
handleSubmit, [choose, brain_name, brain_name_dr,], status,api_name="up")
block_demo.load(checkAuth, inputs=title, outputs=[
title, myrow], _js=get_window_url_params)
block_demo.load(getBrains, inputs=None, outputs=brain_name_dr)
block_demo.launch(show_api=False)