@credithub/harlan-components 1.52.2 → 1.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,9 +24,9 @@ import Section from '../section';
24
24
  import { Queries, RequestStatus } from '../webservice';
25
25
  import { Carrousel } from './carrousel/carrousel';
26
26
  import { createDossieData } from './dossieData';
27
- import GenerativeAI from './generativeAi/generativeAi';
28
27
  import { Summary } from './summary/summary';
29
28
  import { TransactionsTable } from './transactionTable/transactionTable';
29
+ import GenerativeAI from './generativeAi/generativeAi';
30
30
  var DossieContent = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: grid;\n grid-template-columns: 1fr 2fr;\n justify-items: center;\n align-items: flex-start;\n margin-bottom: 20px;\n gap: 20px;\n\n @media screen and (max-width: 992px) {\n grid-template-columns: 1fr;\n }\n"], ["\n display: grid;\n grid-template-columns: 1fr 2fr;\n justify-items: center;\n align-items: flex-start;\n margin-bottom: 20px;\n gap: 20px;\n\n @media screen and (max-width: 992px) {\n grid-template-columns: 1fr;\n }\n"])));
31
31
  var DossieContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 0px 70px;\n\n @media (max-width: 1000px) {\n padding: 0px 30px;\n }\n"], ["\n padding: 0px 70px;\n\n @media (max-width: 1000px) {\n padding: 0px 30px;\n }\n"])));
32
32
  var GenerativeAIContainer = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n padding: 32px;\n background-color: ", ";\n"], ["\n padding: 32px;\n background-color: ", ";\n"])), function (_a) {
@@ -71,8 +71,8 @@ var Dossie = function (_a) {
71
71
  React.createElement(DossieCarrousel, null),
72
72
  React.createElement(Summary, { finderResponse: data, rfbResponse: rfbResponse, document: document })),
73
73
  React.createElement(TransactionsTable, { events: XPathUtils.select('//historico/consulta', data) || [] })),
74
- !printMode && React.createElement(GenerativeAIContainer, null,
75
- React.createElement(GenerativeAI, { documento: document }))));
74
+ !printMode && (React.createElement(GenerativeAIContainer, null,
75
+ React.createElement(GenerativeAI, { documento: document })))));
76
76
  };
77
77
  return (React.createElement(Section, { ctx: ctx, hideHeader: true, minimized: false, isError: function (e) { return response(e); }, onSuccess: response }));
78
78
  };
@@ -1,13 +1,38 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
11
36
  };
12
37
  var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
38
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
@@ -31,7 +56,9 @@ import { useGlobalData } from '../../../contexts/globalDataContext';
31
56
  import useToggle from '../../../hooks/useToggle';
32
57
  import React, { useEffect, useMemo, useRef, useState } from 'react';
33
58
  import ReactMarkdown from 'react-markdown';
59
+ import remarkGfm from 'remark-gfm';
34
60
  import { flattenData, selectRelevantData } from './dataUtils';
61
+ import { processStream } from './processStream';
35
62
  import { createQueryAndMessages } from './queryUtils';
36
63
  import { BetaTag, ChatInput, ChatInputContainer, Container, ContainerInput, GenerativeAi, Header, HeaderContent, InitialMessageBox, InitialMessageContent, LoadingDots, Message, MessageHistory, SendButton, Title } from './styles';
