@brotu/ai 0.1.0 → 0.2.0
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/CATALOG.md +154 -2
- package/LICENSE +1 -1
- package/README.md +202 -58
- package/dist/adapters/google.adapter.d.ts +4 -2
- package/dist/adapters/google.adapter.d.ts.map +1 -1
- package/dist/adapters/openai.adapter.d.ts +2 -1
- package/dist/adapters/openai.adapter.d.ts.map +1 -1
- package/dist/catalog.cjs +114 -17
- package/dist/catalog.js +1 -1
- package/dist/{chunk-GKLTQ55S.js → chunk-PL534BFN.js} +118 -17
- package/dist/index.cjs +356 -32
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +243 -16
- package/dist/providers/google.models.d.ts +23 -0
- package/dist/providers/google.models.d.ts.map +1 -1
- package/dist/providers/openai.models.d.ts +7 -0
- package/dist/providers/openai.models.d.ts.map +1 -1
- package/package.json +6 -2
package/dist/index.js
CHANGED
|
@@ -5,8 +5,11 @@ import {
|
|
|
5
5
|
ELEVENLABS_CATALOG,
|
|
6
6
|
ELEVENLABS_MODELS,
|
|
7
7
|
ELEVENLABS_OUTPUT_FORMATS,
|
|
8
|
+
GOOGLE_AUDIO_MODELS,
|
|
8
9
|
GOOGLE_CATALOG,
|
|
9
10
|
GOOGLE_IMAGE_MODELS,
|
|
11
|
+
GOOGLE_TEXT_MODELS,
|
|
12
|
+
GOOGLE_TTS_VOICES,
|
|
10
13
|
GOOGLE_VIDEO_MODELS,
|
|
11
14
|
KLING_AUDIO_MODEL,
|
|
12
15
|
KLING_CAPABILITIES,
|
|
@@ -15,6 +18,7 @@ import {
|
|
|
15
18
|
KLING_VOICES,
|
|
16
19
|
OPENAI_CATALOG,
|
|
17
20
|
OPENAI_IMAGE_MODELS,
|
|
21
|
+
OPENAI_TEXT_MODELS,
|
|
18
22
|
QWEN_AUDIO_MODELS,
|
|
19
23
|
QWEN_CATALOG,
|
|
20
24
|
QWEN_IMAGE_MODELS,
|
|
@@ -31,7 +35,7 @@ import {
|
|
|
31
35
|
resetCatalog,
|
|
32
36
|
resolveProvider,
|
|
33
37
|
videoPathFor
|
|
34
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-PL534BFN.js";
|
|
35
39
|
|
|
36
40
|
// src/lib/jobs.ts
|
|
37
41
|
import { AsyncLocalStorage } from "async_hooks";
|
|
@@ -582,7 +586,12 @@ var POLL_INTERVAL_MS2 = 1e4;
|
|
|
582
586
|
var DEFAULT_MAX_POLL_ATTEMPTS2 = 120;
|
|
583
587
|
var GoogleAdapter = class {
|
|
584
588
|
providerName = "google";
|
|
585
|
-
supportedTypes = [
|
|
589
|
+
supportedTypes = [
|
|
590
|
+
"image",
|
|
591
|
+
"video",
|
|
592
|
+
"text",
|
|
593
|
+
"audio"
|
|
594
|
+
];
|
|
586
595
|
opts;
|
|
587
596
|
constructor(opts) {
|
|
588
597
|
this.opts = opts;
|
|
@@ -904,17 +913,143 @@ var GoogleAdapter = class {
|
|
|
904
913
|
generateVideo(params) {
|
|
905
914
|
return this.runVideo(params);
|
|
906
915
|
}
|
|
907
|
-
|
|
908
|
-
|
|
916
|
+
textBody(modelId, params) {
|
|
917
|
+
const input = [
|
|
918
|
+
{ type: "text", text: params.prompt }
|
|
919
|
+
];
|
|
920
|
+
for (const image of params.referenceImages ?? []) {
|
|
921
|
+
const [meta, data] = image.split(",");
|
|
922
|
+
input.push({
|
|
923
|
+
type: "image",
|
|
924
|
+
mime_type: meta?.match(/data:([^;]+)/)?.[1] ?? "image/png",
|
|
925
|
+
data: data ?? image
|
|
926
|
+
});
|
|
927
|
+
}
|
|
928
|
+
return {
|
|
929
|
+
model: modelId,
|
|
930
|
+
input,
|
|
931
|
+
...params.systemPrompt ? { instructions: params.systemPrompt } : {},
|
|
932
|
+
generation_config: {
|
|
933
|
+
...params.maxTokens ? { max_output_tokens: params.maxTokens } : {},
|
|
934
|
+
...params.temperature !== void 0 ? { temperature: params.temperature } : {},
|
|
935
|
+
...params.topP !== void 0 ? { top_p: params.topP } : {}
|
|
936
|
+
},
|
|
937
|
+
...params.providerOptions?.google ?? {}
|
|
938
|
+
};
|
|
909
939
|
}
|
|
910
|
-
|
|
911
|
-
|
|
940
|
+
speechBody(modelId, params, voice) {
|
|
941
|
+
return {
|
|
942
|
+
model: modelId,
|
|
943
|
+
input: params.prompt,
|
|
944
|
+
response_format: { type: "audio" },
|
|
945
|
+
generation_config: {
|
|
946
|
+
speech_config: [{ voice }]
|
|
947
|
+
},
|
|
948
|
+
...params.providerOptions?.google ?? {}
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
async generateText(params) {
|
|
952
|
+
const startedAt = Date.now();
|
|
953
|
+
const modelId = params.model ?? "";
|
|
954
|
+
const failure = (error) => ({
|
|
955
|
+
success: false,
|
|
956
|
+
outputs: [],
|
|
957
|
+
creditsUsed: 0,
|
|
958
|
+
provider: this.providerName,
|
|
959
|
+
model: modelId,
|
|
960
|
+
processingTimeMs: Date.now() - startedAt,
|
|
961
|
+
error
|
|
962
|
+
});
|
|
963
|
+
if (!(modelId in GOOGLE_TEXT_MODELS)) {
|
|
964
|
+
return failure(
|
|
965
|
+
`"${modelId}" is not a Gemini text model. Known: ${Object.keys(GOOGLE_TEXT_MODELS).join(", ")}.`
|
|
966
|
+
);
|
|
967
|
+
}
|
|
968
|
+
try {
|
|
969
|
+
const payload = await this.request(
|
|
970
|
+
INTERACTIONS_PATH,
|
|
971
|
+
{
|
|
972
|
+
method: "POST",
|
|
973
|
+
body: this.textBody(modelId, params)
|
|
974
|
+
}
|
|
975
|
+
);
|
|
976
|
+
const text = payload.output_text ?? payload.steps?.flatMap((step) => step.content ?? []).find((part) => part.type === "text" || part.text)?.text;
|
|
977
|
+
if (!text) return failure("Google returned no text.");
|
|
978
|
+
return {
|
|
979
|
+
success: true,
|
|
980
|
+
outputs: [
|
|
981
|
+
{
|
|
982
|
+
url: `data:text/plain;base64,${Buffer.from(text).toString("base64")}`,
|
|
983
|
+
mimeType: "text/plain",
|
|
984
|
+
raw: { text }
|
|
985
|
+
}
|
|
986
|
+
],
|
|
987
|
+
creditsUsed: 0,
|
|
988
|
+
provider: this.providerName,
|
|
989
|
+
model: modelId,
|
|
990
|
+
processingTimeMs: Date.now() - startedAt
|
|
991
|
+
};
|
|
992
|
+
} catch (error) {
|
|
993
|
+
return failure(error instanceof Error ? error.message : String(error));
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
async generateAudio(params) {
|
|
997
|
+
const startedAt = Date.now();
|
|
998
|
+
const modelId = params.model ?? "";
|
|
999
|
+
const failure = (error) => ({
|
|
1000
|
+
success: false,
|
|
1001
|
+
outputs: [],
|
|
1002
|
+
creditsUsed: 0,
|
|
1003
|
+
provider: this.providerName,
|
|
1004
|
+
model: modelId,
|
|
1005
|
+
processingTimeMs: Date.now() - startedAt,
|
|
1006
|
+
error
|
|
1007
|
+
});
|
|
1008
|
+
const binding = GOOGLE_AUDIO_MODELS[modelId];
|
|
1009
|
+
if (!binding) {
|
|
1010
|
+
return failure(
|
|
1011
|
+
`"${modelId}" is not a Gemini speech model. Known: ${Object.keys(GOOGLE_AUDIO_MODELS).join(", ")}.`
|
|
1012
|
+
);
|
|
1013
|
+
}
|
|
1014
|
+
const voice = params.voice ?? "Kore";
|
|
1015
|
+
if (!binding.voices.includes(voice)) {
|
|
1016
|
+
return failure(
|
|
1017
|
+
`Gemini TTS offers ${GOOGLE_TTS_VOICES.join(", ")}, not "${voice}".`
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
try {
|
|
1021
|
+
const payload = await this.request(
|
|
1022
|
+
INTERACTIONS_PATH,
|
|
1023
|
+
{
|
|
1024
|
+
method: "POST",
|
|
1025
|
+
body: this.speechBody(modelId, params, voice)
|
|
1026
|
+
}
|
|
1027
|
+
);
|
|
1028
|
+
const data = payload.output_audio?.data;
|
|
1029
|
+
if (!data) return failure("Google returned no audio.");
|
|
1030
|
+
return {
|
|
1031
|
+
success: true,
|
|
1032
|
+
outputs: [
|
|
1033
|
+
{
|
|
1034
|
+
url: `data:audio/wav;base64,${data}`,
|
|
1035
|
+
mimeType: "audio/wav",
|
|
1036
|
+
raw: { inline: true, voice }
|
|
1037
|
+
}
|
|
1038
|
+
],
|
|
1039
|
+
creditsUsed: 0,
|
|
1040
|
+
provider: this.providerName,
|
|
1041
|
+
model: modelId,
|
|
1042
|
+
processingTimeMs: Date.now() - startedAt
|
|
1043
|
+
};
|
|
1044
|
+
} catch (error) {
|
|
1045
|
+
return failure(error instanceof Error ? error.message : String(error));
|
|
1046
|
+
}
|
|
912
1047
|
}
|
|
913
1048
|
async estimateCost(type, params) {
|
|
914
1049
|
return estimateFor(this.providerName, type, params);
|
|
915
1050
|
}
|
|
916
1051
|
supportsModel(model) {
|
|
917
|
-
return model in GOOGLE_IMAGE_MODELS || model in GOOGLE_VIDEO_MODELS;
|
|
1052
|
+
return model in GOOGLE_IMAGE_MODELS || model in GOOGLE_VIDEO_MODELS || model in GOOGLE_TEXT_MODELS || model in GOOGLE_AUDIO_MODELS;
|
|
918
1053
|
}
|
|
919
1054
|
getAvailableModels() {
|
|
920
1055
|
return [
|
|
@@ -927,6 +1062,16 @@ var GoogleAdapter = class {
|
|
|
927
1062
|
id,
|
|
928
1063
|
name: id,
|
|
929
1064
|
type: "video"
|
|
1065
|
+
})),
|
|
1066
|
+
...Object.keys(GOOGLE_TEXT_MODELS).map((id) => ({
|
|
1067
|
+
id,
|
|
1068
|
+
name: id,
|
|
1069
|
+
type: "text"
|
|
1070
|
+
})),
|
|
1071
|
+
...Object.keys(GOOGLE_AUDIO_MODELS).map((id) => ({
|
|
1072
|
+
id,
|
|
1073
|
+
name: id,
|
|
1074
|
+
type: "audio"
|
|
930
1075
|
}))
|
|
931
1076
|
];
|
|
932
1077
|
}
|
|
@@ -1283,7 +1428,7 @@ var IMAGES_PATH2 = "/v1/images/generations";
|
|
|
1283
1428
|
var OpenAIAdapter = class {
|
|
1284
1429
|
providerName = "openai";
|
|
1285
1430
|
// No video: the Videos API shuts down on 24 September 2026.
|
|
1286
|
-
supportedTypes = ["image"];
|
|
1431
|
+
supportedTypes = ["image", "text"];
|
|
1287
1432
|
opts;
|
|
1288
1433
|
constructor(opts) {
|
|
1289
1434
|
this.opts = opts;
|
|
@@ -1398,8 +1543,79 @@ var OpenAIAdapter = class {
|
|
|
1398
1543
|
generateAudio(_params) {
|
|
1399
1544
|
throw new Error("OpenAI has no speech synthesis wired up here.");
|
|
1400
1545
|
}
|
|
1401
|
-
|
|
1402
|
-
|
|
1546
|
+
textBody(params) {
|
|
1547
|
+
const content = params.referenceImages?.length ? [
|
|
1548
|
+
{ type: "input_text", text: params.prompt },
|
|
1549
|
+
...params.referenceImages.map((url) => ({
|
|
1550
|
+
type: "input_image",
|
|
1551
|
+
image_url: url
|
|
1552
|
+
}))
|
|
1553
|
+
] : params.prompt;
|
|
1554
|
+
const input = [];
|
|
1555
|
+
if (params.systemPrompt) {
|
|
1556
|
+
input.push({ role: "system", content: params.systemPrompt });
|
|
1557
|
+
}
|
|
1558
|
+
input.push({ role: "user", content });
|
|
1559
|
+
return {
|
|
1560
|
+
model: params.model,
|
|
1561
|
+
input,
|
|
1562
|
+
...params.maxTokens ? { max_output_tokens: params.maxTokens } : {},
|
|
1563
|
+
...params.temperature !== void 0 ? { temperature: params.temperature } : {},
|
|
1564
|
+
...params.topP !== void 0 ? { top_p: params.topP } : {},
|
|
1565
|
+
...params.providerOptions?.openai ?? {}
|
|
1566
|
+
};
|
|
1567
|
+
}
|
|
1568
|
+
async generateText(params) {
|
|
1569
|
+
const startedAt = Date.now();
|
|
1570
|
+
const modelId = params.model ?? "";
|
|
1571
|
+
const failure = (error) => ({
|
|
1572
|
+
success: false,
|
|
1573
|
+
outputs: [],
|
|
1574
|
+
creditsUsed: 0,
|
|
1575
|
+
provider: this.providerName,
|
|
1576
|
+
model: modelId,
|
|
1577
|
+
processingTimeMs: Date.now() - startedAt,
|
|
1578
|
+
error
|
|
1579
|
+
});
|
|
1580
|
+
if (!(modelId in OPENAI_TEXT_MODELS)) {
|
|
1581
|
+
return failure(
|
|
1582
|
+
`"${modelId}" is not an OpenAI text model. Known: ${Object.keys(OPENAI_TEXT_MODELS).join(", ")}.`
|
|
1583
|
+
);
|
|
1584
|
+
}
|
|
1585
|
+
try {
|
|
1586
|
+
const response = await fetch(`${this.baseUrl}/v1/responses`, {
|
|
1587
|
+
method: "POST",
|
|
1588
|
+
headers: {
|
|
1589
|
+
Authorization: `Bearer ${this.opts.apiKey}`,
|
|
1590
|
+
"Content-Type": "application/json",
|
|
1591
|
+
...this.opts.organization ? { "OpenAI-Organization": this.opts.organization } : {}
|
|
1592
|
+
},
|
|
1593
|
+
body: JSON.stringify(this.textBody(params))
|
|
1594
|
+
});
|
|
1595
|
+
const payload = await response.json();
|
|
1596
|
+
if (payload.error) throw new Error(payload.error.message);
|
|
1597
|
+
if (!response.ok) {
|
|
1598
|
+
throw new Error(`OpenAI returned ${response.status}.`);
|
|
1599
|
+
}
|
|
1600
|
+
const text = payload.output_text ?? payload.output?.flatMap((item) => item.content ?? []).find((part) => part.type === "output_text" || part.text)?.text;
|
|
1601
|
+
if (!text) return failure("OpenAI returned no text.");
|
|
1602
|
+
return {
|
|
1603
|
+
success: true,
|
|
1604
|
+
outputs: [
|
|
1605
|
+
{
|
|
1606
|
+
url: `data:text/plain;base64,${Buffer.from(text).toString("base64")}`,
|
|
1607
|
+
mimeType: "text/plain",
|
|
1608
|
+
raw: { text, tokens: payload.usage?.output_tokens }
|
|
1609
|
+
}
|
|
1610
|
+
],
|
|
1611
|
+
creditsUsed: 0,
|
|
1612
|
+
provider: this.providerName,
|
|
1613
|
+
model: modelId,
|
|
1614
|
+
processingTimeMs: Date.now() - startedAt
|
|
1615
|
+
};
|
|
1616
|
+
} catch (error) {
|
|
1617
|
+
return failure(error instanceof Error ? error.message : String(error));
|
|
1618
|
+
}
|
|
1403
1619
|
}
|
|
1404
1620
|
/** Synchronous provider: there is never a queued job to come back to. */
|
|
1405
1621
|
async completeJob(job) {
|
|
@@ -1420,14 +1636,21 @@ var OpenAIAdapter = class {
|
|
|
1420
1636
|
};
|
|
1421
1637
|
}
|
|
1422
1638
|
supportsModel(model) {
|
|
1423
|
-
return model in OPENAI_IMAGE_MODELS;
|
|
1639
|
+
return model in OPENAI_IMAGE_MODELS || model in OPENAI_TEXT_MODELS;
|
|
1424
1640
|
}
|
|
1425
1641
|
getAvailableModels() {
|
|
1426
|
-
return
|
|
1427
|
-
id
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1642
|
+
return [
|
|
1643
|
+
...Object.keys(OPENAI_IMAGE_MODELS).map((id) => ({
|
|
1644
|
+
id,
|
|
1645
|
+
name: id,
|
|
1646
|
+
type: "image"
|
|
1647
|
+
})),
|
|
1648
|
+
...Object.keys(OPENAI_TEXT_MODELS).map((id) => ({
|
|
1649
|
+
id,
|
|
1650
|
+
name: id,
|
|
1651
|
+
type: "text"
|
|
1652
|
+
}))
|
|
1653
|
+
];
|
|
1431
1654
|
}
|
|
1432
1655
|
};
|
|
1433
1656
|
|
|
@@ -2351,8 +2574,11 @@ export {
|
|
|
2351
2574
|
ELEVENLABS_MODELS,
|
|
2352
2575
|
ELEVENLABS_OUTPUT_FORMATS,
|
|
2353
2576
|
ElevenLabsAdapter,
|
|
2577
|
+
GOOGLE_AUDIO_MODELS,
|
|
2354
2578
|
GOOGLE_CATALOG,
|
|
2355
2579
|
GOOGLE_IMAGE_MODELS,
|
|
2580
|
+
GOOGLE_TEXT_MODELS,
|
|
2581
|
+
GOOGLE_TTS_VOICES,
|
|
2356
2582
|
GOOGLE_VIDEO_MODELS,
|
|
2357
2583
|
GoogleAdapter,
|
|
2358
2584
|
KLING_CAPABILITIES,
|
|
@@ -2361,6 +2587,7 @@ export {
|
|
|
2361
2587
|
KlingAdapter,
|
|
2362
2588
|
OPENAI_CATALOG,
|
|
2363
2589
|
OPENAI_IMAGE_MODELS,
|
|
2590
|
+
OPENAI_TEXT_MODELS,
|
|
2364
2591
|
OpenAIAdapter,
|
|
2365
2592
|
PendingJob,
|
|
2366
2593
|
QWEN_AUDIO_MODELS,
|
|
@@ -38,5 +38,28 @@ export interface GoogleVideoBinding {
|
|
|
38
38
|
usdByResolution?: Record<string, number>;
|
|
39
39
|
}
|
|
40
40
|
export declare const GOOGLE_VIDEO_MODELS: Record<string, GoogleVideoBinding>;
|
|
41
|
+
/**
|
|
42
|
+
* Gemini text, through the same Interactions API as images. Rates are USD per
|
|
43
|
+
* million output tokens, list price on the Gemini Developer API paid tier.
|
|
44
|
+
* Promotional intro rates (3.6 / 3.7 through 31 Dec 2026) are what the
|
|
45
|
+
* pricing page shows today; a guess at the 2027 step-up would go stale.
|
|
46
|
+
*/
|
|
47
|
+
export declare const GOOGLE_TEXT_MODELS: Record<string, {
|
|
48
|
+
usdPerMillionOutput?: number;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Official prebuilt voices for Gemini TTS. The Interactions API takes one of
|
|
52
|
+
* these in `generation_config.speech_config[].voice`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const GOOGLE_TTS_VOICES: readonly ["Zephyr", "Puck", "Charon", "Kore", "Fenrir", "Leda", "Orus", "Aoede", "Callirrhoe", "Autonoe", "Enceladus", "Iapetus", "Umbriel", "Algieba", "Despina", "Erinome", "Algenib", "Rasalgethi", "Laomedeia", "Achernar", "Alnilam", "Schedar", "Gacrux", "Pulcherrima", "Achird", "Zubenelgenubi", "Vindemiatrix", "Sadachbia", "Sadaltager", "Sulafat"];
|
|
55
|
+
export type GoogleTtsVoice = (typeof GOOGLE_TTS_VOICES)[number];
|
|
56
|
+
/**
|
|
57
|
+
* Gemini TTS. Audio-only in, audio-only out, on the Interactions API.
|
|
58
|
+
* Token rates are not listed next to the model cards the way Veo is, so
|
|
59
|
+
* the catalog leaves them unset rather than guessing.
|
|
60
|
+
*/
|
|
61
|
+
export declare const GOOGLE_AUDIO_MODELS: Record<string, {
|
|
62
|
+
voices: readonly string[];
|
|
63
|
+
}>;
|
|
41
64
|
export declare const GOOGLE_CATALOG: AIModelConfig[];
|
|
42
65
|
//# sourceMappingURL=google.models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.models.d.ts","sourceRoot":"","sources":["../../src/providers/google.models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,kBAAkB;IAClC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAWlE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,GAAG,EAAE,SAAS,GAAG,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CA0ClE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"google.models.d.ts","sourceRoot":"","sources":["../../src/providers/google.models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,kBAAkB;IAClC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAWlE,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,GAAG,EAAE,SAAS,GAAG,cAAc,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CA0ClE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACtC,MAAM,EACN;IAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,CAYhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,YAC7B,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,YAAY,EACZ,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,CACA,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACvC,MAAM,EACN;IAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAK7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,EA4EzC,CAAC"}
|
|
@@ -23,5 +23,12 @@ export interface OpenAIImageBinding {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
export declare const OPENAI_IMAGE_MODELS: Record<string, OpenAIImageBinding>;
|
|
26
|
+
/**
|
|
27
|
+
* Current GPT-5.6 text ladder, as published on the Models page. Rates are
|
|
28
|
+
* USD per million output tokens on the standard paid tier.
|
|
29
|
+
*/
|
|
30
|
+
export declare const OPENAI_TEXT_MODELS: Record<string, {
|
|
31
|
+
usdPerMillionOutput: number;
|
|
32
|
+
}>;
|
|
26
33
|
export declare const OPENAI_CATALOG: AIModelConfig[];
|
|
27
34
|
//# sourceMappingURL=openai.models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IAClC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACxB,oDAAoD;IACpD,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;IAC5C,8DAA8D;IAC9D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAID,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAuBlE,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"openai.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IAClC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACxB,oDAAoD;IACpD,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC;IAC5C,8DAA8D;IAC9D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAID,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAuBlE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACtC,MAAM,EACN;IAAE,mBAAmB,EAAE,MAAM,CAAA;CAAE,CAK/B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAAa,EAgCzC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brotu/ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"exports": {
|
|
@@ -66,7 +66,11 @@
|
|
|
66
66
|
"module": "./dist/index.js",
|
|
67
67
|
"repository": {
|
|
68
68
|
"type": "git",
|
|
69
|
-
"url": "git+https://github.com/
|
|
69
|
+
"url": "git+https://github.com/Zorbi-Tech/brotu-sdk.git",
|
|
70
70
|
"directory": "sdks/node"
|
|
71
|
+
},
|
|
72
|
+
"homepage": "https://github.com/Zorbi-Tech/brotu-sdk",
|
|
73
|
+
"bugs": {
|
|
74
|
+
"url": "https://github.com/Zorbi-Tech/brotu-sdk/issues"
|
|
71
75
|
}
|
|
72
76
|
}
|