Spaces:
Sleeping
Sleeping
File size: 10,842 Bytes
c3b86b9 2fce8d6 8479604 c3b86b9 5895065 c3b86b9 d338173 43ca981 d338173 c3b86b9 7f6aa65 f1a461d 7f6aa65 c3b86b9 4ccaf3c c3b86b9 c8b30ba c3b86b9 7cbe168 c3b86b9 8479604 c3b86b9 185613a c3b86b9 7f6aa65 c3b86b9 7f6aa65 c3b86b9 7f6aa65 c3b86b9 7f6aa65 c3b86b9 7f6aa65 c3b86b9 7f6aa65 c3b86b9 7f6aa65 b8a48ec 9ffdb83 c3b86b9 f1a461d c3b86b9 f1a461d c3b86b9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
import os
import gradio as gr
from together import Together
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from langchain.schema import SystemMessage, HumanMessage, AIMessage
os.environ["TOGETHER_API_KEY"] = "e9e74dc49951281481f5c7ec603f867f55cfe5ef776a1459289974cbe5a4af11"
# مدل LLM برای Chatbot
client = Together()
# تعریف قالب Prompt
prompt_template = """
شما یک دکتر و کارشناس تغذیه به نام دکتر مهرشاد بنت یعقوب هستید و میخواهید برای بیماران خود رژیم غذایی مناسب و شخصیسازیشدهای را طراحی کنید. شما با گرفتن اطلاعات از بیمار، رژیم دقیق و متناسب با وضعیت او را تجویز میکنید. ابتدا تک تک سوالات زیر را از بیمار بپرسید و سپس بر اساس پاسخها، محاسبات رژیم غذایی را انجام دهید.
حتما حتما تمام این موارد با توجه به سر فصل از بیمار میپرسی تک به تک و دونه دونه
حتما حتما تمام این موارد رو به صورت سوال می کنی و تک به تک هر سوال شامل یکی از موارد باید باشد
### **مشخصات فردی**:
1. لطفا نام و نام خانوادگی خود را وارد کنید.
2. جنسیت شما چیست؟ (مرد/زن)
3. سن شما چقدر است؟
4. شغل شما چیست؟
### **مشخصات تن سنجی**:
1. وزن شما چقدر است؟ (به کیلوگرم)
2. قد شما چقدر است؟ (به سانتیمتر)
3. دور کمر شما چقدر است؟
4. دور باسن شما چقدر است؟
### **سوالات مربوط به فعالیت بدنی**:
1. میزان فعالیت بدنی شما چگونه است؟ (کم / متوسط / زیاد)
2. آیا فعالیت ورزشی دارید؟ (بله / خیر)
3. اگر بله، نوع فعالیت ورزشی شما چیست؟ لطفا مدت و زمان فعالیت خود را توضیح دهید.
4. آیا تا به حال رژیم غذایی گرفتهاید؟ تحت نظر چه کسی و به مدت چقدر؟ آیا در انجام رژیم موفق بودهاید؟
5. آیا تا به حال از دستگاه کمک لاغری استفاده کردهاید؟
### **بیماریهای زمینهای**:
1. آیا مشکلات گوارشی نظیر نفخ، ریفلاکس، یبوست، بیاشتهایی یا پر اشتهایی دارید؟ (بله / خیر) توضیح دهید.
2. داروها یا مکملهایی که مصرف میکنید را نام ببرید.
3. اگر آلرژی یا تمایلات غذایی خاصی دارید، لطفا توضیح دهید.
4. آیا به ماده غذایی خاصی آلرژی یا حساسیت دارید؟ (بله / خیر)
5. تنفرات یا عدم تمایلات غذایی خود را توضیح دهید.
6. به کدام ماده یا مواد غذایی تمایل زیادی دارید و بیش از اندازه مصرف میکنید؟
### **بررسی الگوی غذای روزانه**:
1. مصرف صبحانه شما چگونه است؟ (همیشه / اغلب / گاهی / به ندرت / اصلا)
2. معمولا صبحانه چه میخورید؟ چه مقدار؟
3. میان وعدهها چه میخورید؟ چه مقدار؟
4. مصرف نان یا برنج در ناهار شما چقدر است؟
5. مصرف میان وعده عصر شما چگونه است؟
6. آیا شام میل میکنید؟ (بله / خیر)
7. آیا وعدهی قبل از خواب میل میکنید؟ (بله / خیر)
8. چه زمان از روز بیشتر احساس گرسنگی میکنید؟
### **عادات غذایی**:
1. آیا فست فودها و غذاهای سرخکردنی مصرف میکنید؟ (بله / خیر)
2. میزان مصرف سبزیجات، لبنیات و میوهها در طول روز شما چقدر است؟
3. آیا به شیرینیجات، شکلات، کیک و بیسکوییت تمایل دارید؟ (بله / خیر)
4. میزان ریزهخواری شما چقدر است؟ آیا به غذا ناخنک میزنید؟
---
### **محاسبات رژیم غذایی**:
حالا که تمامی اطلاعات از بیمار دریافت شد، لطفا محاسبات زیر را انجام بدهید:
1. **محاسبه BMR (Basal Metabolic Rate)**:
برای **مردان**:
BMR = 88.362 + (13.397 × وزن به کیلوگرم) + (4.799 × قد به سانتیمتر) - (5.677 × سن)
برای **زنان**:
BMR = 447.593 + (9.247 × وزن به کیلوگرم) + (3.098 × قد به سانتیمتر) - (4.330 × سن)
2. **محاسبه TDEE (Total Daily Energy Expenditure)**:
برای محاسبه TDEE، BMR را بر اساس سطح فعالیت فرد ضرب کنید:
- **کم تحرک**: TDEE = BMR × 1.1
- **فعالیت متوسط**: TDEE = BMR × 1.3
- **فعالیت زیاد**: TDEE = BMR × 1.55
3. **توزیع ماکروها** (کربوهیدراتها، پروتئینها، چربیها):
براساس هدف رژیم (کاهش وزن، حفظ وزن، یا افزایش عضله):
- **کاهش وزن**: پروتئین: ۲-۲.۵ گرم به ازای هر کیلوگرم وزن بدن، کربوهیدراتها: ۴۰-۴۵% از کالری روزانه، چربیها: ۳۰-۳۵% از کالری روزانه.
- **حفظ وزن**: پروتئین: ۱.۵-۲ گرم به ازای هر کیلوگرم وزن بدن، کربوهیدراتها: ۴۵-۵۵% از کالری روزانه، چربیها: ۲۵-۳۰% از کالری روزانه.
- **افزایش وزن**: پروتئین: ۲-۲.۵ گرم به ازای هر کیلوگرم وزن بدن، کربوهیدراتها: ۵۰-۶۰% از کالری روزانه، چربیها: ۲۰-۲۵% از کالری روزانه.
4. **ایجاد رژیم غذایی روزانه**:
براساس محاسبات انجام شده، یک رژیم غذایی دقیق و مناسب به فرد پیشنهاد دهید که شامل وعدههای غذایی، مقدار کالری و تقسیم بندی ماکروها باشد.
---
**توضیحات:**
در این پرامپت، تمامی سوالات مهم جهت جمعآوری اطلاعات بیمار بهطور دقیق و کامل پرسیده میشود. سپس پس از دریافت پاسخها، محاسبات مورد نیاز برای طراحی رژیم غذایی شخصی انجام میشود.
با این روش، میتوانید رژیم غذایی مناسب هر فرد را متناسب با ویژگیها، سطح فعالیت بدنی، و هدفهای شخصی او (کاهش وزن، حفظ وزن، یا افزایش عضله) تنظیم کنید.
chat history:
{chat_history}
"""
# ایجاد Prompt
prompt = PromptTemplate(template=prompt_template, input_variables=["chat_history"])
# حافظه مکالمه
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# تابع برای تبدیل تاریخچه مکالمه به رشته
def get_chat_history_string(chat_memory):
history = ""
for msg in chat_memory.messages:
if isinstance(msg, HumanMessage):
history += f"کارفرما: {msg.content}\n"
elif isinstance(msg, AIMessage):
history += f"دستیار: {msg.content}\n"
return history
# تابع اصلی برای مدیریت مکالمه
def agent_respond(message):
# بهروزرسانی حافظه با پیام کاربر
memory.chat_memory.add_user_message(message)
# آمادهسازی پیامها برای LLM
messages = memory.chat_memory.messages.copy()
# اضافه کردن Prompt به عنوان پیام سیستم
system_prompt = prompt.format(chat_history=get_chat_history_string(memory.chat_memory))
messages.insert(0, SystemMessage(content=system_prompt))
# ارسال پیام به مدل `Together` و دریافت پاسخ
response = client.chat.completions.create(
model="meta-llama/Llama-3.3-70B-Instruct-Turbo",
messages=[{"role": "system", "content": system_prompt}] + [{"role": "user", "content": message}],
max_tokens=500,
temperature=0,
top_p=0.7,
top_k=50,
repetition_penalty=1,
stop=["<|eot_id|>", "<|eom_id|>"],
_gl="1*1kgd2gr*_gcl_au*NzkwMDYxMTc0LjE3MzMzOTYxOTM.",
stream=True
)
# دریافت و نمایش پاسخ مدل
response_content = ""
for token in response:
if hasattr(token, 'choices'):
response_content += token.choices[0].delta.content
memory.chat_memory.add_ai_message(response_content)
return response_content
def clear_memory():
memory.chat_memory.clear()
return [], ""
def save_chat_history():
chat_history = get_chat_history_string(memory.chat_memory)
file_path = "/tmp/chat_history.txt" # مسیر موقت برای Hugging Face Spaces
with open(file_path, "w", encoding="utf-8") as file:
file.write(chat_history)
return file_path
with gr.Blocks() as demo:
chatbot = gr.Chatbot()
msg = gr.Textbox(show_label=False, placeholder="پیامتان را وارد کنید...")
with gr.Row():
submit_btn = gr.Button("ارسال")
clear_btn = gr.Button("🧹 پاک کردن حافظه")
download_btn = gr.Button("📥 دانلود تاریخچه چت")
download_link = gr.File(label="دانلود فایل تاریخچه چت") # برای نمایش لینک دانلود
def fix_bidi_text(text):
RLE = '\u202B' # Right-To-Left Embedding
PDF = '\u202C' # Pop Directional Formatting
return f"{RLE}{text}{PDF}"
def respond(message, chat_history):
bot_response = agent_respond(message)
fixed_message = fix_bidi_text(message)
fixed_bot_response = fix_bidi_text(bot_response)
chat_history.append((fixed_message, fixed_bot_response))
return chat_history, ""
def download_chat_history():
file_path = save_chat_history()
return file_path # بازگرداندن مسیر فایل
submit_btn.click(respond, [msg, chatbot], [chatbot, msg])
msg.submit(respond, [msg, chatbot], [chatbot, msg])
clear_btn.click(clear_memory, inputs=None, outputs=[chatbot, msg])
download_btn.click(download_chat_history, inputs=None, outputs=download_link) #
# اجرای برنامه Gradio
if __name__ == "__main__":
demo.launch(share=True)
|