set avalai as second llm source

This commit is contained in:
ajokar 2025-11-13 13:00:27 +00:00
parent de4620e6ce
commit 713776f6b0
9 changed files with 869 additions and 161 deletions

View File

@ -131,7 +131,7 @@ class BaleBot:
async def bale_main():
print(f'bale-qabot is Readey!!!!')
print(f'bale-qabot is Readey!!!')
while True:
last_req_id = bale_bot.get_latest_req_id()
update = bale_bot.get_updates(last_req_id)

View File

@ -53,11 +53,20 @@ async def ping():
return "ai rag caht qanon OK"
@chatbot.post("/emergency_call")
async def emergency_call(query: Query):
print('emergency generate answer ...')
chat_id = await chat.create_chat_id()
answer = await chat.ask_chatbot_avalai(query.query, chat_id)
await chat.credit_refresh()
return {"answer": answer}
@chatbot.post("/run_chat")
async def run_chat(query: Query):
print('generate answer ...')
print('regular generate answer ...')
chat_id = await chat.create_chat_id()
answer = await chat.run_chatbot(query.query, chat_id)
answer = await chat.ask_chatbot(query.query, chat_id)
await chat.credit_refresh()
return {"answer": answer}

View File

@ -45,16 +45,16 @@ FAISS_METADATA_PATH = "/src/app/qavanin-faiss/faiss_index_qavanin_285k_metadata.
RERANK_BATCH = int(os.environ.get("RERANK_BATCH", 256))
# print(f'RERANK_BATCH: {RERANK_BATCH}')
determine_refrence = """شناسه هر ماده قانون در ابتدای آن و با فرمت "id: {idvalue}" آمده است که id-value همان شناسه ماده است. بازای هربخش از پاسخی که تولید می شود، ضروری است شناسه ماده ای که در تدوین پاسخ از آن استفاده شده در انتهای پاراگراف یا جمله مربوطه با فرمت {idvalue} اضافه شود. همیشه idvalue با رشته "qs" شروع می شود"""
determine_refrence = '''شناسه هر ماده قانونی در ابتدای آن و با فرمت "id: {idvalue}" آمده است که id-value همان شناسه ماده است. بازای هربخش از پاسخی که تولید می شود، ضروری است شناسه ماده ای که در ایجاد پاسخ از آن استفاده شده، در انتهای پاراگراف یا جمله مربوطه با فرمت {idvalue} اضافه شود. همیشه idvalue با رشته "qs" شروع می شود'''
messages = [
{
"role": "system",
"content": "تو یک دستیار خبره در زمینه حقوق و قوانین مرتبط به آن هستی و می توانی متون حقوقی را به صورت دقیق توضیح بدهی . پاسخ ها باید الزاما به زبان فارسی باشد. پاسخ ها فقط از متون قانونی که در پرامپت وجود دارد استخراج شود.",
},
# {
# "role": "system",
# "content": "تو یک دستیار خبره در زمینه حقوق و قوانین مرتبط به آن هستی و می توانی متون حقوقی را به صورت دقیق توضیح بدهی . پاسخ ها باید الزاما به زبان فارسی باشد. پاسخ ها فقط از متون قانونی که در پرامپت وجود دارد استخراج شود. پاسخ تولید شده باید کاملا ساده و بدون هیچ مارک داون یا علائم افزوده ای باشد. لحن متن باید رسمی باشد.",
# },
{"role": "developer", "content": determine_refrence},
]
models = ["gpt-4o-mini", "gemini-2.5-flash-lite", "deepseek-chat"]
models = ["gpt-4o-mini" ,"gemini-2.5-flash-lite", "deepseek-chat"]
normalizer_obj = PersianVectorAnalyzer()
pipe = None
content_list, ids, prefix_list, faiss_index = [], [], [], []
@ -174,7 +174,7 @@ async def oss_base_request(sys_prompt, user_prompt):
# برای مدیریت خطاها، می‌توانید فایل‌نویسی را به صورت async انجام دهید (در صورت نیاز)
async with aiofiles.open('./llm-answer/error-in-llm.txt', mode='a+', encoding='utf-8') as file:
error_message = f'\n\nquery: {user_prompt.strip()}\nerror:{error} \n------------------------------\n'
await file.write(error_message) # فایل‌نویسی async
await file.write(error_message) # فایل‌نویسی async
return '', 0
@ -187,8 +187,8 @@ async def oss_request(query):
try:
messages.append({"role": "user", "content": query})
print(f'final prompt request attmpt')
response = await oss.process_item(messages= messages) # reasoning_effort='high'
print(f'final prompt request attempt')
response = await oss.process_item(messages= messages, reasoning_effort='low') # reasoning_effort='high'
print(response)
if response[0]:
answer = response[1]
@ -196,7 +196,7 @@ async def oss_request(query):
answer = 'متاسفانه پاسخی دریافت نشد'
cost_prompt = 0
# پاسخ را هم به سابقه اضافه می‌کنیم
messages.append({"role": "assistant", "content": answer})
# messages.append({"role": "assistant", "content": answer})
response_dict = {}
response_dict['output'] = str(response)
@ -230,7 +230,7 @@ async def llm_request(query, model):
response = client.chat.completions.create(
messages = messages,
model = model,
temperature = 0.1) # "gpt-4o", "gpt-4o-mini", "deepseek-chat" , "gemini-2.0-flash", gemini-2.5-flash-lite
temperature = 0.3) # "gpt-4o", "gpt-4o-mini", "deepseek-chat" , "gemini-2.0-flash", gemini-2.5-flash-lite
# gpt-4o : 500
# gpt-4o-mini : 34
# deepseek-chat: : 150
@ -239,11 +239,17 @@ async def llm_request(query, model):
# gemini-2.5-flash-lite : 35 خیلی خوب
answer = response.choices[0].message.content
print('$'*50)
print(f'answer: {answer}')
print('$'*50)
cost_prompt = response.estimated_cost['irt']
print('$'*50)
print(f'answer: {cost_prompt}')
print('$'*50)
# پاسخ را هم به سابقه اضافه می‌کنیم
messages.append({"role": "assistant", "content": answer})
print(f'type(response): {type(response)}')
print(f'response: {response}')
# messages.append({"role": "assistant", "content": answer})
# print(f'type(response): {type(response)}')
# print(f'response: {response}')
response_dict = {}
response_dict['output'] = str(response)
async with aiofiles. open('./llm-answer/messages.json', mode='w', encoding='utf-8') as output:
@ -461,23 +467,27 @@ class HybridRetrieverReranker:
def search(self, query: str, content_list, topk_dense=50, topk_sparse=50,
pre_rerank_k=50, final_k=10):
start_time = datetime.datetime.now()
# form embedder model
d_idx, d_scores = self.dense_retrieve(query, topk_dense)
dense_retrieve_end = datetime.datetime.now()
print('@'*50)
print(f'dense_retrieve_duration: {(dense_retrieve_end - start_time).total_seconds()}')
# print('@'*50)
# print(f'dense_retrieve_duration: {(dense_retrieve_end - start_time).total_seconds()}')
# from tfidf_matrix
s_idx, s_scores = self.sparse_retrieve(query, topk_sparse)
sparse_retrieve_end = datetime.datetime.now()
print(f'sparse_retrieve_duration: {(sparse_retrieve_end - dense_retrieve_end).total_seconds()}')
# print(f'sparse_retrieve_duration: {(sparse_retrieve_end - dense_retrieve_end).total_seconds()}')
cand_idx = self.fuse(d_idx, d_scores, s_idx, s_scores, pre_rerank_k)
fuse_end = datetime.datetime.now()
print(f'fuse_duration: {(fuse_end - sparse_retrieve_end).total_seconds()}')
# print(f'fuse_duration: {(fuse_end - sparse_retrieve_end).total_seconds()}')
passages = self.get_passages(cand_idx, content_list)
get_passages_end = datetime.datetime.now()
print(f'get_passages_duration: {(get_passages_end - fuse_end).total_seconds()}')
# print(f'get_passages_duration: {(get_passages_end - fuse_end).total_seconds()}')
reranked = self.rerank(query, cand_idx, passages, final_k) # rerank2
rerank_end = datetime.datetime.now()
print(f'rerank_duration: {(rerank_end - get_passages_end).total_seconds()}')
print('@'*50)
# print(f'rerank_duration: {(rerank_end - get_passages_end).total_seconds()}')
# print('@'*50)
return [{"idx": i, "content": self.content_list[i],"prefix": self.prefix_list[i], "rerank_score": score}
for i, score in reranked]
@ -486,7 +496,7 @@ async def single_query(query: str):
# query = cleaning(query)
retrived_sections_ids = []
retrived_sections = pipe.search(query, content_list, topk_dense=30, topk_sparse=30, pre_rerank_k=30, final_k=10)
retrived_sections = pipe.search(query, content_list, topk_dense=100, topk_sparse=100, pre_rerank_k=100, final_k=15)
final_similars = ''
for i, row in enumerate(retrived_sections, 1):
id_value = '{' + str(ids[row['idx']]) + '}'
@ -507,9 +517,11 @@ async def find_refrences(llm_answer: str) -> List[str]:
refrence_ids(List[str]): لیستی از شناسه های تشخیص داده شده
"""
pattern = r"\{[^\}]+\}"
# pattern = r"(?:\{([^\}]+)\}|【([^】]+)】)"
refrence_ids = re.findall(pattern, llm_answer)
new_refrences_ids = []
for itm in refrence_ids:
# print(itm)
refrence = itm.lstrip('{')
refrence = refrence.lstrip('}')
new_refrences_ids.append(refrence)
@ -533,7 +545,7 @@ async def replace_refrences(llm_answer: str, refrences_list:List[str]) -> List[s
# refrences = ''
for index, ref in enumerate(refrences_list,1):
new_ref = '{' + str(ref) + '}'
llm_answer = llm_answer.replace(new_ref, f'[{str(index)}]')
llm_answer = llm_answer.replace(new_ref, f'[«{str(index)}»](https://majles.tavasi.ir/entity/detail/view/qsection/{ref}) ')
# id = ref.lstrip('{')
# id = id.rstrip('}')
# refrences += ''.join(f'[{index}] https://majles.tavasi.ir/entity/detail/view/qsection/{id}\n')
@ -570,7 +582,8 @@ async def get_title_system_prompt():
title_system_prompt = f'تو یک دستیار حقوقی هستی و می توانی متون و سوالات حقوقی را به زبان ساده و دقیق توضیح بدهی.'
return title_system_prompt
async def run_chatbot(query:str, chat_id:str):
async def ask_chatbot_avalai(query:str, chat_id:str):
prompt_status = True
llm_model = ''
llm_answer = ''
@ -580,16 +593,14 @@ async def run_chatbot(query:str, chat_id:str):
if query == '':
prompt_status = False
# در صورتی که وضعیت پرامپت معتبر باشد، وارد فرایند شو
if prompt_status:
before_title_time = datetime.datetime.now()
title_system_prompt = await get_title_system_prompt()
title_user_prompt = await get_title_user_prompt(query)
# title, cost_title = await llm_base_request(title_system_prompt, title_user_prompt)
title, cost_title = await oss_base_request(title_system_prompt, title_user_prompt)
title, cost_title = await llm_base_request(title_system_prompt, title_user_prompt)
# title, cost_title = await oss_base_request(title_system_prompt, title_user_prompt)
if not title:
title = query
@ -606,20 +617,28 @@ async def run_chatbot(query:str, chat_id:str):
retrive_duration = (end_retrive - start_time).total_seconds()
print(f'retrive duration: {str(retrive_duration)}')
prompt = f'''برای پرسش "{query}" از میان مواد قانونی "{result_passages_text}" .پاسخ مناسب و دقیق را استخراج کن. تعداد کلمات پاسخ را حداکثر در 300 کلمه تولید کن. درصورتی که مطلبی مرتبط با پرسش در متن پیدا نشد، فقط پاسخ بده: "متاسفانه در منابع، پاسخی پیدا نشد!"'''
prompt = f'''برای پرسش "{query}" از میان متون قانونی زیر، پاسخ مناسب و دقیق را استخراج کن.
متون قانونی:
"{result_passages_text}"
'''
# for model in models:
# before_prompt_credit = credit_refresh()
try:
# llm_model = model
# print(f'using model: {llm_model}')
# llm_answer, cost_prompt = await llm_request(prompt, model)
llm_answer, cost_prompt = await oss_request(prompt)
for model in models:
before_prompt_credit = await credit_refresh()
llm_model = model
print(f'using model: {model}')
try:
llm_answer, cost_prompt = await llm_request(prompt, model)
# llm_answer, cost_prompt = await oss_request(prompt)
except:
print(f'error in ask-chatbot-avalai model:{model}')
continue
break
except Exception as error:
# after_prompt_credit = credit_refresh()
# prompt_cost = int(before_prompt_credit) - int(after_prompt_credit)
error = f'model: gpt.oss.120b \n{error}\n\n'
after_prompt_credit = await credit_refresh()
prompt_cost = int(before_prompt_credit) - int(after_prompt_credit)
error = f'model: {model} \n{error}\n\n'
print('+++++++++++++++++')
print(f'llm-error.txt writing error: {error}')
print('+++++++++++++++++')
@ -667,6 +686,153 @@ async def run_chatbot(query:str, chat_id:str):
status_text ='پاسخ با موفقیت ایجاد شد'
print(f'cost_prompt: {cost_prompt}')
print(f'cost_title: {cost_title}')
chat_obj = {
'id' : chat_id, # str
'title' : title, # str
'user_id' : '', #
'user_query' : query, # str
'model_key' : llm_model, # str
'retrived_passage' : result_passages_text, # str
'retrived_ref_ids' : result_passages_ids, # list[obj]
'prompt_type' : 'question-answer', # str
'retrived_duration' : retrive_duration, # str
'llm_duration' : llm_answer_duration, # str
'full_duration' : full_prompt_duration, # str
'cost_prompt' : str(cost_prompt), # str
'cost_title' : str(cost_title), # str
'cost_total' : str(cost_prompt + cost_title), # str
'time_create' : str(start_time), # str
'used_ref_ids' : used_refrences_in_answer, # list[str]
'prompt_answer' : llm_answer, # str
'status_text' : status_text, # str
'status' : True, # or False # bool
}
prev_chat_data = []
try:
async with aiofiles.open('./llm-answer/chat-messages1.json', mode='r', encoding='utf-8') as file:
content = await file.read()
prev_chat_data = json.loads(content)
prev_chat_data.append(chat_obj)
except:
pass
prev_chat_data.append(chat_obj)
async with aiofiles. open('./llm-answer/chat-messages1.json', mode='w', encoding='utf-8') as output:
await output.write(json.dumps(prev_chat_data, ensure_ascii=False, indent=2))
# save_result(chat_obj)
# ایجاد آبجکت بازگشتی به فرانت
# chat_obj.pop('retrived_passage')
# chat_obj.pop('prompt_type')
print('~'*40)
return chat_obj
async def ask_chatbot(query:str, chat_id:str):
prompt_status = True
llm_model = 'gpt.oss.120b'
llm_answer = ''
cost_prompt = 0
cost_title = 0
status_text = 'لطفا متن سوال را وارد نمائید'
if query == '':
prompt_status = False
# در صورتی که وضعیت پرامپت معتبر باشد، وارد فرایند شو
if prompt_status:
before_title_time = datetime.datetime.now()
title_system_prompt = await get_title_system_prompt()
title_user_prompt = await get_title_user_prompt(query)
# title, cost_title = await llm_base_request(title_system_prompt, title_user_prompt)
title, cost_title = await oss_base_request(title_system_prompt, title_user_prompt)
if not title:
title = query
title_prompt_duration = (datetime.datetime.now() - before_title_time).total_seconds()
if title == '':
title = query.split()[0:10]
start_time = (datetime.datetime.now())
result_passages_text, result_passages_ids = await single_query(query)
end_retrive = datetime.datetime.now()
print('-'*40)
print(f'title_prompt_duration: {title_prompt_duration}')
retrive_duration = (end_retrive - start_time).total_seconds()
print(f'retrive duration: {str(retrive_duration)}')
prompt = f''' برای پرسش "{query}" از میان متون قانونی زیر، پاسخ مناسب و دقیق را استخراج کن.
متون قانونی:
"{result_passages_text}"
'''
# for model in models:
# before_prompt_credit = credit_refresh()
try:
# llm_model = model
# print(f'using model: {llm_model}')
# llm_answer, cost_prompt = await llm_request(prompt, model)
llm_answer, cost_prompt = await oss_request(prompt)
except Exception as error:
# after_prompt_credit = credit_refresh()
# prompt_cost = int(before_prompt_credit) - int(after_prompt_credit)
error = f'model: gpt.oss.120b \n{error}\n\n'
print('+++++++++++++++++')
print(f'llm-error.txt writing error: {error}')
print('+++++++++++++++++')
async with aiofiles.open('./llm-answer/llm-error.txt', mode='a+', encoding='utf-8') as file:
await file.write(error)
prompt_status = False
status_text = 'با عرض پوزش، سرویس موقتا در دسترس نیست. لطفا دقایقی دیگر دوباره تلاش نمائید!'
# حالتی که وضعیت پرامپت، نامعتبر باشد، یک شی با مقادیر زیر برگردانده می شود
else:
chat_obj = {
'id' : chat_id, # str
'title' : '', # str
'user_id' : '',
'user_query' : query, # str
'model_key' : llm_model, # str
'retrived_passage' : '', # str
'retrived_ref_ids' : '', # list[obj]
'prompt_type' : 'question-answer', # str
'retrived_duration' : '', # str
'llm_duration' : '0', # str
'full_duration' : '0', # str
'cost_prompt' : str(cost_prompt), # str
'cost_title' : str(cost_title), # str
'cost_total' : str(cost_prompt + cost_title), # str
'time_create' : str(start_time), # str
'used_ref_ids' : [], # list[str]
'prompt_answer' : '', # str
'status_text' : status_text,
'status' : prompt_status, # or False # bool
}
# بازگرداندن آبجکت ایجاد شده
return chat_obj, status_text
llm_answer_duration = (datetime.datetime.now() - end_retrive).total_seconds()
print(f'llm answer duration: {str(llm_answer_duration)}')
llm_answer = llm_answer.replace('','{')
llm_answer = llm_answer.replace('','}')
used_refrences_in_answer = await find_refrences(llm_answer)
llm_answer = await replace_refrences(llm_answer, used_refrences_in_answer)
full_prompt_duration = (datetime.datetime.now() - start_time).total_seconds()
print(f'full prompt duration: {full_prompt_duration}')
print('~'*40)
status_text ='پاسخ با موفقیت ایجاد شد'
print(f'cost_prompt: {cost_prompt}')
print(f'cost_title: {cost_title}')
chat_obj = {
@ -691,12 +857,12 @@ async def run_chatbot(query:str, chat_id:str):
'status' : True, # or False # bool
}
prev_chat_data = []
async with aiofiles.open('./llm-answer/chat-messages.json', mode='r', encoding='utf-8') as file:
async with aiofiles.open('./llm-answer/chat-messages1.json', mode='r', encoding='utf-8') as file:
content = await file.read()
prev_chat_data = json.loads(content)
prev_chat_data.append(chat_obj)
async with aiofiles. open('./llm-answer/chat-messages.json', mode='w', encoding='utf-8') as output:
async with aiofiles. open('./llm-answer/chat-messages1.json', mode='w', encoding='utf-8') as output:
await output.write(json.dumps(prev_chat_data, ensure_ascii=False, indent=2))
# save_result(chat_obj)
@ -764,8 +930,8 @@ if __name__ == "__main__":
print(f'llm duration: {(datetime.datetime.now() - end_retrive).total_seconds()}')
refrences = ''
recognized_refrences = find_refrences(llm_answer)
llm_answer = replace_refrences(llm_answer, recognized_refrences)
recognized_refrences = find_refrences(llm_answer)
llm_answer = replace_refrences(llm_answer, recognized_refrences)
with open('./llm-answer/result.txt', mode='a+', encoding='utf-8') as file:
result_message = f'متن پرامپت: {query.strip()}\n\nپاسخ: {llm_answer} \n----------------------------------------------------------\n'

45
llm-answer/chat-messages1.json Executable file

File diff suppressed because one or more lines are too long

View File

@ -575,4 +575,169 @@ Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessa
235.45
-------------------------------
0000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001239.35
-------------------------------
860.89
-------------------------------
2803.63
-------------------------------
01440.25
-------------------------------
411.56
-------------------------------
1213.3
-------------------------------
063.92
-------------------------------
99.39
-------------------------------
000000000084.84
-------------------------------
37.3
-------------------------------
75.81
-------------------------------
147.93
-------------------------------
144.36
-------------------------------
85.03
-------------------------------
217.33
-------------------------------
00000149.16
-------------------------------
0205.91
-------------------------------
0140.51
-------------------------------
0148.86
-------------------------------
0130.56
-------------------------------
0000000069.39
-------------------------------
0000000132.37
-------------------------------
0220.48
-------------------------------
0000000000336.06
-------------------------------
0414.51
-------------------------------
401.78
-------------------------------
00393.24
-------------------------------
457.39
-------------------------------
00879.57
-------------------------------
0859.83
-------------------------------
01311.88
-------------------------------
01576.05
-------------------------------
1619.78
-------------------------------
1524.98
-------------------------------
837.66
-------------------------------
1641.84
-------------------------------
890.8
-------------------------------
883.3
-------------------------------
1953.82
-------------------------------
1821.97
-------------------------------
1876.64
-------------------------------
1124.28
-------------------------------
1093.42
-------------------------------
1922.2
-------------------------------
0152.77
-------------------------------
57.82
-------------------------------
00200.13
-------------------------------
0202.76
-------------------------------
0405.73
-------------------------------
0357.92
-------------------------------
54.72
-------------------------------
00230.81
-------------------------------
147.45
-------------------------------
0295.99
-------------------------------
0439.79
-------------------------------
0

View File

@ -430,3 +430,296 @@
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
42219.82
233219.82
233219.82
231116.5
228275.02
226390.3
225658.78
225658.78
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225490.08
225402.31
225402.31
225362.36
225362.36
225362.36
225283.85
225283.85
225143.68
224999.32
224999.32
224912.5
224907.85
224907.85
224903.2
224721.37
224721.37
224721.37
224721.37
224721.37
224582.94
224374.03
224230.2
224091.97
223958.58
223958.58
223958.58
223958.58
223958.58
223958.58
223958.58
223958.58
223958.58
223958.58
223886.16
223886.16
223886.16
223886.16
223886.16
223886.16
223886.16
223886.16
223886.16
223751.03
223751.03
223751.03
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223527.8
223188.5
223188.5
223188.5
222771.05
222768.48
222768.48
222366.71
222363.93
222363.93
221970.69
221970.69
221970.69
221510.58
220625.24
219765.41
218447.93
217015.15
217015.15
217015.15
217009.55
215537.02
214006.44
214003.7
214003.7
211518.61
211518.61
210632.26
210632.26
210632.26
210632.26
201231.56
201231.56
201231.56
201231.56
201231.56
201231.56
201231.56
201231.56
200138.15
200138.15
200138.15
199996.16
199996.16
199993.39
199935.57
199935.57
199935.57
199732.61
199729.61
199729.61
199526.85
199523.93
199155.08
199152.27
199152.27
198791.4
198791.4
198791.4
198741.66
198738.93
198738.93
198736.29
198736.29
198736.29
198379.02
198379.02
198379.02
198080.2
198077.46

View File

@ -1797,3 +1797,160 @@ id: {qs3030569}
" .پاسخ مناسب و دقیق را استخراج کن. درصورتی که مطلبی مرتبط با پرسش در متن پیدا نشد، فقط پاسخ بده: "متاسفانه در منابع، پاسخی پیدا نشد!"
error:Error code: 429 - {'error': {'message': 'Rate limit reached for requests. Check your quota and upgrade your account to higher levels at https://ava.al/limits or contact support at support@avalai.ir and include the request ID 019a63ac-fa29-71d1-9120-4dac12ff3e12 in your email if you believe this is an error.', 'type': 'rate_limit_exceeded', 'param': None, 'code': 'rate_limit_exceeded', 'solution': 'Pace your requests or upgrade to higher levels. Read the Rate limit guide at https://ava.al/limits or contact support at support@avalai.ir and include the request ID 019a63ac-fa29-71d1-9120-4dac12ff3e12 in your email if you believe this is an error.', 'request_id': '019a63ac-fa29-71d1-9120-4dac12ff3e12'}}
-------------------------------
query: برای پرسش "حق اولاد در سرانه حقوق" از میان متون قانونی زیر، پاسخ مناسب و دقیق را استخراج کن.
متون قانونی:
"id: {qs872698}
محتوای ماده 14 از فصل سوم قانون مقررات استخدامی نهضت سوادآموزی جمهوری اسلامی ایران عبارت است از: ماده ۱۴ - حق عائله‌مندی عضو عبارتست از: حق همسر، حق اولاد، حق افراد تحت تکفل و ارقام آنها به ترتیب بقرار زیر است: حق همسر در صورتیکه شاغل نباشد، یکصد. حق اولاد و حق افراد تحت تکفل هر کدام ۲۰ می‌باشد (تحت تکفل حداکثر دو نفر از اقارب درجه ۱) ضریب حقوق عائله‌مندی یکصد ریال تعیین‌شده و تغییرات بعدی آن بنا به پیشنهاد نهضت بتصویب شورای حقوق و دستمزد خواهد رسید.
id: {qs235426}
محتوای ماده 48 از فصل سوم از بخش دوم قانون مقررات مالی، اداری استخدامی و تشکیلات جهاد سازندگی [قانون مقررات مالی، اداری، استخدامی وزارت جهاد کشاورزی] عبارت است از: ماده ۴۸ - حق عائله‌مندی عضو عبارت است از حق همسر، حق اولاد، حق افراد تحت تکفل و ارقام آنها به ترتیب به قرار زیر است: ۱۰۰، حق همسر در صورتی که شاغل نباشد حق اولاد و حق افراد تحت تکفل هر کدام ۲۰ می‌باشد (تحت تکفل حداکثر ۲ نفر از اقارب درجه ۱) ضریب حقوق عائله‌مندی ۱۰۰ ریال تعیین‌شده و تغییرات بعدی آن بنا به پیشنهاد جهاد به تصویب شورای حقوق و دستمزد خواهد رسید.
id: {qs2766209}
محتوای تبصره 3 از ماده 9 قانون نظام هماهنگ پرداخت کارکنان دولت عبارت است از: تبصره ۳ - کمک‌هزینه عائله‌مندی و اولاد برای بازنشستگان کشوری و لشگری که دارای شصت سال سن و بیشتر باشند و مستخدمین از کارافتاده (بدون شرط سنی) علاوه بر میزان مقرر دریافتی مطابق قانون، ماهانه کمک‌هزینه عائله‌مندی معادل یکصد و بیست درصد (۳۶۰ ٪) حداقل حقوق مبنای جدول ماده (۱) قانون نظام هماهنگ پرداخت کارکنان دولت و حق اولاد به ازای هر فرزند (حداکثر تا سه فرزند) معادل سی و پنج درصد (۱۰۰ ٪) حداقل حقوق مبنای جدول مذکور، پرداخت می‌گردد.
id: {qs3328912}
محتوای جزء 3 از بند الف از تبصره 15 از ماده واحده قانون بودجه سال ۱۴۰۳ کل کشور (بخش اول) «سقف منابع عمومی دولت و مفروضات منابع و مصارف» عبارت است از: ۳ - امتیاز کمک‌هزینه عائله‌مندی و حق اولاد موضوع بند (۴) ماده (۶۸) قانون مدیریت خدمات کشوری برای شاغلان مشمول ماده (۱۶) قانون حمایت از خانواده و جوانی جمعیت به ترتیب ۲۹۰۰ و ۱۷۸۰ و معادل ریالی امتیاز مذکور برای بازنشستگان و سایر مشمولان ماده مذکور تعیین می‌گردد. برای فرزند سوم و بیشتر به این ضرایب سی واحد درصد اضافه می‌شود.
id: {qs2521850}
محتوای ماده 8 قانون تنظیم بخشی از مقررات مالی دولت عبارت است از: ماده ۸ - متن زیر به عنوان تبصره (۳) به ماده (۹) قانون نظام هماهنگ پرداخت کارکنان دولت مصوب ۱۳ / ۶ / ۱۳۷۰ الحاق شود: تبصره ۳ - کمک‌هزینه عائله‌مندی و اولاد برای بازنشستگان کشوری و لشگری که دارای شصت سال سن و بیشتر باشند و مستخدمین از کارافتاده (بدون شرط سنی) علاوه بر میزان مقرر دریافتی مطابق قانون، ماهانه کمک‌هزینه عائله‌مندی معادل یکصد و بیست درصد (۱۲۰ ٪) حداقل حقوق مبنای جدول ماده (۱) قانون نظام هماهنگ پرداخت کارکنان دولت و حق اولاد به ازای هر فرزند (حداکثر تا سه فرزند) معادل سی و پنج درصد (۳۵ ٪) حداقل حقوق مبنای جدول مذکور، پرداخت می‌گردد.
id: {qs687143}
محتوای بند ب از ماده 32 از فصل نهم آئین نامه استخدامی کارکنان شرکت سهامی تلفن ایران (مصوب کمیسیونهای پست و تلگراف و تلفن و استخدام مجلس شورای ملی) عبارت است از: ب - فوق‌العاده اولاد برای هر اولاد در مورد پسر تا ۱۸ و در مورد دختر مادام که شوهر اختیار نکرده و شغل دولتی نداشته باشد بقرار ماهیانه یکصد ریال مشروط بر اینکه تحت تکفل مستخدم باشند.
id: {qs922060}
محتوای بند 86 از ماده واحده قانون بودجه سال ۱۳۹۰ کل کشور عبارت است از: ۸۶ - به‌منظور ساماندهی و پرداخت به موقع کمک عائله‌مندی، حق اولاد و عیدی بازنشستگان مشمول صندوق بازنشستگان کشوری اجازه داده می‌شود اعتبار مربوط به اقلام مذکور با تأیید معاونت برنامه‌ریزی و نظارت راهبردی رییس‌جمهور از بودجه دستگاه‌های اجرایی ملی و استانی کسر و به اعتبارات هزینه‌ای صندوق مذکور اضافه شود.
id: {qs2790928}
محتوای ماده 45 از مبحث 7 احوال شخصیه جمعیتهای کاتولیک ایران قوانین اصلی مذهبی و هویت جاریه نسبت به جمعیت‌های کاتولیک ایران عبارت است از: ماده ۴۵ فرزند خوانده و اولاد او نسبت بکسی که او را بفرزندی قبول کرده است همان حق وراثت اولاد قانونی را دارد ولی فرزند خواندگی حق وراثت به پدرخوانده و وراث او نسبت به اموال فرزندخوانده نمی‌دهد.
id: {qs3186974}
محتوای جزء 3 از بند الف از تبصره 12 از ماده واحده قانون بودجه سال ۱۴۰۲ کل کشور عبارت است از: ۳ - در اجرای ماده (۱۶) قانون حمایت از خانواده و جوانی جمعیت، امتیاز کمک‌هزینه عائله‌مندی و حق اولاد، موضوع بند (۴) ماده (۶۸) قانون مدیریت خدمات کشوری شاغلان و بازنشستگان، به ترتیب ۲۲۸۰ و ۱۰۵۰ و معادل ریالی امتیاز مذکور مشمولان ماده (۱۶) قانون فوق‌الذکر تعیین می‌گردد.
id: {qs67a862ff4e15f_226}
محتوای 2 از ب از تبصره 12 از ماده واحده از عنوان قانون بودجه سال ۱۴۰۴ کل کشور (بخش اول) «سقف منابع عمومی دولت و مفروضات منابع و مصارف» عبارت است از: ۲ - کمک‌هزینه عائله‌مندی و حق اولاد موضوع بند (۴) ماده (۶۸) قانون مدیریت خدمات کشوری ‏برای بازنشستگان معادل ریالی امتیاز جزء (۵) بند «الف» این تبصره تعیین می‌گردد.
id: {qs235475}
محتوای بند ب از ماده 65 از فصل ششم از بخش دوم قانون مقررات مالی، اداری استخدامی و تشکیلات جهاد سازندگی [قانون مقررات مالی، اداری، استخدامی وزارت جهاد کشاورزی] عبارت است از: ب - حق عائله‌مندی (حق همسر و اولاد و حق افراد تحت تکفل).
id: {qs67a862ff4e15f_223}
محتوای 5 از الف از تبصره 12 از ماده واحده از عنوان قانون بودجه سال ۱۴۰۴ کل کشور (بخش اول) «سقف منابع عمومی دولت و مفروضات منابع و مصارف» عبارت است از: ۵ - امتیاز کمک‌هزینه عائله‌مندی و حق اولاد موضوع بند (۴) ماده (۶۸) قانون مدیریت خدمات کشوری برای شاغلان مشمول ماده (۱۶) قانون حمایت از خانواده و جوانی جمعیت به ترتیب ۳۶۲۵ و ۲۹۶۷ و معادل ریالی امتیاز مذکور برای سایر مشمولان ماده مذکور تعیین می‌گردد.
id: {qs235427}
محتوای تبصره از ماده 48 از فصل سوم از بخش دوم قانون مقررات مالی، اداری استخدامی و تشکیلات جهاد سازندگی [قانون مقررات مالی، اداری، استخدامی وزارت جهاد کشاورزی] عبارت است از: تبصره - ارقام مربوط به حق اولاد و حق افراد تحت تکفل تنها در صورت احراز شرایط مندرج در ماده ۶۸ پرداخت خواهد گردید.
id: {qs1698035}
محتوای ماده 21 قانون حمایت از کودکان و نوجوانان بی‌سرپرست و بدسرپرست عبارت است از: ماد ۲۱ - شخصی که سرپرستی افراد تحت حمایت این قانون را بر عهده می‌گیرد از مزایای حمایتی حق اولاد و مرخصی دوره مراقبت برای کودکان زیر سه سال (معادل مرخصی دوره زایمان) بهره‌مند می‌باشد. کودک یا نوجوان تحت سرپرستی نیز از مجموعه مزایای بیمه و بیمه‌های تکمیلی وفق مقررات قانونی برخوردار خواهد شد.
id: {qs736468}
محتوای ماده واحده قانون الغاء مقررات مربوط بپرداخت حق اولاد در نیروهای مسلح شاهنشاهی عبارت است از: ماده واحده - از تاریخ تصویب این قانون مقررات مربوط بپرداخت حق اولاد در مورد فرزندان جدیدالولاده افسران و کارمندان نیروهای مسلح شاهنشاهی ملغی می‌گردد.
"
error:<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>api.avalai.ir | 502: Bad gateway</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" />
</head>
<body>
<div id="cf-wrapper">
<div id="cf-error-details" class="p-0">
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-8">
<h1 class="inline-block sm:block sm:mb-2 font-light text-60 lg:text-4xl text-black-dark leading-tight mr-2">
<span class="inline-block">Bad gateway</span>
<span class="code-label">Error code 502</span>
</h1>
<div>
Visit <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=api.avalai.ir" target="_blank" rel="noopener noreferrer">cloudflare.com</a> for more information.
</div>
<div class="mt-3">2025-11-12 23:18:51 UTC</div>
</header>
<div class="my-8 bg-gradient-gray">
<div class="w-240 lg:w-full mx-auto">
<div class="clearfix md:px-8">
<div id="cf-browser-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
<div class="relative mb-10 md:m-0">
<span class="cf-icon-browser block md:hidden h-20 bg-center bg-no-repeat"></span>
<span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
</div>
<span class="md:block w-full truncate">You</span>
<h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
Browser
</h3>
<span class="leading-1.3 text-2xl text-green-success">Working</span>
</div>
<div id="cf-cloudflare-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
<div class="relative mb-10 md:m-0">
<a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=api.avalai.ir" target="_blank" rel="noopener noreferrer">
<span class="cf-icon-cloud block md:hidden h-20 bg-center bg-no-repeat"></span>
<span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
</a>
</div>
<span class="md:block w-full truncate">Frankfurt</span>
<h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
<a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=api.avalai.ir" target="_blank" rel="noopener noreferrer">
Cloudflare
</a>
</h3>
<span class="leading-1.3 text-2xl text-green-success">Working</span>
</div>
<div id="cf-host-status" class="cf-error-source relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
<div class="relative mb-10 md:m-0">
<span class="cf-icon-server block md:hidden h-20 bg-center bg-no-repeat"></span>
<span class="cf-icon-error w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
</div>
<span class="md:block w-full truncate">api.avalai.ir</span>
<h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
Host
</h3>
<span class="leading-1.3 text-2xl text-red-error">Error</span>
</div>
</div>
</div>
</div>
<div class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
<div class="clearfix">
<div class="w-1/2 md:w-full float-left pr-6 md:pb-10 md:pr-0 leading-relaxed">
<h2 class="text-3xl font-normal leading-1.3 mb-4">What happened?</h2>
<p>The web server reported a bad gateway error.</p>
</div>
<div class="w-1/2 md:w-full float-left leading-relaxed">
<h2 class="text-3xl font-normal leading-1.3 mb-4">What can I do?</h2>
<p class="mb-6">Please try again in a few minutes.</p>
</div>
</div>
</div>
<div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">99d9c03a98e5dbcd</strong></span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
<span class="hidden" id="cf-footer-ip">2.188.15.101</span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
</span>
<span class="cf-footer-item sm:block sm:mb-1"><span>Performance &amp; security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=api.avalai.ir" id="brand_link" target="_blank">Cloudflare</a></span>
</p>
<script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
</div><!-- /.error-footer -->
</div>
</div>
</body>
</html>
-------------------------------

View File

@ -1,127 +0,0 @@
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
model: deepseek-chat
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)
cccc
model: deepseek-chat
too many values to unpack (expected 2)
model: gemini-2.5-flash-lite
too many values to unpack (expected 2)
model: gpt-4o-mini
too many values to unpack (expected 2)

File diff suppressed because one or more lines are too long