File size: 1,694 Bytes
fb243d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

import gradio as gr
from sentence_transformers import SentenceTransformer
from transformers import pipeline

print("⏳ Loading Models... (This happens once on startup)")

# 1. Load Embedding Model (MiniLM)
# Good for: Semantic search, matching influencers to brands
embedder = SentenceTransformer('all-MiniLM-L6-v2')

# 2. Load Sentiment Model (Twitter-RoBERTa)
# Good for: Checking if influencer content is positive/negative/toxic
sentiment_task = pipeline(
    "sentiment-analysis", 
    model="cardiffnlp/twitter-roberta-base-sentiment-latest", 
    tokenizer="cardiffnlp/twitter-roberta-base-sentiment-latest"
)

def get_embeddings(text):
    # Returns a list of 384 numbers (vector)
    vector = embedder.encode(text)
    return vector.tolist()

def get_sentiment(text):
    # Returns label (Positive/Negative) and score
    result = sentiment_task(text)[0]
    return {"label": result['label'], "score": float(result['score'])}

# --- UI & API DEFINITION ---
with gr.Blocks() as demo:
    gr.Markdown("# Flunzup NLP API")
    
    with gr.Tab("Sentiment Analysis"):
        txt_in = gr.Textbox(label="Text to Analyze")
        out_sent = gr.JSON(label="Sentiment Result")
        btn_sent = gr.Button("Analyze Sentiment")
        # EXPOSED API: /sentiment
        btn_sent.click(get_sentiment, inputs=txt_in, outputs=out_sent, api_name="sentiment")

    with gr.Tab("Embeddings"):
        txt_embed = gr.Textbox(label="Text to Embed")
        out_embed = gr.JSON(label="Vector Output")
        btn_embed = gr.Button("Generate Embedding")
        # EXPOSED API: /embedding
        btn_embed.click(get_embeddings, inputs=txt_embed, outputs=out_embed, api_name="embedding")

demo.launch()