|
|
@ -9,57 +9,57 @@ const initialState: ConversationState = {
|
|
|
|
status: 'idle',
|
|
|
|
status: 'idle',
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const API_STREAMING = import.meta.env.API_STREAMING || false;
|
|
|
|
const API_STREAMING = import.meta.env.API_STREAMING || true;
|
|
|
|
|
|
|
|
|
|
|
|
export const fetchAnswer = createAsyncThunk<
|
|
|
|
export const fetchAnswer = createAsyncThunk<
|
|
|
|
Answer | void,
|
|
|
|
Answer,
|
|
|
|
{ question: string },
|
|
|
|
{ question: string },
|
|
|
|
{ dispatch: Dispatch<any>; state: RootState }
|
|
|
|
{ dispatch: Dispatch<any>; state: RootState }
|
|
|
|
>('fetchAnswer', async ({ question }, { dispatch, getState }) => {
|
|
|
|
>('fetchAnswer', async ({ question }, { dispatch, getState }) => {
|
|
|
|
const state = getState();
|
|
|
|
const state = getState();
|
|
|
|
|
|
|
|
|
|
|
|
if (API_STREAMING) {
|
|
|
|
if (state.preference) {
|
|
|
|
fetchAnswerSteaming(
|
|
|
|
if (API_STREAMING) {
|
|
|
|
question,
|
|
|
|
fetchAnswerSteaming(
|
|
|
|
state.preference.apiKey,
|
|
|
|
question,
|
|
|
|
state.preference.selectedDocs!,
|
|
|
|
state.preference.apiKey,
|
|
|
|
(event) => {
|
|
|
|
state.preference.selectedDocs!,
|
|
|
|
const data = JSON.parse(event.data);
|
|
|
|
(event) => {
|
|
|
|
console.log(data);
|
|
|
|
const data = JSON.parse(event.data);
|
|
|
|
|
|
|
|
console.log(data);
|
|
|
|
|
|
|
|
|
|
|
|
// check if the 'end' event has been received
|
|
|
|
// check if the 'end' event has been received
|
|
|
|
if (data.type === 'end') {
|
|
|
|
if (data.type === 'end') {
|
|
|
|
// set status to 'idle'
|
|
|
|
// set status to 'idle'
|
|
|
|
dispatch(conversationSlice.actions.setStatus('idle'));
|
|
|
|
dispatch(conversationSlice.actions.setStatus('idle'));
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
const result = data.answer;
|
|
|
|
const result = data.answer;
|
|
|
|
dispatch(
|
|
|
|
dispatch(
|
|
|
|
updateStreamingQuery({
|
|
|
|
updateStreamingQuery({
|
|
|
|
index: state.conversation.queries.length - 1,
|
|
|
|
index: state.conversation.queries.length - 1,
|
|
|
|
query: { response: result },
|
|
|
|
query: { response: result },
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
);
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
const answer = await fetchAnswerApi(
|
|
|
|
const answer = await fetchAnswerApi(
|
|
|
|
question,
|
|
|
|
question,
|
|
|
|
state.preference.apiKey,
|
|
|
|
state.preference.apiKey,
|
|
|
|
state.preference.selectedDocs!,
|
|
|
|
state.preference.selectedDocs!,
|
|
|
|
state.conversation.queries,
|
|
|
|
state.conversation.queries,
|
|
|
|
);
|
|
|
|
);
|
|
|
|
dispatch(
|
|
|
|
if (answer) {
|
|
|
|
// conversationSlice.actions.addQuery({
|
|
|
|
dispatch(
|
|
|
|
// question: question,
|
|
|
|
updateQuery({
|
|
|
|
// response: answer,
|
|
|
|
index: state.conversation.queries.length - 1,
|
|
|
|
// }),
|
|
|
|
query: { response: answer.answer },
|
|
|
|
updateQuery({
|
|
|
|
}),
|
|
|
|
index: state.conversation.queries.length - 1,
|
|
|
|
);
|
|
|
|
query: { response: answer.answer },
|
|
|
|
dispatch(conversationSlice.actions.setStatus('idle'));
|
|
|
|
}),
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
dispatch(conversationSlice.actions.setStatus('idle'));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|