37
64
  var GenerativeAI = function (_a) {
@@ -39,187 +66,81 @@ var GenerativeAI = function (_a) {
39
66
  var documento = _a.documento;
40
67
  var globalData = useGlobalData().data;
41
68
  var _e = useState('{}'), serializedData = _e[0], setSerializedData = _e[1];
42
- var _f = useState(false), queryEnabled = _f[0], setQueryEnabled = _f[1];
43
- var _g = useState(''), userInput = _g[0], setUserInput = _g[1];
44
- var _h = useState([]), messageHistory = _h[0], setMessageHistory = _h[1];
45
- var _j = useToggle(), isOpen = _j[0], toggleOpen = _j[1];
69
+ var _f = useState(''), userInput = _f[0], setUserInput = _f[1];
70
+ var _g = useState([]), messageHistory = _g[0], setMessageHistory = _g[1];
71
+ var _h = useToggle(), isOpen = _h[0], toggleOpen = _h[1];
72
+ var _j = useState('summary'), streamMode = _j[0], setStreamMode = _j[1];
73
+ var _k = useState(null), summaryQueryData = _k[0], setSummaryQueryData = _k[1];
74
+ var _l = useState(null), chatQueryData = _l[0], setChatQueryData = _l[1];
46
75
  var messageHistoryRef = useRef(null);
47
- var incrementalResponseRef = useRef('');
48
- var abortControllerRef = useRef(null);
49
- var _k = useState(false), hasMadeInitialRequest = _k[0], setHasMadeInitialRequest = _k[1];
50
- var _l = useState(false), isProcessing = _l[0], setIsProcessing = _l[1];
51
- var _m = useState(false), shouldStartTyping = _m[0], setShouldStartTyping = _m[1];
52
- var _o = useState(''), typingMessage = _o[0], setTypingMessage = _o[1];
53
- var _p = useState(false), isTyping = _p[0], setIsTyping = _p[1];
54
- var _q = useState(0), currentMessageIndex = _q[0], setCurrentMessageIndex = _q[1];
55
- var typingIntervalRef = useRef(null);
56
- var simulateTyping = function (message, callback) {
57
- setIsTyping(true);
58
- var index = typingMessage.length - 1;
59
- if (typingIntervalRef.current) {
60
- clearInterval(typingIntervalRef.current);
61
- }
62
- typingIntervalRef.current = setInterval(function () {
63
- if (index < message.length) {
64
- setTypingMessage(function (prev) { return prev + message[index]; });
65
- index++;
66
- }
67
- else {
68
- clearInterval(typingIntervalRef.current);
69
- setIsTyping(false);
70
- callback();
71
- }
72
- }, 25);
73
- };
74
- var stopTyping = function () {
75
- if (typingIntervalRef.current) {
76
- clearInterval(typingIntervalRef.current);
77
- typingIntervalRef.current = null;
78
- setMessageHistory(function (prevMessages) {
79
- var updatedMessages = __spreadArray([], prevMessages, true);
80
- if (updatedMessages.length > 0 &&
81
- updatedMessages[updatedMessages.length - 1].role === 'assistant') {
82
- updatedMessages[updatedMessages.length - 1] = __assign(__assign({}, updatedMessages[updatedMessages.length - 1]), { content: typingMessage });
83
- }
84
- return updatedMessages;
85
- });
86
- setIsTyping(false);
87
- }
88
- };
89
- var processMessages = function () {
90
- var nextMessage = messageHistory[currentMessageIndex];
91
- if ((nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.role) === 'assistant') {
92
- simulateTyping(nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.content, function () {
93
- setCurrentMessageIndex(function (prev) { return prev + 1; });
94
- });
95
- }
96
- else {
97
- setCurrentMessageIndex(function (prev) { return prev + 1; });
98
- }
99
- };
100
- useEffect(function () {
101
- if (currentMessageIndex < messageHistory.length && !isTyping) {
102
- var nextMessage = messageHistory[currentMessageIndex];
103
- if ((nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.role) === 'assistant') {
104
- simulateTyping(nextMessage.content, function () {
105
- setCurrentMessageIndex(function (prev) { return prev + 1; });
106
- });
107
- }
108
- }
109
- }, [currentMessageIndex, messageHistory]);
110
- var handleIncrementalResponse = function (response) {
111
- var nonEmptyFragments = response.filter(function (e) { return e.message.content !== ''; });
112
- if (nonEmptyFragments.length > 0) {
113
- var newContent = nonEmptyFragments
114
- .map(function (e) { return e.message.content; })
115
- .join('');
116
- incrementalResponseRef.current += newContent;
117
- setMessageHistory(function (prevMessages) {
118
- var updatedMessages = __spreadArray([], prevMessages, true);
119
- var lastMessage = updatedMessages[updatedMessages.length - 1];
120
- if (lastMessage && lastMessage.role === 'assistant') {
121
- lastMessage.content = incrementalResponseRef.current;
122
- }
123
- else {
124
- updatedMessages.push({
125
- role: 'assistant',
126
- content: incrementalResponseRef.current
127
- });
128
- }
129
- return updatedMessages;
130
- });
131
- }
132
- if (response.some(function (e) { return e.done; })) {
133
- incrementalResponseRef.current = '';
134
- setQueryEnabled(false);
135
- }
136
- };
137
76
  var isGlobalDataLoaded = useMemo(function () {
138
- var loaded = globalData.documentHistory !== undefined &&
139
- globalData.documentHistory !== null;
140
- return loaded;
77
+ return (globalData.documentHistory !== undefined &&
78
+ globalData.documentHistory !== null);
141
79
  }, [globalData]);
142
80
  useEffect(function () {
143
- if (documento && isGlobalDataLoaded && !hasMadeInitialRequest) {
81
+ if (globalData && documento && isGlobalDataLoaded) {
144
82
  try {
145
83
  var relevantData = selectRelevantData(globalData);
146
84
  var serialized = flattenData(relevantData);
147
85
  setSerializedData(serialized);
148
- setQueryEnabled(true);
149
- setHasMadeInitialRequest(true);
150
86
  }
151
87
  catch (error) {
152
88
  console.error('Erro ao preparar os dados para a API:', error);
153
89
  setSerializedData('{}');
154
- setQueryEnabled(false);
155
- }
156
- }
157
- }, [documento, isGlobalDataLoaded, hasMadeInitialRequest]);
158
- var queryData = useMemo(function () {
159
- if (!queryEnabled || !serializedData || serializedData === '{}')
160
- return undefined;
161
- var generatedQuery = createQueryAndMessages(serializedData, messageHistory, userInput);
162
- return generatedQuery;
163
- }, [queryEnabled, serializedData, messageHistory, userInput]);
164
- var _r = useStreamQuery("SELECT FROM 'LlamaApi'.'Consulta'", queryData, !!queryData), response = _r.response, error = _r.error, isLoading = _r.isLoading, refetch = _r.refetch;
165
- useEffect(function () {
166
- abortControllerRef.current = new AbortController();
167
- return function () {
168
- if (abortControllerRef.current) {
169
- abortControllerRef.current.abort();
170
90
  }
171
- if (typingIntervalRef.current) {
172
- clearInterval(typingIntervalRef.current);
173
- }
174
- };
175
- }, [queryEnabled]);
176
- useEffect(function () {
177
- if (response && !isLoading && !error) {
178
- handleIncrementalResponse(response);
179
- setIsProcessing(false);
180
- }
181
- if (error) {
182
- console.log('%c Erro ao realizar a consulta:', 'color: red; font-weight: bold;', error);
183
- setIsProcessing(false);
184
91
  }
185
- }, [response, isLoading, error]);
92
+ }, [documento, globalData, isGlobalDataLoaded]);
186
93
  useEffect(function () {
187
- if (currentMessageIndex < messageHistory.length) {
188
- processMessages();
189
- }
190
- }, [currentMessageIndex, messageHistory]);
94
+ if (serializedData &&
95
+ serializedData !== '{}' &&
96
+ streamMode === 'summary' &&
97
+ !summaryQueryData) {
98
+ setSummaryQueryData(createQueryAndMessages(serializedData, []));
99
+ }
100
+ }, [serializedData, streamMode, summaryQueryData]);
101
+ var _m = useStreamQuery("SELECT FROM 'LlamaApi'.'Consulta'", summaryQueryData, streamMode === 'summary' && !!summaryQueryData), summaryIterator = _m.responseIterator, summaryError = _m.error, summaryLoading = _m.isLoading, refetchSummary = _m.refetch, abortSummary = _m.abort;
102
+ var _o = useStreamQuery("SELECT FROM 'LlamaApi'.'Consulta'", chatQueryData, streamMode === 'chat' && !!chatQueryData), chatIterator = _o.responseIterator, chatError = _o.error, chatLoading = _o.isLoading, refetchChat = _o.refetch, abortChat = _o.abort;
191
103
  useEffect(function () {
192
- if (messageHistoryRef.current) {
193
- var _a = messageHistoryRef.current, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
194
- messageHistoryRef.current.scrollTop = scrollHeight - clientHeight;
104
+ if (summaryIterator) {
105
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
106
+ return __generator(this, function (_a) {
107
+ switch (_a.label) {
108
+ case 0: return [4 /*yield*/, processStream({
109
+ iterator: summaryIterator,
110
+ mode: 'summary',
111
+ setMessageHistory: setMessageHistory
112
+ })];
113
+ case 1:
114
+ _a.sent();
115
+ setStreamMode('chat');
116
+ return [2 /*return*/];
117
+ }
118
+ });
119
+ }); })();
195
120
  }
