UNPKG

@empathyco/x-components

Version:
87 lines (84 loc) 2.99 kB
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