Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 =
|
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"**درخواست
|
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 |
-
- اگه درخواست 'بهینه
|
94 |
-
- اگه درخواست تغییر
|
95 |
-
- همیشه نسخه کامل
|
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 |
-
پرامپت
|
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)
|
124 |
-
خروجی PEE
|
125 |
-
پرامپت
|
|
|
126 |
"""
|
127 |
cae_response = client.chat.completions.create(
|
128 |
model="gpt-4o",
|
129 |
messages=[{"role": "system", "content": cae_prompt}]
|
130 |
)
|
131 |
-
|
132 |
-
iteration_history += f"**نقد CAE:**\n{cae_output}\n"
|
133 |
|
134 |
dce_summary = f"""
|
135 |
-
**جمعبندی DCE:** iteration {iteration_count} تموم شد
|
136 |
-
**وضعیت فعلی:**
|
137 |
**اهداف بعدی:**
|
138 |
-
#G-{iteration_count}-1:
|
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"**درخواست
|
156 |
else:
|
157 |
-
last_user_request = original_user_request #
|
158 |
|
159 |
dce_instructions = f"""
|
160 |
-
iteration {iteration_count}: پرامپت قبلی رو بر اساس
|
161 |
-
- اگه
|
162 |
-
- اگه
|
163 |
-
- همیشه نسخه کامل
|
164 |
"""
|
165 |
iteration_history += f"**دستورات DCE:** {dce_instructions}\n"
|
166 |
|
167 |
pee_prompt = f"""
|
168 |
{mother_prompt}
|
169 |
-
شما Prompt Engineering Expert (PEE)
|
170 |
اطلاعات کسبوکار: {json.dumps(business_info_serializable, ensure_ascii=False)}
|
171 |
اطلاعات محصولات: {json.dumps(product_info_serializable, ensure_ascii=False)}
|
172 |
-
پرامپت
|
173 |
-
|
174 |
-
|
|
|
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)
|
193 |
-
خروجی PEE
|
194 |
-
پرامپت
|
|
|
195 |
"""
|
196 |
cae_response = client.chat.completions.create(
|
197 |
model="gpt-4o",
|
198 |
messages=[{"role": "system", "content": cae_prompt}]
|
199 |
)
|
200 |
-
|
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, "", "",
|
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,
|
231 |
-
- اگه درخواست 'بهینه
|
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 |
-
پرامپت
|
238 |
-
درخواست کاربر: {last_user_request
|
239 |
-
تاریخچه iteration
|
240 |
-
|
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 =
|
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)
|