196
- }, [messageHistory, typingMessage, isTyping, isProcessing]);
121
+ }, [summaryIterator]);
197
122
  useEffect(function () {
198
- if (!isLoading && !error) {
199
- setShouldStartTyping(true);
123
+ if (chatIterator) {
124
+ processStream({
125
+ iterator: chatIterator,
126
+ mode: 'chat',
127
+ setMessageHistory: setMessageHistory
128
+ });
200
129
  }
201
- }, [isLoading, error]);
130
+ }, [chatIterator]);
202
131
  var handleSendMessage = function () {
203
132
  if (userInput.trim()) {
204
133
  var newMessage_1 = { role: 'user', content: userInput };
205
- setMessageHistory(function (prevMessages) { return __spreadArray(__spreadArray([], prevMessages, true), [newMessage_1], false); });
134
+ setMessageHistory(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newMessage_1], false); });
206
135
  setUserInput('');
207
- setQueryEnabled(false);
208
- setTimeout(function () {
209
- setQueryEnabled(true);
210
- }, 0);
211
- setIsProcessing(true);
212
- incrementalResponseRef.current = '';
136
+ setChatQueryData(createQueryAndMessages(serializedData, __spreadArray(__spreadArray([], messageHistory.slice(1), true), [
137
+ newMessage_1
138
+ ], false)));
139
+ refetchChat();
213
140
  }
