@longline/aqua-ui 1.0.200 → 1.0.201
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.
|
@@ -43,6 +43,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
43
43
|
}
|
|
44
44
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
45
45
|
};
|
|
46
|
+
import axios from 'axios';
|
|
46
47
|
import { useCallback, useRef } from 'react';
|
|
47
48
|
/**
|
|
48
49
|
* Hook to stream OpenAI responses via a backend endpoint that acts as a proxy.
|
|
@@ -51,11 +52,6 @@ import { useCallback, useRef } from 'react';
|
|
|
51
52
|
*/
|
|
52
53
|
var useOpenAIStream = function (url) {
|
|
53
54
|
var abortRef = useRef(null);
|
|
54
|
-
// Get CSRF token, if any, from cookie:
|
|
55
|
-
var getCsrfTokenFromCookie = function () {
|
|
56
|
-
var match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);
|
|
57
|
-
return match ? decodeURIComponent(match[1]) : null;
|
|
58
|
-
};
|
|
59
55
|
/**
|
|
60
56
|
* Streams a prompt to a backend AI endpoint and handles streamed chunks.
|
|
61
57
|
*
|
|
@@ -69,56 +65,55 @@ var useOpenAIStream = function (url) {
|
|
|
69
65
|
}
|
|
70
66
|
return __awaiter(void 0, __spreadArray([prompt_1, onText_1], args_1, true), void 0, function (prompt, onText, options) {
|
|
71
67
|
var controller, response, reader, decoder, buffer, isDone, _a, done, value, parts, _b, parts_1, part, jsonStr, data, content, err_1;
|
|
72
|
-
var _c, _d, _e
|
|
68
|
+
var _c, _d, _e;
|
|
73
69
|
if (options === void 0) { options = { temperature: 0, top_p: 0 }; }
|
|
74
|
-
return __generator(this, function (
|
|
75
|
-
switch (
|
|
70
|
+
return __generator(this, function (_f) {
|
|
71
|
+
switch (_f.label) {
|
|
76
72
|
case 0:
|
|
77
73
|
controller = new AbortController();
|
|
78
74
|
abortRef.current = controller;
|
|
79
|
-
return [4 /*yield*/,
|
|
80
|
-
|
|
75
|
+
return [4 /*yield*/, axios.post(url, {
|
|
76
|
+
input: prompt,
|
|
77
|
+
temperature: options.temperature || 0,
|
|
78
|
+
top_p: options.top_p || 0
|
|
79
|
+
}, {
|
|
80
|
+
signal: controller.signal,
|
|
81
81
|
headers: {
|
|
82
82
|
'Content-Type': 'application/json',
|
|
83
|
-
'X-XSRF-TOKEN': (_c = getCsrfTokenFromCookie()) !== null && _c !== void 0 ? _c : '',
|
|
84
83
|
'Accept': 'text/event-stream',
|
|
85
84
|
'Connection': 'keep-alive',
|
|
86
85
|
'Cache-Control': 'no-cache, no-transform'
|
|
87
86
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
87
|
+
adapter: 'fetch', // Enable fetch adapter for streaming
|
|
88
|
+
responseType: 'stream', // Only works in Node.js. See note below.
|
|
89
|
+
withCredentials: true, // Ensures cookies (including CSRF token) are sent
|
|
90
|
+
}).catch(function (err) {
|
|
91
|
+
console.error("OpenAI stream request failed.", err);
|
|
92
|
+
return;
|
|
94
93
|
})];
|
|
95
94
|
case 1:
|
|
96
|
-
response =
|
|
97
|
-
if (!response.
|
|
98
|
-
console.error("OpenAI stream request failed: ".concat(response.statusText));
|
|
99
|
-
return [2 /*return*/];
|
|
100
|
-
}
|
|
101
|
-
if (!response.body) {
|
|
95
|
+
response = _f.sent();
|
|
96
|
+
if (!response.data) {
|
|
102
97
|
console.error('No response body (ReadableStream) found.');
|
|
103
98
|
return [2 /*return*/];
|
|
104
99
|
}
|
|
105
|
-
reader = response.
|
|
100
|
+
reader = response.data.getReader();
|
|
106
101
|
decoder = new TextDecoder('utf-8');
|
|
107
102
|
buffer = '';
|
|
108
103
|
isDone = false;
|
|
109
|
-
|
|
104
|
+
_f.label = 2;
|
|
110
105
|
case 2:
|
|
111
106
|
if (!!isDone) return [3 /*break*/, 11];
|
|
112
107
|
return [4 /*yield*/, reader.read()];
|
|
113
108
|
case 3:
|
|
114
|
-
_a =
|
|
109
|
+
_a = _f.sent(), done = _a.done, value = _a.value;
|
|
115
110
|
if (done)
|
|
116
111
|
return [3 /*break*/, 11];
|
|
117
112
|
buffer += decoder.decode(value, { stream: true });
|
|
118
113
|
parts = buffer.split('\n\n');
|
|
119
114
|
buffer = parts.pop(); // Keep partial data for next chunk
|
|
120
115
|
_b = 0, parts_1 = parts;
|
|
121
|
-
|
|
116
|
+
_f.label = 4;
|
|
122
117
|
case 4:
|
|
123
118
|
if (!(_b < parts_1.length)) return [3 /*break*/, 10];
|
|
124
119
|
part = parts_1[_b];
|
|
@@ -128,19 +123,19 @@ var useOpenAIStream = function (url) {
|
|
|
128
123
|
isDone = true;
|
|
129
124
|
return [3 /*break*/, 10];
|
|
130
125
|
}
|
|
131
|
-
|
|
126
|
+
_f.label = 5;
|
|
132
127
|
case 5:
|
|
133
|
-
|
|
128
|
+
_f.trys.push([5, 8, , 9]);
|
|
134
129
|
data = JSON.parse(jsonStr);
|
|
135
|
-
content = (
|
|
130
|
+
content = (_e = (_d = (_c = data.choices) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.delta) === null || _e === void 0 ? void 0 : _e.content;
|
|
136
131
|
if (!content) return [3 /*break*/, 7];
|
|
137
132
|
return [4 /*yield*/, onText(content)];
|
|
138
133
|
case 6:
|
|
139
|
-
|
|
140
|
-
|
|
134
|
+
_f.sent();
|
|
135
|
+
_f.label = 7;
|
|
141
136
|
case 7: return [3 /*break*/, 9];
|
|
142
137
|
case 8:
|
|
143
|
-
err_1 =
|
|
138
|
+
err_1 = _f.sent();
|
|
144
139
|
console.error('Failed to parse chunk:', jsonStr);
|
|
145
140
|
return [3 /*break*/, 9];
|
|
146
141
|
case 9:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@longline/aqua-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.201",
|
|
4
4
|
"description": "AquaUI",
|
|
5
5
|
"author": "Alexander van Oostenrijk / Longline Environment",
|
|
6
6
|
"license": "Commercial",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"@types/react": "^18.3.10",
|
|
53
53
|
"@types/react-dom": "^18.3.0",
|
|
54
54
|
"awesome-debounce-promise": "^2.1.0",
|
|
55
|
+
"axios": "^1.10.0",
|
|
55
56
|
"country-flag-emoji-polyfill": "^0.1.8",
|
|
56
57
|
"extendable-media-recorder": "^9.2.26",
|
|
57
58
|
"extendable-media-recorder-wav-encoder": "^7.0.128",
|