CoolFace
Apppublic

Quintanda/intent-detection

sourceHugging Facemitupdated 2y agoView on Hugging Face
0likes
intents.py65 linesDownload Raw Back to root
1from fastapi import FastAPI2from pydantic import BaseModel3import requests4import numpy as np5from sklearn.metrics.pairwise import cosine_similarity6 7app = FastAPI()8 9# URL do serviço de embeddings10EMBEDDINGS_SERVICE_URL = "https://quintanda-embedding.hf.space/embedding"11 12# Estrutura das intenções e exemplos13intents = {14    "greeting": ["Olá", "Oi", "Tudo bem?", "Bom dia", "Boa tarde", "Boa noite", "E aí?", "Oi, tudo bom?", "Oi, como você está?", "Saudações"],15    "farewell": ["Tchau", "Até logo", "Até mais", "Falamos depois", "Obrigado, até a próxima", "Tenha um bom dia", "Nos vemos em breve", "Até a próxima", "Tchau, boa noite", "Vou nessa"],16    "help": ["Preciso de ajuda", "Pode me ajudar?", "Como funciona?", "O que posso fazer aqui?", "Pode explicar?", "Estou com dúvidas", "Me ajuda, por favor", "Quero saber como fazer", "Não sei o que fazer", "Preciso de informações"],17    "gratitude": ["Obrigado", "Muito obrigado", "Valeu", "Agradeço pela ajuda", "Você foi muito útil", "Obrigadão", "Agradeço muito", "Fico muito grato", "Gratidão", "Valeu mesmo"],18}19 20# Pré-calcula os embeddings para todas as frases representativas21def get_all_intent_embeddings():22    embeddings = {}23    for intent, examples in intents.items():24        embeddings[intent] = []25        for example in examples:26            response = requests.post(EMBEDDINGS_SERVICE_URL, json={"text": example})27            response.raise_for_status()28            embedding = np.array(response.json()["embedding"])29            embeddings[intent].append(embedding)  # Armazena o embedding da frase30    return embeddings31 32# Calcula os embeddings ao iniciar a API33intent_embeddings = get_all_intent_embeddings()34 35# Modelo de entrada do usuário36class UserInput(BaseModel):37    text: str38 39@app.post("/intent")40def get_intent(input: UserInput):41    """42    Recebe o texto do usuário e retorna a intenção mais próxima.43    """44    # Obter o embedding do texto do usuário45    response = requests.post(EMBEDDINGS_SERVICE_URL, json={"text": input.text})46    response.raise_for_status()47    user_embedding = np.array(response.json()["embedding"])48 49    # Comparar o embedding do usuário com os embeddings de todas as frases50    best_intent = None51    best_score = -152 53    for intent, example_embeddings in intent_embeddings.items():54        for example_embedding in example_embeddings:55            score = cosine_similarity([user_embedding], [example_embedding]).flatten()[0]56            if score > best_score:57                best_score = score58                best_intent = intent59 60    return {"intent": best_intent, "confidence": best_score}61 62@app.get("/")63def home():64    return {"message": "API de Intents está funcionando!"}65