@empathyco/x-components
Version:
Empathy X Components
87 lines (84 loc) • 2.99 kB
JavaScript
import { getTaggingInfoFromUrl } from '@empathyco/x-adapter-platform';
import '@vue/devtools-api';
import '../../../../plugins/devtools/timeline.devtools.js';
import '@empathyco/x-utils';
import 'rxjs/operators';
import 'rxjs';
import '../../../../plugins/devtools/colors.utils.js';
import '../../../../plugins/x-bus.js';
import { XPlugin } from '../../../../plugins/x-plugin.js';
/**
* Default implementation for the {@link AiActions.fetchAndSaveAiSuggestions}.
*
* @param _ - The {@link https://vuex.vuejs.org/guide/actions.html | context} of the actions,
* provided by Vuex.
* @param request - The AI request to make.
* @returns The AI response.
*
* @public
*/
const fetchAndSaveAiSuggestions = async ({ commit }, request) => {
if (!request) {
return;
}
commit('setSuggestionsLoading', true);
return XPlugin.adapter.aiSuggestions(request).then(({ body, status }) => {
if (status !== 200) {
return;
}
if (body) {
const reader = body.getReader();
readAnswer(reader, commit);
}
});
};
function readAnswer(reader, commit) {
reader
.read()
.then(({ value, done }) => {
if (done) {
return;
}
const result = new TextDecoder().decode(value, { stream: true });
const parts = result.split('\n\n');
for (const part of parts) {
const lines = part.split('\n');
let data;
for (const line of lines) {
// line.length check to avoid empty data chunks
if (line.startsWith('data:') && line.length > 5) {
data = JSON.parse(line.slice(5).trim());
if ('responseText' in data) {
commit('setResponseText', data.responseText);
}
if ('suggestionText' in data) {
commit('setSuggestionText', data.suggestionText);
}
if ('queries' in data) {
commit('setQueries', data.queries);
}
if ('taggings' in data) {
const { toolingDisplay, toolingDisplayClick } = data.taggings[0];
const tagging = {
toolingDisplay: getTaggingInfoFromUrl(toolingDisplay),
toolingDisplayClick: getTaggingInfoFromUrl(toolingDisplayClick),
};
commit('setTagging', tagging);
}
}
}
}
readAnswer(reader, commit);
})
.catch((error) => {
// AbortError code === 20
if (error.code !== 20) {
console.error(error);
}
})
.finally(() => {
commit('setSuggestionsLoading', false);
});
}
export { fetchAndSaveAiSuggestions };
//# sourceMappingURL=fetch-and-save-ai-suggestions.action.js.map