@ant-design/pro-chat
Version:
a solution for ai chat
152 lines (151 loc) • 5.65 kB
JavaScript
import _typeof from "@babel/runtime/helpers/esm/typeof";
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
export var getMessageError = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(response) {
var chatMessageError;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
chatMessageError = {
message: "response error, status: ".concat(response.statusText),
type: response.status
};
return _context.abrupt("return", chatMessageError);
case 2:
case "end":
return _context.stop();
}
}, _callee);
}));
return function getMessageError(_x) {
return _ref.apply(this, arguments);
};
}();
/**
* 使用流式方法获取数据
* @param fetchFn
* @param options
*/
export var fetchSSE = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(fetchFn) {
var options,
response,
_options$onCancel,
returnRes,
realResponse,
_options$onErrorHandl,
chatMessageError,
data,
reader,
decoder,
done,
_options$signal,
_options$onFinish,
_yield$reader$read,
value,
doneReading,
_options$onMessageHan,
chunkValue,
_options$onFinish2,
_options$onErrorHandl2,
_args2 = arguments;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
_context2.next = 3;
return fetchFn();
case 3:
response = _context2.sent;
if (response) {
_context2.next = 7;
break;
}
(_options$onCancel = options.onCancel) === null || _options$onCancel === void 0 || _options$onCancel.call(options);
return _context2.abrupt("return");
case 7:
returnRes = null;
realResponse = null;
if (_typeof(response) === 'object' && 'content' in response) {
returnRes = response === null || response === void 0 ? void 0 : response.content.clone();
realResponse = response === null || response === void 0 ? void 0 : response.content;
} else if (typeof response === 'string') {
returnRes = new Response(response);
realResponse = returnRes;
} else {
returnRes = response === null || response === void 0 ? void 0 : response.clone();
realResponse = response;
}
// 如果不 ok 说明有请求错误
if (realResponse.ok) {
_context2.next = 16;
break;
}
_context2.next = 13;
return getMessageError(realResponse);
case 13:
chatMessageError = _context2.sent;
(_options$onErrorHandl = options.onErrorHandle) === null || _options$onErrorHandl === void 0 || _options$onErrorHandl.call(options, chatMessageError);
return _context2.abrupt("return");
case 16:
data = realResponse.body;
if (data) {
_context2.next = 19;
break;
}
return _context2.abrupt("return");
case 19:
reader = data.getReader();
decoder = new TextDecoder();
done = false;
_context2.prev = 22;
case 23:
if (done) {
_context2.next = 37;
break;
}
if (!((_options$signal = options.signal) !== null && _options$signal !== void 0 && _options$signal.aborted)) {
_context2.next = 27;
break;
}
(_options$onFinish = options.onFinish) === null || _options$onFinish === void 0 || _options$onFinish.call(options, 'abort');
return _context2.abrupt("break", 37);
case 27:
_context2.next = 29;
return reader.read();
case 29:
_yield$reader$read = _context2.sent;
value = _yield$reader$read.value;
doneReading = _yield$reader$read.done;
done = doneReading;
if (value) {
chunkValue = decoder.decode(value, {
stream: !doneReading
});
(_options$onMessageHan = options.onMessageHandle) === null || _options$onMessageHan === void 0 || _options$onMessageHan.call(options, chunkValue, response);
}
if (done) {
(_options$onFinish2 = options.onFinish) === null || _options$onFinish2 === void 0 || _options$onFinish2.call(options, 'done'); // Call onFinish when all data is read.
}
_context2.next = 23;
break;
case 37:
_context2.next = 42;
break;
case 39:
_context2.prev = 39;
_context2.t0 = _context2["catch"](22);
(_options$onErrorHandl2 = options.onErrorHandle) === null || _options$onErrorHandl2 === void 0 || _options$onErrorHandl2.call(options, _context2.t0); // Handle errors that occur during the reading process.
case 42:
return _context2.abrupt("return", returnRes);
case 43:
case "end":
return _context2.stop();
}
}, _callee2, null, [[22, 39]]);
}));
return function fetchSSE(_x2) {
return _ref2.apply(this, arguments);
};
}();