|
import gradio as gr |
|
import pandas as pd |
|
import numpy as np |
|
from sklearn.manifold import TSNE |
|
from sentence_transformers import SentenceTransformer, util |
|
import torch |
|
import plotly.express as px |
|
|
|
|
|
embedder = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
|
|
|
df = pd.DataFrame(columns=['Idea', 'Author', 'Embeddings']) |
|
|
|
|
|
def add_idea(user, idea, history, df): |
|
embedded_idea = embedder.encode(idea, convert_to_tensor=False) |
|
new_row = {'Idea': idea, 'Author': user, 'Embeddings': embedded_idea} |
|
df.loc[len(df)] = new_row |
|
print(len(df)) |
|
print(df) |
|
history += "\n Idea : {} \n".format(idea) |
|
return f"{history}\n", df |
|
|
|
def map_ideas(df): |
|
emb_list = np.array(list(df.Embeddings)) |
|
emb2D2 = TSNE(n_components=2, random_state = 42, perplexity=3).fit_transform(emb_list) |
|
df["x"], df["y"] = [emb2D2[:, 0].tolist(), emb2D2[:, 1].tolist()] |
|
print(df) |
|
|
|
fig = px.scatter( |
|
df, x='x', y='y', |
|
title='Description samples map', |
|
color='Author', |
|
opacity=0.7, |
|
text='Idea') |
|
|
|
fig.update_traces(marker=dict(symbol='square', size=19), textfont=dict(size=10)) |
|
|
|
fig.update_layout(hovermode=False) |
|
|
|
return fig |
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown("Suggest your ideas") |
|
username = gr.Textbox(label='Name') |
|
idea = gr.Textbox(label='Idea') |
|
df_state = gr.State(value=df) |
|
with gr.Row(): |
|
btn_idea = gr.Button("Send Idea") |
|
btn_map = gr.Button("Map Ideas") |
|
history = gr.Markdown(label="Your submitted ideas") |
|
scattered = gr.Plot().style() |
|
|
|
|
|
btn_idea.click(add_idea, inputs=[username, idea, history, df_state], outputs=[history, df_state]) |
|
btn_map.click(map_ideas,inputs=df_state, outputs=scattered) |
|
|
|
|
|
demo.queue(concurrency_count=10) |
|
demo.launch(debug=False,share=False) |