ALJIACHI commited on
Commit
553c2ab
ยท
verified ยท
1 Parent(s): c7d98a3

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. README.md +13 -7
  2. app.py +132 -0
  3. requirements.txt +4 -0
README.md CHANGED
@@ -1,14 +1,20 @@
1
  ---
2
- title: Mizan Rerank V2 Demo
3
- emoji: ๐Ÿ†
4
- colorFrom: indigo
5
- colorTo: blue
6
  sdk: gradio
7
- sdk_version: 6.13.0
8
  app_file: app.py
9
  pinned: false
10
  license: apache-2.0
11
- short_description: a demo Space for the Mizan-Rerank-V2 reranker model
 
 
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
1
  ---
2
+ title: Mizan-Rerank-V2 Demo
3
+ emoji: ๐Ÿ”
4
+ colorFrom: blue
5
+ colorTo: indigo
6
  sdk: gradio
7
+ sdk_version: 5.29.0
8
  app_file: app.py
9
  pinned: false
10
  license: apache-2.0
11
+ models:
12
+ - ALJIACHI/Mizan-Rerank-v2
13
+ short_description: Arabic Long-Context Reranking Model Demo
14
  ---
15
 
16
+ # Mizan-Rerank-v2 Demo
17
+
18
+ Interactive demo for **Mizan-Rerank-v2**, a 305M-parameter cross-encoder model for Arabic long-context text reranking.
19
+
20
+ Enter a query and a list of documents (one per line) to see them reranked by relevance.
app.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ import torch
4
+ from sentence_transformers import CrossEncoder
5
+
6
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
7
+ # Model
8
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
9
+ MODEL_ID = os.environ.get(
10
+ "MODEL_ID",
11
+ # Local path for testing โ€” change to "ALJIACHI/Mizan-Rerank-v2" for HF Space deployment
12
+ os.path.join(os.path.dirname(__file__), "..", "Mizan-Reranker-v2"),
13
+ )
14
+
15
+ model = CrossEncoder(
16
+ MODEL_ID,
17
+ max_length=8192,
18
+ trust_remote_code=True,
19
+ device="cuda" if torch.cuda.is_available() else "cpu",
20
+ )
21
+
22
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
23
+ # Reranking logic
24
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
25
+ def rerank(query: str, documents: str) -> str:
26
+ """Score and rerank documents against a query."""
27
+ if not query.strip():
28
+ return "โš ๏ธ ูŠุฑุฌู‰ ุฅุฏุฎุงู„ ุงุณุชุนู„ุงู… (Please enter a query)"
29
+
30
+ docs = [d.strip() for d in documents.strip().split("\n") if d.strip()]
31
+ if not docs:
32
+ return "โš ๏ธ ูŠุฑุฌู‰ ุฅุฏุฎุงู„ ู…ุณุชู†ุฏ ูˆุงุญุฏ ุนู„ู‰ ุงู„ุฃู‚ู„ (Please enter at least one document)"
33
+
34
+ ranks = model.rank(query, docs)
35
+
36
+ lines = []
37
+ for i, entry in enumerate(ranks, 1):
38
+ idx = entry["corpus_id"]
39
+ score = entry["score"]
40
+ doc_text = docs[idx]
41
+ preview = doc_text[:200] + ("..." if len(doc_text) > 200 else "")
42
+ bar_len = int(score * 20)
43
+ bar = "โ–ˆ" * bar_len + "โ–‘" * (20 - bar_len)
44
+ lines.append(
45
+ f"### #{i} โ€” Score: {score:.4f}\n"
46
+ f"`{bar}`\n\n"
47
+ f"{preview}\n"
48
+ )
49
+
50
+ header = f"## ๐Ÿ“Š Results โ€” {len(docs)} documents reranked\n---\n"
51
+ return header + "\n---\n".join(lines)
52
+
53
+
54
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
55
+ # Examples
56
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
57
+ EXAMPLES = [
58
+ [
59
+ "ู…ุง ู‡ูˆ ุชูุณูŠุฑ ุงู„ุขูŠุฉ ูˆุฌุนู„ู†ุง ู…ู† ุงู„ู…ุงุก ูƒู„ ุดูŠุก ุญูŠ",
60
+ "ุชุนู†ูŠ ุงู„ุขูŠุฉ ุฃู† ุงู„ู…ุงุก ู‡ูˆ ุนู†ุตุฑ ุฃุณุงุณูŠ ููŠ ุญูŠุงุฉ ุฌู…ูŠุน ุงู„ูƒุงุฆู†ุงุช ุงู„ุญูŠุฉุŒ ูˆู‡ูˆ ุถุฑูˆุฑูŠ ู„ุงุณุชู…ุฑุงุฑ ุงู„ุญูŠุงุฉ.\n"
61
+ "ุชู… ุงูƒุชุดุงู ูƒูˆุงูƒุจ ุฎุงุฑุฌ ุงู„ู…ุฌู…ูˆุนุฉ ุงู„ุดู…ุณูŠุฉ ุชุญุชูˆูŠ ุนู„ู‰ ู…ูŠุงู‡ ู…ุชุฌู…ุฏุฉ.\n"
62
+ "ุชุญุฏุซ ุงู„ู‚ุฑุขู† ุงู„ูƒุฑูŠู… ุนู† ุงู„ุจุฑู‚ ูˆุงู„ุฑุนุฏ ููŠ ุนุฏุฉ ู…ูˆุงุถุน ู…ุฎุชู„ูุฉ.",
63
+ ],
64
+ [
65
+ "ู…ุง ู‡ูŠ ููˆุงุฆุฏ ููŠุชุงู…ูŠู† ุฏุŸ",
66
+ "ูŠุณุงุนุฏ ููŠุชุงู…ูŠู† ุฏ ููŠ ุชุนุฒูŠุฒ ุตุญุฉ ุงู„ุนุธุงู… ูˆุชู‚ูˆูŠุฉ ุงู„ุฌู‡ุงุฒ ุงู„ู…ู†ุงุนูŠุŒ ูƒู…ุง ูŠู„ุนุจ ุฏูˆุฑุงู‹ ู…ู‡ู…ุงู‹ ููŠ ุงู…ุชุตุงุต ุงู„ูƒุงู„ุณูŠูˆู….\n"
67
+ "ูŠุณุชุฎุฏู… ููŠุชุงู…ูŠู† ุฏ ููŠ ุจุนุถ ุงู„ุตู†ุงุนุงุช ุงู„ุบุฐุงุฆูŠุฉ ูƒู…ุงุฏุฉ ุญุงูุธุฉ.\n"
68
+ "ุฃุทู„ู‚ุช ูˆุฒุงุฑุฉ ุงู„ุฒุฑุงุนุฉ ุญู…ู„ุฉ ูˆุทู†ูŠุฉ ู„ุฒูŠุงุฏุฉ ุงู„ูˆุนูŠ ุจุฃู‡ู…ูŠุฉ ุงู„ุฒุฑุงุนุฉ ุงู„ุนุถูˆูŠุฉ.",
69
+ ],
70
+ [
71
+ "ู…ุง ุญูƒู… ุงู„ุตู„ุงุฉ ููŠ ุงู„ุฅุณู„ุงู…ุŸ",
72
+ "ุงู„ุตู„ุงุฉ ู‡ูŠ ุงู„ุฑูƒู† ุงู„ุซุงู†ูŠ ู…ู† ุฃุฑูƒุงู† ุงู„ุฅุณู„ุงู… ูˆู‡ูŠ ูˆุงุฌุจุฉ ุนู„ู‰ ูƒู„ ู…ุณู„ู… ุจุงู„ุบ ุนุงู‚ู„ ุฎู…ุณ ู…ุฑุงุช ููŠ ุงู„ูŠูˆู… ูˆุงู„ู„ูŠู„ุฉ.\n"
73
+ "ูŠูุณุชุญุจ ู„ู„ู…ุณู„ู… ุฃู† ูŠุตู„ูŠ ุตู„ุงุฉ ุงู„ู†ูˆุงูู„ ู„ุฒูŠุงุฏุฉ ุงู„ุฃุฌุฑ ูˆุงู„ุซูˆุงุจ.\n"
74
+ "ุชุฃุณุณุช ุงู„ุฌุงู…ุนุฉ ุงู„ุฅุณู„ุงู…ูŠุฉ ููŠ ุงู„ู…ุฏูŠู†ุฉ ุงู„ู…ู†ูˆุฑุฉ ุนุงู… 1961 ู…ูŠู„ุงุฏูŠ.\n"
75
+ "ูŠุฌุจ ุนู„ู‰ ุงู„ู…ุณู„ู… ุงู„ุทู‡ุงุฑุฉ ู‚ุจู„ ุฃุฏุงุก ุงู„ุตู„ุงุฉ ูˆู‡ูŠ ุดุฑุท ู…ู† ุดุฑูˆุท ุตุญุชู‡ุง.",
76
+ ],
77
+ ]
78
+
79
+
80
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
81
+ # Gradio UI
82
+ # โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€๏ฟฝ๏ฟฝ๏ฟฝโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
83
+ CSS = """
84
+ .gradio-container { max-width: 900px !important; }
85
+ .header-text { text-align: center; }
86
+ .rtl-text textarea { direction: rtl; text-align: right; font-size: 16px; }
87
+ """
88
+
89
+ with gr.Blocks(css=CSS, theme=gr.themes.Soft(), title="Mizan-Rerank-v2 Demo") as demo:
90
+ gr.HTML(
91
+ """
92
+ <div class="header-text">
93
+ <h1>๐Ÿ” Mizan-Rerank-v2</h1>
94
+ <p style="font-size:16px; color:#555;">
95
+ Arabic Long-Context Reranking Model ยท 305M Parameters ยท Up to 8192 Tokens
96
+ </p>
97
+ <p style="font-size:14px;">
98
+ <a href="https://huggingface.co/ALJIACHI/Mizan-Rerank-v2" target="_blank">Model Card</a> ยท
99
+ </p>
100
+ </div>
101
+ """
102
+ )
103
+
104
+ with gr.Row():
105
+ with gr.Column(scale=1):
106
+ query_input = gr.Textbox(
107
+ label="๐Ÿ”Ž Query / ุงู„ุงุณุชุนู„ุงู…",
108
+ placeholder="ุฃุฏุฎู„ ุงู„ุงุณุชุนู„ุงู… ู‡ู†ุง...",
109
+ lines=2,
110
+ elem_classes=["rtl-text"],
111
+ )
112
+ docs_input = gr.Textbox(
113
+ label="๐Ÿ“„ Documents (one per line) / ุงู„ู…ุณุชู†ุฏุงุช (ุณุทุฑ ู„ูƒู„ ู…ุณุชู†ุฏ)",
114
+ placeholder="ุฃุฏุฎู„ ูƒู„ ู…ุณุชู†ุฏ ููŠ ุณุทุฑ ู…ู†ูุตู„...",
115
+ lines=8,
116
+ elem_classes=["rtl-text"],
117
+ )
118
+ rerank_btn = gr.Button("โšก Rerank / ุฅุนุงุฏุฉ ุงู„ุชุฑุชูŠุจ", variant="primary", size="lg")
119
+
120
+ with gr.Column(scale=1):
121
+ output = gr.Markdown(label="Results / ุงู„ู†ุชุงุฆุฌ")
122
+
123
+ gr.Examples(
124
+ examples=EXAMPLES,
125
+ inputs=[query_input, docs_input],
126
+ label="๐Ÿ“Œ Try an Example / ุฌุฑุจ ู…ุซุงู„ุงู‹",
127
+ )
128
+
129
+ rerank_btn.click(fn=rerank, inputs=[query_input, docs_input], outputs=output)
130
+ query_input.submit(fn=rerank, inputs=[query_input, docs_input], outputs=output)
131
+
132
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ sentence-transformers>=5.0.0
2
+ transformers>=4.40.0
3
+ torch>=2.0.0
4
+ gradio>=5.0.0