File size: 2,457 Bytes
c33bcd6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from huggingface_hub import InferenceClient
from config import HF_TOKEN
from custom_css import SIMILARITY_BARS

client = InferenceClient(
    provider="hf-inference",
    api_key=HF_TOKEN,
)



def compute_similarity(reference_sentence: str, *comparison_sentences):
    """Compute similarity scores between reference and comparison sentences."""
    sentences_list = [s.strip() for s in comparison_sentences if s and s.strip()]

    if not sentences_list:
        missing_reference_documents_message = "⚠️ Please enter at least one comparison sentence."
        return f"<div style='color: #e74c3c; padding: 20px; text-align: center;'>{missing_reference_documents_message}</div>"

    try:
        result = client.sentence_similarity(
            sentence=reference_sentence,
            other_sentences=sentences_list,
            model="sentence-transformers/embeddinggemma-300m-medical",
        )
        sorted_results = sorted(zip(sentences_list, result), key=lambda x: x[1], reverse=True)
        output = SIMILARITY_BARS

        for idx, (sentence, score) in enumerate(sorted_results, 1):
            percentage = score * 100
            if score >= 0.7:
                border_color = "#48bb78"
                gradient = "linear-gradient(90deg, #48bb78 0%, #38a169 100%)"
            elif score >= 0.5:
                border_color = "#ed8936"
                gradient = "linear-gradient(90deg, #ed8936 0%, #dd6b20 100%)"
            else:
                border_color = "#667eea"
                gradient = "linear-gradient(90deg, #667eea 0%, #764ba2 100%)"

            output += f"""
            <div class="similarity-item" style="border-left-color: {border_color};">
                <div class="sentence-text">
                    <span class="rank-badge">#{idx}</span>{sentence}
                </div>
                <div class="bar-container">
                    <div class="progress-bar">
                        <div class="progress-fill" style="width: {percentage}%; background: {gradient};"></div>
                    </div>
                    <div class="score-badge" style="background: {border_color};">{score:.4f}</div>
                </div>
            </div>
            """
        output += "</div>"
        return output
    except Exception as e:
        return f"<div style='color: #e74c3c; padding: 20px; background: #fee; border-radius: 8px; border-left: 4px solid #e74c3c;'><strong>Error:</strong> {str(e)}</div>"