teoo33 commited on
Commit
0fb21e2
·
verified ·
1 Parent(s): a17bae5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -49
app.py CHANGED
@@ -20,12 +20,16 @@ business_info = None
20
  product_info = None
21
  last_user_request = ""
22
  initial_prompt = ""
23
- original_user_request = "" # برای حفظ درخواست اولیه
24
 
25
- # پرامپت مادر (بدون تغییر)
26
  mother_prompt = """
27
  You are the Nova System, an innovative problem-solving approach implemented by a dynamic consortium of virtual experts, each serving a distinct role. Your goal is to assist the user in generating high-quality prompts, a comprehensive knowledge base, and an automatically generated Frequently Asked Questions (FAQ) section for chatbots.
28
- ...
 
 
 
 
29
  """
30
 
31
  # تابع برای تبدیل داده‌ها به فرمت JSON-serializable
@@ -74,8 +78,8 @@ def start_process(file1, file2, user_request, user_prompt):
74
  global iteration_count, iteration_history, business_info, product_info, last_user_request, initial_prompt, prompt_output, original_user_request
75
  iteration_count = 1
76
  iteration_history = "سلام عزیزم! فرایند شروع شد! 😍\n"
77
- last_user_request = user_request
78
- original_user_request = user_request # ذخیره درخواست اولیه
79
  initial_prompt = user_prompt.strip() if user_prompt else ""
80
 
81
  business_info, product_info = process_excel_files(file1, file2)
@@ -83,25 +87,25 @@ def start_process(file1, file2, user_request, user_prompt):
83
  product_info_serializable = convert_to_serializable(product_info)
84
 
85
  if last_user_request:
86
- iteration_history += f"**درخواست کاربر (فقط برای این Iteration):** {last_user_request}\n"
87
  if initial_prompt:
88
  iteration_history += f"**پرامپت اولیه کاربر:**\n{initial_prompt}\n"
89
  prompt_output = initial_prompt
90
 
91
  dce_instructions = f"""
92
- iteration {iteration_count}: اگه پرامپت اولیه کاربر وجود داره، از اون به‌عنوان پایه استفاده کن.
93
- - اگه درخواست 'بهینه و خلاصه کن' بود، پرامپت رو به زیر 300 کلمه خلاصه کن. اطلاعات اضافی مثل آدرس، تماس، هزینه ارسال، مراحل خرید و جزئیات فروشگاه رو به پایگاه دانش یا FAQ منتقل کن تا هیچی از قلم نیفته و رفتار پرامپت ۱۰۰٪ مثل اولیه بمونه.
94
- - اگه درخواست تغییر پرامپته (مثل 'لحن رسمی‌تر بشه')، تغییرات رو اعمال کن و نسخه کامل پرامپت، پایگاه دانش و FAQ رو خروجی بده.
95
- - همیشه نسخه کامل هر سه بخش (پرامپت، پایگاه دانش، FAQ) رو تولید کن، حتی اگه تغییری توشون نباشه.
96
  """
97
  iteration_history += f"**دستورات DCE:** {dce_instructions}\n"
98
 
99
  pee_prompt = f"""
100
  {mother_prompt}
101
- شما Prompt Engineering Expert (PEE) هستید. بر اساس اطلاعات زیر و درخواست کاربر کار کن:
102
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
103
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
104
- پرامپت اولیه کاربر: {initial_prompt if initial_prompt else "هیچ پرامپتی وارد نشده"}
105
  درخواست کاربر: {last_user_request if last_user_request else "هیچ درخواستی وارد نشده"}
106
  {dce_instructions}
107
  خروجی رو با --- جدا کن (پرامپت --- پایگاه دانش --- FAQ).
@@ -120,22 +124,22 @@ def start_process(file1, file2, user_request, user_prompt):
120
 
121
  cae_prompt = f"""
122
  {mother_prompt}
123
- شما Critical Analysis Expert (CAE) هستید. خروجی PEE رو نقد کن، مطمئن شو درخواست کاربر رعایت شده و اگه بهینه‌سازی بوده، رفتار پرامپت مثل اولیه مونده:
124
- خروجی PEE:\n{pee_output}
125
- پرامپت اولیه:\n{initial_prompt}
 
126
  """
127
  cae_response = client.chat.completions.create(
128
  model="gpt-4o",
129
  messages=[{"role": "system", "content": cae_prompt}]
130
  )
131
- cae_output = cae_response.choices[0].message.content
132
- iteration_history += f"**نقد CAE:**\n{cae_output}\n"
133
 
134
  dce_summary = f"""
