sosa123454321 commited on
Commit
a247836
·
verified ·
1 Parent(s): 0804269

Add one-click Google Colab RAG notebook

Browse files
Files changed (3) hide show
  1. README.md +4 -0
  2. app.py +2 -1
  3. notebooks/Dual_Diagnosis_RAG_Colab.ipynb +246 -0
README.md CHANGED
@@ -20,6 +20,10 @@ language:
20
 
21
  # ⚕️ دستیار بالینی پروتکل تشخیص دوگانه (RAG)
22
 
 
 
 
 
23
  > سایکوز / اسکیزوفرنی + اختلال مصرف مواد + BPD ± ADHD
24
  > مبتنی بر شواهد علمی NICE · APA · WFSBP
25
 
 
20
 
21
  # ⚕️ دستیار بالینی پروتکل تشخیص دوگانه (RAG)
22
 
23
+ [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/SBZ-EDU/dual-diagnosis-rag/blob/master/notebooks/Dual_Diagnosis_RAG_Colab.ipynb)
24
+
25
+ **اجرای یک‌کلیکی Colab:** دریافت مقالات از Hugging Face، آپلود PDF/کتاب مجاز، بازسازی ایندکس، تست RAG و ثبت W&B.
26
+
27
  > سایکوز / اسکیزوفرنی + اختلال مصرف مواد + BPD ± ADHD
28
  > مبتنی بر شواهد علمی NICE · APA · WFSBP
29
 
