File size: 6,615 Bytes
1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d 37bd2ac 1224a9d |
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 |
import os
import gradio as gr
from huggingface_hub import InferenceClient
from dotenv import load_dotenv
import logging
from typing import List, Dict, Generator
# تحميل المتغيرات من ملف .env
load_dotenv()
# إعداد التسجيل (logging)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class Chatbot:
def __init__(self):
self.default_model = os.getenv("DEFAULT_MODEL", "openai/gpt-oss-20b")
self.default_system_message = os.getenv("DEFAULT_SYSTEM_MESSAGE", "You are a friendly Chatbot.")
self.default_max_tokens = int(os.getenv("DEFAULT_MAX_TOKENS", "512"))
self.default_temperature = float(os.getenv("DEFAULT_TEMPERATURE", "0.7"))
self.default_top_p = float(os.getenv("DEFAULT_TOP_P", "0.95"))
def respond(
self,
message: str,
history: List[Dict[str, str]],
system_message: str,
max_tokens: int,
temperature: float,
top_p: float,
hf_token: gr.OAuthToken,
) -> Generator[str, None, None]:
"""
للاستجابة للرسائل باستخدام نموذج Hugging Face
لمزيد من المعلومات حول دعم Inference API في `huggingface_hub`،
يرجى مراجعة الوثائق:
https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
try:
# استخدام التوكن من OAuth أو من متغير البيئة كاحتياطي
token = hf_token.token if hf_token else os.getenv("HF_TOKEN")
if not token:
yield "❌ خطأ: لم يتم توفير رمز مصادقة. يرجى تسجيل الدخول أو تعيين HF_TOKEN في ملف .env"
return
client = InferenceClient(token=token, model=self.default_model)
messages = [{"role": "system", "content": system_message}]
messages.extend(history)
messages.append({"role": "user", "content": message})
response = ""
for message_chunk in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
if message_chunk.choices and message_chunk.choices[0].delta.content:
token = message_chunk.choices[0].delta.content
response += token
yield response
except Exception as e:
error_msg = f"❌ حدث خطأ أثناء معالجة طلبك: {str(e)}"
logger.error(error_msg)
yield error_msg
def create_interface():
"""إنشاء واجهة Gradio"""
chatbot = Chatbot()
# الحصول على القيم الافتراضية من البيئة
default_system_message = os.getenv("DEFAULT_SYSTEM_MESSAGE", "You are a friendly Chatbot.")
default_max_tokens = int(os.getenv("DEFAULT_MAX_TOKENS", "512"))
default_temperature = float(os.getenv("DEFAULT_TEMPERATURE", "0.7"))
default_top_p = float(os.getenv("DEFAULT_TOP_P", "0.95"))
# واجهة الدردشة
chat_interface = gr.ChatInterface(
chatbot.respond,
type="messages",
title="Dr.X Chatbot - 🤗",
description="دردشة ذكية باستخدام نماذج Hugging Face",
additional_inputs=[
gr.Textbox(
value=default_system_message,
label="الرسالة النظامية",
info="تحدد سلوك المساعد"
),
gr.Slider(
minimum=1,
maximum=2048,
value=default_max_tokens,
step=1,
label="الحد الأقصى للرموز",
info="الحد الأقصى لعدد الرموز المُنشأة"
),
gr.Slider(
minimum=0.1,
maximum=4.0,
value=default_temperature,
step=0.1,
label="الدرجة الحرارية",
info="قيم أعلى = إجابات أكثر إبداعاً، قيم أقل = إجابات أكثر تركيزاً"
),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=default_top_p,
step=0.05,
label="Top-p (الاستعينة النووية)",
info="قيم أعلى = تنوع أكثر في الإجابات"
),
],
examples=[
["أخبرني عن نفسك"],
["ما هو الذكاء الاصطناعي؟"],
["كيف يمكنني تعلم البرمجة؟"]
],
cache_examples=False
)
return chat_interface
def main():
"""الدالة الرئيسية لتشغيل التطبيق"""
# إنشاء الواجهة
demo = gr.Blocks(
title="Dr.X Chatbot",
theme=gr.themes.Soft(),
css=".gradio-container {background-color: #f0f8ff}"
)
with demo:
with gr.Row():
gr.Markdown("# 🤖 Dr.X Chatbot")
with gr.Row():
with gr.Sidebar():
gr.LoginButton()
gr.Markdown("### الإعدادات")
gr.Markdown(f"**النموذج الافتراضي:** {os.getenv('DEFAULT_MODEL', 'openai/gpt-oss-20b')}")
gr.Markdown("### التعليمات")
gr.Markdown("""
1. سجل الدخول باستخدام حساب Hugging Face
2. اكتب رسالتك في حقل الإدخال
3. اضغط إرسال أو Enter
4. اضبط الإعدادات المتقدمة حسب الحاجة
""")
# عرض واجهة الدردشة
chat_interface = create_interface()
chat_interface.render()
# إعدادات التشغيل
server_port = int(os.getenv("PORT", "7860"))
server_name = os.getenv("SERVER_NAME", "0.0.0.0")
share = os.getenv("SHARE_APP", "False").lower() == "true"
# تشغيل التطبيق
demo.launch(
server_name=server_name,
server_port=server_port,
share=share,
favicon_path="https://huggingface.co/front/assets/huggingface_logo-noborder.svg"
)
if __name__ == "__main__":
main()
|