135
- **جمع‌بندی DCE:** iteration {iteration_count} تموم شد 🌟
136
- **وضعیت فعلی:** پرامپت، پایگاه دانش و FAQ اولیه آماده شدن.
137
  **اهداف بعدی:**
138
- #G-{iteration_count}-1: بهبود بر اساس نقد CAE.
139
  **پایان iteration {iteration_count}**
140
  """
141
  iteration_history += dce_summary
@@ -152,26 +156,27 @@ def continue_iteration(_=None):
152
  product_info_serializable = convert_to_serializable(product_info)
153
 
154
  if last_user_request:
155
- iteration_history += f"**درخواست کاربر (فقط برای این Iteration):** {last_user_request}\n"
156
  else:
157
- last_user_request = original_user_request # استفاده از درخواست اولیه
158
 
159
  dce_instructions = f"""
160
- iteration {iteration_count}: پرامپت قبلی رو بر اساس نقد CAE بهبود بده.
161
- - اگه درخواست 'بهینه و خلاصه کن' بود، پرامپت رو به زیر 300 کلمه خلاصه کن. اطلاعات اضافی مثل آدرس، تماس، هزینه ارسال، مراحل خرید و جزئیات فروشگاه رو به پایگاه دانش یا FAQ منتقل کن تا هیچی از قلم نیفته و رفتار پرامپت ۱۰۰٪ مثل اولیه بمونه.
162
- - اگه درخواست تغییر پرامپته (مثل 'لحن دوستانه‌تر بشه')، تغییرات رو اعمال کن و نسخه کامل پرامپت، پایگاه دانش و FAQ رو خروجی بده.
163
- - همیشه نسخه کامل هر سه بخش (پرامپت، پایگاه دانش، FAQ) رو تولید کن، حتی اگه تغییری توشون نباشه.
164
  """
165
  iteration_history += f"**دستورات DCE:** {dce_instructions}\n"
166
 
167
  pee_prompt = f"""
168
  {mother_prompt}
169
- شما Prompt Engineering Expert (PEE) هستید. خروجی قبلی رو بر اساس نقد CAE و درخواست کاربر بهبود بده:
170
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
171
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
172
- پرامپت اولیه کاربر: {initial_prompt if initial_prompt else "هیچ پرامپتی وارد نشده"}
173
- درخواست کاربر: {last_user_request if last_user_request else "هیچ درخواستی وارد نشده"}
174
- تاریخچه iteration قبلی:\n{iteration_history}
 
175
  {dce_instructions}
176
  خروجی رو با --- جدا کن (پرامپت --- پایگاه دانش --- FAQ).
177
  """
@@ -189,27 +194,27 @@ def continue_iteration(_=None):
189
 
190
  cae_prompt = f"""
191
  {mother_prompt}
192
- شما Critical Analysis Expert (CAE) هستید. خروجی جدید PEE رو نقد کن و مطمئن شو درخواست کاربر رعایت شده و اگه بهینه‌سازی بوده، رفتار پرامپت مثل اولیه مونده:
193
- خروجی PEE:\n{pee_output}
194
- پرامپت اولیه:\n{initial_prompt}
 
195
  """
196
  cae_response = client.chat.completions.create(
197
  model="gpt-4o",
198
  messages=[{"role": "system", "content": cae_prompt}]
199
  )
200
- cae_output = cae_response.choices[0].message.content
201
- iteration_history += f"**نقد CAE:**\n{cae_output}\n"
202
 
203
  dce_summary = f"""
204
  **جمع‌بندی DCE:** iteration {iteration_count} تموم شد 😊
205
- **وضعیت فعلی:** خروجی‌ها بهبود یافتن.
206
  **اهداف بعدی:**
207
- #G-{iteration_count}-1: ادامه بهبود یا اتمام فرایند.
208
  **پایان iteration {iteration_count}**
209
  """
210
  iteration_history += dce_summary
211
 
212
- return (iteration_history, prompt_output, knowledge_base_output, faq_output, "", "", f"Iteration {iteration_count}",
213
  gr.update(interactive=False), gr.update(interactive=True))
214
 
215
  # تابع پایان و تولید خروجی نهایی
@@ -226,18 +231,18 @@ def end_process(_=None):
226
 
227
  final_prompt = f"""
228
  {mother_prompt}
