| 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>" | |