@digo-labs/backend 0.2.7 → 0.2.9
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 +1 -1
- package/dist/index.d.cts +110 -30
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Patterns are documented in the design system: [Backend Patterns](https://design.
|
|
|
17
17
|
npm run dev # tsx watch on port 3000
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Requires env vars (`DATABASE_URL_MONOREPO` at minimum; `FAL_KEY` and `REPLICATE_API_TOKEN` for the proxy and AI jobs, `OPENAI_API_KEY` for AI jobs' OpenAI links) — the usual workflow is developing apps against the deployed backend instead, which needs nothing locally. See [Environment and Local Backend](https://design.digo-labs.com/docs/guide/environment-and-local-backend).
|
|
20
|
+
Requires env vars (`DATABASE_URL_MONOREPO` at minimum; `FAL_KEY` and `REPLICATE_API_TOKEN` for the proxy and AI jobs, `OPENAI_API_KEY` for AI jobs' OpenAI links and OpenAI text, `ANTHROPIC_API_KEY` for Anthropic text) — the usual workflow is developing apps against the deployed backend instead, which needs nothing locally. See [Environment and Local Backend](https://design.digo-labs.com/docs/guide/environment-and-local-backend).
|
|
21
21
|
|
|
22
22
|
## Build
|
|
23
23
|
|
package/dist/index.d.cts
CHANGED
|
@@ -247,6 +247,84 @@ declare const bedrockRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_t
|
|
|
247
247
|
id: string;
|
|
248
248
|
version: string;
|
|
249
249
|
} | undefined;
|
|
250
|
+
reasoningEffort?: "max" | "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | undefined;
|
|
251
|
+
thinking?: "adaptive" | "disabled" | "between_tools" | undefined;
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
output: {};
|
|
255
|
+
outputFormat: string;
|
|
256
|
+
status: hono_utils_http_status.StatusCode;
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
}, "/ai">, "/", "/">;
|
|
260
|
+
|
|
261
|
+
declare const anthropicRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.BlankSchema | hono_types.MergeSchemaPath<{
|
|
262
|
+
"anthropic-text": {
|
|
263
|
+
$post: {
|
|
264
|
+
input: {
|
|
265
|
+
json: {
|
|
266
|
+
messages: {
|
|
267
|
+
role: "user" | "assistant";
|
|
268
|
+
content: string | ({
|
|
269
|
+
type: "text";
|
|
270
|
+
text: string;
|
|
271
|
+
} | {
|
|
272
|
+
type: "image";
|
|
273
|
+
source: {
|
|
274
|
+
base64: string;
|
|
275
|
+
mediaType: string;
|
|
276
|
+
};
|
|
277
|
+
})[];
|
|
278
|
+
}[];
|
|
279
|
+
model?: string | undefined;
|
|
280
|
+
systemPrompt?: string | undefined;
|
|
281
|
+
temperature?: number | undefined;
|
|
282
|
+
maxTokens?: number | undefined;
|
|
283
|
+
stopSequences?: string[] | undefined;
|
|
284
|
+
guardrail?: {
|
|
285
|
+
id: string;
|
|
286
|
+
version: string;
|
|
287
|
+
} | undefined;
|
|
288
|
+
reasoningEffort?: "max" | "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | undefined;
|
|
289
|
+
thinking?: "adaptive" | "disabled" | "between_tools" | undefined;
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
output: {};
|
|
293
|
+
outputFormat: string;
|
|
294
|
+
status: hono_utils_http_status.StatusCode;
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
}, "/ai">, "/", "/">;
|
|
298
|
+
|
|
299
|
+
declare const openAiRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.BlankSchema | hono_types.MergeSchemaPath<{
|
|
300
|
+
"openai-text": {
|
|
301
|
+
$post: {
|
|
302
|
+
input: {
|
|
303
|
+
json: {
|
|
304
|
+
messages: ({
|
|
305
|
+
content: string | ({
|
|
306
|
+
type: "text";
|
|
307
|
+
text: string;
|
|
308
|
+
} | {
|
|
309
|
+
type: "image";
|
|
310
|
+
source: {
|
|
311
|
+
base64: string;
|
|
312
|
+
mediaType: string;
|
|
313
|
+
};
|
|
314
|
+
})[];
|
|
315
|
+
role: "user";
|
|
316
|
+
} | {
|
|
317
|
+
role: "assistant";
|
|
318
|
+
content: string | {
|
|
319
|
+
type: "text";
|
|
320
|
+
text: string;
|
|
321
|
+
}[];
|
|
322
|
+
})[];
|
|
323
|
+
systemPrompt?: string | undefined;
|
|
324
|
+
temperature?: number | undefined;
|
|
325
|
+
reasoningEffort?: "max" | "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | undefined;
|
|
326
|
+
model?: "gpt-6-luna" | "gpt-6.1-terra" | "gpt-6.1-sol" | undefined;
|
|
327
|
+
maxTokens?: number | undefined;
|
|
250
328
|
};
|
|
251
329
|
};
|
|
252
330
|
output: {};
|
|
@@ -365,7 +443,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
365
443
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
366
444
|
verdict: "reject" | "review" | "pass" | null;
|
|
367
445
|
checks: {
|
|
368
|
-
type: "
|
|
446
|
+
type: "bedrock" | "rekognition";
|
|
369
447
|
target: string;
|
|
370
448
|
verdict: "reject" | "review" | "pass";
|
|
371
449
|
labels: string[];
|
|
@@ -374,13 +452,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
374
452
|
}[];
|
|
375
453
|
tasks: {
|
|
376
454
|
key: string;
|
|
377
|
-
endpoint: "
|
|
455
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
378
456
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
379
457
|
attempt: number;
|
|
380
458
|
outputPath: string;
|
|
381
459
|
verdict: "reject" | "review" | "pass" | null;
|
|
382
460
|
checks: {
|
|
383
|
-
type: "
|
|
461
|
+
type: "bedrock" | "rekognition";
|
|
384
462
|
target: string;
|
|
385
463
|
verdict: "reject" | "review" | "pass";
|
|
386
464
|
labels: string[];
|
|
@@ -389,7 +467,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
389
467
|
}[];
|
|
390
468
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
391
469
|
estimatedUsd: number;
|
|
392
|
-
servedBy?: "
|
|
470
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
393
471
|
}[];
|
|
394
472
|
createdAt: string;
|
|
395
473
|
updatedAt: string;
|
|
@@ -407,14 +485,14 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
407
485
|
key: string;
|
|
408
486
|
tasks: {
|
|
409
487
|
key: string;
|
|
410
|
-
endpoint: "
|
|
488
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
411
489
|
input: Record<string, unknown>;
|
|
412
490
|
output: {
|
|
413
491
|
path: string;
|
|
414
492
|
};
|
|
415
493
|
priority?: number | undefined;
|
|
416
494
|
fallbacks?: {
|
|
417
|
-
endpoint: "
|
|
495
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
418
496
|
input?: Record<string, unknown> | undefined;
|
|
419
497
|
}[] | undefined;
|
|
420
498
|
fallbackAfter?: number | undefined;
|
|
@@ -498,7 +576,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
498
576
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
499
577
|
verdict: "reject" | "review" | "pass" | null;
|
|
500
578
|
checks: {
|
|
501
|
-
type: "
|
|
579
|
+
type: "bedrock" | "rekognition";
|
|
502
580
|
target: string;
|
|
503
581
|
verdict: "reject" | "review" | "pass";
|
|
504
582
|
labels: string[];
|
|
@@ -507,13 +585,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
507
585
|
}[];
|
|
508
586
|
tasks: {
|
|
509
587
|
key: string;
|
|
510
|
-
endpoint: "
|
|
588
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
511
589
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
512
590
|
attempt: number;
|
|
513
591
|
outputPath: string;
|
|
514
592
|
verdict: "reject" | "review" | "pass" | null;
|
|
515
593
|
checks: {
|
|
516
|
-
type: "
|
|
594
|
+
type: "bedrock" | "rekognition";
|
|
517
595
|
target: string;
|
|
518
596
|
verdict: "reject" | "review" | "pass";
|
|
519
597
|
labels: string[];
|
|
@@ -522,7 +600,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
522
600
|
}[];
|
|
523
601
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
524
602
|
estimatedUsd: number;
|
|
525
|
-
servedBy?: "
|
|
603
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
526
604
|
}[];
|
|
527
605
|
createdAt: string;
|
|
528
606
|
updatedAt: string;
|
|
@@ -540,14 +618,14 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
540
618
|
id: string;
|
|
541
619
|
tasks: {
|
|
542
620
|
key: string;
|
|
543
|
-
endpoint: "
|
|
621
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
544
622
|
input: Record<string, unknown>;
|
|
545
623
|
output: {
|
|
546
624
|
path: string;
|
|
547
625
|
};
|
|
548
626
|
priority?: number | undefined;
|
|
549
627
|
fallbacks?: {
|
|
550
|
-
endpoint: "
|
|
628
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
551
629
|
input?: Record<string, unknown> | undefined;
|
|
552
630
|
}[] | undefined;
|
|
553
631
|
fallbackAfter?: number | undefined;
|
|
@@ -561,7 +639,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
561
639
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
562
640
|
verdict: "reject" | "review" | "pass" | null;
|
|
563
641
|
checks: {
|
|
564
|
-
type: "
|
|
642
|
+
type: "bedrock" | "rekognition";
|
|
565
643
|
target: string;
|
|
566
644
|
verdict: "reject" | "review" | "pass";
|
|
567
645
|
labels: string[];
|
|
@@ -570,13 +648,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
570
648
|
}[];
|
|
571
649
|
tasks: {
|
|
572
650
|
key: string;
|
|
573
|
-
endpoint: "
|
|
651
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
574
652
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
575
653
|
attempt: number;
|
|
576
654
|
outputPath: string;
|
|
577
655
|
verdict: "reject" | "review" | "pass" | null;
|
|
578
656
|
checks: {
|
|
579
|
-
type: "
|
|
657
|
+
type: "bedrock" | "rekognition";
|
|
580
658
|
target: string;
|
|
581
659
|
verdict: "reject" | "review" | "pass";
|
|
582
660
|
labels: string[];
|
|
@@ -585,7 +663,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
585
663
|
}[];
|
|
586
664
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
587
665
|
estimatedUsd: number;
|
|
588
|
-
servedBy?: "
|
|
666
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
589
667
|
}[];
|
|
590
668
|
createdAt: string;
|
|
591
669
|
updatedAt: string;
|
|
@@ -641,7 +719,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
641
719
|
output: {
|
|
642
720
|
verdict: "reject" | "review" | "pass";
|
|
643
721
|
checks: {
|
|
644
|
-
type: "
|
|
722
|
+
type: "bedrock" | "rekognition";
|
|
645
723
|
target: string;
|
|
646
724
|
verdict: "reject" | "review" | "pass";
|
|
647
725
|
labels: string[];
|
|
@@ -668,7 +746,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
668
746
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
669
747
|
verdict: "reject" | "review" | "pass" | null;
|
|
670
748
|
checks: {
|
|
671
|
-
type: "
|
|
749
|
+
type: "bedrock" | "rekognition";
|
|
672
750
|
target: string;
|
|
673
751
|
verdict: "reject" | "review" | "pass";
|
|
674
752
|
labels: string[];
|
|
@@ -677,13 +755,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
677
755
|
}[];
|
|
678
756
|
tasks: {
|
|
679
757
|
key: string;
|
|
680
|
-
endpoint: "
|
|
758
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
681
759
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
682
760
|
attempt: number;
|
|
683
761
|
outputPath: string;
|
|
684
762
|
verdict: "reject" | "review" | "pass" | null;
|
|
685
763
|
checks: {
|
|
686
|
-
type: "
|
|
764
|
+
type: "bedrock" | "rekognition";
|
|
687
765
|
target: string;
|
|
688
766
|
verdict: "reject" | "review" | "pass";
|
|
689
767
|
labels: string[];
|
|
@@ -692,7 +770,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
692
770
|
}[];
|
|
693
771
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
694
772
|
estimatedUsd: number;
|
|
695
|
-
servedBy?: "
|
|
773
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
696
774
|
}[];
|
|
697
775
|
createdAt: string;
|
|
698
776
|
updatedAt: string;
|
|
@@ -717,7 +795,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
717
795
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
718
796
|
verdict: "reject" | "review" | "pass" | null;
|
|
719
797
|
checks: {
|
|
720
|
-
type: "
|
|
798
|
+
type: "bedrock" | "rekognition";
|
|
721
799
|
target: string;
|
|
722
800
|
verdict: "reject" | "review" | "pass";
|
|
723
801
|
labels: string[];
|
|
@@ -726,13 +804,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
726
804
|
}[];
|
|
727
805
|
tasks: {
|
|
728
806
|
key: string;
|
|
729
|
-
endpoint: "
|
|
807
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
730
808
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
731
809
|
attempt: number;
|
|
732
810
|
outputPath: string;
|
|
733
811
|
verdict: "reject" | "review" | "pass" | null;
|
|
734
812
|
checks: {
|
|
735
|
-
type: "
|
|
813
|
+
type: "bedrock" | "rekognition";
|
|
736
814
|
target: string;
|
|
737
815
|
verdict: "reject" | "review" | "pass";
|
|
738
816
|
labels: string[];
|
|
@@ -741,7 +819,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
741
819
|
}[];
|
|
742
820
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
743
821
|
estimatedUsd: number;
|
|
744
|
-
servedBy?: "
|
|
822
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
745
823
|
}[];
|
|
746
824
|
createdAt: string;
|
|
747
825
|
updatedAt: string;
|
|
@@ -770,7 +848,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
770
848
|
status: "checking" | "running" | "done" | "rejected" | "failed" | "cancelled";
|
|
771
849
|
verdict: "reject" | "review" | "pass" | null;
|
|
772
850
|
checks: {
|
|
773
|
-
type: "
|
|
851
|
+
type: "bedrock" | "rekognition";
|
|
774
852
|
target: string;
|
|
775
853
|
verdict: "reject" | "review" | "pass";
|
|
776
854
|
labels: string[];
|
|
@@ -779,13 +857,13 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
779
857
|
}[];
|
|
780
858
|
tasks: {
|
|
781
859
|
key: string;
|
|
782
|
-
endpoint: "
|
|
860
|
+
endpoint: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}`;
|
|
783
861
|
status: "done" | "rejected" | "failed" | "cancelled" | "pending" | "submitted" | "saving";
|
|
784
862
|
attempt: number;
|
|
785
863
|
outputPath: string;
|
|
786
864
|
verdict: "reject" | "review" | "pass" | null;
|
|
787
865
|
checks: {
|
|
788
|
-
type: "
|
|
866
|
+
type: "bedrock" | "rekognition";
|
|
789
867
|
target: string;
|
|
790
868
|
verdict: "reject" | "review" | "pass";
|
|
791
869
|
labels: string[];
|
|
@@ -794,7 +872,7 @@ declare const aiJobsRouter: hono_hono_base.HonoBase<hono_types.BlankEnv, ((({
|
|
|
794
872
|
}[];
|
|
795
873
|
error: "submit failed" | "provider error" | "provider timed out" | "save failed" | null;
|
|
796
874
|
estimatedUsd: number;
|
|
797
|
-
servedBy?: "
|
|
875
|
+
servedBy?: "fake:echo" | `openai:${string}` | `fal:${string}` | `replicate:${string}` | null | undefined;
|
|
798
876
|
}[];
|
|
799
877
|
createdAt: string;
|
|
800
878
|
updatedAt: string;
|
|
@@ -1059,9 +1137,11 @@ type DmxRouter = typeof dmxRouter;
|
|
|
1059
1137
|
type StorageRouter = typeof storageRouter;
|
|
1060
1138
|
type DatabaseRouter = typeof databaseRouter;
|
|
1061
1139
|
type BedrockRouter = typeof bedrockRouter;
|
|
1140
|
+
type AnthropicRouter = typeof anthropicRouter;
|
|
1141
|
+
type OpenAiRouter = typeof openAiRouter;
|
|
1062
1142
|
type DevicesRouter = typeof devicesRouter;
|
|
1063
1143
|
type AiJobsRouter = typeof aiJobsRouter;
|
|
1064
1144
|
type RealtimeRouter = typeof realtimeRouter;
|
|
1065
1145
|
type InstancesRouter = typeof instancesRouter;
|
|
1066
1146
|
|
|
1067
|
-
export { type AiJobsRouter, type BedrockRouter, type DatabaseRouter, type DevicesRouter, type DmxRouter, type InstancesRouter, type RealtimeRouter, type StorageRouter, app as default };
|
|
1147
|
+
export { type AiJobsRouter, type AnthropicRouter, type BedrockRouter, type DatabaseRouter, type DevicesRouter, type DmxRouter, type InstancesRouter, type OpenAiRouter, type RealtimeRouter, type StorageRouter, app as default };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digo-labs/backend",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"types": "./dist/index.d.cts",
|
|
@@ -38,9 +38,10 @@
|
|
|
38
38
|
]
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@digo-labs/common": "^0.2.
|
|
41
|
+
"@digo-labs/common": "^0.2.17"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
+
"@anthropic-ai/sdk": "^1.6.0",
|
|
44
45
|
"@aws-sdk/client-bedrock-runtime": "^3.1035.0",
|
|
45
46
|
"@aws-sdk/client-rekognition": "^3.1078.0",
|
|
46
47
|
"@aws-sdk/client-s3": "^3.1032.0",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"dotenv": "^17.2.3",
|
|
55
56
|
"drizzle-orm": "^0.45.2",
|
|
56
57
|
"hono": "^4.9.8",
|
|
58
|
+
"openai": "^7.55.0",
|
|
57
59
|
"pg": "^8.20.0"
|
|
58
60
|
},
|
|
59
61
|
"devDependencies": {
|