229
- فرایند iteration‌ها تموم شده. لطفاً خروجی نهایی رو تولید کن:
230
- 1. پرامپت چت‌بات به انگلیسی (Persona, Tone, Guidelines, About Us, ...). اگه پرامپت اولیه کاربر وجود داره، از اون به‌عنوان پایه استفاده کن.
231
- - اگه درخواست 'بهینه و خلاصه کن' بوده، پرامپت رو به زیر 300 کلمه خلاصه کن و اطلاعات اضافی مثل آدرس، تماس، هزینه ارسال، مراحل خرید و جزئیات فروشگاه رو به پایگاه دانش یا FAQ منتقل کن تا رفتار پرامپت ۱۰۰٪ مثل اولیه بمونه.
232
- - اگه درخواست تغییر بوده، تغییرات رو اعمال کن.
233
  2. پایگاه دانش به فرمت JSON-like (name, description, variants, objectID).
234
  3. FAQ به فرمت JSON-like (دسته‌بندی‌ها، سوالات، جواب‌ها).
235
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
236
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
237
- پرامپت اولیه کاربر: {initial_prompt if initial_prompt else "هیچ پرامپتی وارد نشده"}
238
- درخواست کاربر: {last_user_request if last_user_request else "هیچ درخواستی وارد نشده"}
239
- تاریخچه iteration‌ها:\n{iteration_history}
240
- **همیشه نسخه کامل هر سه بخش (پرامپت، پایگاه دانش، FAQ) رو تولید کن، حتی اگه تغییری توشون نباشه. هر بخش رو با --- جدا کن.**
241
  """
242
  final_response = client.chat.completions.create(
243
  model="gpt-4o",
@@ -276,9 +281,9 @@ def reset_process():
276
  # تابع ثبت درخواست کاربر
277
  def submit_request(user_request):
278
  global last_user_request, original_user_request
279
- last_user_request = user_request
280
  if not original_user_request: # اگه درخواست اولیه هنوز ثبت نشده
281
- original_user_request = user_request
282
  return "", "درخواستت ثبت شد! حالا 'ادامه دهید' رو بزن 😊"
283
 
284
  # رابط کاربری Gradio
@@ -292,7 +297,7 @@ with gr.Blocks(title="سیستم نوا 🌟") as demo:
292
  user_prompt_box = gr.Textbox(label="پرامپت آماده شما (اختیاری)", lines=5, placeholder="پرامپت خودتون رو اینجا بذارید")
293
 
294
  with gr.Row():
295
- user_request_box = gr.Textbox(label="درخواست شما", placeholder="مثلاً: 'لحن رسمی‌تر بشه' یا 'بهینه و خلاصه کن'")
296
  submit_request_btn = gr.Button("ارسال درخواست")
297
 
298
  status_box = gr.Textbox(label="وضعیت فعلی", value="فرایند شروع نشده", interactive=False)
 
20
  product_info = None
21
  last_user_request = ""
22
  initial_prompt = ""
23
+ original_user_request = ""
24
 
25
+ # پرامپت مادر
26
  mother_prompt = """
27
  You are the Nova System, an innovative problem-solving approach implemented by a dynamic consortium of virtual experts, each serving a distinct role. Your goal is to assist the user in generating high-quality prompts, a comprehensive knowledge base, and an automatically generated Frequently Asked Questions (FAQ) section for chatbots.
28
+
29
+ After each iteration:
30
+ - Check if all user requests (e.g., 'optimize' or 'add a product') are completed.
31
+ - If all requests are done, say: "همه درخواست‌ها انجام شدن 🌟 اگه درخواست جدیدی نیست، 'پایان' رو بزن تا خروجی نهایی رو ببینی."
32
+ - If more requests remain, suggest next steps based on the request (e.g., "اگه می‌خوای محصول دیگه‌ای اضافه کنی، بگو").
33
  """
34
 
35
  # تابع برای تبدیل داده‌ها به فرمت JSON-serializable
 
78
  global iteration_count, iteration_history, business_info, product_info, last_user_request, initial_prompt, prompt_output, original_user_request
79
  iteration_count = 1
80
  iteration_history = "سلام عزیزم! فرایند شروع شد! 😍\n"
81
+ last_user_request = user_request.strip()
82
+ original_user_request = last_user_request # ذخیره درخواست اولیه
83
  initial_prompt = user_prompt.strip() if user_prompt else ""
84
 
85
  business_info, product_info = process_excel_files(file1, file2)
 
87
  product_info_serializable = convert_to_serializable(product_info)
88
 
89
  if last_user_request:
90
+ iteration_history += f"**درخواست کاربر:** {last_user_request}\n"
91
  if initial_prompt:
92
  iteration_history += f"**پرامپت اولیه کاربر:**\n{initial_prompt}\n"
93
  prompt_output = initial_prompt
94
 
95
  dce_instructions = f"""
