Aser4trfr's picture
app.py
dcb9a9a verified
Raw
History Blame Contribute Delete
3.04 kB
import gradio as gr
from huggingface_hub import InferenceClient
def shader_agent(prompt, token):
if not token:
yield "⚠️ يرجى إدخال التوكن (Hugging Face Token) الخاص بك للبدء."
return
try:
client = InferenceClient(model="Qwen/Qwen2.5-Coder-32B-Instruct", token=token)
system_message = (
"أنت خبير محرك Godot 4 في قسم Visual Shaders. مهمتك هي شرح بناء الشيدر بالخطوات التالية:\n\n"
"1. اذكر أسماء العقد (Nodes) المطلوبة بالإنجليزية (كما تظهر في قائمة البحث في جودوت).\n"
"2. اشرح 'خريطة التوصيل' (Connection Graph) بوضوح تام، مثال: 'اربط [مخرج X] من [عقدة A] بـ [مدخل Y] في [عقدة B]'.\n"
"3. اذكر القيم التي يجب ضبطها في الـ Inspector لكل عقدة.\n"
"4. في النهاية، قدم كود .gdshader موازي لهذه العقد للتصدير المباشر.\n\n"
"اجعل الشرح بالعربية والأسماء التقنية بالإنجليزية."
)
full_prompt = f"{system_message}\n\nالمطلوب: {prompt}"
response = ""
for message in client.chat_completion(
messages=[{"role": "user", "content": full_prompt}],
max_tokens=4000,
stream=True,
):
token_content = message.choices.delta.content
if token_content:
response += token_content
yield response
except Exception as e:
yield f"⚠️ حدث خطأ: {str(e)}"
# واجهة المستخدم (UI)
with gr.Blocks() as demo:
gr.Markdown("# 🎨 Godot Visual Shader Architect")
gr.Markdown("اطلب أي تأثير (مثلاً: ماء، نار، تآكل) وسأعطيك خريطة العقد (Nodes) وكيفية توصيلها.")
with gr.Row():
with gr.Column(scale=1):
tk = gr.Textbox(label="HF Token (Write Access)", type="password", placeholder="hf_...")
msg = gr.Textbox(label="صف الشيدر الذي تريده", placeholder="مثلاً: شيدر درع طاقة يلمع عند الحواف...", lines=8)
generate_btn = gr.Button("🛠️ إنشاء خريطة العمل", variant="primary")
with gr.Column(scale=2):
gr.Markdown("### 📜 مخطط العقد وكود التصدير:")
out = gr.Markdown()
gr.Markdown("---")
gr.Markdown("💡 **نصيحة:** بعد الحصول على المخطط، يمكنك سحب العقد في جودوت وتوصيلها كما يشرح الوكيل تماماً.")
# تشغيل التطبيق مع تمرير الـ theme هنا لتجنب التحذيرات
if __name__ == "__main__":
demo.launch(theme=gr.themes.Default(primary_hue="orange", secondary_hue="blue"))