import React, { useState, useRef } from 'react'; import ChatMessage from './ChatMessage'; export default function App() { const [messages, setMessages] = useState([]); const [input, setInput] = useState(''); const [model, setModel] = useState('glm-5.1'); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const handleSend = async () => { if (!input.trim() || isLoading) return; const userMessage = { role: 'user', content: input }; const newMessages = [...messages, userMessage]; setMessages(newMessages); setInput(''); setIsLoading(true); // إضافة رسالة بوت فارغة باش نبدأ نملأها setMessages(prev => [...prev, { role: 'assistant', content: '', thinking: '' }]); try { const response = await fetch('/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ messages: newMessages, model }) }); const reader = response.body.getReader(); const decoder = new TextDecoder(); let fullText = ''; let isThinking = false; let currentThinking = ''; let currentContent = ''; while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = decoder.decode(value, { stream: true }); // تفكيك الـ Chunk (هذا يعتمد على كيفية إرسال HuggingFace للبيانات) // نفترض أن النموذج يرسل النص العادي أو بـ _XML tags للتفكير fullText += chunk; // منطق استخراج التفكير (إذا استخدم النموذج أو { const updated = [...prev]; updated[updated.length - 1] = { role: 'assistant', content: currentContent, thinking: currentThinking }; return updated; }); } } catch (error) { console.error('Error:', error); } finally { setIsLoading(false); } }; return (

AnesNT 🇩🇿

Genisi AI

Genisi AI - {model === 'glm-5.1' ? 'مفكر' : 'سريع'}

{messages.map((msg, idx) => ( ))}
setInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSend()} placeholder="اكتب رسالتك هنا..." disabled={isLoading} />
); }