96
+ iteration {iteration_count}: پرامپت اولیه کاربر رو بر اساس درخواستش بررسی کن:
97
+ - اگه درخواست 'بهینه کن' بود، پرامپت رو ساده‌تر کن (تکرارها رو حذف کن) و اطلاعات اضافی (مثل آدرس، قیمت‌ها، جزئیات ارسال) رو به پایگاه دانش یا FAQ منتقل کن، ولی رفتار پرامپت ۱۰۰٪ مثل اولیه بمونه.
98
+ - اگه درخواست تغییر بود (مثل 'محصول اضافه کن')، فقط بخش‌های مرتبط رو اصلاح کن و بقیه رو بدون تغییر برگردون. بهینه‌سازی انجام نده.
99
+ - همیشه نسخه کامل پرامپت، پایگاه دانش، و FAQ رو تولید کن.
100
  """
101
  iteration_history += f"**دستورات DCE:** {dce_instructions}\n"
102
 
103
  pee_prompt = f"""
104
  {mother_prompt}
105
+ شما Prompt Engineering Expert (PEE) هستید:
106
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
107
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
108
+ پرامپت اولیه: {initial_prompt if initial_prompt else "هیچ پرامپتی وارد نشده"}
109
  درخواست کاربر: {last_user_request if last_user_request else "هیچ درخواستی وارد نشده"}
110
  {dce_instructions}
111
  خروجی رو با --- جدا کن (پرامپت --- پایگاه دانش --- FAQ).
 
124
 
125
  cae_prompt = f"""
126
  {mother_prompt}
127
+ شما Critical Analysis Expert (CAE) هستید:
128
+ خروجی PEE: {pee_output}
129
+ پرامپت اولیه: {initial_prompt}
130
+ چک کن رفتار پرامپت اولیه حفظ شده باشه و درخواست کاربر اعمال شده باشه.
131
  """
132
  cae_response = client.chat.completions.create(
133
  model="gpt-4o",
134
  messages=[{"role": "system", "content": cae_prompt}]
135
  )
136
+ iteration_history += f"**نقد CAE:**\n{cae_response.choices[0].message.content}\n"
 
137
 
138
  dce_summary = f"""
139
+ **جمع‌بندی DCE:** iteration {iteration_count} تموم شد 😊
140
+ **وضعیت فعلی:** {('همه درخواست‌ها انجام شدن 🌟 اگه درخواست جدیدی نیست، "پایان" رو بزن تا خروجی نهایی رو ببینی.' if not last_user_request else 'درخواست‌ها انجام شدن، اگه چیز دیگه‌ای می‌خوای بگو!')}
141
  **اهداف بعدی:**
142
+ #G-{iteration_count}-1: ادامه بر اساس درخواست جدید یا پایان.
143
  **پایان iteration {iteration_count}**
144
  """
145
  iteration_history += dce_summary
 
156
  product_info_serializable = convert_to_serializable(product_info)
157
 
158
  if last_user_request:
159
+ iteration_history += f"**درخواست کاربر:** {last_user_request}\n"
160
  else:
161
+ last_user_request = original_user_request if original_user_request else "بهینه کن" # پیش‌فرض بهینه‌سازی
162
 
163
  dce_instructions = f"""
164
+ iteration {iteration_count}: پرامپت قبلی رو بر اساس درخواست کاربر بررسی کن:
165
+ - اگه 'بهینه کن' بود، پرامپت رو ساده‌تر کن (تکرارها رو حذف کن) و Informations اضافی (مثل آدرس، قیمت‌ها، جزئیات ارسال) رو به پایگاه دانش یا FAQ منتقل کن، ولی رفتار پرامپت ۱۰۰٪ مثل اولیه بمونه.
166
+ - اگه تغییر بود (مثل 'محصول اضافه کن')، فقط بخش‌های مرتبط رو اصلاح کن و بقیه رو بدون تغییر برگردون. بهینه‌سازی انجام نده.
167
+ - همیشه نسخه کامل پرامپت، پایگاه دانش، و FAQ رو تولید کن.
168
  """
169
  iteration_history += f"**دستورات DCE:** {dce_instructions}\n"
170
 
