مكوّن المحادثة هو كل ما يقع بين مستخدميك والنموذج. أنشئ NuiChatSession مع دالة respond، ويتولى <nui-chat> الباقي: يعرض الرد بصيغة Markdown أثناء تدفقه، ويتابعه إلى أسفل الصفحة إلى أن يمرّر القارئ إلى الأعلى، ويحوّل زر الإرسال إلى زر إيقاف ريثما يكتمل الرد.
تُعيد respond نصًّا، أو وعدًا (promise)، أو async function*، أو Observable، فتلائم أي API. وإلى جانب النص، يمكن أن يحمل الرد استدلال النموذج، واستدعاءاته للأدوات (ترسمها قوالبك)، والمصادر التي استخدمها. ويقرأ nuiEventStream أحداث الخادم (server-sent events) التي تبثها معظم واجهات API للنماذج.
لا يضيع شيء: الرد المُعاد توليده أو السؤال المعدَّل يصبح نسخة جديدة بجانب القديمة، وتحتفظ المحادثة بكل فروعها. وتقرأ قارئات الشاشة كل رد بعد اكتماله، لا كلمةً كلمة.
مساعد ذكي
تبدأ الاقتراحات المحادثة. وتتدفق الردود بصيغة Markdown؛ أوقفها، أو أعد توليدها، أو قيّمها، أو عدّل سؤالك. ويقبل attach الملفات بالاختيار أو اللصق أو السحب والإفلات.
الاستدلال والأدوات والمصادر
تُضيف الأجزاء المتدفقة (deltas) استدلال النموذج واستدعاءات الأدوات والمصادر إلى الرد. ويرسم nuiChatTool أداة الطقس على هيئة بطاقة؛ أما الأدوات الأخرى فتُطوى مع مُدخلاتها ومُخرجاتها.
التدفق من الخادم
يقرأ nuiEventStream تدفق أحداث بأسلوب OpenAI، ويعرض NuiChatError رسالته. ويحفظ all() المحادثة بكل نُسخها.