214
141
  };
215
142
  var handleStopStream = function () {
216
- if (abortControllerRef.current) {
217
- abortControllerRef.current.abort();
218
- stopTyping();
219
- setIsProcessing(false);
220
- setQueryEnabled(false);
221
- incrementalResponseRef.current = '';
222
- }
143
+ abortChat();
223
144
  };
224
145
  var handleKeyPress = function (e) {
225
146
  if (e.key === 'Enter') {
@@ -235,47 +156,34 @@ var GenerativeAI = function (_a) {
235
156
  React.createElement(BtnWrapper, { onClick: toggleOpen }, isOpen ? React.createElement(ChevronUp, null) : React.createElement(ChevronDown, null)))),
236
157
  isOpen && (React.createElement(React.Fragment, null,
237
158
  React.createElement(Container, null,
238
- error && (React.createElement("div", null,
159
+ (summaryError || chatError) && (React.createElement("div", null,
239
160
  React.createElement(StatusMessage, { type: "error" },
240
- "Erro ao realizar a an\u00E1lise: ",
241
- error.message))),
161
+ "Erro ao realizar a an\u00E1lise:",
162
+ ' ', (_b = (summaryError || chatError)) === null || _b === void 0 ? void 0 :
163
+ _b.message))),
242
164
  React.createElement(InitialMessageBox, null,
243
165
  React.createElement(InitialMessageContent, null,
244
166
  React.createElement("div", { className: "icon-and-text" },
245
167
  React.createElement(Credithub, { size: 18, className: "initial-icon" }),
246
- React.createElement("span", null, !isGlobalDataLoaded ||
247
- (isLoading &&
248
- currentMessageIndex === 0 &&
249
- !((_b = messageHistory[0]) === null || _b === void 0 ? void 0 : _b.content)) ? (React.createElement(LoadingDots, null)) : shouldStartTyping &&
250
- isTyping &&
251
- currentMessageIndex === 0 ? (typingMessage) : (React.createElement(ReactMarkdown, null, ((_c = messageHistory[0]) === null || _c === void 0 ? void 0 : _c.content) || '')))),
168
+ React.createElement("span", null, streamMode === 'summary' &&
169
+ summaryLoading &&
170
+ !((_c = messageHistory[0]) === null || _c === void 0 ? void 0 : _c.content) ? (React.createElement(LoadingDots, null)) : (React.createElement(ReactMarkdown, { remarkPlugins: [remarkGfm] }, ((_d = messageHistory[0]) === null || _d === void 0 ? void 0 : _d.content) || '')))),
252
171
  React.createElement("div", { className: "additional-message" },
253
172
  React.createElement("p", null, "Voc\u00EA pode fazer perguntas como:"),
254
- React.createElement("p", { className: "blue-text" }, "\u00C9 seguro oferecer um cr\u00E9dito de R$ 15.000,00 a uma taxa de juros de 3% em 12x?")),
173
+ React.createElement("p", { className: "blue-text" }, "\u00C9 seguro oferecer um cr\u00E9dito de R$ 15.000,00 a uma taxa de 3% em 12x?")),
255
174
  React.createElement("div", { className: "final-message" },
256
175
  React.createElement(Person, { size: 18 }),
257
176
  React.createElement("p", null, "Digite no campo abaixo o que deseja saber sobre esse dossi\u00EA?")))),
258
- React.createElement(MessageHistory, { ref: messageHistoryRef },
259
- messageHistory
260
- .slice(1, currentMessageIndex)
261
- .map(function (msg, index) { return (React.createElement(Message, { key: index + 1, role: msg.role },
262
- React.createElement("div", { className: "icon-and-message" },
263
- msg.role === 'user' ? (React.createElement(Person, { size: 18 })) : (React.createElement(Credithub, { size: 18, className: "initial-icon" })),
264
- React.createElement("span", null,
265
- React.createElement(ReactMarkdown, null, msg.content))))); }),
266
- isLoading && ((_d = messageHistory[0]) === null || _d === void 0 ? void 0 : _d.content) !== undefined ? (React.createElement(Message, { role: "assistant" },
267
- React.createElement("div", { className: "icon-and-message" },
268
- React.createElement(Credithub, { size: 18, className: "initial-icon" }),
269
- React.createElement("span", null,
270
- React.createElement(LoadingDots, null))))) : shouldStartTyping && isTyping && currentMessageIndex > 0 ? (React.createElement(Message, { role: "assistant" },
271
- React.createElement("div", { className: "icon-and-message" },
272
- React.createElement(Credithub, { size: 18, className: "initial-icon" }),
273
- React.createElement("span", null,
274
- React.createElement(ReactMarkdown, null, typingMessage))))) : null)),
177
+ React.createElement(MessageHistory, { ref: messageHistoryRef }, messageHistory.slice(1).map(function (msg, index) { return (React.createElement(Message, { key: index, role: msg.role },
178
+ React.createElement("div", { className: "icon-and-message" },
179
+ msg.role === 'user' ? (React.createElement(Person, { size: 18 })) : (React.createElement(Credithub, { size: 18, className: "initial-icon" })),
180
+ React.createElement("span", null, msg.role === 'assistant' &&
181
+ chatLoading &&
182
+ !msg.content ? (React.createElement(LoadingDots, null)) : (React.createElement(ReactMarkdown, { remarkPlugins: [remarkGfm] }, msg.content)))))); }))),
275
183
  React.createElement(ContainerInput, null,
276
184
  React.createElement(ChatInputContainer, null,
277
- React.createElement(ChatInput, { type: "text", placeholder: "Digite o que deseja saber sobre esse dossi\u00EA", value: userInput, onChange: function (e) { return setUserInput(e.target.value); }, onKeyPress: handleKeyPress, disabled: isProcessing || isTyping }),
278
- isProcessing || isTyping ? (React.createElement(SendButton, { onClick: handleStopStream },
185
+ React.createElement(ChatInput, { type: "text", placeholder: "Digite o que deseja saber sobre esse dossi\u00EA", value: userInput, onChange: function (e) { return setUserInput(e.target.value); }, onKeyPress: handleKeyPress, disabled: chatLoading }),
186
+ chatLoading ? (React.createElement(SendButton, { onClick: handleStopStream },
279
187
  React.createElement(StopButton, null))) : (React.createElement(SendButton, { onClick: handleSendMessage },
280
188
  React.createElement(BtnSend, null)))))))));
