@upstash/qstash 2.6.0 → 2.7.0-canary
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/README.md +7 -9
- package/index.d.mts +168 -68
- package/index.d.ts +168 -68
- package/index.js +184 -144
- package/index.mjs +179 -139
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -13,10 +13,18 @@ var DLQ = class {
|
|
|
13
13
|
* List messages in the dlq
|
|
14
14
|
*/
|
|
15
15
|
async listMessages(options) {
|
|
16
|
+
const filterPayload = {
|
|
17
|
+
..._optionalChain([options, 'optionalAccess', _ => _.filter]),
|
|
18
|
+
topicName: _optionalChain([options, 'optionalAccess', _2 => _2.filter, 'optionalAccess', _3 => _3.urlGroup])
|
|
19
|
+
};
|
|
16
20
|
const messagesPayload = await this.http.request({
|
|
17
21
|
method: "GET",
|
|
18
22
|
path: ["v2", "dlq"],
|
|
19
|
-
query: {
|
|
23
|
+
query: {
|
|
24
|
+
cursor: _optionalChain([options, 'optionalAccess', _4 => _4.cursor]),
|
|
25
|
+
count: _optionalChain([options, 'optionalAccess', _5 => _5.count]),
|
|
26
|
+
...filterPayload
|
|
27
|
+
}
|
|
20
28
|
});
|
|
21
29
|
return {
|
|
22
30
|
messages: messagesPayload.messages.map((message) => {
|
|
@@ -84,8 +92,8 @@ var HttpClient = (_class = class {
|
|
|
84
92
|
attempts: 1,
|
|
85
93
|
backoff: () => 0
|
|
86
94
|
} : {
|
|
87
|
-
attempts: _optionalChain([config, 'access',
|
|
88
|
-
backoff: _nullishCoalesce(_optionalChain([config, 'access',
|
|
95
|
+
attempts: _optionalChain([config, 'access', _6 => _6.retry, 'optionalAccess', _7 => _7.retries]) ? config.retry.retries + 1 : 5,
|
|
96
|
+
backoff: _nullishCoalesce(_optionalChain([config, 'access', _8 => _8.retry, 'optionalAccess', _9 => _9.backoff]), () => ( ((retryCount) => Math.exp(retryCount) * 50)))
|
|
89
97
|
};
|
|
90
98
|
}
|
|
91
99
|
async request(request) {
|
|
@@ -193,6 +201,130 @@ var HttpClient = (_class = class {
|
|
|
193
201
|
}
|
|
194
202
|
}, _class);
|
|
195
203
|
|
|
204
|
+
// src/client/llm/chat.ts
|
|
205
|
+
var Chat = (_class2 = class _Chat {
|
|
206
|
+
|
|
207
|
+
constructor(http) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
|
|
208
|
+
this.http = http;
|
|
209
|
+
}
|
|
210
|
+
static toChatRequest(request) {
|
|
211
|
+
const messages = [];
|
|
212
|
+
messages.push(
|
|
213
|
+
{ role: "system", content: request.system },
|
|
214
|
+
{ role: "user", content: request.user }
|
|
215
|
+
);
|
|
216
|
+
const chatRequest = { ...request, messages };
|
|
217
|
+
return chatRequest;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Calls the Upstash completions api given a ChatRequest.
|
|
221
|
+
*
|
|
222
|
+
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
223
|
+
* if stream is enabled.
|
|
224
|
+
*
|
|
225
|
+
* @param request ChatRequest with messages
|
|
226
|
+
* @returns Chat completion or stream
|
|
227
|
+
*/
|
|
228
|
+
__init3() {this.create = async (request) => {
|
|
229
|
+
if (request.provider.owner === "openai" || request.provider.owner === "custom")
|
|
230
|
+
return this.createThirdParty(request);
|
|
231
|
+
const body = JSON.stringify(request);
|
|
232
|
+
if ("stream" in request && request.stream) {
|
|
233
|
+
return this.http.requestStream({
|
|
234
|
+
path: ["llm", "v1", "chat", "completions"],
|
|
235
|
+
method: "POST",
|
|
236
|
+
headers: {
|
|
237
|
+
"Content-Type": "application/json",
|
|
238
|
+
Connection: "keep-alive",
|
|
239
|
+
Accept: "text/event-stream",
|
|
240
|
+
"Cache-Control": "no-cache"
|
|
241
|
+
},
|
|
242
|
+
body
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
return this.http.request({
|
|
246
|
+
path: ["llm", "v1", "chat", "completions"],
|
|
247
|
+
method: "POST",
|
|
248
|
+
headers: { "Content-Type": "application/json" },
|
|
249
|
+
body
|
|
250
|
+
});
|
|
251
|
+
}}
|
|
252
|
+
/**
|
|
253
|
+
* Calls the Upstash completions api given a ChatRequest.
|
|
254
|
+
*
|
|
255
|
+
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
256
|
+
* if stream is enabled.
|
|
257
|
+
*
|
|
258
|
+
* @param request ChatRequest with messages
|
|
259
|
+
* @returns Chat completion or stream
|
|
260
|
+
*/
|
|
261
|
+
__init4() {this.createThirdParty = async (request) => {
|
|
262
|
+
const { baseUrl, token, owner } = request.provider;
|
|
263
|
+
if (owner === "upstash")
|
|
264
|
+
throw new Error("Upstash is not 3rd party provider!");
|
|
265
|
+
delete request.provider;
|
|
266
|
+
delete request.system;
|
|
267
|
+
const body = JSON.stringify(request);
|
|
268
|
+
if ("stream" in request && request.stream) {
|
|
269
|
+
return this.http.requestStream({
|
|
270
|
+
path: ["v1", "chat", "completions"],
|
|
271
|
+
method: "POST",
|
|
272
|
+
headers: {
|
|
273
|
+
"Content-Type": "application/json",
|
|
274
|
+
Connection: "keep-alive",
|
|
275
|
+
Accept: "text/event-stream",
|
|
276
|
+
"Cache-Control": "no-cache",
|
|
277
|
+
Authorization: `Bearer ${token}`
|
|
278
|
+
},
|
|
279
|
+
body,
|
|
280
|
+
baseUrl
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
return this.http.request({
|
|
284
|
+
path: ["v1", "chat", "completions"],
|
|
285
|
+
method: "POST",
|
|
286
|
+
headers: {
|
|
287
|
+
"Content-Type": "application/json",
|
|
288
|
+
Authorization: `Bearer ${token}`
|
|
289
|
+
},
|
|
290
|
+
body,
|
|
291
|
+
baseUrl
|
|
292
|
+
});
|
|
293
|
+
}}
|
|
294
|
+
/**
|
|
295
|
+
* Calls the Upstash completions api given a PromptRequest.
|
|
296
|
+
*
|
|
297
|
+
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
298
|
+
* if stream is enabled.
|
|
299
|
+
*
|
|
300
|
+
* @param request PromptRequest with system and user messages.
|
|
301
|
+
* Note that system parameter shouldn't be passed in the case of
|
|
302
|
+
* mistralai/Mistral-7B-Instruct-v0.2 model.
|
|
303
|
+
* @returns Chat completion or stream
|
|
304
|
+
*/
|
|
305
|
+
__init5() {this.prompt = async (request) => {
|
|
306
|
+
const chatRequest = _Chat.toChatRequest(request);
|
|
307
|
+
return this.create(chatRequest);
|
|
308
|
+
}}
|
|
309
|
+
}, _class2);
|
|
310
|
+
|
|
311
|
+
// src/client/llm/utils.ts
|
|
312
|
+
function appendLLMOptionsIfNeeded(request, headers) {
|
|
313
|
+
if (_optionalChain([request, 'access', _10 => _10.api, 'optionalAccess', _11 => _11.provider, 'optionalAccess', _12 => _12.owner]) === "upstash") {
|
|
314
|
+
request.api = { name: "llm" };
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (request.api && "provider" in request.api) {
|
|
318
|
+
const provider = request.api.provider;
|
|
319
|
+
if (!_optionalChain([provider, 'optionalAccess', _13 => _13.baseUrl]))
|
|
320
|
+
throw new Error("baseUrl cannot be empty or undefined!");
|
|
321
|
+
if (!provider.token)
|
|
322
|
+
throw new Error("token cannot be empty or undefined!");
|
|
323
|
+
request.url = `${provider.baseUrl}/v1/chat/completion`;
|
|
324
|
+
headers.set("Authorization", `Bearer ${provider.token}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
196
328
|
// src/client/messages.ts
|
|
197
329
|
var Messages = class {
|
|
198
330
|
|
|
@@ -223,30 +355,23 @@ var Messages = class {
|
|
|
223
355
|
parseResponseAsJson: false
|
|
224
356
|
});
|
|
225
357
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
// src/client/llm/utils.ts
|
|
235
|
-
function appendLLMOptions(request, headers) {
|
|
236
|
-
if ("llmProvider" in request) {
|
|
237
|
-
const llmProvider = request.llmProvider;
|
|
238
|
-
if (llmProvider === "openai") {
|
|
239
|
-
const token = _nullishCoalesce(process.env.OPENAI_API_KEY, () => ( request.llmToken));
|
|
240
|
-
request.url = _nullishCoalesce(request.url, () => ( `${PROVIDER_MAP[llmProvider]}/v1/chat/completion`));
|
|
241
|
-
headers.set("Authorization", `Bearer ${token}`);
|
|
242
|
-
}
|
|
243
|
-
if (llmProvider === "togetherai") {
|
|
244
|
-
const token = _nullishCoalesce(process.env.TOGETHER_API_KEY, () => ( request.llmToken));
|
|
245
|
-
request.url = _nullishCoalesce(request.url, () => ( `${PROVIDER_MAP[llmProvider]}/v1/chat/completion`));
|
|
246
|
-
headers.set("Authorization", `Bearer ${token}`);
|
|
247
|
-
}
|
|
358
|
+
async deleteMany(messageIds) {
|
|
359
|
+
const result = await this.http.request({
|
|
360
|
+
method: "DELETE",
|
|
361
|
+
path: ["v2", "messages"],
|
|
362
|
+
headers: { "Content-Type": "application/json" },
|
|
363
|
+
body: JSON.stringify({ messageIds })
|
|
364
|
+
});
|
|
365
|
+
return result.cancelled;
|
|
248
366
|
}
|
|
249
|
-
|
|
367
|
+
async deleteAll() {
|
|
368
|
+
const result = await this.http.request({
|
|
369
|
+
method: "DELETE",
|
|
370
|
+
path: ["v2", "messages"]
|
|
371
|
+
});
|
|
372
|
+
return result.cancelled;
|
|
373
|
+
}
|
|
374
|
+
};
|
|
250
375
|
|
|
251
376
|
// src/client/utils.ts
|
|
252
377
|
var isIgnoredHeader = (header) => {
|
|
@@ -294,7 +419,7 @@ function processHeaders(request) {
|
|
|
294
419
|
return headers;
|
|
295
420
|
}
|
|
296
421
|
function getRequestPath(request) {
|
|
297
|
-
return _nullishCoalesce(_nullishCoalesce(request.url, () => ( request.urlGroup)), () => ( `api/${request.api}`));
|
|
422
|
+
return _nullishCoalesce(_nullishCoalesce(request.url, () => ( request.urlGroup)), () => ( `api/${_optionalChain([request, 'access', _14 => _14.api, 'optionalAccess', _15 => _15.name])}`));
|
|
298
423
|
}
|
|
299
424
|
|
|
300
425
|
// src/client/queue.ts
|
|
@@ -384,7 +509,7 @@ var Queue = class {
|
|
|
384
509
|
async enqueueJSON(request) {
|
|
385
510
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
386
511
|
headers.set("Content-Type", "application/json");
|
|
387
|
-
|
|
512
|
+
appendLLMOptionsIfNeeded(request, headers);
|
|
388
513
|
const response = await this.enqueue({
|
|
389
514
|
...request,
|
|
390
515
|
body: JSON.stringify(request.body),
|
|
@@ -576,116 +701,6 @@ var UrlGroups = class {
|
|
|
576
701
|
}
|
|
577
702
|
};
|
|
578
703
|
|
|
579
|
-
// src/client/llm/chat.ts
|
|
580
|
-
var Chat = (_class2 = class _Chat {
|
|
581
|
-
|
|
582
|
-
constructor(http) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
|
|
583
|
-
this.http = http;
|
|
584
|
-
}
|
|
585
|
-
static toChatRequest(request) {
|
|
586
|
-
const messages = [];
|
|
587
|
-
messages.push(
|
|
588
|
-
{ role: "system", content: request.system },
|
|
589
|
-
{ role: "user", content: request.user }
|
|
590
|
-
);
|
|
591
|
-
const chatRequest = { ...request, messages };
|
|
592
|
-
return chatRequest;
|
|
593
|
-
}
|
|
594
|
-
/**
|
|
595
|
-
* Calls the Upstash completions api given a ChatRequest.
|
|
596
|
-
*
|
|
597
|
-
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
598
|
-
* if stream is enabled.
|
|
599
|
-
*
|
|
600
|
-
* @param request ChatRequest with messages
|
|
601
|
-
* @returns Chat completion or stream
|
|
602
|
-
*/
|
|
603
|
-
__init3() {this.create = async (request) => {
|
|
604
|
-
if (request.provider === "openai" || request.provider === "togetherai")
|
|
605
|
-
return this.createThirdParty(request);
|
|
606
|
-
const body = JSON.stringify(request);
|
|
607
|
-
if ("stream" in request && request.stream) {
|
|
608
|
-
return this.http.requestStream({
|
|
609
|
-
path: ["llm", "v1", "chat", "completions"],
|
|
610
|
-
method: "POST",
|
|
611
|
-
headers: {
|
|
612
|
-
"Content-Type": "application/json",
|
|
613
|
-
Connection: "keep-alive",
|
|
614
|
-
Accept: "text/event-stream",
|
|
615
|
-
"Cache-Control": "no-cache"
|
|
616
|
-
},
|
|
617
|
-
body
|
|
618
|
-
});
|
|
619
|
-
}
|
|
620
|
-
return this.http.request({
|
|
621
|
-
path: ["llm", "v1", "chat", "completions"],
|
|
622
|
-
method: "POST",
|
|
623
|
-
headers: { "Content-Type": "application/json" },
|
|
624
|
-
body
|
|
625
|
-
});
|
|
626
|
-
}}
|
|
627
|
-
/**
|
|
628
|
-
* Calls the Upstash completions api given a ChatRequest.
|
|
629
|
-
*
|
|
630
|
-
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
631
|
-
* if stream is enabled.
|
|
632
|
-
*
|
|
633
|
-
* @param request ChatRequest with messages
|
|
634
|
-
* @returns Chat completion or stream
|
|
635
|
-
*/
|
|
636
|
-
__init4() {this.createThirdParty = async (request) => {
|
|
637
|
-
if (request.provider === "openai" || request.provider === "togetherai") {
|
|
638
|
-
const baseUrl = PROVIDER_MAP[request.provider];
|
|
639
|
-
const llmToken = request.llmToken;
|
|
640
|
-
delete request.llmToken;
|
|
641
|
-
delete request.system;
|
|
642
|
-
delete request.provider;
|
|
643
|
-
const body = JSON.stringify(request);
|
|
644
|
-
if ("stream" in request && request.stream) {
|
|
645
|
-
return this.http.requestStream({
|
|
646
|
-
path: ["v1", "chat", "completions"],
|
|
647
|
-
method: "POST",
|
|
648
|
-
headers: {
|
|
649
|
-
"Content-Type": "application/json",
|
|
650
|
-
Connection: "keep-alive",
|
|
651
|
-
Accept: "text/event-stream",
|
|
652
|
-
"Cache-Control": "no-cache",
|
|
653
|
-
Authorization: `Bearer ${llmToken}`
|
|
654
|
-
},
|
|
655
|
-
body,
|
|
656
|
-
baseUrl
|
|
657
|
-
});
|
|
658
|
-
}
|
|
659
|
-
return this.http.request({
|
|
660
|
-
path: ["v1", "chat", "completions"],
|
|
661
|
-
method: "POST",
|
|
662
|
-
headers: {
|
|
663
|
-
"Content-Type": "application/json",
|
|
664
|
-
Authorization: `Bearer ${llmToken}`
|
|
665
|
-
},
|
|
666
|
-
body,
|
|
667
|
-
baseUrl
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
throw new Error("Could not find any third party provider");
|
|
671
|
-
}}
|
|
672
|
-
/**
|
|
673
|
-
* Calls the Upstash completions api given a PromptRequest.
|
|
674
|
-
*
|
|
675
|
-
* Returns a ChatCompletion or a stream of ChatCompletionChunks
|
|
676
|
-
* if stream is enabled.
|
|
677
|
-
*
|
|
678
|
-
* @param request PromptRequest with system and user messages.
|
|
679
|
-
* Note that system parameter shouldn't be passed in the case of
|
|
680
|
-
* mistralai/Mistral-7B-Instruct-v0.2 model.
|
|
681
|
-
* @returns Chat completion or stream
|
|
682
|
-
*/
|
|
683
|
-
__init5() {this.prompt = async (request) => {
|
|
684
|
-
const chatRequest = _Chat.toChatRequest(request);
|
|
685
|
-
return this.create(chatRequest);
|
|
686
|
-
}}
|
|
687
|
-
}, _class2);
|
|
688
|
-
|
|
689
704
|
// src/client/client.ts
|
|
690
705
|
var Client = class {
|
|
691
706
|
|
|
@@ -734,7 +749,7 @@ var Client = class {
|
|
|
734
749
|
* Create, read, update or delete queues.
|
|
735
750
|
*/
|
|
736
751
|
queue(request) {
|
|
737
|
-
return new Queue(this.http, _optionalChain([request, 'optionalAccess',
|
|
752
|
+
return new Queue(this.http, _optionalChain([request, 'optionalAccess', _16 => _16.queueName]));
|
|
738
753
|
}
|
|
739
754
|
/**
|
|
740
755
|
* Access the Chat API
|
|
@@ -761,7 +776,7 @@ var Client = class {
|
|
|
761
776
|
async publishJSON(request) {
|
|
762
777
|
const headers = prefixHeaders(new Headers(request.headers));
|
|
763
778
|
headers.set("Content-Type", "application/json");
|
|
764
|
-
|
|
779
|
+
appendLLMOptionsIfNeeded(request, headers);
|
|
765
780
|
const response = await this.publish({
|
|
766
781
|
...request,
|
|
767
782
|
headers,
|
|
@@ -803,7 +818,7 @@ var Client = class {
|
|
|
803
818
|
message.body = JSON.stringify(message.body);
|
|
804
819
|
}
|
|
805
820
|
message.headers = new Headers(message.headers);
|
|
806
|
-
|
|
821
|
+
appendLLMOptionsIfNeeded(message, message.headers);
|
|
807
822
|
message.headers.set("Content-Type", "application/json");
|
|
808
823
|
}
|
|
809
824
|
const response = await this.batch(request);
|
|
@@ -830,10 +845,10 @@ var Client = class {
|
|
|
830
845
|
*/
|
|
831
846
|
async events(request) {
|
|
832
847
|
const query = {};
|
|
833
|
-
if (_optionalChain([request, 'optionalAccess',
|
|
848
|
+
if (_optionalChain([request, 'optionalAccess', _17 => _17.cursor]) && request.cursor > 0) {
|
|
834
849
|
query.cursor = request.cursor.toString();
|
|
835
850
|
}
|
|
836
|
-
for (const [key, value] of Object.entries(_nullishCoalesce(_optionalChain([request, 'optionalAccess',
|
|
851
|
+
for (const [key, value] of Object.entries(_nullishCoalesce(_optionalChain([request, 'optionalAccess', _18 => _18.filter]), () => ( {})))) {
|
|
837
852
|
if (typeof value === "number" && value < 0) {
|
|
838
853
|
continue;
|
|
839
854
|
}
|
|
@@ -858,6 +873,31 @@ var Client = class {
|
|
|
858
873
|
}
|
|
859
874
|
};
|
|
860
875
|
|
|
876
|
+
// src/client/llm/providers.ts
|
|
877
|
+
var upstash = () => {
|
|
878
|
+
if (!process.env.QSTASH_TOKEN)
|
|
879
|
+
throw new Error("QSTASH_TOKEN cannot be empty or undefined!");
|
|
880
|
+
return {
|
|
881
|
+
owner: "upstash",
|
|
882
|
+
baseUrl: "https://qstash.upstash.io/llm",
|
|
883
|
+
token: process.env.QSTASH_TOKEN
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
var openai = ({
|
|
887
|
+
token
|
|
888
|
+
}) => {
|
|
889
|
+
return { token, owner: "openai", baseUrl: "https://api.openai.com" };
|
|
890
|
+
};
|
|
891
|
+
var custom = ({
|
|
892
|
+
baseUrl,
|
|
893
|
+
token
|
|
894
|
+
}) => {
|
|
895
|
+
return { token, owner: "custom", baseUrl };
|
|
896
|
+
};
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
861
901
|
|
|
862
902
|
|
|
863
903
|
|
|
@@ -868,4 +908,4 @@ var Client = class {
|
|
|
868
908
|
|
|
869
909
|
|
|
870
910
|
|
|
871
|
-
exports.Chat = Chat; exports.Client = Client; exports.Messages = Messages; exports.QstashChatRatelimitError = QstashChatRatelimitError; exports.QstashError = QstashError; exports.QstashRatelimitError = QstashRatelimitError; exports.Receiver = _chunkUUR7N6E6js.Receiver; exports.Schedules = Schedules; exports.SignatureError = _chunkUUR7N6E6js.SignatureError; exports.UrlGroups = UrlGroups;
|
|
911
|
+
exports.Chat = Chat; exports.Client = Client; exports.Messages = Messages; exports.QstashChatRatelimitError = QstashChatRatelimitError; exports.QstashError = QstashError; exports.QstashRatelimitError = QstashRatelimitError; exports.Receiver = _chunkUUR7N6E6js.Receiver; exports.Schedules = Schedules; exports.SignatureError = _chunkUUR7N6E6js.SignatureError; exports.UrlGroups = UrlGroups; exports.custom = custom; exports.openai = openai; exports.upstash = upstash;
|