E-slam commited on
Commit
14f0ec1
·
verified ·
1 Parent(s): 1a58141

Upload 5 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ data/KSA_Legal_cases.json filter=lfs diff=lfs merge=lfs -text
app.py ADDED
@@ -0,0 +1,289 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ from openai import AzureOpenAI
4
+ import faiss
5
+ import numpy as np
6
+ import json
7
+ import time
8
+ import re
9
+ import tiktoken
10
+ import os
11
+ from IPython.display import HTML
12
+
13
+ def arabic_print(text, colour="blue"):
14
+ """
15
+ Displays Arabic text with proper RTL and right alignment in Jupyter Notebook.
16
+
17
+ Parameters:
18
+ text (str): The Arabic text to display.
19
+ colour (str): The color of the text. Default is "blue".
20
+ """
21
+ text=text.replace("\n","<br>")
22
+ html_content = f"""
23
+ <div style="direction: rtl; text-align: right; font-size: 16px; line-height: 1.5; color: {colour};">
24
+ {text}
25
+ </div>
26
+ """
27
+ return HTML(html_content)
28
+
29
+ # Example usage
30
+ my_arabic_text = """
31
+ باسم صاحب السمو الشيخ خليفة بن زايد آل نهيان رئيس دولة الإمارات العربية المتحدة / حاكم إمارة أبو ظبي
32
+ بالجلسة المنعقدة بـ محكمة ابوظبي العمالية-ابتدائي بتاريخ 2 جمادى الآخرة 1441 هـ الموافق 27/01/2020 م
33
+ برئاسة القاضي: إبراهيم ناصر الاحبابي وعضوية القاضي: مرتضى الصديق الحسن وعضوية القاضي: خليفة سليم
34
+ """
35
+
36
+ # Display the text using the function
37
+ arabic_print(my_arabic_text, colour="green")
38
+
39
+ from openai import AzureOpenAI
40
+
41
+ AZURE_OPENAI_PREVIEW_API_VERSION = os.getenv("AZURE_OPENAI_PREVIEW_API_VERSION")
42
+ AZURE_OPENAI_ENDPOINT = os.getenv("AZURE_OPENAI_ENDPOINT")
43
+ AZURE_OPENAI_KEY = os.getenv("AZURE_OPENAI_KEY")
44
+
45
+ client = AzureOpenAI(
46
+ azure_endpoint = AZURE_OPENAI_ENDPOINT,
47
+ api_key=AZURE_OPENAI_KEY,
48
+ api_version= AZURE_OPENAI_PREVIEW_API_VERSION
49
+ )
50
+
51
+ def call_gpt_azure_message(message_text):
52
+ completion = client.chat.completions.create(
53
+ #model="GPT4Turbo",
54
+ model="gpt-4o",
55
+ messages = message_text,
56
+ temperature=0.0,
57
+ max_tokens=1000,
58
+ top_p=0.95,
59
+ frequency_penalty=0,
60
+ presence_penalty=0,
61
+ stop=None,
62
+ )
63
+ return completion.choices[0].message.content
64
+
65
+
66
+ def call_gpt_azure_message_stream(message_text):
67
+ completion = client.chat.completions.create(
68
+ #model="GPT4Turbo",
69
+ model="gpt-4o",
70
+ messages = message_text,
71
+ temperature=0.0,
72
+ max_tokens=2000,
73
+ top_p=0.95,
74
+ frequency_penalty=0,
75
+ presence_penalty=0,
76
+ stop=None,
77
+ stream=True
78
+ )
79
+ return completion
80
+
81
+
82
+ def call_gpt_azure(SYS_PROMPT,USER_PROMPT,MODEL="gpt-4o"):
83
+ message_text=[
84
+ {
85
+ "role": "system",
86
+ "content": SYS_PROMPT
87
+ },
88
+ {
89
+ "role": "user",
90
+ "content": USER_PROMPT
91
+ },
92
+
93
+ ]
94
+
95
+ completion = client.chat.completions.create(
96
+ model=MODEL,
97
+ messages = message_text,
98
+ temperature=0.0,
99
+ max_tokens=1000,
100
+ top_p=0.95,
101
+ frequency_penalty=0,
102
+ presence_penalty=0,
103
+ stop=None
104
+ )
105
+ return completion.choices[0].message.content
106
+
107
+
108
+
109
+ # This is the main embedding function , that takes as input text and generate 1536 floats using ada3_small
110
+ def generate_embeddings(text, model="ada3_small"): # model = "deployment_name"
111
+ return client.embeddings.create(input = [text], model=model).data[0].embedding
112
+
113
+
114
+ import tiktoken
115
+ enc = tiktoken.get_encoding("o200k_base")
116
+ assert enc.decode(enc.encode("hello world")) == "hello world"
117
+
118
+ # To get the tokeniser corresponding to a specific model in the OpenAI API:
119
+ enc = tiktoken.encoding_for_model("gpt-4o")
120
+
121
+ import tiktoken
122
+
123
+ def count_tokens_ada3(text, model_name="text-embedding-3-small"):
124
+ # Automatically get the correct encoding for the given model
125
+ encoding = tiktoken.encoding_for_model(model_name)
126
+ # Encode the text and count the tokens
127
+ return len(encoding.encode(text))
128
+
129
+
130
+ def Get_nearest_cases_Json(case,K):
131
+ vquery=np.array(generate_embeddings(case))
132
+ vquery=vquery.reshape(1,-1)
133
+
134
+ D, I = index_law.search(vquery, K) # search
135
+ cxt_cases=""
136
+ cxt_list=[]
137
+ Locs=I[0]
138
+ for L in Locs:
139
+ cxt_cases+=str(json_cases[L])
140
+
141
+
142
+ return cxt_cases
143
+
144
+
145
+
146
+ def count_tokens(text):
147
+ return len(enc.encode(text))
148
+
149
+ vec_embs=np.load("Data/All_cases_embedded.npy")
150
+
151
+ index_law=faiss.IndexFlatIP(vec_embs.shape[1])
152
+ index_law.add(vec_embs)
153
+
154
+ #case=Emb_text_list[10]
155
+
156
+
157
+
158
+ # File path
159
+ output_file = 'Data/KSA_Legal_cases.json'
160
+
161
+ # Read the JSON file
162
+ with open(output_file, 'r', encoding='utf-8') as file:
163
+ json_cases = json.load(file)
164
+
165
+
166
+
167
+ def GPT_AI_Judge_Json(case , cxt):
168
+ SYS_PROMPT="""
169
+
170
+
171
+ **System Role**:
172
+ You are an **Arabic Legal Judge Assistant**, specialized in analyzing legal cases and extracting insights from related legal precedences.
173
+
174
+
175
+ ### **Input Details**:
176
+ You will be given:
177
+ 1. A **legal case** (primary input).
178
+ 2. A **context** containing multiple legal precedences in json format.
179
+
180
+
181
+
182
+ ### **Your Tasks**:
183
+ 1. **Analyze the Input Case**:
184
+ - Focus on the **description of the case** (توصيف القضية) and its key aspects.
185
+
186
+ 2. **Identify Relevant legal Precedences**:
187
+ - Search the provided context for precedences only **closely related** to the input case.
188
+
189
+ 3. **Create a Comparative Analysis**:
190
+ - Present a **contrastive table** comparing the relevant precedences with columns containing metadata in context
191
+ 4. **Discussion of Key Points**:
192
+ - Highlight **commonalities and differences** between the input case and the relevant precedences.
193
+
194
+ 5. **Suggest a Ruling Decision**:
195
+ - Provide a **recommendation** for the Judge, based on the rulings of the similar precedences.
196
+
197
+ ---
198
+
199
+
200
+
201
+
202
+ ### **If No Relevant Precedences**:
203
+ - Clearly state that no related precedences were identified from the context.
204
+ - Apologize and note that a ruling recommendation cannot be provided.
205
+
206
+ ---
207
+
208
+ ### **Response Format**:
209
+ 1. **Comparative Table**:
210
+ - compare relevant precedences in a table.
211
+
212
+ 2. **RTL Formatting**:
213
+ - Use **right-to-left (RTL)** direction and **right alignment**.
214
+ - Ensure all headers, lists, and paragraphs include `dir="rtl"` and `text-align: right`.
215
+
216
+ 3. **Clear Structure**:
217
+ - Provide a well-organized response for proper Arabic rendering.
218
+
219
+ ---
220
+
221
+ """
222
+
223
+
224
+
225
+ User_Prompt=f"Input Legal Case {case} \n Legal precedences context : {cxt}"
226
+ message_text=[
227
+ {
228
+ "role": "system",
229
+ "content": SYS_PROMPT
230
+ },
231
+ {
232
+ "role": "user",
233
+ "content": User_Prompt
234
+ },
235
+
236
+ ]
237
+ completion = client.chat.completions.create(
238
+ #model="gpt-35-turbo-16k",
239
+ model="gpt-4o",
240
+ messages = message_text,
241
+ temperature=0.0,
242
+ max_tokens=3500,
243
+ top_p=0.95,
244
+ frequency_penalty=0,
245
+ presence_penalty=0,
246
+ stop=None
247
+ )
248
+ return completion.choices[0].message.content
249
+
250
+
251
+ import gradio as gr
252
+
253
+ # Define the processing function
254
+ def gpt_judge(case,history):
255
+ cxt=Get_nearest_cases_Json(case,5)
256
+ print("Tokens ==>",count_tokens(cxt))
257
+ # Example: Generate a markdown response
258
+ response = GPT_AI_Judge_Json(case,cxt)
259
+ # Save the response to a Markdown file
260
+ # Convert Markdown to HTML
261
+ return response
262
+ welcome_message="اذكر احداث ووقائع وملابسات القضية وسأقوم بتحليلها و اقتراح الحكم بناءا عى سوابق قضائية مشابهة "
263
+
264
+ chatbot=gr.Chatbot(value=[(None,welcome_message)],height=800,rtl=True)
265
+
266
+ tit_html='\n<div style="text-align: right;">\n<p>اذكر الوقائع الخاصة بالقضية وتوصيفها للحصول على الاستشارة القانونية المناسبة.</p>\n</div>\n'
267
+ tit_img = """
268
+ <div style="text-align: right;">
269
+ <img src="https://i.postimg.cc/rytvLcdm/ksa-leg.png" alt="Stars Logo" width="200" height="200">
270
+ </div>
271
+ """
272
+ with gr.Blocks() as demo:
273
+
274
+
275
+ gr.ChatInterface(
276
+ gpt_judge,
277
+ chatbot=chatbot,
278
+ title=tit_img,
279
+ description=tit_html,
280
+ theme="soft",
281
+ retry_btn=None,
282
+ undo_btn="Delete Previous",
283
+ clear_btn="Clear"
284
+ )
285
+ #btn = gr.Button("توعية قانونية")
286
+ #btn.click(fn=greet)
287
+
288
+
289
+ demo.launch()
data/All_cases_embedded.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6b38c0a92aed4cf471bddcd53f19582bc6fd0341d6f881955fe5004916df0703
3
+ size 13209728
data/Examples legal cases.txt ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ شاب متهور بيعمل حركات بهلوانية طائشة بالعربية تفحيط ، . قبضوا عليه بعد ما كان بيعمل نفس التفحيط بعربيته في جدة ، وطلع عنده مخالفات تفحيط قبل كده. المتهم اعترف إنه عمل كده، ووكيله أكد الكلام ده في جلسة بعد كده.
2
+ ============================================================
3
+ أم تشتكي ولدها، تتهمه إنه ضربها، وكسر يدها، وهددها هي وبناتها بالقتل. الولد، لما وقف قدام القاضي، أنكر كل شي وقال إن الكلام مش صحيح. بس الأم ما سكتت، جابت شاهد، ومعدّل شرعاً، وشهادته كانت واضحة إنها تقول الحقيقة.خلال التحقيق، الولد اعترف إنه دفع أمه، بس حاول يبرر وقال إنه كان في حالة غضب وما كان قاصد. القاضي بدأ يجمع الأدلة، ولما شاف اعتراف الولد وشهادة الشاهد، اكتشف إن الموضوع جد.
4
+ زاد الطين بلة إن الولد كان عنده سوابق جنائية، مثل الترويج وحيازة المخدرات. وبعد ما اتأكد القاضي من كل شي، حكم بإدانة الولد إنه هدد أمه ودفعها.
5
+ ===============================================================
6
+ شكوى ضد المدعي عند جهة عمله، واتهمه إنه بيتغيب كتير عن الشغل وبيشغل نفسه بحاجات تانية. المدعى عليه اعترف إنه قدم الشكوى لكنه أنكر إنها كانت بدافع الكيد، وقال إنها كانت حقيقية.
7
+ القاضي، لما راجع القضية، لقى خطاب من مدير المدعي في الشغل بيأكد انتظامه وإن الشكوى مش صحيحة. المدعي قال إن الشكوى كانت هدفها الأذية وتشويه سمعته، وإنها سببت له أضرار نفسية ومعنوية.
8
+ المدعى عليه دافع عن نفسه وقال إن الشكوى كانت مبررة، وإن المدعي هو اللي بيحاول يضره.
9
+ ===============================================================
10
+ أقام المدعي العام دعوى ضد المدعى عليه، وهو مواطن سعودي يبلغ من العمر 30 عامًا، بتهمة اقتحام مزرعة وسرقة محتوياتها، بما في ذلك مضخة مياه كهربائية وأدوات زراعية وخزان ديزل. قدمت الأدلة تقريراً فنياً يثبت تطابق آثار حذاء المدعى عليه مع الآثار الموجودة في موقع الحادث، كما أقر المدعى عليه بقيامه بالجريمة وبيع المسروقات لأحد المحلات.
11
+ تم الكشف عن وجود سابقة شغب في سجل المدعى عليه. نظراً لتنازل صاحب المزرعة عن المطالبة بماله، لم تتوافر شروط إقامة حد السرقة، مما دفع المدعي العام إلى طلب إثبات التهمة والحكم بعقوبة تعزيرية. المدعى عليه اعترف بصحة الاتهام وأبدى أسفه وندمه على فعلته.
12
+ =============================================================
13
+ تقدم المدعي العام بدعوى ضد شابين، يتهمهما بالتدخين في مكان عام خلال نهار رمضان، مطالباً بإثبات إدانتهما وفرض عقوبة تعزيرية عليهما. الشاب الأول تغيب عن الجلسة لأنه كان مسافراً خارج البلاد، بينما حضر الشاب الثاني وأكد أنه كان يحمل السيجارة لشخص آخر يعاني من ضيق تنفس ولم يكن يدخنها بنفسه.
14
+ طلب المدعي العام مهلة لتقديم شهود على الواقعة، وبعد منحه الوقت اللازم، لم يتمكن من إحضار أي بينة تدعم اتهامه.
15
+ ==============================================================
16
+ تهديد رجل عبر رسالة صوتية تم العثور عليها في جهازه. طالب المدعي العام بفرض عقوبة تعزيرية ومصادرة الأجهزة المستخدمة.
17
+
18
+ أنكر المدعى عليه الاتهامات، موضحاً أن الصور تعود إلى أصدقائه وأن الرسالة الصوتية كانت جزءاً من نقاش عادي مع أحد زملائه. استند المدعي العام في دعواه إلى محاضر ضبط الأجهزة، تقرير الفحص الفني، وشهادة شاهد أكد العثور على المواد غير اللائقة والرسالة التهديدية في الحاسوب.
19
+
20
+ بعد مراجعة القاضي للأدلة، بما في ذلك التقرير الفني وشهادة الشاهد، تأكدت إدانة المدعى عليه بحيازة المواد غير اللائقة واستخدام الرسائل الصوتية في التهديد.
21
+ ===================================================================
22
+ رفع المدعي العام قضية ضد المدعى عليه، يتهمه فيها بكتابة ونشر منشور أدبي يحتوي على عبارات مسيئة وساخرة موجهة نحو أبناء عمه، بهدف التشهير بهم والنيل من سمعتهم. أقر المدعى عليه بصحة الاتهام، موضحاً أن السبب وراء كتابته هو شعوره بالخذلان من أبناء عمه عندما طلب مساعدتهم في بدء مشروعه التجاري.
23
+ المنشور، الذي نُشر عبر وسائل التواصل الاجتماعي، احتوى على 15 فقرة، تضمنت انتقادات لاذعة وسخرية واضحة. خلال التحقيق، اعترف المدعى عليه بأنه كتب المنشور ونشره بنية الإساءة والتشهير. كما تبين من السجل الجنائي للمدعى عليه أنه ليس لديه أي سوابق.
24
+ طالب المدعي العام بإثبات التهمة الموجهة إلى المدعى عليه وفرض عقوبة تعزيرية عليه. القاضي اعتبر أن ما قام به المدعى عليه من شأنه أن يثير الفتنة والخلافات، ويعد تعدياً لفظياً لا يتماشى مع القيم المجتمعية. استند القاضي في حكمه إلى مبادئ دينية وقانونية تؤكد أهمية احترام الأفراد وحماية سمعتهم من التشهير والإيذاء.
25
+ =====================================================================
26
+ رفع المدعي العام دعوى ضد المتهم بتهمة تقديم بلاغ كاذب إلى محافظ إحدى المدن، حيث زعم أن شقيقه يتعاطى المخدرات ويعامل خادمته بطريقة سيئة. وبعد إجراء التحقيقات، تبين أن هذه الادعاءات لا أساس لها من الصحة. وأقر المتهم بصحة التهم الموجهة إليه، مبررًا فعلته بأنها نتيجة خلافات شخصية مع شقيقه.
27
+ ==================================================================
28
+ تقدم المدعي بدعوى يطالب فيها بتعويضه عن الأضرار التي لحقت به نتيجة سحب سيارته التي كانت مستأجرة بعقد ينتهي بالتمليك. وأوضح المدعي أن المدعى عليه تسبب في تلفيات أثناء سحب السيارة من داخل منزله، مما ألحق به خسائر مادية.
29
+ في المقابل، أقر المدعى عليه بصحة الدعوى من حيث وقائع السحب، موضحاً أنه كان ينفذ أوامر الشركة المالكة للسيارة التي يعمل لديها، والتي كلفته بسحب السيارة بسبب تأخر المدعي عن سداد الأقساط المستحقة. بعد مخاطبة الشركة المالكة، وردت إفادة تؤكد صحة كلام المدعى عليه وتكليفه الرسمي بسحب السيارة.
30
+ رغم ذلك، أصر المدعي على طلبه بالتعويض، مشيراً إلى أن المدعى عليه لم يكن مخولاً بدخول منزله، وأنه تجاوز حدود التفويض أثناء عملية السحب. وبعد عدة جلسات، قدمت الشركة إفادة إضافية تؤكد تفويض المدعى عليه بسحب السيارة، لكن دون الإشارة إلى إذن دخول منزل المدعي.
31
+ في النهاية، أقر المدعي بصحة التفويض العام لسحب السيارة، لكنه تمسك بموقفه بأن المدعى عليه لم يكن مفوضاً بالدخول إلى فناء منزله، مما أبقى النزاع حول أحقية التعويض معلقاً على تفسير حدود التفويض.
32
+ ===========================================
33
+ رفع المدعي العام دعوى ضد المدعى عليه في الإمارات، متّهماً إياه بالتورط في تجمعات ومسيرات أثارت الجدل العام وخلقت توترات طائفية، حيث زُعم أن تلك التجمعات تضمنت هتافات مناوئة للدولة ومحرضة ضد قوات الأمن.
34
+
35
+ المدعى عليه دافع عن نفسه نافياً التهم الموجهة إليه، موضحاً أنه لم يشارك إلا في مراسم تشييع جنازات، دون أن يردد أي شعارات أو هتافات. ورد المدعي العام بتقديم تسجيلات مرئية تظهر المدعى عليه وسط المسيرات. أقر المدعى عليه بأنه حضر تلك التجمعات كجزء من التشييع، لكنه استمر في نفي ترديده لأي هتافات.
36
+ خلال المحاكمة، أكد المدعي العام أن الحضور والمشاركة في مسيرات تحمل شعارات مناوئة يعد في حد ذاته دعماً غير مباشر لتلك الشعارات، حتى وإن لم يشارك المدعى عليه في ترديدها. ومع ذلك، لم يتم تقديم أي دليل مباشر يثبت أن المدعى عليه ردد الهتافات.بناءً على إقرار المدعى عليه بحضوره المسيرات،
37
+ ====================================================================
38
+ أقام المدعي العام دعوى ضد المدعى عليها بتهمة حيازة ورق يحتوي على رموز يُشتبه بأنها خاصة بالسحر والشعوذة، بعد العثور عليها أثناء التفتيش الجمركي داخل حقيبتها. المدعى عليها اعترفت بأن الورق كان موجودًا في حقيبتها، لكنها أنكرت علاقتها به، وأوضحت إنها تركت الحقيبة للحظات بجانب منطقة التفتيش الجمركي أثناء انشغالها بإجراءات السفر.
39
+
40
+ خلال الجلسة، قدم المدعي العام تقريرًا من السلطات الجمركية يؤكد العثور على الورق داخل الحقيبة، لكنه لم يُقدم أي دليل يربط المدعى عليها مباشرة باستخدام الورق أو علاقتها به. كما أشار إلى أن الأوراق تم تسليمها إلى جهة مختصة لتحليلها، ثم تم إتلافها لاحقًا دون الاحتفاظ بنسخ أو صور كدليل.
41
+
42
+ المدعى عليها أكدت أمام القاضي أن الحقيبة كانت تُركت بدون رقابة لفترة وجيزة في صالة التفتيش، وأنها لا تعلم كيف وصل الورق إليها. كما أشارت إلى أن التحقيق لم يقدم أي دليل يثبت أنها قامت باستخدام الأوراق لأي غرض غير قانوني.
43
+
data/KSA_Legal_cases.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:590d6560ec07cb8020ada0a32541a13b1c1c3d32a3158aa29daf18e4a380c053
3
+ size 18587754
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pandas==2.2.3
2
+ openai==1.52.1
3
+ faiss-cpu==1.9.0
4
+ numpy==1.26.2