Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| import torch | |
| from sentence_transformers import CrossEncoder | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # Model | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| MODEL_ID = os.environ.get("MODEL_ID", "ALJIACHI/Mizan-Rerank-v2") | |
| model = CrossEncoder( | |
| MODEL_ID, | |
| max_length=8192, | |
| trust_remote_code=True, | |
| device="cuda" if torch.cuda.is_available() else "cpu", | |
| ) | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # Reranking logic | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| def rerank(query: str, documents: str) -> str: | |
| """Score and rerank documents against a query.""" | |
| if not query.strip(): | |
| return "โ ๏ธ ูุฑุฌู ุฅุฏุฎุงู ุงุณุชุนูุงู (Please enter a query)" | |
| docs = [d.strip() for d in documents.strip().split("\n") if d.strip()] | |
| if not docs: | |
| return "โ ๏ธ ูุฑุฌู ุฅุฏุฎุงู ู ุณุชูุฏ ูุงุญุฏ ุนูู ุงูุฃูู (Please enter at least one document)" | |
| ranks = model.rank(query, docs) | |
| lines = [] | |
| for i, entry in enumerate(ranks, 1): | |
| idx = entry["corpus_id"] | |
| score = entry["score"] | |
| doc_text = docs[idx] | |
| preview = doc_text[:200] + ("..." if len(doc_text) > 200 else "") | |
| score = score if score == score else 0.0 # NaN safety | |
| bar_len = int(score * 20) | |
| bar = "โ" * bar_len + "โ" * (20 - bar_len) | |
| lines.append( | |
| f"### #{i} โ Score: {score:.4f}\n" | |
| f"`{bar}`\n\n" | |
| f"{preview}\n" | |
| ) | |
| header = f"## ๐ Results โ {len(docs)} documents reranked\n---\n" | |
| return header + "\n---\n".join(lines) | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # Examples | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| EXAMPLES = [ | |
| [ | |
| "ู ุง ูู ุชูุณูุฑ ุงูุขูุฉ ูุฌุนููุง ู ู ุงูู ุงุก ูู ุดูุก ุญู", | |
| "ุชุนูู ุงูุขูุฉ ุฃู ุงูู ุงุก ูู ุนูุตุฑ ุฃุณุงุณู ูู ุญูุงุฉ ุฌู ูุน ุงููุงุฆูุงุช ุงูุญูุฉุ ููู ุถุฑูุฑู ูุงุณุชู ุฑุงุฑ ุงูุญูุงุฉ.\n" | |
| "ุชู ุงูุชุดุงู ููุงูุจ ุฎุงุฑุฌ ุงูู ุฌู ูุนุฉ ุงูุดู ุณูุฉ ุชุญุชูู ุนูู ู ูุงู ู ุชุฌู ุฏุฉ.\n" | |
| "ุชุญุฏุซ ุงููุฑุขู ุงููุฑูู ุนู ุงูุจุฑู ูุงูุฑุนุฏ ูู ุนุฏุฉ ู ูุงุถุน ู ุฎุชููุฉ.", | |
| ], | |
| [ | |
| "ู ุง ูู ููุงุฆุฏ ููุชุงู ูู ุฏุ", | |
| "ูุณุงุนุฏ ููุชุงู ูู ุฏ ูู ุชุนุฒูุฒ ุตุญุฉ ุงูุนุธุงู ูุชูููุฉ ุงูุฌูุงุฒ ุงูู ูุงุนูุ ูู ุง ููุนุจ ุฏูุฑุงู ู ูู ุงู ูู ุงู ุชุตุงุต ุงููุงูุณููู .\n" | |
| "ูุณุชุฎุฏู ููุชุงู ูู ุฏ ูู ุจุนุถ ุงูุตูุงุนุงุช ุงูุบุฐุงุฆูุฉ ูู ุงุฏุฉ ุญุงูุธุฉ.\n" | |
| "ุฃุทููุช ูุฒุงุฑุฉ ุงูุฒุฑุงุนุฉ ุญู ูุฉ ูุทููุฉ ูุฒูุงุฏุฉ ุงููุนู ุจุฃูู ูุฉ ุงูุฒุฑุงุนุฉ ุงูุนุถููุฉ.", | |
| ], | |
| [ | |
| "ู ุง ุญูู ุงูุตูุงุฉ ูู ุงูุฅุณูุงู ุ", | |
| "ุงูุตูุงุฉ ูู ุงูุฑูู ุงูุซุงูู ู ู ุฃุฑูุงู ุงูุฅุณูุงู ููู ูุงุฌุจุฉ ุนูู ูู ู ุณูู ุจุงูุบ ุนุงูู ุฎู ุณ ู ุฑุงุช ูู ุงูููู ูุงููููุฉ.\n" | |
| "ููุณุชุญุจ ููู ุณูู ุฃู ูุตูู ุตูุงุฉ ุงูููุงูู ูุฒูุงุฏุฉ ุงูุฃุฌุฑ ูุงูุซูุงุจ.\n" | |
| "ุชุฃุณุณุช ุงูุฌุงู ุนุฉ ุงูุฅุณูุงู ูุฉ ูู ุงูู ุฏููุฉ ุงูู ููุฑุฉ ุนุงู 1961 ู ููุงุฏู.\n" | |
| "ูุฌุจ ุนูู ุงูู ุณูู ุงูุทูุงุฑุฉ ูุจู ุฃุฏุงุก ุงูุตูุงุฉ ููู ุดุฑุท ู ู ุดุฑูุท ุตุญุชูุง.", | |
| ], | |
| ] | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # Gradio UI | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| CSS = """ | |
| .gradio-container { max-width: 900px !important; } | |
| .header-text { text-align: center; } | |
| .rtl-text textarea { direction: rtl; text-align: right; font-size: 16px; } | |
| """ | |
| with gr.Blocks(css=CSS, theme=gr.themes.Soft(), title="Mizan-Rerank-v2 Demo") as demo: | |
| gr.HTML( | |
| """ | |
| <div class="header-text"> | |
| <h1>๐ Mizan-Rerank-v2</h1> | |
| <p style="font-size:16px; color:#555;"> | |
| Arabic Long-Context Reranking Model ยท 305M Parameters ยท Up to 8192 Tokens | |
| </p> | |
| <p style="font-size:14px;"> | |
| <a href="https://huggingface.co/ALJIACHI/Mizan-Rerank-v2" target="_blank">Model Card</a> ยท | |
| </p> | |
| </div> | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| query_input = gr.Textbox( | |
| label="๐ Query / ุงูุงุณุชุนูุงู ", | |
| placeholder="ุฃุฏุฎู ุงูุงุณุชุนูุงู ููุง...", | |
| lines=2, | |
| elem_classes=["rtl-text"], | |
| ) | |
| docs_input = gr.Textbox( | |
| label="๐ Documents (one per line) / ุงูู ุณุชูุฏุงุช (ุณุทุฑ ููู ู ุณุชูุฏ)", | |
| placeholder="ุฃุฏุฎู ูู ู ุณุชูุฏ ูู ุณุทุฑ ู ููุตู...", | |
| lines=8, | |
| elem_classes=["rtl-text"], | |
| ) | |
| rerank_btn = gr.Button("โก Rerank / ุฅุนุงุฏุฉ ุงูุชุฑุชูุจ", variant="primary", size="lg") | |
| with gr.Column(scale=1): | |
| output = gr.Markdown(label="Results / ุงููุชุงุฆุฌ") | |
| gr.Examples( | |
| examples=EXAMPLES, | |
| inputs=[query_input, docs_input], | |
| label="๐ Try an Example / ุฌุฑุจ ู ุซุงูุงู", | |
| ) | |
| rerank_btn.click(fn=rerank, inputs=[query_input, docs_input], outputs=output) | |
| query_input.submit(fn=rerank, inputs=[query_input, docs_input], outputs=output) | |
| demo.launch() | |