281
189
  };
@@ -0,0 +1,13 @@
1
+ import { GenerativeAIApiResponse } from './responseUtils';
2
+ export type StreamMode = 'summary' | 'chat';
3
+ interface ProcessStreamParams {
4
+ iterator: AsyncGenerator<GenerativeAIApiResponse>;
5
+ mode: StreamMode;
6
+ setMessageHistory: React.Dispatch<React.SetStateAction<any[]>>;
7
+ }
8
+ /**
9
+ * Processa o stream recebido do iterator e atualiza o estado de messageHistory
10
+ * de acordo com o mode (summary ou chat) em tempo real.
11
+ */
12
+ export declare const processStream: ({ iterator, mode, setMessageHistory }: ProcessStreamParams) => Promise<void>;
13
+ export {};
@@ -0,0 +1,171 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
38
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
39
+ var m = o[Symbol.asyncIterator], i;
40
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
41
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
42
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
43
+ };
44
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
46
+ if (ar || !(i in from)) {
47
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
48
+ ar[i] = from[i];
49
+ }
50
+ }
51
+ return to.concat(ar || Array.prototype.slice.call(from));
52
+ };
53
+ import { flushSync } from 'react-dom';
54
+ /**
55
+ * Processa o stream recebido do iterator e atualiza o estado de messageHistory
56
+ * de acordo com o mode (summary ou chat) em tempo real.
57
+ */
58
+ export var processStream = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
59
+ var inThinkBlock, accumulatedText, _loop_1, e_1_1;
60
+ var _c, iterator_1, iterator_1_1;
61
+ var _d, e_1, _e, _f;
62
+ var iterator = _b.iterator, mode = _b.mode, setMessageHistory = _b.setMessageHistory;
63
+ return __generator(this, function (_g) {
64
+ switch (_g.label) {
65
+ case 0:
66
+ inThinkBlock = false;
67
+ accumulatedText = '';
68
+ _g.label = 1;
69
+ case 1:
70
+ _g.trys.push([1, 7, 8, 13]);
71
+ _loop_1 = function () {
72
+ var fragment, part, startIndex, endIndex, endIndex, cleaned;
73
+ return __generator(this, function (_h) {
74
+ switch (_h.label) {
75
+ case 0:
76
+ _f = iterator_1_1.value;
77
+ _c = false;
78
+ fragment = _f;
79
+ part = fragment.message.content;
80
+ if (!inThinkBlock) {
81
+ if (part.includes('<think>')) {
82
+ startIndex = part.indexOf('<think>');
83
+ accumulatedText += part.substring(0, startIndex);
84
+ inThinkBlock = true;
85
+ if (part.includes('</think>')) {
86
+ endIndex = part.indexOf('</think>');
87
+ accumulatedText += part.substring(endIndex + '</think>'.length);
88
+ inThinkBlock = false;
89
+ }
90
+ }
91
+ else {
92
+ accumulatedText += part;
93
+ }
94
+ }
95
+ else {
96
+ if (part.includes('</think>')) {
97
+ endIndex = part.indexOf('</think>');
98
+ accumulatedText += part.substring(endIndex + '</think>'.length);
99
+ inThinkBlock = false;
100
+ }
101
+ }
102
+ cleaned = accumulatedText.replace(/[ \t]+/g, ' ').trim();
103
+ flushSync(function () {
104
+ setMessageHistory(function (prevMessages) {
105
+ if (mode === 'summary') {
106
+ if (prevMessages.length > 0 && prevMessages[0].role === 'assistant') {
107
+ var newMessages = __spreadArray([], prevMessages, true);
108
+ newMessages[0] = { role: 'assistant', content: cleaned };
109
+ return newMessages;
110
+ }
111
+ else {
112
+ return [{ role: 'assistant', content: cleaned }];
113
+ }
114
+ }
115
+ else if (mode === 'chat') {
116
+ if (prevMessages.length > 0 &&
117
+ prevMessages[prevMessages.length - 1].role === 'assistant') {
118
+ var newMessages = __spreadArray([], prevMessages, true);
119
+ newMessages[newMessages.length - 1] = {
120
+ role: 'assistant',
121
+ content: cleaned
122
+ };
123
+ return newMessages;
124
+ }
125
+ else {
126
+ return __spreadArray(__spreadArray([], prevMessages, true), [{ role: 'assistant', content: cleaned }], false);
127
+ }
128
+ }
129
+ return prevMessages;
130
+ });
131
+ });
132
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 0); })];
133
+ case 1:
134
+ _h.sent();
135
+ return [2 /*return*/];
136
+ }
137
+ });
138
+ };
139
+ _c = true, iterator_1 = __asyncValues(iterator);
140
+ _g.label = 2;
141
+ case 2: return [4 /*yield*/, iterator_1.next()];
142
+ case 3:
143
+ if (!(iterator_1_1 = _g.sent(), _d = iterator_1_1.done, !_d)) return [3 /*break*/, 6];
144
+ return [5 /*yield**/, _loop_1()];
145
+ case 4:
146
+ _g.sent();
147
+ _g.label = 5;
148
+ case 5:
149
+ _c = true;
150
+ return [3 /*break*/, 2];
151
+ case 6: return [3 /*break*/, 13];
152
+ case 7:
153
+ e_1_1 = _g.sent();
154
+ e_1 = { error: e_1_1 };
155
+ return [3 /*break*/, 13];
156
+ case 8:
157
+ _g.trys.push([8, , 11, 12]);
158
+ if (!(!_c && !_d && (_e = iterator_1.return))) return [3 /*break*/, 10];
159
+ return [4 /*yield*/, _e.call(iterator_1)];
160
+ case 9:
161
+ _g.sent();
162
+ _g.label = 10;
163
+ case 10: return [3 /*break*/, 12];
164
+ case 11:
165
+ if (e_1) throw e_1.error;
166
+ return [7 /*endfinally*/];
167
+ case 12: return [7 /*endfinally*/];
168
+ case 13: return [2 /*return*/];
169
+ }
170
+ });
171
+ }); };
@@ -18,13 +18,12 @@ export var createQueryAndMessages = function (relevantData, messageHistory, user
18
18
  ? "\n Analisar o dossi\u00EA da seguinte pessoa f\u00EDsica:\n - Foco em identificar restri\u00E7\u00F5es financeiras, protestos e riscos pessoais que possam impactar o cr\u00E9dito.\n "
19
19
  : "\n Analisar o dossi\u00EA da seguinte empresa:\n - Foco em identificar protestos, processos judiciais e problemas financeiros que possam impactar a empresa.\n ";
20
20
  var baseContent = "\n ".concat(analysisHeader, "\n\n ").concat(tipoPessoaMessage, "\n\n ```yaml\n ").concat(stringify(parsedData), "\n ```\n\n **Responda sempre em portugu\u00EAs claro, eliminando dados irrelevantes ou n\u00E3o intelig\u00EDveis.**\n ").trim();
21
- var messages = __spreadArray([], messageHistory, true);
22
- if (messageHistory.length === 0) {
23
- messages.push({
21
+ var messages = __spreadArray([
22
+ {
24
23
  role: 'user',
25
24
  content: baseContent
26
- });
27
- }
25
+ }
26
+ ], messageHistory, true);
28
27
  if (userInput) {
29
28
  messages.push({
30
29
  role: 'user',
@@ -1,7 +1,8 @@
1
1
  import { Client } from '@credithub/webservice';
2
2
  export declare function useStreamQuery<R = unknown, T extends Client.Form = Client.Form>(query: string, data?: T, enabled?: boolean): {
3
- response: R[];
3
+ responseIterator: AsyncGenerator<R, any, any> | null;
4
4
  error: Error | null;
5
5
  isLoading: boolean;
6
- refetch: () => void;
6
+ refetch: () => Promise<void>;
7
+ abort: () => void;
7
8
  };