instantsearch.js 4.87.0 → 4.87.1
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.
- package/cjs/connectors/chat/connectChat.js +4 -4
- package/cjs/index.js +2 -2
- package/cjs/lib/ai-lite/abstract-chat.js +823 -0
- package/cjs/lib/ai-lite/index.js +57 -0
- package/cjs/lib/ai-lite/stream-parser.js +138 -0
- package/cjs/lib/ai-lite/transport.js +218 -0
- package/cjs/lib/ai-lite/types.js +1 -0
- package/cjs/lib/ai-lite/utils.js +85 -0
- package/cjs/lib/chat/chat.js +3 -3
- package/cjs/lib/version.js +1 -1
- package/dist/instantsearch.development.d.ts +1561 -169
- package/dist/instantsearch.development.js +9110 -4563
- package/dist/instantsearch.development.js.map +1 -1
- package/dist/instantsearch.production.d.ts +1561 -169
- package/dist/instantsearch.production.min.d.ts +1561 -169
- package/dist/instantsearch.production.min.js +2 -2
- package/dist/instantsearch.production.min.js.map +1 -1
- package/es/connectors/chat/connectChat.d.ts +14 -14
- package/es/connectors/chat/connectChat.js +1 -1
- package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.d.ts +2 -2
- package/es/connectors/geo-search/connectGeoSearch.d.ts +1 -1
- package/es/connectors/hits/connectHits.d.ts +1 -1
- package/es/connectors/hits/connectHitsWithInsights.d.ts +1 -1
- package/es/connectors/infinite-hits/connectInfiniteHits.d.ts +1 -1
- package/es/connectors/infinite-hits/connectInfiniteHitsWithInsights.d.ts +1 -1
- package/es/connectors/looking-similar/connectLookingSimilar.d.ts +2 -2
- package/es/connectors/related-products/connectRelatedProducts.d.ts +2 -2
- package/es/connectors/trending-items/connectTrendingItems.d.ts +2 -2
- package/es/lib/ai-lite/abstract-chat.d.ts +89 -0
- package/es/lib/ai-lite/abstract-chat.js +818 -0
- package/es/lib/ai-lite/index.d.ts +11 -0
- package/es/lib/ai-lite/index.js +18 -0
- package/es/lib/ai-lite/stream-parser.d.ts +18 -0
- package/es/lib/ai-lite/stream-parser.js +131 -0
- package/es/lib/ai-lite/transport.d.ts +24 -0
- package/es/lib/ai-lite/transport.js +214 -0
- package/es/lib/ai-lite/types.d.ts +362 -0
- package/es/lib/ai-lite/types.js +1 -0
- package/es/lib/ai-lite/utils.d.ts +12 -0
- package/es/lib/ai-lite/utils.js +76 -0
- package/es/lib/chat/chat.d.ts +2 -2
- package/es/lib/chat/chat.js +1 -1
- package/es/lib/version.d.ts +1 -1
- package/es/lib/version.js +1 -1
- package/es/widgets/chat/chat.d.ts +14 -14
- package/es/widgets/filter-suggestions/filter-suggestions.d.ts +5 -5
- package/es/widgets/frequently-bought-together/frequently-bought-together.d.ts +3 -3
- package/es/widgets/geo-search/geo-search.d.ts +1 -1
- package/es/widgets/hits/hits.d.ts +1 -1
- package/es/widgets/infinite-hits/infinite-hits.d.ts +1 -1
- package/es/widgets/looking-similar/looking-similar.d.ts +3 -3
- package/es/widgets/related-products/related-products.d.ts +3 -3
- package/es/widgets/trending-items/trending-items.d.ts +3 -3
- package/package.json +6 -7
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "AbstractChat", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _abstractChat.AbstractChat;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "DefaultChatTransport", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _transport.DefaultChatTransport;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "HttpChatTransport", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _transport.HttpChatTransport;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "SerialJobExecutor", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _utils.SerialJobExecutor;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "generateId", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _utils.generateId;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "lastAssistantMessageIsCompleteWithToolCalls", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _utils.lastAssistantMessageIsCompleteWithToolCalls;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "parseJsonEventStream", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _streamParser.parseJsonEventStream;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
Object.defineProperty(exports, "processStream", {
|
|
49
|
+
enumerable: true,
|
|
50
|
+
get: function get() {
|
|
51
|
+
return _streamParser.processStream;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
var _abstractChat = require("./abstract-chat");
|
|
55
|
+
var _transport = require("./transport");
|
|
56
|
+
var _utils = require("./utils");
|
|
57
|
+
var _streamParser = require("./stream-parser");
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.parseJsonEventStream = parseJsonEventStream;
|
|
7
|
+
exports.processStream = processStream;
|
|
8
|
+
/**
|
|
9
|
+
* Stream parser for parsing SSE (Server-Sent Events) streams.
|
|
10
|
+
* The AI SDK 5 format uses SSE with JSON payloads prefixed by "data: ".
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Parse a stream of bytes as SSE (Server-Sent Events) and convert to UIMessageChunk events.
|
|
15
|
+
* Handles the "data: " prefix used by the AI SDK 5 streaming format.
|
|
16
|
+
*
|
|
17
|
+
* @param stream - The input stream of raw bytes
|
|
18
|
+
* @returns A ReadableStream of parsed UIMessageChunk events
|
|
19
|
+
*/
|
|
20
|
+
function parseJsonEventStream(stream) {
|
|
21
|
+
var decoder = new TextDecoder();
|
|
22
|
+
var buffer = '';
|
|
23
|
+
return new ReadableStream({
|
|
24
|
+
start: function start(controller) {
|
|
25
|
+
var reader = stream.getReader();
|
|
26
|
+
var processChunk = function processChunk() {
|
|
27
|
+
reader.read().then(function (_ref) {
|
|
28
|
+
var done = _ref.done,
|
|
29
|
+
value = _ref.value;
|
|
30
|
+
if (done) {
|
|
31
|
+
// Process any remaining data in the buffer
|
|
32
|
+
if (buffer.trim()) {
|
|
33
|
+
var jsonData = extractJsonFromLine(buffer.trim());
|
|
34
|
+
if (jsonData) {
|
|
35
|
+
try {
|
|
36
|
+
var chunk = JSON.parse(jsonData);
|
|
37
|
+
controller.enqueue(chunk);
|
|
38
|
+
} catch (_unused) {
|
|
39
|
+
// Ignore parsing errors for incomplete data at end
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
controller.close();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Decode the chunk and add to buffer
|
|
48
|
+
buffer += decoder.decode(value, {
|
|
49
|
+
stream: true
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Process complete lines
|
|
53
|
+
var lines = buffer.split('\n');
|
|
54
|
+
// Keep the last potentially incomplete line in the buffer
|
|
55
|
+
buffer = lines.pop() || '';
|
|
56
|
+
for (var i = 0; i < lines.length; i++) {
|
|
57
|
+
var trimmedLine = lines[i].trim();
|
|
58
|
+
// eslint-disable-next-line no-continue
|
|
59
|
+
if (!trimmedLine) continue;
|
|
60
|
+
|
|
61
|
+
// Extract JSON from SSE data line or plain JSON
|
|
62
|
+
var _jsonData = extractJsonFromLine(trimmedLine);
|
|
63
|
+
// eslint-disable-next-line no-continue
|
|
64
|
+
if (!_jsonData) continue;
|
|
65
|
+
try {
|
|
66
|
+
var _chunk = JSON.parse(_jsonData);
|
|
67
|
+
controller.enqueue(_chunk);
|
|
68
|
+
} catch (_unused2) {
|
|
69
|
+
// Skip malformed lines
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Continue reading
|
|
74
|
+
processChunk();
|
|
75
|
+
}, function (error) {
|
|
76
|
+
controller.error(error);
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
processChunk();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Extract JSON data from an SSE line or plain JSON line.
|
|
86
|
+
* Handles both "data: {...}" SSE format and plain "{...}" NDJSON format.
|
|
87
|
+
*/
|
|
88
|
+
function extractJsonFromLine(line) {
|
|
89
|
+
// Handle SSE format: "data: {...}"
|
|
90
|
+
if (line.startsWith('data:')) {
|
|
91
|
+
var data = line.slice(5).trim();
|
|
92
|
+
// Skip SSE stream termination signal
|
|
93
|
+
if (data === '[DONE]') return null;
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Handle plain JSON (NDJSON format)
|
|
98
|
+
if (line.startsWith('{')) {
|
|
99
|
+
return line;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Skip other SSE fields (event:, id:, retry:, etc.)
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Process a ReadableStream using a callback for each value.
|
|
108
|
+
* This is a non-async alternative to for-await-of iteration.
|
|
109
|
+
*/
|
|
110
|
+
function processStream(stream, onChunk, onDone, onError) {
|
|
111
|
+
var reader = stream.getReader();
|
|
112
|
+
var read = function read() {
|
|
113
|
+
reader.read().then(function (_ref2) {
|
|
114
|
+
var done = _ref2.done,
|
|
115
|
+
value = _ref2.value;
|
|
116
|
+
if (done) {
|
|
117
|
+
reader.releaseLock();
|
|
118
|
+
onDone();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
var result = onChunk(value);
|
|
122
|
+
if (result && typeof result.then === 'function') {
|
|
123
|
+
result.then(function () {
|
|
124
|
+
return read();
|
|
125
|
+
}, function (error) {
|
|
126
|
+
reader.releaseLock();
|
|
127
|
+
onError(error);
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
read();
|
|
131
|
+
}
|
|
132
|
+
}, function (error) {
|
|
133
|
+
reader.releaseLock();
|
|
134
|
+
onError(error);
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
read();
|
|
138
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.HttpChatTransport = exports.DefaultChatTransport = void 0;
|
|
7
|
+
var _streamParser = require("./stream-parser");
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
10
|
+
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
|
|
11
|
+
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
|
|
12
|
+
function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
|
|
13
|
+
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
|
|
14
|
+
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
|
|
15
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
16
|
+
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
|
|
17
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
18
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
19
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
20
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
21
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
22
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
23
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
24
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
25
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
26
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
27
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
28
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
29
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
30
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /**
|
|
31
|
+
* HTTP transport implementation for chat.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Abstract base class for HTTP-based chat transports.
|
|
35
|
+
*/
|
|
36
|
+
var HttpChatTransport = exports.HttpChatTransport = /*#__PURE__*/function () {
|
|
37
|
+
function HttpChatTransport(_ref) {
|
|
38
|
+
var _ref$api = _ref.api,
|
|
39
|
+
api = _ref$api === void 0 ? '/api/chat' : _ref$api,
|
|
40
|
+
credentials = _ref.credentials,
|
|
41
|
+
headers = _ref.headers,
|
|
42
|
+
body = _ref.body,
|
|
43
|
+
customFetch = _ref.fetch,
|
|
44
|
+
prepareSendMessagesRequest = _ref.prepareSendMessagesRequest,
|
|
45
|
+
prepareReconnectToStreamRequest = _ref.prepareReconnectToStreamRequest;
|
|
46
|
+
_classCallCheck(this, HttpChatTransport);
|
|
47
|
+
_defineProperty(this, "api", void 0);
|
|
48
|
+
_defineProperty(this, "credentials", void 0);
|
|
49
|
+
_defineProperty(this, "headers", void 0);
|
|
50
|
+
_defineProperty(this, "body", void 0);
|
|
51
|
+
_defineProperty(this, "fetch", void 0);
|
|
52
|
+
_defineProperty(this, "prepareSendMessagesRequest", void 0);
|
|
53
|
+
_defineProperty(this, "prepareReconnectToStreamRequest", void 0);
|
|
54
|
+
this.api = api;
|
|
55
|
+
this.credentials = credentials;
|
|
56
|
+
this.headers = headers;
|
|
57
|
+
this.body = body;
|
|
58
|
+
this.fetch = customFetch;
|
|
59
|
+
this.prepareSendMessagesRequest = prepareSendMessagesRequest;
|
|
60
|
+
this.prepareReconnectToStreamRequest = prepareReconnectToStreamRequest;
|
|
61
|
+
}
|
|
62
|
+
_createClass(HttpChatTransport, [{
|
|
63
|
+
key: "sendMessages",
|
|
64
|
+
value: function sendMessages(_ref2) {
|
|
65
|
+
var _this$fetch,
|
|
66
|
+
_this = this;
|
|
67
|
+
var abortSignal = _ref2.abortSignal,
|
|
68
|
+
chatId = _ref2.chatId,
|
|
69
|
+
messages = _ref2.messages,
|
|
70
|
+
requestMetadata = _ref2.requestMetadata,
|
|
71
|
+
trigger = _ref2.trigger,
|
|
72
|
+
messageId = _ref2.messageId,
|
|
73
|
+
requestHeaders = _ref2.headers,
|
|
74
|
+
requestBody = _ref2.body;
|
|
75
|
+
var fetchFn = (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch;
|
|
76
|
+
|
|
77
|
+
// Resolve configurable values
|
|
78
|
+
return Promise.all([(0, _utils.resolveValue)(this.credentials), (0, _utils.resolveValue)(this.headers), (0, _utils.resolveValue)(this.body)]).then(function (_ref3) {
|
|
79
|
+
var _ref4 = _slicedToArray(_ref3, 3),
|
|
80
|
+
resolvedCredentials = _ref4[0],
|
|
81
|
+
resolvedHeaders = _ref4[1],
|
|
82
|
+
resolvedBody = _ref4[2];
|
|
83
|
+
// Build default request options
|
|
84
|
+
var api = _this.api;
|
|
85
|
+
var body = _objectSpread(_objectSpread({
|
|
86
|
+
id: chatId,
|
|
87
|
+
messages: messages
|
|
88
|
+
}, resolvedBody), requestBody);
|
|
89
|
+
var headers = _objectSpread(_objectSpread({
|
|
90
|
+
'Content-Type': 'application/json'
|
|
91
|
+
}, resolvedHeaders instanceof Headers ? Object.fromEntries(resolvedHeaders.entries()) : resolvedHeaders), requestHeaders instanceof Headers ? Object.fromEntries(requestHeaders.entries()) : requestHeaders);
|
|
92
|
+
var credentials = resolvedCredentials;
|
|
93
|
+
|
|
94
|
+
// Apply custom preparation if provided
|
|
95
|
+
var prepareRequestBody = _objectSpread(_objectSpread({}, resolvedBody), requestBody);
|
|
96
|
+
var preparePromise = _this.prepareSendMessagesRequest ? Promise.resolve(_this.prepareSendMessagesRequest({
|
|
97
|
+
id: chatId,
|
|
98
|
+
messages: messages,
|
|
99
|
+
requestMetadata: requestMetadata,
|
|
100
|
+
body: prepareRequestBody,
|
|
101
|
+
credentials: resolvedCredentials,
|
|
102
|
+
headers: resolvedHeaders,
|
|
103
|
+
api: _this.api,
|
|
104
|
+
trigger: trigger,
|
|
105
|
+
messageId: messageId
|
|
106
|
+
})) : Promise.resolve(null);
|
|
107
|
+
return preparePromise.then(function (prepared) {
|
|
108
|
+
if (prepared) {
|
|
109
|
+
body = prepared.body;
|
|
110
|
+
if (prepared.api) api = prepared.api;
|
|
111
|
+
if (prepared.headers) {
|
|
112
|
+
headers = _objectSpread({
|
|
113
|
+
'Content-Type': 'application/json'
|
|
114
|
+
}, prepared.headers instanceof Headers ? Object.fromEntries(prepared.headers.entries()) : prepared.headers);
|
|
115
|
+
}
|
|
116
|
+
if (prepared.credentials) credentials = prepared.credentials;
|
|
117
|
+
}
|
|
118
|
+
return fetchFn(api, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: headers,
|
|
121
|
+
body: JSON.stringify(body),
|
|
122
|
+
signal: abortSignal,
|
|
123
|
+
credentials: credentials
|
|
124
|
+
}).then(function (response) {
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
throw new Error("HTTP error: ".concat(response.status, " ").concat(response.statusText));
|
|
127
|
+
}
|
|
128
|
+
if (!response.body) {
|
|
129
|
+
throw new Error('Response body is empty');
|
|
130
|
+
}
|
|
131
|
+
return _this.processResponseStream(response.body);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}, {
|
|
137
|
+
key: "reconnectToStream",
|
|
138
|
+
value: function reconnectToStream(_ref5) {
|
|
139
|
+
var _this$fetch2,
|
|
140
|
+
_this2 = this;
|
|
141
|
+
var chatId = _ref5.chatId,
|
|
142
|
+
requestHeaders = _ref5.headers,
|
|
143
|
+
requestBody = _ref5.body;
|
|
144
|
+
var fetchFn = (_this$fetch2 = this.fetch) !== null && _this$fetch2 !== void 0 ? _this$fetch2 : fetch;
|
|
145
|
+
|
|
146
|
+
// Resolve configurable values
|
|
147
|
+
return Promise.all([(0, _utils.resolveValue)(this.credentials), (0, _utils.resolveValue)(this.headers), (0, _utils.resolveValue)(this.body)]).then(function (_ref6) {
|
|
148
|
+
var _ref7 = _slicedToArray(_ref6, 3),
|
|
149
|
+
resolvedCredentials = _ref7[0],
|
|
150
|
+
resolvedHeaders = _ref7[1],
|
|
151
|
+
resolvedBody = _ref7[2];
|
|
152
|
+
// Build default request options
|
|
153
|
+
var api = _this2.api;
|
|
154
|
+
var headers = _objectSpread(_objectSpread({}, resolvedHeaders instanceof Headers ? Object.fromEntries(resolvedHeaders.entries()) : resolvedHeaders), requestHeaders instanceof Headers ? Object.fromEntries(requestHeaders.entries()) : requestHeaders);
|
|
155
|
+
var credentials = resolvedCredentials;
|
|
156
|
+
|
|
157
|
+
// Apply custom preparation if provided
|
|
158
|
+
var prepareRequestBody = _objectSpread(_objectSpread({}, resolvedBody), requestBody);
|
|
159
|
+
var preparePromise = _this2.prepareReconnectToStreamRequest ? Promise.resolve(_this2.prepareReconnectToStreamRequest({
|
|
160
|
+
id: chatId,
|
|
161
|
+
requestMetadata: undefined,
|
|
162
|
+
body: prepareRequestBody,
|
|
163
|
+
credentials: resolvedCredentials,
|
|
164
|
+
headers: resolvedHeaders,
|
|
165
|
+
api: _this2.api
|
|
166
|
+
})) : Promise.resolve(null);
|
|
167
|
+
return preparePromise.then(function (prepared) {
|
|
168
|
+
if (prepared) {
|
|
169
|
+
if (prepared.api) api = prepared.api;
|
|
170
|
+
if (prepared.headers) {
|
|
171
|
+
headers = prepared.headers instanceof Headers ? Object.fromEntries(prepared.headers.entries()) : prepared.headers;
|
|
172
|
+
}
|
|
173
|
+
if (prepared.credentials) credentials = prepared.credentials;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// GET request for reconnection
|
|
177
|
+
return fetchFn("".concat(api, "?chatId=").concat(chatId), {
|
|
178
|
+
method: 'GET',
|
|
179
|
+
headers: headers,
|
|
180
|
+
credentials: credentials
|
|
181
|
+
}).then(function (response) {
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
// 404 means no stream to reconnect to, which is not an error
|
|
184
|
+
if (response.status === 404) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
throw new Error("HTTP error: ".concat(response.status, " ").concat(response.statusText));
|
|
188
|
+
}
|
|
189
|
+
if (!response.body) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
return _this2.processResponseStream(response.body);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}]);
|
|
198
|
+
return HttpChatTransport;
|
|
199
|
+
}();
|
|
200
|
+
/**
|
|
201
|
+
* Default chat transport implementation using NDJSON streaming.
|
|
202
|
+
*/
|
|
203
|
+
var DefaultChatTransport = exports.DefaultChatTransport = /*#__PURE__*/function (_HttpChatTransport) {
|
|
204
|
+
_inherits(DefaultChatTransport, _HttpChatTransport);
|
|
205
|
+
var _super = _createSuper(DefaultChatTransport);
|
|
206
|
+
function DefaultChatTransport() {
|
|
207
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
208
|
+
_classCallCheck(this, DefaultChatTransport);
|
|
209
|
+
return _super.call(this, options);
|
|
210
|
+
}
|
|
211
|
+
_createClass(DefaultChatTransport, [{
|
|
212
|
+
key: "processResponseStream",
|
|
213
|
+
value: function processResponseStream(stream) {
|
|
214
|
+
return (0, _streamParser.parseJsonEventStream)(stream);
|
|
215
|
+
}
|
|
216
|
+
}]);
|
|
217
|
+
return DefaultChatTransport;
|
|
218
|
+
}(HttpChatTransport);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SerialJobExecutor = void 0;
|
|
7
|
+
exports.generateId = generateId;
|
|
8
|
+
exports.lastAssistantMessageIsCompleteWithToolCalls = lastAssistantMessageIsCompleteWithToolCalls;
|
|
9
|
+
exports.resolveValue = resolveValue;
|
|
10
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
11
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
12
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
13
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
15
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
16
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
17
|
+
function generateId() {
|
|
18
|
+
return Math.random().toString(36).substring(2, 9);
|
|
19
|
+
}
|
|
20
|
+
function isToolOrDynamicToolUIPart(part) {
|
|
21
|
+
if (_typeof(part) !== 'object' || part === null) return false;
|
|
22
|
+
var p = part;
|
|
23
|
+
return typeof p.type === 'string' && (p.type.startsWith('tool-') || p.type === 'dynamic-tool');
|
|
24
|
+
}
|
|
25
|
+
function lastAssistantMessageIsCompleteWithToolCalls(_ref) {
|
|
26
|
+
var messages = _ref.messages;
|
|
27
|
+
if (messages.length === 0) return false;
|
|
28
|
+
var lastMessage = messages[messages.length - 1];
|
|
29
|
+
if (lastMessage.role !== 'assistant') return false;
|
|
30
|
+
if (!lastMessage.parts || lastMessage.parts.length === 0) return false;
|
|
31
|
+
var toolParts = lastMessage.parts.filter(isToolOrDynamicToolUIPart);
|
|
32
|
+
if (toolParts.length === 0) return false;
|
|
33
|
+
return toolParts.every(function (part) {
|
|
34
|
+
return part.state === 'output-available' || part.state === 'output-error';
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
var SerialJobExecutor = exports.SerialJobExecutor = /*#__PURE__*/function () {
|
|
38
|
+
function SerialJobExecutor() {
|
|
39
|
+
_classCallCheck(this, SerialJobExecutor);
|
|
40
|
+
_defineProperty(this, "queue", []);
|
|
41
|
+
_defineProperty(this, "isRunning", false);
|
|
42
|
+
}
|
|
43
|
+
_createClass(SerialJobExecutor, [{
|
|
44
|
+
key: "run",
|
|
45
|
+
value: function run(job) {
|
|
46
|
+
var _this = this;
|
|
47
|
+
return new Promise(function (resolve, reject) {
|
|
48
|
+
_this.queue.push(function () {
|
|
49
|
+
return job().then(function (result) {
|
|
50
|
+
resolve(result);
|
|
51
|
+
}, function (error) {
|
|
52
|
+
reject(error);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
_this.processQueue();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}, {
|
|
59
|
+
key: "processQueue",
|
|
60
|
+
value: function processQueue() {
|
|
61
|
+
var _this2 = this;
|
|
62
|
+
if (this.isRunning) return;
|
|
63
|
+
this.isRunning = true;
|
|
64
|
+
var processNext = function processNext() {
|
|
65
|
+
if (_this2.queue.length === 0) {
|
|
66
|
+
_this2.isRunning = false;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
var job = _this2.queue.shift();
|
|
70
|
+
if (job) {
|
|
71
|
+
job().then(processNext, processNext);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
processNext();
|
|
75
|
+
}
|
|
76
|
+
}]);
|
|
77
|
+
return SerialJobExecutor;
|
|
78
|
+
}();
|
|
79
|
+
function resolveValue(value) {
|
|
80
|
+
if (value === undefined) return Promise.resolve(undefined);
|
|
81
|
+
if (typeof value === 'function') {
|
|
82
|
+
return Promise.resolve(value());
|
|
83
|
+
}
|
|
84
|
+
return Promise.resolve(value);
|
|
85
|
+
}
|
package/cjs/lib/chat/chat.js
CHANGED
|
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
Object.defineProperty(exports, "AbstractChat", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function get() {
|
|
9
|
-
return
|
|
9
|
+
return _aiLite.AbstractChat;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.ChatState = exports.Chat = exports.CACHE_KEY = void 0;
|
|
13
|
-
var
|
|
13
|
+
var _aiLite = require("../ai-lite");
|
|
14
14
|
var _excluded = ["messages", "agentId"];
|
|
15
15
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
16
16
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -174,4 +174,4 @@ var Chat = exports.Chat = /*#__PURE__*/function (_AbstractChat) {
|
|
|
174
174
|
return _this2;
|
|
175
175
|
}
|
|
176
176
|
return _createClass(Chat);
|
|
177
|
-
}(
|
|
177
|
+
}(_aiLite.AbstractChat);
|
package/cjs/lib/version.js
CHANGED