@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/changelog.json +368 -331
  3. package/dist/ai/client/index.js +1 -3
  4. package/dist/ai/client/index.js.map +2 -2
  5. package/dist/ai/index.js +7690 -7681
  6. package/dist/ai/index.js.map +20 -20
  7. package/dist/ai/models/index.js +1 -71
  8. package/dist/ai/models/index.js.map +2 -2
  9. package/dist/ai/providers/anthropic.js +29 -31
  10. package/dist/ai/providers/anthropic.js.map +3 -3
  11. package/dist/ai/providers/gemini.js +15 -17
  12. package/dist/ai/providers/gemini.js.map +3 -3
  13. package/dist/ai/providers/ollama.js +3 -5
  14. package/dist/ai/providers/ollama.js.map +2 -2
  15. package/dist/ai/providers/openai.js +47 -52
  16. package/dist/ai/providers/openai.js.map +4 -4
  17. package/dist/ai/providers/openaiCompatible.js +65 -70
  18. package/dist/ai/providers/openaiCompatible.js.map +4 -4
  19. package/dist/ai/providers/openaiResponses.js +27 -32
  20. package/dist/ai/providers/openaiResponses.js.map +4 -4
  21. package/dist/ai/providers/openrouter.js +131 -136
  22. package/dist/ai/providers/openrouter.js.map +4 -4
  23. package/dist/ai/providers/openrouterSDK.js +1 -3
  24. package/dist/ai/providers/openrouterSDK.js.map +2 -2
  25. package/dist/ai/research.js +2 -4
  26. package/dist/ai/research.js.map +2 -2
  27. package/dist/ai/tools/index.js +55 -58
  28. package/dist/ai/tools/index.js.map +5 -5
  29. package/dist/ai/tools/untrusted.js +1 -3
  30. package/dist/ai/tools/untrusted.js.map +2 -2
  31. package/dist/ai/ui/index.js +2 -72
  32. package/dist/ai/ui/index.js.map +2 -2
  33. package/dist/angular/ai/index.js +1 -1
  34. package/dist/angular/ai/index.js.map +1 -1
  35. package/dist/react/ai/index.js +4 -74
  36. package/dist/react/ai/index.js.map +2 -2
  37. package/dist/src/ai/generateAI.d.ts +5 -1
  38. package/dist/src/ai/inputCapacity.d.ts +2 -2
  39. package/dist/src/ai/streamAIWithTools.d.ts +8 -2
  40. package/dist/svelte/ai/index.js +1 -71
  41. package/dist/svelte/ai/index.js.map +2 -2
  42. package/dist/vue/ai/index.js +1 -71
  43. package/dist/vue/ai/index.js.map +2 -2
  44. 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
- status;
5
+ providerStatus;
8
6
  requestId;