app.py CHANGED
@@ -145,4 +145,5 @@ with gr.Blocks(title="دستیار پروتکل تشخیص دوگانه", css=CS
145
 
146
  # مونتاژ روی ۰.۰.۰.۰ برای پیش‌نمایش زنده
147
  if __name__ == "__main__":
148
- demo.queue().launch(server_name="0.0.0.0", server_port=int(os.getenv("PORT", "7860")))
 
 
145
 
146
  # مونتاژ روی ۰.۰.۰.۰ برای پیش‌نمایش زنده
147
  if __name__ == "__main__":
148
+ demo.queue().launch(server_name="0.0.0.0", server_port=int(os.getenv("PORT", "7860")),
149
+ share=os.getenv("GRADIO_SHARE", "0") == "1")
notebooks/Dual_Diagnosis_RAG_Colab.ipynb ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# ⚕️ Dual Diagnosis RAG — اجرای یک‌کلیکی در Google Colab\n",
8
+ "\n",
9
+ "این نوت‌بوک:\n",
10
+ "1. کد را از GitHub می‌گیرد؛ 2. مقالات اعتبارسنجی‌شده را از Hugging Face دریافت می‌کند؛ 3. PDF/کتاب مجاز شما را می‌پذیرد؛ 4. ایندکس RAG را می‌سازد؛ 5. پرسش آزمایشی را اجرا می‌کند؛ 6. در صورت تنظیم کلید، نتیجه را در W&B ثبت می‌کند.\n",
11
+ "\n",
12
+ "> **ایمنی:** ابزار آموزشی/کمک‌تصمیم است، جایگزین پزشک نیست. فقط فایل‌هایی را وارد کنید که اجازه استفاده از آن‌ها را دارید. اطلاعات هویتی بیمار را آپلود نکنید.\n"
13
+ ]
14
+ },
15
+ {
16
+ "cell_type": "markdown",
17
+ "metadata": {},
18
+ "source": [
19
+ "## 1) بررسی محیط و دریافت پروژه"
20
+ ]
21
+ },
22
+ {
23
+ "cell_type": "code",
24
+ "execution_count": null,
25
+ "metadata": {},
26
+ "outputs": [],
27
+ "source": [
28
+ "import os, sys, subprocess, pathlib\n",
29
+ "IN_COLAB = 'google.colab' in sys.modules\n",
30
+ "print('Colab:', IN_COLAB)\n",
31
+ "!rm -rf /content/dual-diagnosis-rag\n",
32
+ "!git clone -q https://github.com/SBZ-EDU/dual-diagnosis-rag.git /content/dual-diagnosis-rag\n",
33
+ "%cd /content/dual-diagnosis-rag\n",
34
+ "print('Repository ready')\n"
35
+ ]
36
+ },
37
+ {
38
+ "cell_type": "markdown",
39
+ "metadata": {},
40
+ "source": [
41
+ "## 2) نصب وابستگی‌های سبک RAG"
42
+ ]
43
+ },
44
+ {
45
+ "cell_type": "code",
46
+ "execution_count": null,
47
+ "metadata": {},
48
+ "outputs": [],
49
+ "source": [
50
+ "!pip -q install \"sentence-transformers>=3,<4\" \"transformers>=4.44,<5\" \"huggingface_hub>=0.27,<2\" \"pypdf>=5,<6\" \"wandb>=0.18,<1\" gradio\n",
51
+ "print('Dependencies installed')\n"
52
+ ]
53
+ },
54
+ {
55
+ "cell_type": "markdown",
56
+ "metadata": {},
57
+ "source": [
58
+ "## 3) دریافت دیتاست مقالات از Hugging Face"
59
+ ]
60
+ },
61
+ {
62
+ "cell_type": "code",
63
+ "execution_count": null,
64
+ "metadata": {},
65
+ "outputs": [],
66
+ "source": [
67
+ "from huggingface_hub import hf_hub_download\n",
68
+ "from pathlib import Path\n",
69
+ "import shutil, json\n",
70
+ "src=hf_hub_download(repo_id='sosa123454321/dual-diagnosis-dataset',repo_type='dataset',filename='articles/validated_articles.jsonl')\n",
71
+ "dst=Path('data/articles/validated_articles.jsonl'); dst.parent.mkdir(parents=True,exist_ok=True); shutil.copy(src,dst)\n",
72
+ "rows=[json.loads(x) for x in dst.read_text(encoding='utf-8').splitlines() if x.strip()]\n",
73
+ "print(f'{len(rows)} validated article records downloaded')\n",
74
+ "for x in rows[:5]: print('•',x.get('title'),x.get('url'))\n"
75
+ ]
76
+ },
77
+ {
78
+ "cell_type": "markdown",
79
+ "metadata": {},
80
+ "source": [
81
+ "## 4) اختیاری: آپلود PDF مقاله/کتاب مجاز\n",
82
+ "PDFها به متن محلی تبدیل می‌شوند و فایل اصلی به Hugging Face یا W&B ارسال نمی‌شود مگر خودتان صریحاً این کار را انجام دهید."
83
+ ]
84
+ },
85
+ {
86
+ "cell_type": "code",
87
+ "execution_count": null,
88
+ "metadata": {},
89
+ "outputs": [],
90
+ "source": [
91
+ "from pathlib import Path\n",
92
+ "if IN_COLAB:\n",
93
+ " from google.colab import files\n",
94
+ " uploaded=files.upload() # اگر فایل ندارید این سلول را اجرا نکنید\n",
95
+ " from pypdf import PdfReader\n",
96
+ " out=Path('data/articles')\n",
97
+ " for name,data in uploaded.items():\n",
98
+ " if not name.lower().endswith('.pdf'): continue\n",
99
+ " Path(name).write_bytes(data)\n",
100
+ " reader=PdfReader(name)\n",
101
+ " text='\\n'.join((p.extract_text() or '') for p in reader.pages)\n",
102
+ " safe=Path(name).stem.replace(' ','_')+'.md'\n",
103
+ " (out/safe).write_text(f'# {Path(name).stem}\\n\\n{text}',encoding='utf-8')\n",
104
+ " print(name,'->',out/safe,len(text),'characters')\n",
105
+ "else: print('Upload is available in Colab.')\n"
106
+ ]
107
+ },
108
+ {
109
+ "cell_type": "markdown",
110
+ "metadata": {},
111
+ "source": [
112
+ "## 5) ساخت ایندکس برداری RAG"
113
+ ]
114
+ },
115
+ {
116
+ "cell_type": "code",
117
+ "execution_count": null,
118
+ "metadata": {},
119
+ "outputs": [],
120
+ "source": [
121
+ "import os\n",
122
+ "os.environ['EMBED_MODEL']='sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2'\n",
123
+ "!python -m scripts.build_index\n",
124
+ "from rag import store\n",
125
+ "chunks,vectors=store.load()\n",
126
+ "print('Chunks:',len(chunks),'Vector shape:',vectors.shape)\n"
127
+ ]
128
+ },
129
+ {
130
+ "cell_type": "markdown",
131
+ "metadata": {},
132
+ "source": [
133
+ "## 6) تست بازیابی مقاله"
134
+ ]
135
+ },
136
+ {
137
+ "cell_type": "code",
138
+ "execution_count": null,
139
+ "metadata": {},
140
+ "outputs": [],
141
+ "source": [
142
+ "from rag import retriever\n",
143
+ "question='در روان‌پریشی همراه مصرف مواد، در صورت لغزش چه ارزیابی‌هایی لازم است؟'\n",
144
+ "hits=retriever.search(question,top_k=5)\n",
145
+ "for i,h in enumerate(hits,1):\n",
146
+ " print(f\"\\n[{i}] score={h['score']:.3f} source={h['source']}\\n{h['text'][:700]}\")\n"
147
+ ]
148
+ },
149
+ {
150
+ "cell_type": "markdown",
151
+ "metadata": {},
152
+ "source": [
153
+ "## 7) پاسخ RAG\n",
154
+ "حالت پیش‌فرض استخراجی و رایگان است. برای مدل مولد، GPU را از Runtime → Change runtime type فعال کنید."
155
+ ]
156
+ },
157
+ {
158
+ "cell_type": "code",
159
+ "execution_count": null,
160
+ "metadata": {},
161
+ "outputs": [],
162
+ "source": [
163
+ "os.environ['USE_GENERATOR']='0' # برای Colab رایگان سریع و قابل اتکا\n",
164
+ "from rag import pipeline\n",
165
+ "result=pipeline.answer(question)\n",
166
+ "print(result['answer'])\n",
167
+ "print('\\nSources:')\n",
168
+ "for s in result['sources']: print('-',s)\n"
169
+ ]
170
+ },
171
+ {
172
+ "cell_type": "markdown",
173
+ "metadata": {},
174
+ "source": [
175
+ "## 8) ثبت ارزیابی در W&B (اختیاری)\n",
176
+ "کلید را فقط در Colab Secrets با نام `WANDB_API_KEY` ذخیره کنید؛ آن را داخل نوت‌بوک ننویسید."
177
+ ]
178
+ },
179
+ {
180
+ "cell_type": "code",
181
+ "execution_count": null,
182
+ "metadata": {},
183
+ "outputs": [],
184
+ "source": [
185
+ "import os\n",
186
+ "try:\n",
187
+ " if IN_COLAB:\n",
188
+ " from google.colab import userdata\n",
189
+ " os.environ['WANDB_API_KEY']=userdata.get('WANDB_API_KEY') or ''\n",
190
+ " if os.getenv('WANDB_API_KEY'):\n",
191
+ " import wandb\n",
192
+ " run=wandb.init(project='dual-diagnosis-rag',entity='elasa2next-sosa-',job_type='colab-rag-rebuild',config={'chunks':len(chunks),'embedding_model':os.environ['EMBED_MODEL'],'generator':False})\n",
193
+ " wandb.log({'chunks_indexed':len(chunks),'top_retrieval_score':float(hits[0]['score']) if hits else 0,'sources_returned':len(result['sources'])})\n",
194
+ " run.finish(); print(run.url)\n",
195
+ " else: print('WANDB_API_KEY not set; logging skipped safely.')\n",
196
+ "except Exception as e: print('W&B skipped:',e)\n"
197
+ ]
198
+ },
199
+ {
200
+ "cell_type": "markdown",
201
+ "metadata": {},
202
+ "source": [
203
+ "## 9) اجرای رابط Gradio در Colab (اختیاری)"
204
+ ]
205
+ },
206
+ {
207
+ "cell_type": "code",
208
+ "execution_count": null,
209
+ "metadata": {},
210
+ "outputs": [],
211
+ "source": [
212
+ "# اجرای این سلول یک لینک موقت Gradio می‌سازد.\n",
213
+ "# توجه: لینک با پایان نشست Colab خاموش می‌شود.\n",
214
+ "!USE_GENERATOR=0 GRADIO_SHARE=1 python app.py\n"
215
+ ]
216
+ },
217
+ {
218
+ "cell_type": "markdown",
219
+ "metadata": {},
220
+ "source": [
221
+ "## خروجی‌ها\n",
222
+ "- ایندکس: `index/chunks.json` و `index/vectors.npz`\n",
223
+ "- مقالات: `data/articles/`\n",
224
+ "- داشبورد: https://wandb.ai/elasa2next-sosa-/dual-diagnosis-rag\n",
225
+ "- مخزن مدل: https://huggingface.co/sosa123454321/dual-diagnosis-rag\n",
226
+ "- دیتاست: https://huggingface.co/datasets/sosa123454321/dual-diagnosis-dataset\n"
227
+ ]
228
+ }
229
+ ],
230
+ "metadata": {
231
+ "accelerator": "GPU",
232
+ "colab": {
233
+ "name": "Dual_Diagnosis_RAG_Colab.ipynb",
234
+ "provenance": []
235
+ },
236
+ "kernelspec": {
237
+ "display_name": "Python 3",
238
+ "name": "python3"
239
+ },
240
+ "language_info": {
241
+ "name": "python"
242
+ }
243
+ },
244
+ "nbformat": 4,
245
+ "nbformat_minor": 5
246
+ }