Spaces:
Sleeping
Sleeping
| 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")) | |