9
- constructor(code, message, status, requestId) {
7
+ constructor(code, message, providerStatus, requestId) {
10
8
  super(message);
11
9
  this.code = code;
12
- this.status = status;
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, "status" in error && typeof error.status === "number" ? error.status : undefined, "requestId" in error && typeof error.requestId === "string" ? error.requestId : undefined);
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 profile2 = getModelReasoning("google", model);
792
+ const profile = getModelReasoning("google", model);
795
793
  const effort = resolveEffort(reasoning);
796
- if (!profile2 || !effort)
794
+ if (!profile || !effort)
797
795
  return;
798
- if (!profile2.efforts.includes(effort))
796
+ if (!profile.efforts.includes(effort))
799
797
  throw new Error(`Unsupported reasoning effort ${effort} for ${model}`);
800
- if (profile2.kind === "effort")
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
- image_url: {
825
- url: block.source.type === "url" ? block.source.url : `data:${block.source.media_type};base64,${block.source.data}`
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
- file: {
833
- file_data: block.source.type === "url" ? block.source.url : `data:${block.source.media_type};base64,${block.source.data}`,
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 = (config2) => {
1321
- if (!config2.apiKey && !config2.tokenSource)
1315
+ var openaiResponses = (config) => {
1316
+ if (!config.apiKey && !config.tokenSource)
1322
1317
  throw new Error("openaiResponses() requires either apiKey or tokenSource");
1323
- const baseUrl = config2.baseUrl ?? DEFAULT_BASE_URL;
1324
- const fetchImpl = config2.fetch ?? globalThis.fetch;
1325
- const imageModels = resolveImageModels(config2.imageModels);
1326
- const providerName = config2.providerName ?? "openai-responses";
1327
- const resolveKey = async () => config2.tokenSource ? await Promise.resolve(config2.tokenSource()) : config2.apiKey;
1328
- const resolveHeaders = async (params) => typeof config2.headers === "function" ? await config2.headers(params) : config2.headers ?? {};
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: config2.modelLimits,
1330
+ modelLimits: config.modelLimits,
1336
1331
  body: (params) => {
1337
- const built = buildResponsesRequestBody(params, imageModels.has(params.model), config2.modelForCapabilities?.(params.model) ?? params.model);
1338
- return config2.transformRequestBody ? config2.transformRequestBody(built, params) : built;
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, config2.modelForCapabilities?.(params.model) ?? params.model);
1344
- const body = config2.transformRequestBody ? config2.transformRequestBody(builtBody, params) : builtBody;
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 metadata2 = isRecord2(error.metadata) ? error.metadata : undefined;
1723
+ const metadata = isRecord2(error.metadata) ? error.metadata : undefined;
1729
1724
  const status = typeof error.code === "number" ? error.code : null;
1730
- const type = metadata2 && typeof metadata2.error_type === "string" ? metadata2.error_type : typeof error.error_type === "string" ? error.error_type : null;
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: metadata2,
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 metadata2 = isRecord2(error.metadata) ? error.metadata : undefined;
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: metadata2,
1757
+ metadata,
1763
1758
  provider: providerName,
1764
1759
  retryable: status === 429 || status !== null && status >= 500,
1765
1760
  status,
1766
- type: metadata2 && typeof metadata2.error_type === "string" ? metadata2.error_type : null
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 = (config2) => {
1866
- const baseUrl = config2.baseUrl ?? DEFAULT_BASE_URL2;
1867
- const fetchImpl = config2.fetch ?? globalThis.fetch;
1868
- const providerName = config2.providerName ?? "openai";
1869
- if (!config2.apiKey && !config2.tokenSource) {
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 (config2.tokenSource) {
1874
- return await Promise.resolve(config2.tokenSource());
1868
+ if (config.tokenSource) {
1869
+ return await Promise.resolve(config.tokenSource());
1875
1870
  }
1876
- return config2.apiKey;
1871
+ return config.apiKey;
1877
1872
  };
1878
- const resolveHeaders = async (params) => typeof config2.headers === "function" ? await config2.headers(params) : config2.headers ?? {};
1873
+ const resolveHeaders = async (params) => typeof config.headers === "function" ? await config.headers(params) : config.headers ?? {};
1879
1874
  return instrumentAIProvider({
1880
- inputCapacity: config2.transformRequestBody ? undefined : openaiInputCapacity({
1875
+ inputCapacity: config.transformRequestBody ? undefined : openaiInputCapacity({
1881
1876
  baseUrl,
1882
1877
  fetch: fetchImpl,
1883
1878
  key: resolveKey,
1884
1879
  headers: resolveHeaders,
1885
- modelLimits: config2.modelLimits,
1886
- body: (params) => buildResponsesRequestBody(params, false, config2.modelForCapabilities?.(params.model) ?? params.model)
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, config2.modelForCapabilities?.(params.model) ?? params.model, providerName);
1890
- const body = config2.transformRequestBody ? config2.transformRequestBody(openaiBody, params) : openaiBody;
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 = (config2) => openaiCompatible({
1904
- apiKey: config2.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 = (config2) => openaiCompatible({
1908
- apiKey: config2.apiKey,
1902
+ var deepseek2 = (config) => openaiCompatible({
1903
+ apiKey: config.apiKey,
1909
1904
  baseUrl: "https://api.deepseek.com"
1910
1905
  });
1911
- var google = (config2) => openaiCompatible({
1912
- apiKey: config2.apiKey,
1906
+ var google = (config) => openaiCompatible({
1907
+ apiKey: config.apiKey,
1913
1908
  baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai"
1914
1909
  });
1915
- var meta = (config2) => openaiCompatible({
1916
- apiKey: config2.apiKey,
1910
+ var meta = (config) => openaiCompatible({
1911
+ apiKey: config.apiKey,
1917
1912
  baseUrl: "https://api.llama.com/compat/v1"
1918
1913
  });
1919
- var mistralai = (config2) => openaiCompatible({
1920
- apiKey: config2.apiKey,
1914
+ var mistralai = (config) => openaiCompatible({
1915
+ apiKey: config.apiKey,
1921
1916
  baseUrl: "https://api.mistral.ai"
1922
1917
  });
1923
- var moonshot = (config2) => openaiCompatible({
1924
- apiKey: config2.apiKey,
1918
+ var moonshot = (config) => openaiCompatible({
1919
+ apiKey: config.apiKey,
1925
1920
  baseUrl: "https://api.moonshot.ai"
1926
1921
  });
1927
- var openaiCompatible = (config2) => openai({
1928
- apiKey: config2.apiKey,
1929
- baseUrl: config2.baseUrl,
1930
- tokenSource: config2.tokenSource
1922
+ var openaiCompatible = (config) => openai({
1923
+ apiKey: config.apiKey,
1924
+ baseUrl: config.baseUrl,
1925
+ tokenSource: config.tokenSource
1931
1926
  });
1932
- var xai = (config2) => openaiCompatible({
1933
- apiKey: config2.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=A659FB05594408CD64756E2164756E21
1942
+ //# debugId=020710D957C942F164756E2164756E21
1948
1943
  //# sourceMappingURL=openaiCompatible.js.map