title |
---|
How To |
const result = await ragChat.chat("THIS_IS_USERS_QUESTION", {
promptFn: ({ question, chat_history }) => {
return `
Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.
Chat History:
${chatHistory}
Follow Up Input: ${question}
Standalone question:
`;
},
});
If your chatbot is negatively affected by the provided context, you can adjust the context quality using the similarityThreshold
option. The similarityThreshold is a number between 0 and 1, with a default value of 0.5. Increasing this value will improve quality, but the chatbot may reject more queries due to lack of relevant data.
ragChat.chat("Tell me about machine learning", {
similarityThreshold: 0.5
});
When RAG disabled, RAG chat skips the vector store and directly sends the question to the LLM model.
const result = await ragChat.chat("THIS_IS_USERS_QUESTION", {
disableRAG: true
});
new RAGChat({ debug: true });
You can access and update the context by using the onContextFetched
callback. This callback is called after the context is fetched from the vector store before the prompt is sent to the LLM.
let response = await ragChat.chat(question, {
onContextFetched: (context) => {
console.log("Retrieved context:", context)
return context
},
});
You can access chat history by using the onChatHistoryFetched
callback. This callback is called after the chat history is fetched from the Redis (or memory) before the prompt is sent to the LLM.
let response = await ragChat.chat(question, {
onChatHistoryFetched: (messages) => {
console.log("Retrieved chat history:", messages)
return messages
},
});
You can add metadata while you are inserting a message into the context. The array of metadata fetched from context will be returned with response.
export const rag = new RAGChat();
await rag.context.add({
type: "text",
data: "Mississippi is a state in the United States of America",
options: { metadata: { source: "wikipedia" }}
});
const response = await rag.chat("Where is Mississippi?");
console.log(response.metadata);
// [ {source: "wikipedia"} ]
You can see how much allowance a user has by using the ratelimitDetails hook.
await ragChat.chat("You shall not pass", {
streaming: false,
ratelimitDetails: (response) => {
remainingLimit = response.remaining;
},
});
You can access, read, or modify your streamed data.
await ragChat.chat("", {
onChunk({ content, inputTokens, chunkTokens, totalTokens, rawContent }) {
// Change or read your streamed chunks
// Examples:
// - Log the content: console.log(content);
// - Modify the content: content = content.toUpperCase();
// - Track token usage: console.log(`Tokens used: ${totalTokens}`);
// - Analyze raw content: processRawContent(rawContent);
// - Update UI in real-time: updateStreamingUI(content);
},
});
let messages: UpstashMessage[] = []
let context: PrepareChatResult = []
const response = await ragChat.chat(question, {
onChatHistoryFetched(_messages) {
messages = _messages
this.metadata = {
...this.metadata,
usedHistory: JSON.stringify(
messages.map((message) => {
delete message.metadata?.usedHistory
delete message.metadata?.usedContext
return message
})
),
}
return _messages
},
onContextFetched(_context) {
context = _context
this.metadata = { ...this.metadata, usedContext: context.map((x) => x.data.replace("-", "")) }
return _context
},
streaming: true,
metadata: {
modelNameWithProvider: `${LLM_MODELS[llmModel].provider}_${llmModel}`,
},
})