import gradio as gr from sentence_transformers import SentenceTransformer import numpy as np # Load the model model = SentenceTransformer("MohJaf/bayan-usuli-bert") def get_embeddings(text): """Get embeddings for input text""" if not text or not text.strip(): return {"error": "No input text provided"} embeddings = model.encode(text) return { "query": text, "embeddings": embeddings.tolist(), "dimensions": len(embeddings) } def compute_similarity(text1, text2): """Compute similarity between two texts""" if not text1 or not text2: return {"error": "Both texts are required"} embeddings = model.encode([text1, text2]) similarity = float(np.dot(embeddings[0], embeddings[1]) / (np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]))) return { "text1": text1, "text2": text2, "similarity": similarity } # Create Gradio interface with gr.Blocks(title="Bayan Usuli BERT API") as demo: gr.Markdown("# Bayan Usuli BERT - Arabic Islamic Jurisprudence Model") gr.Markdown("This API provides embeddings for Arabic texts related to Islamic jurisprudence (Usul al-Fiqh).") with gr.Tab("Get Embeddings"): text_input = gr.Textbox(label="Arabic Text", placeholder="Enter your text here...", rtl=True) embed_btn = gr.Button("Get Embeddings") embed_output = gr.JSON(label="Result") embed_btn.click(get_embeddings, inputs=text_input, outputs=embed_output) with gr.Tab("Compute Similarity"): text1 = gr.Textbox(label="First Text", placeholder="Enter first text...", rtl=True) text2 = gr.Textbox(label="Second Text", placeholder="Enter second text...", rtl=True) sim_btn = gr.Button("Compute Similarity") sim_output = gr.JSON(label="Result") sim_btn.click(compute_similarity, inputs=[text1, text2], outputs=sim_output) demo.launch()