171
  pee_prompt = f"""
172
  {mother_prompt}
173
+ شما Prompt Engineering Expert (PEE) هستید:
174
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
175
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
176
+ پرامپت اولیه: {initial_prompt}
177
+ پرامپت فعلی: {prompt_output}
178
+ درخواست کاربر: {last_user_request}
179
+ تاریخچه: {iteration_history}
180
  {dce_instructions}
181
  خروجی رو با --- جدا کن (پرامپت --- پایگاه دانش --- FAQ).
182
  """
 
194
 
195
  cae_prompt = f"""
196
  {mother_prompt}
197
+ شما Critical Analysis Expert (CAE) هستید:
198
+ خروجی PEE: {pee_output}
199
+ پرامپت اولیه: {initial_prompt}
200
+ چک کن رفتار پرامپت اولیه حفظ شده باشه و درخواست کاربر اعمال شده باشه.
201
  """
202
  cae_response = client.chat.completions.create(
203
  model="gpt-4o",
204
  messages=[{"role": "system", "content": cae_prompt}]
205
  )
206
+ iteration_history += f"**نقد CAE:**\n{cae_response.choices[0].message.content}\n"
 
207
 
208
  dce_summary = f"""
209
  **جمع‌بندی DCE:** iteration {iteration_count} تموم شد 😊
210
+ **وضعیت فعلی:** {('همه درخواست‌ها انجام شدن 🌟 اگه درخواست جدیدی نیست، "پایان" رو بزن تا خروجی نهایی رو ببینی.' if not last_user_request else 'درخواست‌ها انجام شدن، اگه چیز دیگه‌ای می‌خوای بگو!')}
211
  **اهداف بعدی:**
212
+ #G-{iteration_count}-1: ادامه یا پایان.
213
  **پایان iteration {iteration_count}**
214
  """
215
  iteration_history += dce_summary
216
 
217
+ return (iteration_history, prompt_output, knowledge_base_output, faq_output, "", "", iteration_count,
218
  gr.update(interactive=False), gr.update(interactive=True))
219
 
220
  # تابع پایان و تولید خروجی نهایی
 
231
 
232
  final_prompt = f"""
233
  {mother_prompt}
234
+ فرایند iteration‌ها تموم شده. خروجی نهایی رو تولید کن:
235
+ 1. پرامپت چت‌بات به انگلیسی (Persona, Tone, Guidelines, ...). از پرامپت اولیه کاربر به‌عنوان پایه استفاده کن.
236
+ - اگه درخواست 'بهینه کن' بوده، پرامپت رو ساده‌تر کن و اطلاعات اضافی رو به پایگاه دانش/FAQ منتقل کن، ولی رفتار ۱۰۰٪ مثل اولیه بمونه.
237
+ - اگه درخواست تغییر بوده، فقط بخش‌های مرتبط رو اصلاح کن.
238
  2. پایگاه دانش به فرمت JSON-like (name, description, variants, objectID).
239
  3. FAQ به فرمت JSON-like (دسته‌بندی‌ها، سوالات، جواب‌ها).
240
  اطلاعات کسب‌وکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
241
  اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
242
+ پرامپت اولیه: {initial_prompt}
243
+ درخواست کاربر: {last_user_request}
244
+ تاریخچه iteration‌ها: {iteration_history}
245
+ همیشه نسخه کامل هر سه بخش (پرامپت، پایگاه دانش، FAQ) رو تولید کن، هر بخش رو با --- جدا کن.
246
  """
247
  final_response = client.chat.completions.create(
248
  model="gpt-4o",
 
281
  # تابع ثبت درخواست کاربر
282
  def submit_request(user_request):
283
  global last_user_request, original_user_request
284
+ last_user_request = user_request.strip()
285
  if not original_user_request: # اگه درخواست اولیه هنوز ثبت نشده
286
+ original_user_request = last_user_request
287
  return "", "درخواستت ثبت شد! حالا 'ادامه دهید' رو بزن 😊"
288
 
289
  # رابط کاربری Gradio
 
297
  user_prompt_box = gr.Textbox(label="پرامپت آماده شما (اختیاری)", lines=5, placeholder="پرامپت خودتون رو اینجا بذارید")
298
 
299
  with gr.Row():
300
+ user_request_box = gr.Textbox(label="درخواست شما", placeholder="مثلاً: 'محصول اضافه کن' یا 'بهینه کن'")
301
  submit_request_btn = gr.Button("ارسال درخواست")
302
 
303
  status_box = gr.Textbox(label="وضعیت فعلی", value="فرایند شروع نشده", interactive=False)