Бот ИИ с элементом остановкиJavascript

Форум по Javascript
Ответить
Anonymous
 Бот ИИ с элементом остановки

Сообщение Anonymous »

Привет, я работаю над каким -то проектом, который включает в себя ИИ. Пользователь отправил сообщение в API API и AI -ответ. Это не моя проблема, это работает очень хорошо. Но у нас есть какая -то кнопка «Покрасить». Это похоже на CHATGPT, когда пользователь касается кнопки «Стоп», ответ должен оставаться неполным, и должен появиться так в пользовательском интерфейсе. Как и сообщение ботов "Привет!" Но если пользователь Touch STOP LOT -кнопку прокрутки Ben Index находится в e буквы, она должна быть показана как «он». На самом деле это тоже работает, но я получаю полное сообщение после. Итак, и "он", и "Привет!" выводятся в пользовательском интерфейсе. Я просто хочу текст "он". Кто -нибудь может мне помочь? < /P>
const connectSocket = async () => {
try {
const token = await AsyncStorage.getItem('userToken');
if (!token) {
console.log("JWT Token bulunamadı");
return;
}

// Eğer önceki socket varsa temizle
if (socketRef.current) {
socketRef.current.removeAllListeners();
socketRef.current.disconnect();
}

socket = io("/////", {
extraHeaders: {
Authorization: `Bearer ${token}`,
},
});

socketRef.current = socket;

socket.on('connect', () => {
console.log("Socket bağlantısı başarılı");
// Sadece mevcut bir chatId varsa odaya katıl
if (currentChatId) {
//console.log("Odaya katılınıyor:", currentChatId);
socket.emit('join_chat', { chatId: currentChatId });
}
});

socket.on('connect_error', (error) => {
console.error('Socket bağlantı hatası:', error);
});

socket.on('ai_response', (data) => {
if (data.message) {
const { text, isUser, sendDate, chatId } = data.message;
//console.log("AI yanıtı alındı:", {
// receivedChatId: chatId,
// currentChatId,
// isUser,
// messageLength: text.length
//});

// Sadece ilgili chat odasına ait mesajları işle
if (chatId === currentChatId && !isUser) {
//console.log("Mesaj işleniyor - Aynı oda ID'si");
setIsTyping(true);
setTypingText('');
animateTyping(text);
} else {
console.log("Mesaj işlenmiyor - Farklı oda ID'si veya kullanıcı mesajı");
}
} else if (data.error) {
console.log("AI yanıt hatası:", data.error);
Toast.show({
type: 'error',
text1: 'Error',
text2: data.error,
position: 'bottom',
});
}
});
} catch (error) {
console.error('Token yükleme hatası:', error);
}
};

connectSocket();

// Cleanup function - ekran kapandığında çalışır
return () => {
//console.log("Chat Detail Screen kapatılıyor");
// Odadan çık
if (socketRef.current && currentChatId) {
//console.log("Odadan çıkış yapılıyor:", currentChatId);
socketRef.current.emit('leave_chat', { chatId: currentChatId });
}
// Socket bağlantısını kapat
if (socket) {
//console.log("Socket bağlantısı kapatılıyor");
socket.removeAllListeners();
socket.disconnect();
}
if (socketRef.current) {
socketRef.current.removeAllListeners();
socketRef.current.disconnect();
}
};
}, [currentChatId]); // Sadece currentChatId değiştiğinde yeniden bağlan

const addMessage = (message, isUser, sendDate) => {
const newMessage = {
text: message,
isUser: isUser,
sendDate: sendDate || new Date().toISOString(),
};

setMessages((prevMessages) => [...prevMessages, newMessage]);
setShowLogoAndBoxes(false);

setTimeout(() => {
scrollViewRef.current?.scrollToEnd({ animated: true });
}, 100);
};

const sendMessage = async () => {
const text = inputText.trim();
if (!text) return;

//console.log("Mesaj gönderme işlemi başlatıldı");
const sendDate = new Date().getTime();

// Eğer mevcut bir chatId yoksa, yeni bir chat oluştur
let chatIdToUse = currentChatId;
if (!chatIdToUse) {
//console.log("Yeni chat oluşturuluyor");
try {
const token = await AsyncStorage.getItem('userToken');
if (!token) {
console.error('Token bulunamadı');
return;
}

const chatData = {
categoryId: categoryId,
content: text
};

const response = await DatabaseManager.createChat(chatData, token);
if (response.success) {
chatIdToUse = response.data.chatId;
setCurrentChatId(chatIdToUse);
//console.log("Yeni chat oluşturuldu:", chatIdToUse);

// Odaya katılma
if (socketRef.current) {
//console.log("Yeni odaya katılınıyor:", chatIdToUse);
socketRef.current.emit('join_chat', { chatId: chatIdToUse });
// Kısa bir bekleme süresi ekleyelim socket'in odaya katılması için
await new Promise(resolve => setTimeout(resolve, 500));
//console.log("Odaya katılma tamamlandı");
}
} else {
console.error("Chat oluşturulamadı:", response.error);
return;
}
} catch (error) {
console.error("Chat oluşturma hatası:", error);
return;
}
} else {
console.log("Mevcut chat kullanılıyor:", chatIdToUse);
}

// Mesajı ekle ve socket üzerinden gönder
addMessage(text, true, sendDate);

const messageData = {
message: {
text: text,
categoryId: categoryId,
chatId: chatIdToUse,
sendDate: sendDate
}
};

//console.log('Socket üzerinden mesaj gönderiliyor:', messageData);
if (socketRef.current) {
socketRef.current.emit('send_message', messageData);
//console.log("Mesaj gönderildi");
} else {
console.error('Socket bağlantısı bulunamadı');
Toast.show({
type: 'error',
text1: 'Error',
text2: 'Connection error. Please try again.',
position: 'bottom',
});
}
setInputText('');
};

const animateTyping = (text) => {
setIsTyping(true);
setTypingText('');
let index = 0;
let currentInterval = null;

currentInterval = setInterval(() => {
if (index < text.length && !stopGenerating) {
setTypingText(prevText => {
const newText = prevText + text[index];
// Her karakter eklendiğinde scroll yap
setTimeout(() => {
scrollToBottom(true);
}, 50);
return newText;
});
index++;
} else {
clearInterval(currentInterval);
setIsTyping(false);

if (!stopGenerating) {
const sendDate = new Date().toISOString();
addMessage(text, false, sendDate);
}
setTypingText('');
setStopGenerating(false);
}
}, 50);

return () => {
if (currentInterval) {
clearInterval(currentInterval);
}
};
};

const handleStopGenerating = () => {
console.log("Stop generating başlatıldı");
setStopGenerating(true);
setIsTyping(false);

if (typingText) {
console.log("Yarım kalan mesaj kaydediliyor");
const sendDate = new Date().toISOString();
addMessage(typingText, false, sendDate);
}
setTypingText('');
};

{isTyping && (


{typingText}


copyToClipboard(typingText)}>


shareMessage(typingText)}>




)}
{isTyping && (




{t('Stop generating...')}



)}



Подробнее здесь: https://stackoverflow.com/questions/794 ... ng-element
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»