File size: 3,110 Bytes
57b1a12
 
 
 
 
dda479f
 
 
 
 
57b1a12
 
 
dda479f
 
 
57b1a12
 
 
 
 
dda479f
 
 
 
 
 
 
57b1a12
 
 
dda479f
 
 
 
57b1a12
dda479f
 
 
 
 
 
 
57b1a12
 
 
 
 
 
 
dda479f
 
 
 
 
 
57b1a12
dda479f
 
57b1a12
 
dda479f
57b1a12
 
 
dda479f
 
 
 
 
 
 
57b1a12
 
 
 
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import gradio as gr
import json

# Placeholder para dados de busca
SAMPLE_DOCS = [
    {"title": "SEO Multilíngue", "content": "Estratégias de SEO para múltiplos idiomas incluindo português, inglês, espanhol e alemão.", "relevance": 0.95},
    {"title": "Marketing Digital", "content": "Serviços completos de marketing digital da MSC Marketing.", "relevance": 0.90},
    {"title": "Agentes de IA", "content": "Criação de agentes inteligentes para automação de processos de marketing.", "relevance": 0.85},
    {"title": "Geração de Conteúdo", "content": "Ferramentas de IA para geração de conteúdo otimizado para SEO.", "relevance": 0.80},
    {"title": "Chatbots", "content": "Desenvolvimento de chatbots inteligentes para atendimento ao cliente.", "relevance": 0.75},
]

def search(query: str, top_k: int = 5):
    """Realiza busca nos documentos."""
    if not query.strip():
        return "Por favor, digite uma busca."
    
    results = []
    query_lower = query.lower()
    
    for doc in SAMPLE_DOCS:
        score = 0
        if query_lower in doc["title"].lower():
            score += 0.5
        if query_lower in doc["content"].lower():
            score += 0.3
        if score > 0:
            results.append({**doc, "score": score + doc["relevance"]})
    
    if not results:
        results = SAMPLE_DOCS[:top_k]
        for r in results:
            r["score"] = r["relevance"] * 0.5
    
    results = sorted(results, key=lambda x: x.get("score", 0), reverse=True)[:top_k]
    
    output = f"## Resultados para: \"{query}\"\n\n"
    for i, doc in enumerate(results, 1):
        output += f"### {i}. {doc['title']}\n"
        output += f"{doc['content']}\n"
        output += f"*Relevância: {doc.get('score', doc['relevance']):.2f}*\n\n"
    
    return output

# Interface Gradio
with gr.Blocks(title="MSC Search") as demo:
    gr.Markdown("# 🔍 MSC Marketing - Busca Semântica")
    gr.Markdown("Busque na documentação da MSC Marketing")
    
    with gr.Row():
        query_input = gr.Textbox(
            label="Sua busca", 
            placeholder="Digite sua busca...",
            scale=4
        )
        top_k_input = gr.Slider(1, 10, value=5, step=1, label="Resultados", scale=1)
    
    search_btn = gr.Button("🔍 Buscar", variant="primary")
    results_output = gr.Markdown(label="Resultados")
    
    search_btn.click(search, inputs=[query_input, top_k_input], outputs=results_output)
    query_input.submit(search, inputs=[query_input, top_k_input], outputs=results_output)
    
    gr.Markdown("""
    ---
    **Datasets MSC Marketing:**
    - [msc-knowledge-base](https://huggingface.co/datasets/Finish-him/msc-knowledge-base)
    - [msc-qa-pairs](https://huggingface.co/datasets/Finish-him/msc-qa-pairs)
    - [msc-embeddings](https://huggingface.co/datasets/Finish-him/msc-embeddings)
    - [msc-instructions](https://huggingface.co/datasets/Finish-him/msc-instructions)
    
    *Este Space está em fase de configuração. Em breve teremos busca semântica completa com embeddings.*
    """)

if __name__ == "__main__":
    demo.launch()