@push.rocks/smartai 0.13.3 → 2.0.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 (98) hide show
  1. package/dist_ts/00_commitinfo_data.js +3 -3
  2. package/dist_ts/index.d.ts +6 -11
  3. package/dist_ts/index.js +6 -12
  4. package/dist_ts/plugins.d.ts +10 -15
  5. package/dist_ts/plugins.js +13 -19
  6. package/dist_ts/smartai.classes.smartai.d.ts +7 -0
  7. package/dist_ts/smartai.classes.smartai.js +51 -0
  8. package/dist_ts/smartai.interfaces.d.ts +41 -0
  9. package/dist_ts/smartai.interfaces.js +2 -0
  10. package/dist_ts/smartai.middleware.anthropic.d.ts +7 -0
  11. package/dist_ts/smartai.middleware.anthropic.js +36 -0
  12. package/dist_ts/smartai.provider.ollama.d.ts +8 -0
  13. package/dist_ts/smartai.provider.ollama.js +378 -0
  14. package/dist_ts_audio/index.d.ts +9 -0
  15. package/dist_ts_audio/index.js +15 -0
  16. package/dist_ts_audio/plugins.d.ts +2 -0
  17. package/dist_ts_audio/plugins.js +3 -0
  18. package/dist_ts_document/index.d.ts +11 -0
  19. package/dist_ts_document/index.js +45 -0
  20. package/dist_ts_document/plugins.d.ts +3 -0
  21. package/dist_ts_document/plugins.js +4 -0
  22. package/dist_ts_image/index.d.ts +46 -0
  23. package/dist_ts_image/index.js +110 -0
  24. package/dist_ts_image/plugins.d.ts +3 -0
  25. package/dist_ts_image/plugins.js +4 -0
  26. package/dist_ts_research/index.d.ts +19 -0
  27. package/dist_ts_research/index.js +98 -0
  28. package/dist_ts_research/plugins.d.ts +2 -0
  29. package/dist_ts_research/plugins.js +3 -0
  30. package/dist_ts_vision/index.d.ts +8 -0
  31. package/dist_ts_vision/index.js +21 -0
  32. package/dist_ts_vision/plugins.d.ts +2 -0
  33. package/dist_ts_vision/plugins.js +3 -0
  34. package/package.json +50 -22
  35. package/readme.hints.md +34 -88
  36. package/readme.md +284 -547
  37. package/ts/00_commitinfo_data.ts +2 -2
  38. package/ts/index.ts +8 -11
  39. package/ts/plugins.ts +19 -35
  40. package/ts/smartai.classes.smartai.ts +51 -0
  41. package/ts/smartai.interfaces.ts +53 -0
  42. package/ts/smartai.middleware.anthropic.ts +38 -0
  43. package/ts/smartai.provider.ollama.ts +426 -0
  44. package/ts_audio/index.ts +24 -0
  45. package/ts_audio/plugins.ts +2 -0
  46. package/ts_document/index.ts +61 -0
  47. package/ts_document/plugins.ts +3 -0
  48. package/ts_image/index.ts +147 -0
  49. package/ts_image/plugins.ts +3 -0
  50. package/ts_research/index.ts +120 -0
  51. package/ts_research/plugins.ts +2 -0
  52. package/ts_vision/index.ts +29 -0
  53. package/ts_vision/plugins.ts +2 -0
  54. package/dist_ts/abstract.classes.multimodal.d.ts +0 -212
  55. package/dist_ts/abstract.classes.multimodal.js +0 -43
  56. package/dist_ts/classes.conversation.d.ts +0 -31
  57. package/dist_ts/classes.conversation.js +0 -150
  58. package/dist_ts/classes.smartai.d.ts +0 -59
  59. package/dist_ts/classes.smartai.js +0 -139
  60. package/dist_ts/classes.tts.d.ts +0 -6
  61. package/dist_ts/classes.tts.js +0 -10
  62. package/dist_ts/interfaces.d.ts +0 -1
  63. package/dist_ts/interfaces.js +0 -2
  64. package/dist_ts/paths.d.ts +0 -2
  65. package/dist_ts/paths.js +0 -4
  66. package/dist_ts/provider.anthropic.d.ts +0 -48
  67. package/dist_ts/provider.anthropic.js +0 -369
  68. package/dist_ts/provider.elevenlabs.d.ts +0 -43
  69. package/dist_ts/provider.elevenlabs.js +0 -64
  70. package/dist_ts/provider.exo.d.ts +0 -40
  71. package/dist_ts/provider.exo.js +0 -116
  72. package/dist_ts/provider.groq.d.ts +0 -39
  73. package/dist_ts/provider.groq.js +0 -178
  74. package/dist_ts/provider.mistral.d.ts +0 -61
  75. package/dist_ts/provider.mistral.js +0 -288
  76. package/dist_ts/provider.ollama.d.ts +0 -141
  77. package/dist_ts/provider.ollama.js +0 -529
  78. package/dist_ts/provider.openai.d.ts +0 -62
  79. package/dist_ts/provider.openai.js +0 -403
  80. package/dist_ts/provider.perplexity.d.ts +0 -37
  81. package/dist_ts/provider.perplexity.js +0 -215
  82. package/dist_ts/provider.xai.d.ts +0 -52
  83. package/dist_ts/provider.xai.js +0 -160
  84. package/ts/abstract.classes.multimodal.ts +0 -240
  85. package/ts/classes.conversation.ts +0 -176
  86. package/ts/classes.smartai.ts +0 -187
  87. package/ts/classes.tts.ts +0 -15
  88. package/ts/interfaces.ts +0 -0
  89. package/ts/paths.ts +0 -4
  90. package/ts/provider.anthropic.ts +0 -446
  91. package/ts/provider.elevenlabs.ts +0 -116
  92. package/ts/provider.exo.ts +0 -155
  93. package/ts/provider.groq.ts +0 -219
  94. package/ts/provider.mistral.ts +0 -352
  95. package/ts/provider.ollama.ts +0 -705
  96. package/ts/provider.openai.ts +0 -462
  97. package/ts/provider.perplexity.ts +0 -259
  98. package/ts/provider.xai.ts +0 -214
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartai',
6
- version: '0.13.3',
7
- description: 'SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.'
6
+ version: '2.0.0',
7
+ description: 'Provider registry and capability utilities for ai-sdk (Vercel AI SDK). Core export returns LanguageModel; subpath exports provide vision, audio, image, document and research capabilities.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGtOQUFrTjtDQUNoTyxDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLDZMQUE2TDtDQUMzTSxDQUFBIn0=
@@ -1,11 +1,6 @@
1
- export * from './classes.smartai.js';
2
- export * from './abstract.classes.multimodal.js';
3
- export * from './provider.openai.js';
4
- export * from './provider.anthropic.js';
5
- export * from './provider.perplexity.js';
6
- export * from './provider.groq.js';
7
- export * from './provider.mistral.js';
8
- export * from './provider.ollama.js';
9
- export * from './provider.xai.js';
10
- export * from './provider.exo.js';
11
- export * from './provider.elevenlabs.js';
1
+ export { getModel } from './smartai.classes.smartai.js';
2
+ export type { ISmartAiOptions, TProvider, IOllamaModelOptions, LanguageModelV3 } from './smartai.interfaces.js';
3
+ export { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
4
+ export { createOllamaModel } from './smartai.provider.ollama.js';
5
+ export { generateText, streamText, tool, jsonSchema } from 'ai';
6
+ export type { ModelMessage, ToolSet, StreamTextResult } from 'ai';
package/dist_ts/index.js CHANGED
@@ -1,12 +1,6 @@
1
- export * from './classes.smartai.js';
2
- export * from './abstract.classes.multimodal.js';
3
- export * from './provider.openai.js';
4
- export * from './provider.anthropic.js';
5
- export * from './provider.perplexity.js';
6
- export * from './provider.groq.js';
7
- export * from './provider.mistral.js';
8
- export * from './provider.ollama.js';
9
- export * from './provider.xai.js';
10
- export * from './provider.exo.js';
11
- export * from './provider.elevenlabs.js';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMEJBQTBCLENBQUMifQ==
1
+ export { getModel } from './smartai.classes.smartai.js';
2
+ export { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
3
+ export { createOllamaModel } from './smartai.provider.ollama.js';
4
+ // Re-export commonly used ai-sdk functions for consumer convenience
5
+ export { generateText, streamText, tool, jsonSchema } from 'ai';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFakUsb0VBQW9FO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMifQ==
@@ -1,15 +1,10 @@
1
- import * as path from 'path';
2
- export { path, };
3
- import * as qenv from '@push.rocks/qenv';
4
- import * as smartarray from '@push.rocks/smartarray';
5
- import * as smartfs from '@push.rocks/smartfs';
6
- import * as smartpath from '@push.rocks/smartpath';
7
- import * as smartpdf from '@push.rocks/smartpdf';
8
- import * as smartpromise from '@push.rocks/smartpromise';
9
- import * as smartrequest from '@push.rocks/smartrequest';
10
- import * as webstream from '@push.rocks/webstream';
11
- export { smartarray, qenv, smartfs, smartpath, smartpdf, smartpromise, smartrequest, webstream, };
12
- import * as anthropic from '@anthropic-ai/sdk';
13
- import * as mistralai from '@mistralai/mistralai';
14
- import * as openai from 'openai';
15
- export { anthropic, mistralai, openai, };
1
+ import { generateText, streamText, wrapLanguageModel, tool, jsonSchema } from 'ai';
2
+ export { generateText, streamText, wrapLanguageModel, tool, jsonSchema };
3
+ import { createAnthropic } from '@ai-sdk/anthropic';
4
+ import { createOpenAI } from '@ai-sdk/openai';
5
+ import { createGoogleGenerativeAI } from '@ai-sdk/google';
6
+ import { createGroq } from '@ai-sdk/groq';
7
+ import { createMistral } from '@ai-sdk/mistral';
8
+ import { createXai } from '@ai-sdk/xai';
9
+ import { createPerplexity } from '@ai-sdk/perplexity';
10
+ export { createAnthropic, createOpenAI, createGoogleGenerativeAI, createGroq, createMistral, createXai, createPerplexity, };
@@ -1,19 +1,13 @@
1
- // node native
2
- import * as path from 'path';
3
- export { path, };
4
- // @push.rocks scope
5
- import * as qenv from '@push.rocks/qenv';
6
- import * as smartarray from '@push.rocks/smartarray';
7
- import * as smartfs from '@push.rocks/smartfs';
8
- import * as smartpath from '@push.rocks/smartpath';
9
- import * as smartpdf from '@push.rocks/smartpdf';
10
- import * as smartpromise from '@push.rocks/smartpromise';
11
- import * as smartrequest from '@push.rocks/smartrequest';
12
- import * as webstream from '@push.rocks/webstream';
13
- export { smartarray, qenv, smartfs, smartpath, smartpdf, smartpromise, smartrequest, webstream, };
14
- // third party
15
- import * as anthropic from '@anthropic-ai/sdk';
16
- import * as mistralai from '@mistralai/mistralai';
17
- import * as openai from 'openai';
18
- export { anthropic, mistralai, openai, };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osT0FBTyxFQUNQLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEdBQ1YsQ0FBQTtBQUVELGNBQWM7QUFDZCxPQUFPLEtBQUssU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxTQUFTLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxHQUNQLENBQUEifQ==
1
+ // ai sdk core
2
+ import { generateText, streamText, wrapLanguageModel, tool, jsonSchema } from 'ai';
3
+ export { generateText, streamText, wrapLanguageModel, tool, jsonSchema };
4
+ // ai sdk providers
5
+ import { createAnthropic } from '@ai-sdk/anthropic';
6
+ import { createOpenAI } from '@ai-sdk/openai';
7
+ import { createGoogleGenerativeAI } from '@ai-sdk/google';
8
+ import { createGroq } from '@ai-sdk/groq';
9
+ import { createMistral } from '@ai-sdk/mistral';
10
+ import { createXai } from '@ai-sdk/xai';
11
+ import { createPerplexity } from '@ai-sdk/perplexity';
12
+ export { createAnthropic, createOpenAI, createGoogleGenerativeAI, createGroq, createMistral, createXai, createPerplexity, };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBRXpFLG1CQUFtQjtBQUNuQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUNMLGVBQWUsRUFDZixZQUFZLEVBQ1osd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsU0FBUyxFQUNULGdCQUFnQixHQUNqQixDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import type { ISmartAiOptions, LanguageModelV3 } from './smartai.interfaces.js';
2
+ /**
3
+ * Returns a LanguageModelV3 for the given provider and model.
4
+ * This is the primary API — consumers use the returned model with AI SDK's
5
+ * generateText(), streamText(), etc.
6
+ */
7
+ export declare function getModel(options: ISmartAiOptions): LanguageModelV3;
@@ -0,0 +1,51 @@
1
+ import * as plugins from './plugins.js';
2
+ import { createOllamaModel } from './smartai.provider.ollama.js';
3
+ import { createAnthropicCachingMiddleware } from './smartai.middleware.anthropic.js';
4
+ /**
5
+ * Returns a LanguageModelV3 for the given provider and model.
6
+ * This is the primary API — consumers use the returned model with AI SDK's
7
+ * generateText(), streamText(), etc.
8
+ */
9
+ export function getModel(options) {
10
+ switch (options.provider) {
11
+ case 'anthropic': {
12
+ const p = plugins.createAnthropic({ apiKey: options.apiKey });
13
+ const base = p(options.model);
14
+ if (options.promptCaching === false)
15
+ return base;
16
+ return plugins.wrapLanguageModel({
17
+ model: base,
18
+ middleware: createAnthropicCachingMiddleware(),
19
+ });
20
+ }
21
+ case 'openai': {
22
+ const p = plugins.createOpenAI({ apiKey: options.apiKey });
23
+ return p(options.model);
24
+ }
25
+ case 'google': {
26
+ const p = plugins.createGoogleGenerativeAI({ apiKey: options.apiKey });
27
+ return p(options.model);
28
+ }
29
+ case 'groq': {
30
+ const p = plugins.createGroq({ apiKey: options.apiKey });
31
+ return p(options.model);
32
+ }
33
+ case 'mistral': {
34
+ const p = plugins.createMistral({ apiKey: options.apiKey });
35
+ return p(options.model);
36
+ }
37
+ case 'xai': {
38
+ const p = plugins.createXai({ apiKey: options.apiKey });
39
+ return p(options.model);
40
+ }
41
+ case 'perplexity': {
42
+ const p = plugins.createPerplexity({ apiKey: options.apiKey });
43
+ return p(options.model);
44
+ }
45
+ case 'ollama':
46
+ return createOllamaModel(options);
47
+ default:
48
+ throw new Error(`Unknown provider: ${options.provider}`);
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5jbGFzc2VzLnNtYXJ0YWkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydGFpLmNsYXNzZXMuc21hcnRhaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVyRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUF3QjtJQUMvQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDakIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM5RCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNqRCxPQUFPLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsVUFBVSxFQUFFLGdDQUFnQyxFQUFFO2FBQy9DLENBQStCLENBQUM7UUFDbkMsQ0FBQztRQUNELEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNkLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDM0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQW9CLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNaLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDekQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFvQixDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQW9CLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDL0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBb0IsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsS0FBSyxRQUFRO1lBQ1gsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQztZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXNCLE9BQTJCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,41 @@
1
+ import type { LanguageModelV3 } from '@ai-sdk/provider';
2
+ export type TProvider = 'anthropic' | 'openai' | 'google' | 'groq' | 'mistral' | 'xai' | 'perplexity' | 'ollama';
3
+ export interface ISmartAiOptions {
4
+ provider: TProvider;
5
+ model: string;
6
+ apiKey?: string;
7
+ /** For Ollama: base URL of the local server. Default: http://localhost:11434 */
8
+ baseUrl?: string;
9
+ /**
10
+ * Ollama-specific model runtime options.
11
+ * Only used when provider === 'ollama'.
12
+ */
13
+ ollamaOptions?: IOllamaModelOptions;
14
+ /**
15
+ * Enable Anthropic prompt caching on system + recent messages.
16
+ * Only used when provider === 'anthropic'. Default: true.
17
+ */
18
+ promptCaching?: boolean;
19
+ }
20
+ /**
21
+ * Ollama model runtime options passed in the request body `options` field.
22
+ * @see https://github.com/ollama/ollama/blob/main/docs/modelfile.md
23
+ */
24
+ export interface IOllamaModelOptions {
25
+ /** Context window size. Default: 2048. */
26
+ num_ctx?: number;
27
+ /** 0 = deterministic. Default: 0.8. For Qwen models use 0.55. */
28
+ temperature?: number;
29
+ top_k?: number;
30
+ top_p?: number;
31
+ repeat_penalty?: number;
32
+ num_predict?: number;
33
+ stop?: string[];
34
+ seed?: number;
35
+ /**
36
+ * Enable thinking/reasoning mode (Qwen3, QwQ, DeepSeek-R1 etc.).
37
+ * The custom Ollama provider handles this directly.
38
+ */
39
+ think?: boolean;
40
+ }
41
+ export type { LanguageModelV3 };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRhaS5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,7 @@
1
+ import type { LanguageModelV3Middleware } from '@ai-sdk/provider';
2
+ /**
3
+ * Creates middleware that adds Anthropic prompt caching directives.
4
+ * Marks the last system message and last user message with ephemeral cache control,
5
+ * reducing input token cost and latency on repeated calls.
6
+ */
7
+ export declare function createAnthropicCachingMiddleware(): LanguageModelV3Middleware;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Creates middleware that adds Anthropic prompt caching directives.
3
+ * Marks the last system message and last user message with ephemeral cache control,
4
+ * reducing input token cost and latency on repeated calls.
5
+ */
6
+ export function createAnthropicCachingMiddleware() {
7
+ return {
8
+ specificationVersion: 'v3',
9
+ transformParams: async ({ params }) => {
10
+ const messages = [...params.prompt];
11
+ // Find the last system message and last user message
12
+ let lastSystemIdx = -1;
13
+ let lastUserIdx = -1;
14
+ for (let i = 0; i < messages.length; i++) {
15
+ if (messages[i].role === 'system')
16
+ lastSystemIdx = i;
17
+ if (messages[i].role === 'user')
18
+ lastUserIdx = i;
19
+ }
20
+ const targets = [lastSystemIdx, lastUserIdx].filter(i => i >= 0);
21
+ for (const idx of targets) {
22
+ const msg = { ...messages[idx] };
23
+ msg.providerOptions = {
24
+ ...(msg.providerOptions || {}),
25
+ anthropic: {
26
+ ...(msg.providerOptions?.anthropic || {}),
27
+ cacheControl: { type: 'ephemeral' },
28
+ },
29
+ };
30
+ messages[idx] = msg;
31
+ }
32
+ return { ...params, prompt: messages };
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRhaS5taWRkbGV3YXJlLmFudGhyb3BpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0YWkubWlkZGxld2FyZS5hbnRocm9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQ0FBZ0M7SUFDOUMsT0FBTztRQUNMLG9CQUFvQixFQUFFLElBQUk7UUFDMUIsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQW1DLENBQUM7WUFFdEUscURBQXFEO1lBQ3JELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO29CQUFFLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQ3JELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNO29CQUFFLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLEdBQUcsQ0FBQyxlQUFlLEdBQUc7b0JBQ3BCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBMEMsSUFBSSxFQUFFLENBQUM7b0JBQ3pELFNBQVMsRUFBRTt3QkFDVCxHQUFHLENBQUUsR0FBRyxDQUFDLGVBQTJDLEVBQUUsU0FBb0MsSUFBSSxFQUFFLENBQUM7d0JBQ2pHLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7cUJBQ3BDO2lCQUNGLENBQUM7Z0JBQ0YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN0QixDQUFDO1lBRUQsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUE0QyxFQUFFLENBQUM7UUFDN0UsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIn0=
@@ -0,0 +1,8 @@
1
+ import type { LanguageModelV3 } from '@ai-sdk/provider';
2
+ import type { ISmartAiOptions } from './smartai.interfaces.js';
3
+ /**
4
+ * Custom LanguageModelV3 implementation for Ollama.
5
+ * Calls Ollama's native /api/chat endpoint directly to support
6
+ * think, num_ctx, temperature, and other model options.
7
+ */
8
+ export declare function createOllamaModel(options: ISmartAiOptions): LanguageModelV3;