@absolutejs/ai 0.2.10 → 0.3.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/CHANGELOG.md +16 -0
- package/changelog.json +368 -331
- package/dist/ai/client/index.js +1 -3
- package/dist/ai/client/index.js.map +2 -2
- package/dist/ai/index.js +7690 -7681
- package/dist/ai/index.js.map +20 -20
- package/dist/ai/models/index.js +1 -71
- package/dist/ai/models/index.js.map +2 -2
- package/dist/ai/providers/anthropic.js +29 -31
- package/dist/ai/providers/anthropic.js.map +3 -3
- package/dist/ai/providers/gemini.js +15 -17
- package/dist/ai/providers/gemini.js.map +3 -3
- package/dist/ai/providers/ollama.js +3 -5
- package/dist/ai/providers/ollama.js.map +2 -2
- package/dist/ai/providers/openai.js +47 -52
- package/dist/ai/providers/openai.js.map +4 -4
- package/dist/ai/providers/openaiCompatible.js +65 -70
- package/dist/ai/providers/openaiCompatible.js.map +4 -4
- package/dist/ai/providers/openaiResponses.js +27 -32
- package/dist/ai/providers/openaiResponses.js.map +4 -4
- package/dist/ai/providers/openrouter.js +131 -136
- package/dist/ai/providers/openrouter.js.map +4 -4
- package/dist/ai/providers/openrouterSDK.js +1 -3
- package/dist/ai/providers/openrouterSDK.js.map +2 -2
- package/dist/ai/research.js +2 -4
- package/dist/ai/research.js.map +2 -2
- package/dist/ai/tools/index.js +55 -58
- package/dist/ai/tools/index.js.map +5 -5
- package/dist/ai/tools/untrusted.js +1 -3
- package/dist/ai/tools/untrusted.js.map +2 -2
- package/dist/ai/ui/index.js +2 -72
- package/dist/ai/ui/index.js.map +2 -2
- package/dist/angular/ai/index.js +1 -1
- package/dist/angular/ai/index.js.map +1 -1
- package/dist/react/ai/index.js +4 -74
- package/dist/react/ai/index.js.map +2 -2
- package/dist/src/ai/generateAI.d.ts +5 -1
- package/dist/src/ai/inputCapacity.d.ts +2 -2
- package/dist/src/ai/streamAIWithTools.d.ts +8 -2
- package/dist/svelte/ai/index.js +1 -71
- package/dist/svelte/ai/index.js.map +2 -2
- package/dist/vue/ai/index.js +1 -71
- package/dist/vue/ai/index.js.map +2 -2
- package/package.json +5 -1
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var __require = import.meta.require;
|
|
3
|
-
|
|
4
2
|
// src/ai/inputCapacity.ts
|
|
5
3
|
class AIInputError extends Error {
|
|
6
4
|
code;
|
|
7
|
-
|
|
5
|
+
providerStatus;
|
|
8
6
|
requestId;
|
|
9
|
-
constructor(code, message,
|
|
7
|
+
constructor(code, message, providerStatus, requestId) {
|
|
10
8
|
super(message);
|
|
11
9
|
this.code = code;
|
|
12
|
-
this.
|
|
10
|
+
this.providerStatus = providerStatus;
|
|
13
11
|
this.requestId = requestId;
|
|
14
12
|
this.name = "AIInputError";
|
|
15
13
|
}
|
|
@@ -33,7 +31,7 @@ var inspectAIInput = async (provider, params) => {
|
|
|
33
31
|
provider.inputCapacity.countTokens(params)
|
|
34
32
|
]).catch((error) => {
|
|
35
33
|
if (error instanceof Error && error.name === "AIInputError" && "code" in error && (error.code === "capacity_unavailable" || error.code === "input_too_large" || error.code === "unsupported_content"))
|
|
36
|
-
throw new AIInputError(error.code, error.message, "
|
|
34
|
+
throw new AIInputError(error.code, error.message, "providerStatus" in error && typeof error.providerStatus === "number" ? error.providerStatus : undefined, "requestId" in error && typeof error.requestId === "string" ? error.requestId : undefined);
|
|
37
35
|
throw error;
|
|
38
36
|
});
|
|
39
37
|
const inputTokens = inputTokenCount(tokens);
|
|
@@ -791,13 +789,13 @@ var compatibleReasoningBody = (provider, model, reasoning) => {
|
|
|
791
789
|
var geminiThinkingConfig = (model, reasoning) => {
|
|
792
790
|
if (!reasoning)
|
|
793
791
|
return;
|
|
794
|
-
const
|
|
792
|
+
const profile = getModelReasoning("google", model);
|
|
795
793
|
const effort = resolveEffort(reasoning);
|
|
796
|
-
if (!
|
|
794
|
+
if (!profile || !effort)
|
|
797
795
|
return;
|
|
798
|
-
if (!
|
|
796
|
+
if (!profile.efforts.includes(effort))
|
|
799
797
|
throw new Error(`Unsupported reasoning effort ${effort} for ${model}`);
|
|
800
|
-
if (
|
|
798
|
+
if (profile.kind === "effort")
|
|
801
799
|
return { thinkingLevel: effort };
|
|
802
800
|
const budgets = {
|
|
803
801
|
none: 0,
|
|
@@ -821,18 +819,15 @@ var mapBlockToResponsesFormat = (block) => {
|
|
|
821
819
|
}
|
|
822
820
|
if (block.type === "image") {
|
|
823
821
|
return {
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
},
|
|
822
|
+
detail: "auto",
|
|
823
|
+
image_url: block.source.type === "url" ? block.source.url : `data:${block.source.media_type};base64,${block.source.data}`,
|
|
827
824
|
type: "input_image"
|
|
828
825
|
};
|
|
829
826
|
}
|
|
830
827
|
if (block.type === "document") {
|
|
831
|
-
return {
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
filename: block.name ?? "document.pdf"
|
|
835
|
-
},
|
|
828
|
+
return block.source.type === "url" ? { file_url: block.source.url, type: "input_file" } : {
|
|
829
|
+
file_data: `data:${block.source.media_type};base64,${block.source.data}`,
|
|
830
|
+
filename: block.name ?? "document.pdf",
|
|
836
831
|
type: "input_file"
|
|
837
832
|
};
|
|
838
833
|
}
|
|
@@ -1317,31 +1312,31 @@ var resolveImageModels = (imageModels) => {
|
|
|
1317
1312
|
}
|
|
1318
1313
|
return new Set(imageModels);
|
|
1319
1314
|
};
|
|
1320
|
-
var openaiResponses = (
|
|
1321
|
-
if (!
|
|
1315
|
+
var openaiResponses = (config) => {
|
|
1316
|
+
if (!config.apiKey && !config.tokenSource)
|
|
1322
1317
|
throw new Error("openaiResponses() requires either apiKey or tokenSource");
|
|
1323
|
-
const baseUrl =
|
|
1324
|
-
const fetchImpl =
|
|
1325
|
-
const imageModels = resolveImageModels(
|
|
1326
|
-
const providerName =
|
|
1327
|
-
const resolveKey = async () =>
|
|
1328
|
-
const resolveHeaders = async (params) => typeof
|
|
1318
|
+
const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
1319
|
+
const fetchImpl = config.fetch ?? globalThis.fetch;
|
|
1320
|
+
const imageModels = resolveImageModels(config.imageModels);
|
|
1321
|
+
const providerName = config.providerName ?? "openai-responses";
|
|
1322
|
+
const resolveKey = async () => config.tokenSource ? await Promise.resolve(config.tokenSource()) : config.apiKey;
|
|
1323
|
+
const resolveHeaders = async (params) => typeof config.headers === "function" ? await config.headers(params) : config.headers ?? {};
|
|
1329
1324
|
return instrumentAIProvider({
|
|
1330
1325
|
inputCapacity: openaiInputCapacity({
|
|
1331
1326
|
baseUrl,
|
|
1332
1327
|
fetch: fetchImpl,
|
|
1333
1328
|
key: resolveKey,
|
|
1334
1329
|
headers: resolveHeaders,
|
|
1335
|
-
modelLimits:
|
|
1330
|
+
modelLimits: config.modelLimits,
|
|
1336
1331
|
body: (params) => {
|
|
1337
|
-
const built = buildResponsesRequestBody(params, imageModels.has(params.model),
|
|
1338
|
-
return
|
|
1332
|
+
const built = buildResponsesRequestBody(params, imageModels.has(params.model), config.modelForCapabilities?.(params.model) ?? params.model);
|
|
1333
|
+
return config.transformRequestBody ? config.transformRequestBody(built, params) : built;
|
|
1339
1334
|
}
|
|
1340
1335
|
}),
|
|
1341
1336
|
stream: (params) => {
|
|
1342
1337
|
const isImageModel = imageModels.has(params.model);
|
|
1343
|
-
const builtBody = buildResponsesRequestBody(params, isImageModel,
|
|
1344
|
-
const body =
|
|
1338
|
+
const builtBody = buildResponsesRequestBody(params, isImageModel, config.modelForCapabilities?.(params.model) ?? params.model);
|
|
1339
|
+
const body = config.transformRequestBody ? config.transformRequestBody(builtBody, params) : builtBody;
|
|
1345
1340
|
return async function* () {
|
|
1346
1341
|
const [apiKey, headers] = await Promise.all([
|
|
1347
1342
|
resolveKey(),
|
|
@@ -1725,12 +1720,12 @@ var processSSELine2 = function* (line, pendingToolCalls, providerName) {
|
|
|
1725
1720
|
}
|
|
1726
1721
|
if (isRecord2(parsed.error)) {
|
|
1727
1722
|
const error = parsed.error;
|
|
1728
|
-
const
|
|
1723
|
+
const metadata = isRecord2(error.metadata) ? error.metadata : undefined;
|
|
1729
1724
|
const status = typeof error.code === "number" ? error.code : null;
|
|
1730
|
-
const type =
|
|
1725
|
+
const type = metadata && typeof metadata.error_type === "string" ? metadata.error_type : typeof error.error_type === "string" ? error.error_type : null;
|
|
1731
1726
|
throw new ProviderError({
|
|
1732
1727
|
message: typeof error.message === "string" ? error.message : "OpenRouter stream failed",
|
|
1733
|
-
metadata
|
|
1728
|
+
metadata,
|
|
1734
1729
|
provider: providerName,
|
|
1735
1730
|
retryable: status === 408 || status === 409 || status === 425 || status === 429 || status !== null && status >= 500,
|
|
1736
1731
|
status,
|
|
@@ -1755,15 +1750,15 @@ var processSSELine2 = function* (line, pendingToolCalls, providerName) {
|
|
|
1755
1750
|
}
|
|
1756
1751
|
if (isRecord2(firstChoice.error)) {
|
|
1757
1752
|
const error = firstChoice.error;
|
|
1758
|
-
const
|
|
1753
|
+
const metadata = isRecord2(error.metadata) ? error.metadata : undefined;
|
|
1759
1754
|
const status = typeof error.code === "number" ? error.code : null;
|
|
1760
1755
|
throw new ProviderError({
|
|
1761
1756
|
message: typeof error.message === "string" ? error.message : "OpenRouter stream failed",
|
|
1762
|
-
metadata
|
|
1757
|
+
metadata,
|
|
1763
1758
|
provider: providerName,
|
|
1764
1759
|
retryable: status === 429 || status !== null && status >= 500,
|
|
1765
1760
|
status,
|
|
1766
|
-
type:
|
|
1761
|
+
type: metadata && typeof metadata.error_type === "string" ? metadata.error_type : null
|
|
1767
1762
|
});
|
|
1768
1763
|
}
|
|
1769
1764
|
yield* processChoice(firstChoice, pendingToolCalls);
|
|
@@ -1862,32 +1857,32 @@ var fetchOpenAIStream = async function* (baseUrl, apiKey, body, fetchImpl, heade
|
|
|
1862
1857
|
}
|
|
1863
1858
|
}, providerName, signal);
|
|
1864
1859
|
};
|
|
1865
|
-
var openai = (
|
|
1866
|
-
const baseUrl =
|
|
1867
|
-
const fetchImpl =
|
|
1868
|
-
const providerName =
|
|
1869
|
-
if (!
|
|
1860
|
+
var openai = (config) => {
|
|
1861
|
+
const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL2;
|
|
1862
|
+
const fetchImpl = config.fetch ?? globalThis.fetch;
|
|
1863
|
+
const providerName = config.providerName ?? "openai";
|
|
1864
|
+
if (!config.apiKey && !config.tokenSource) {
|
|
1870
1865
|
throw new Error("openai() requires either apiKey or tokenSource");
|
|
1871
1866
|
}
|
|
1872
1867
|
const resolveKey = async () => {
|
|
1873
|
-
if (
|
|
1874
|
-
return await Promise.resolve(
|
|
1868
|
+
if (config.tokenSource) {
|
|
1869
|
+
return await Promise.resolve(config.tokenSource());
|
|
1875
1870
|
}
|
|
1876
|
-
return
|
|
1871
|
+
return config.apiKey;
|
|
1877
1872
|
};
|
|
1878
|
-
const resolveHeaders = async (params) => typeof
|
|
1873
|
+
const resolveHeaders = async (params) => typeof config.headers === "function" ? await config.headers(params) : config.headers ?? {};
|
|
1879
1874
|
return instrumentAIProvider({
|
|
1880
|
-
inputCapacity:
|
|
1875
|
+
inputCapacity: config.transformRequestBody ? undefined : openaiInputCapacity({
|
|
1881
1876
|
baseUrl,
|
|
1882
1877
|
fetch: fetchImpl,
|
|
1883
1878
|
key: resolveKey,
|
|
1884
1879
|
headers: resolveHeaders,
|
|
1885
|
-
modelLimits:
|
|
1886
|
-
body: (params) => buildResponsesRequestBody(params, false,
|
|
1880
|
+
modelLimits: config.modelLimits,
|
|
1881
|
+
body: (params) => buildResponsesRequestBody(params, false, config.modelForCapabilities?.(params.model) ?? params.model)
|
|
1887
1882
|
}),
|
|
1888
1883
|
stream: (params) => {
|
|
1889
|
-
const openaiBody = buildRequestBody(params,
|
|
1890
|
-
const body =
|
|
1884
|
+
const openaiBody = buildRequestBody(params, config.modelForCapabilities?.(params.model) ?? params.model, providerName);
|
|
1885
|
+
const body = config.transformRequestBody ? config.transformRequestBody(openaiBody, params) : openaiBody;
|
|
1891
1886
|
return async function* () {
|
|
1892
1887
|
const [apiKey, headers] = await Promise.all([
|
|
1893
1888
|
resolveKey(),
|
|
@@ -1900,37 +1895,37 @@ var openai = (config2) => {
|
|
|
1900
1895
|
};
|
|
1901
1896
|
|
|
1902
1897
|
// src/ai/providers/openaiCompatible.ts
|
|
1903
|
-
var alibaba = (
|
|
1904
|
-
apiKey:
|
|
1898
|
+
var alibaba = (config) => openaiCompatible({
|
|
1899
|
+
apiKey: config.apiKey,
|
|
1905
1900
|
baseUrl: "https://dashscope-intl.aliyuncs.com/compatible-mode"
|
|
1906
1901
|
});
|
|
1907
|
-
var deepseek2 = (
|
|
1908
|
-
apiKey:
|
|
1902
|
+
var deepseek2 = (config) => openaiCompatible({
|
|
1903
|
+
apiKey: config.apiKey,
|
|
1909
1904
|
baseUrl: "https://api.deepseek.com"
|
|
1910
1905
|
});
|
|
1911
|
-
var google = (
|
|
1912
|
-
apiKey:
|
|
1906
|
+
var google = (config) => openaiCompatible({
|
|
1907
|
+
apiKey: config.apiKey,
|
|
1913
1908
|
baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai"
|
|
1914
1909
|
});
|
|
1915
|
-
var meta = (
|
|
1916
|
-
apiKey:
|
|
1910
|
+
var meta = (config) => openaiCompatible({
|
|
1911
|
+
apiKey: config.apiKey,
|
|
1917
1912
|
baseUrl: "https://api.llama.com/compat/v1"
|
|
1918
1913
|
});
|
|
1919
|
-
var mistralai = (
|
|
1920
|
-
apiKey:
|
|
1914
|
+
var mistralai = (config) => openaiCompatible({
|
|
1915
|
+
apiKey: config.apiKey,
|
|
1921
1916
|
baseUrl: "https://api.mistral.ai"
|
|
1922
1917
|
});
|
|
1923
|
-
var moonshot = (
|
|
1924
|
-
apiKey:
|
|
1918
|
+
var moonshot = (config) => openaiCompatible({
|
|
1919
|
+
apiKey: config.apiKey,
|
|
1925
1920
|
baseUrl: "https://api.moonshot.ai"
|
|
1926
1921
|
});
|
|
1927
|
-
var openaiCompatible = (
|
|
1928
|
-
apiKey:
|
|
1929
|
-
baseUrl:
|
|
1930
|
-
tokenSource:
|
|
1922
|
+
var openaiCompatible = (config) => openai({
|
|
1923
|
+
apiKey: config.apiKey,
|
|
1924
|
+
baseUrl: config.baseUrl,
|
|
1925
|
+
tokenSource: config.tokenSource
|
|
1931
1926
|
});
|
|
1932
|
-
var xai = (
|
|
1933
|
-
apiKey:
|
|
1927
|
+
var xai = (config) => openaiCompatible({
|
|
1928
|
+
apiKey: config.apiKey,
|
|
1934
1929
|
baseUrl: "https://api.x.ai"
|
|
1935
1930
|
});
|
|
1936
1931
|
export {
|
|
@@ -1944,5 +1939,5 @@ export {
|
|
|
1944
1939
|
xai
|
|
1945
1940
|
};
|
|
1946
1941
|
|
|
1947
|
-
//# debugId=
|
|
1942
|
+
//# debugId=020710D957C942F164756E2164756E21
|
|
1948
1943
|
//# sourceMappingURL=openaiCompatible.js.map
|