ai.matey.backend 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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/index.js +60 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/providers/ai21.js +331 -0
  5. package/dist/cjs/providers/ai21.js.map +1 -0
  6. package/dist/cjs/providers/anthropic.js +664 -0
  7. package/dist/cjs/providers/anthropic.js.map +1 -0
  8. package/dist/cjs/providers/anyscale.js +338 -0
  9. package/dist/cjs/providers/anyscale.js.map +1 -0
  10. package/dist/cjs/providers/aws-bedrock.js +374 -0
  11. package/dist/cjs/providers/aws-bedrock.js.map +1 -0
  12. package/dist/cjs/providers/azure-openai.js +406 -0
  13. package/dist/cjs/providers/azure-openai.js.map +1 -0
  14. package/dist/cjs/providers/cerebras.js +356 -0
  15. package/dist/cjs/providers/cerebras.js.map +1 -0
  16. package/dist/cjs/providers/cloudflare.js +359 -0
  17. package/dist/cjs/providers/cloudflare.js.map +1 -0
  18. package/dist/cjs/providers/cohere.js +368 -0
  19. package/dist/cjs/providers/cohere.js.map +1 -0
  20. package/dist/cjs/providers/deepinfra.js +343 -0
  21. package/dist/cjs/providers/deepinfra.js.map +1 -0
  22. package/dist/cjs/providers/deepseek.js +104 -0
  23. package/dist/cjs/providers/deepseek.js.map +1 -0
  24. package/dist/cjs/providers/fireworks.js +363 -0
  25. package/dist/cjs/providers/fireworks.js.map +1 -0
  26. package/dist/cjs/providers/gemini.js +292 -0
  27. package/dist/cjs/providers/gemini.js.map +1 -0
  28. package/dist/cjs/providers/groq.js +143 -0
  29. package/dist/cjs/providers/groq.js.map +1 -0
  30. package/dist/cjs/providers/huggingface.js +392 -0
  31. package/dist/cjs/providers/huggingface.js.map +1 -0
  32. package/dist/cjs/providers/lmstudio.js +144 -0
  33. package/dist/cjs/providers/lmstudio.js.map +1 -0
  34. package/dist/cjs/providers/mistral.js +288 -0
  35. package/dist/cjs/providers/mistral.js.map +1 -0
  36. package/dist/cjs/providers/nvidia.js +167 -0
  37. package/dist/cjs/providers/nvidia.js.map +1 -0
  38. package/dist/cjs/providers/ollama.js +257 -0
  39. package/dist/cjs/providers/ollama.js.map +1 -0
  40. package/dist/cjs/providers/openai.js +640 -0
  41. package/dist/cjs/providers/openai.js.map +1 -0
  42. package/dist/cjs/providers/openrouter.js +379 -0
  43. package/dist/cjs/providers/openrouter.js.map +1 -0
  44. package/dist/cjs/providers/perplexity.js +372 -0
  45. package/dist/cjs/providers/perplexity.js.map +1 -0
  46. package/dist/cjs/providers/replicate.js +340 -0
  47. package/dist/cjs/providers/replicate.js.map +1 -0
  48. package/dist/cjs/providers/together-ai.js +341 -0
  49. package/dist/cjs/providers/together-ai.js.map +1 -0
  50. package/dist/cjs/providers/xai.js +339 -0
  51. package/dist/cjs/providers/xai.js.map +1 -0
  52. package/dist/cjs/shared.js +279 -0
  53. package/dist/cjs/shared.js.map +1 -0
  54. package/dist/esm/index.js +44 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/providers/ai21.js +327 -0
  57. package/dist/esm/providers/ai21.js.map +1 -0
  58. package/dist/esm/providers/anthropic.js +660 -0
  59. package/dist/esm/providers/anthropic.js.map +1 -0
  60. package/dist/esm/providers/anyscale.js +334 -0
  61. package/dist/esm/providers/anyscale.js.map +1 -0
  62. package/dist/esm/providers/aws-bedrock.js +370 -0
  63. package/dist/esm/providers/aws-bedrock.js.map +1 -0
  64. package/dist/esm/providers/azure-openai.js +402 -0
  65. package/dist/esm/providers/azure-openai.js.map +1 -0
  66. package/dist/esm/providers/cerebras.js +352 -0
  67. package/dist/esm/providers/cerebras.js.map +1 -0
  68. package/dist/esm/providers/cloudflare.js +355 -0
  69. package/dist/esm/providers/cloudflare.js.map +1 -0
  70. package/dist/esm/providers/cohere.js +364 -0
  71. package/dist/esm/providers/cohere.js.map +1 -0
  72. package/dist/esm/providers/deepinfra.js +339 -0
  73. package/dist/esm/providers/deepinfra.js.map +1 -0
  74. package/dist/esm/providers/deepseek.js +99 -0
  75. package/dist/esm/providers/deepseek.js.map +1 -0
  76. package/dist/esm/providers/fireworks.js +359 -0
  77. package/dist/esm/providers/fireworks.js.map +1 -0
  78. package/dist/esm/providers/gemini.js +288 -0
  79. package/dist/esm/providers/gemini.js.map +1 -0
  80. package/dist/esm/providers/groq.js +138 -0
  81. package/dist/esm/providers/groq.js.map +1 -0
  82. package/dist/esm/providers/huggingface.js +387 -0
  83. package/dist/esm/providers/huggingface.js.map +1 -0
  84. package/dist/esm/providers/lmstudio.js +139 -0
  85. package/dist/esm/providers/lmstudio.js.map +1 -0
  86. package/dist/esm/providers/mistral.js +284 -0
  87. package/dist/esm/providers/mistral.js.map +1 -0
  88. package/dist/esm/providers/nvidia.js +162 -0
  89. package/dist/esm/providers/nvidia.js.map +1 -0
  90. package/dist/esm/providers/ollama.js +253 -0
  91. package/dist/esm/providers/ollama.js.map +1 -0
  92. package/dist/esm/providers/openai.js +636 -0
  93. package/dist/esm/providers/openai.js.map +1 -0
  94. package/dist/esm/providers/openrouter.js +375 -0
  95. package/dist/esm/providers/openrouter.js.map +1 -0
  96. package/dist/esm/providers/perplexity.js +368 -0
  97. package/dist/esm/providers/perplexity.js.map +1 -0
  98. package/dist/esm/providers/replicate.js +336 -0
  99. package/dist/esm/providers/replicate.js.map +1 -0
  100. package/dist/esm/providers/together-ai.js +337 -0
  101. package/dist/esm/providers/together-ai.js.map +1 -0
  102. package/dist/esm/providers/xai.js +335 -0
  103. package/dist/esm/providers/xai.js.map +1 -0
  104. package/dist/esm/shared.js +272 -0
  105. package/dist/esm/shared.js.map +1 -0
  106. package/dist/types/index.d.ts +38 -0
  107. package/dist/types/index.d.ts.map +1 -0
  108. package/dist/types/providers/ai21.d.ts +106 -0
  109. package/dist/types/providers/ai21.d.ts.map +1 -0
  110. package/dist/types/providers/anthropic.d.ts +194 -0
  111. package/dist/types/providers/anthropic.d.ts.map +1 -0
  112. package/dist/types/providers/anyscale.d.ts +109 -0
  113. package/dist/types/providers/anyscale.d.ts.map +1 -0
  114. package/dist/types/providers/aws-bedrock.d.ts +152 -0
  115. package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
  116. package/dist/types/providers/azure-openai.d.ts +142 -0
  117. package/dist/types/providers/azure-openai.d.ts.map +1 -0
  118. package/dist/types/providers/cerebras.d.ts +130 -0
  119. package/dist/types/providers/cerebras.d.ts.map +1 -0
  120. package/dist/types/providers/cloudflare.d.ts +125 -0
  121. package/dist/types/providers/cloudflare.d.ts.map +1 -0
  122. package/dist/types/providers/cohere.d.ts +114 -0
  123. package/dist/types/providers/cohere.d.ts.map +1 -0
  124. package/dist/types/providers/deepinfra.d.ts +118 -0
  125. package/dist/types/providers/deepinfra.d.ts.map +1 -0
  126. package/dist/types/providers/deepseek.d.ts +68 -0
  127. package/dist/types/providers/deepseek.d.ts.map +1 -0
  128. package/dist/types/providers/fireworks.d.ts +127 -0
  129. package/dist/types/providers/fireworks.d.ts.map +1 -0
  130. package/dist/types/providers/gemini.d.ts +71 -0
  131. package/dist/types/providers/gemini.d.ts.map +1 -0
  132. package/dist/types/providers/groq.d.ts +83 -0
  133. package/dist/types/providers/groq.d.ts.map +1 -0
  134. package/dist/types/providers/huggingface.d.ts +154 -0
  135. package/dist/types/providers/huggingface.d.ts.map +1 -0
  136. package/dist/types/providers/lmstudio.d.ts +88 -0
  137. package/dist/types/providers/lmstudio.d.ts.map +1 -0
  138. package/dist/types/providers/mistral.d.ts +65 -0
  139. package/dist/types/providers/mistral.d.ts.map +1 -0
  140. package/dist/types/providers/nvidia.d.ts +100 -0
  141. package/dist/types/providers/nvidia.d.ts.map +1 -0
  142. package/dist/types/providers/ollama.d.ts +59 -0
  143. package/dist/types/providers/ollama.d.ts.map +1 -0
  144. package/dist/types/providers/openai.d.ts +205 -0
  145. package/dist/types/providers/openai.d.ts.map +1 -0
  146. package/dist/types/providers/openrouter.d.ts +135 -0
  147. package/dist/types/providers/openrouter.d.ts.map +1 -0
  148. package/dist/types/providers/perplexity.d.ts +116 -0
  149. package/dist/types/providers/perplexity.d.ts.map +1 -0
  150. package/dist/types/providers/replicate.d.ts +91 -0
  151. package/dist/types/providers/replicate.d.ts.map +1 -0
  152. package/dist/types/providers/together-ai.d.ts +118 -0
  153. package/dist/types/providers/together-ai.d.ts.map +1 -0
  154. package/dist/types/providers/xai.d.ts +119 -0
  155. package/dist/types/providers/xai.d.ts.map +1 -0
  156. package/dist/types/shared.d.ts +116 -0
  157. package/dist/types/shared.d.ts.map +1 -0
  158. package/package.json +327 -0
  159. package/readme.md +86 -0
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * LM Studio Backend Adapter
4
+ *
5
+ * Adapts Universal IR to LM Studio local API (OpenAI-compatible).
6
+ * LM Studio runs models locally on your machine with zero cost.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.LMStudioBackendAdapter = void 0;
12
+ exports.createLMStudioAdapter = createLMStudioAdapter;
13
+ const openai_js_1 = require("./openai.js");
14
+ /**
15
+ * Backend adapter for LM Studio local API.
16
+ *
17
+ * LM Studio provides a local OpenAI-compatible API server for running
18
+ * models on your own hardware. Perfect for privacy, development, and cost savings.
19
+ *
20
+ * @example Basic Usage
21
+ * ```typescript
22
+ * import { LMStudioBackendAdapter } from 'ai.matey';
23
+ *
24
+ * const adapter = new LMStudioBackendAdapter({
25
+ * baseURL: 'http://localhost:1234/v1', // Default LM Studio port
26
+ * });
27
+ * ```
28
+ *
29
+ * @example With Custom Model
30
+ * ```typescript
31
+ * const adapter = new LMStudioBackendAdapter({
32
+ * baseURL: 'http://localhost:1234/v1',
33
+ * });
34
+ *
35
+ * const response = await adapter.execute({
36
+ * messages: [{ role: 'user', content: 'Hello!' }],
37
+ * parameters: {
38
+ * model: 'local-model', // Use whatever model is loaded in LM Studio
39
+ * },
40
+ * });
41
+ * ```
42
+ *
43
+ * @example Privacy-Focused Local Inference
44
+ * ```typescript
45
+ * import { createBridge } from 'ai.matey';
46
+ *
47
+ * const bridge = createBridge({
48
+ * backend: new LMStudioBackendAdapter({
49
+ * baseURL: 'http://localhost:1234/v1',
50
+ * }),
51
+ * });
52
+ *
53
+ * // All requests stay on your local machine
54
+ * const response = await bridge.chat({
55
+ * messages: [{ role: 'user', content: 'Sensitive data here' }],
56
+ * });
57
+ * ```
58
+ */
59
+ class LMStudioBackendAdapter extends openai_js_1.OpenAIBackendAdapter {
60
+ constructor(config) {
61
+ // LM Studio default endpoint
62
+ const lmstudioConfig = {
63
+ ...config,
64
+ baseURL: config.baseURL || 'http://localhost:1234/v1',
65
+ // LM Studio doesn't require API key for local usage
66
+ apiKey: config.apiKey || 'not-needed',
67
+ };
68
+ // Pass LM Studio-specific metadata to parent constructor
69
+ super(lmstudioConfig, {
70
+ name: 'lmstudio-backend',
71
+ version: '1.0.0',
72
+ provider: 'LM Studio',
73
+ capabilities: {
74
+ streaming: true,
75
+ multiModal: false, // Depends on loaded model
76
+ tools: true, // Depends on loaded model
77
+ maxContextTokens: 32000, // Varies by loaded model
78
+ systemMessageStrategy: 'in-messages',
79
+ supportsMultipleSystemMessages: false,
80
+ supportsTemperature: true,
81
+ supportsTopP: true,
82
+ supportsTopK: false,
83
+ supportsSeed: true,
84
+ supportsFrequencyPenalty: true,
85
+ supportsPresencePenalty: true,
86
+ maxStopSequences: 4,
87
+ },
88
+ config: {
89
+ baseURL: lmstudioConfig.baseURL,
90
+ },
91
+ });
92
+ }
93
+ /**
94
+ * Health check for LM Studio.
95
+ */
96
+ async healthCheck() {
97
+ try {
98
+ // LM Studio doesn't require auth for local requests
99
+ const response = await fetch(`${this.baseURL}/models`, {
100
+ method: 'GET',
101
+ headers: {
102
+ 'Content-Type': 'application/json',
103
+ },
104
+ signal: AbortSignal.timeout(5000),
105
+ });
106
+ return response.ok;
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ /**
113
+ * Estimate cost for LM Studio (always $0 - local inference).
114
+ */
115
+ estimateCost(_request) {
116
+ // LM Studio is free - runs locally
117
+ return Promise.resolve(0);
118
+ }
119
+ }
120
+ exports.LMStudioBackendAdapter = LMStudioBackendAdapter;
121
+ /**
122
+ * Create an LM Studio backend adapter.
123
+ *
124
+ * @param config - Adapter configuration
125
+ * @returns LM Studio backend adapter
126
+ *
127
+ * @example Default Configuration
128
+ * ```typescript
129
+ * import { createLMStudioAdapter } from 'ai.matey';
130
+ *
131
+ * const adapter = createLMStudioAdapter({});
132
+ * ```
133
+ *
134
+ * @example Custom Port
135
+ * ```typescript
136
+ * const adapter = createLMStudioAdapter({
137
+ * baseURL: 'http://localhost:8080/v1',
138
+ * });
139
+ * ```
140
+ */
141
+ function createLMStudioAdapter(config = {}) {
142
+ return new LMStudioBackendAdapter(config);
143
+ }
144
+ //# sourceMappingURL=lmstudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lmstudio.js","sourceRoot":"","sources":["../../../src/providers/lmstudio.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAyIH,sDAIC;AA3ID,2CAA4F;AAG5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAa,sBACX,SAAQ,gCAAoB;IAG5B,YAAY,MAA4B;QACtC,6BAA6B;QAC7B,MAAM,cAAc,GAAyB;YAC3C,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,0BAA0B;YACrD,oDAAoD;YACpD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,YAAY;SACtC,CAAC;QAEF,yDAAyD;QACzD,KAAK,CAAC,cAAc,EAAE;YACpB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,WAAW;YACrB,YAAY,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,KAAK,EAAE,0BAA0B;gBAC7C,KAAK,EAAE,IAAI,EAAE,0BAA0B;gBACvC,gBAAgB,EAAE,KAAK,EAAE,yBAAyB;gBAClD,qBAAqB,EAAE,aAAa;gBACpC,8BAA8B,EAAE,KAAK;gBACrC,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,KAAK;gBACnB,YAAY,EAAE,IAAI;gBAClB,wBAAwB,EAAE,IAAI;gBAC9B,uBAAuB,EAAE,IAAI;gBAC7B,gBAAgB,EAAE,CAAC;aACpB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,cAAc,CAAC,OAAO;aAChC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,oDAAoD;YACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAuB;QAClC,mCAAmC;QACnC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF;AAjED,wDAiEC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,qBAAqB,CACnC,SAA+B,EAA0B;IAEzD,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ /**
3
+ * Mistral Backend Adapter
4
+ *
5
+ * Adapts Universal IR to Mistral API.
6
+ * Mistral uses OpenAI-compatible format with minor differences.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.MistralBackendAdapter = void 0;
12
+ const ai_matey_errors_1 = require("ai.matey.errors");
13
+ const ai_matey_utils_1 = require("ai.matey.utils");
14
+ const ai_matey_utils_2 = require("ai.matey.utils");
15
+ // ============================================================================
16
+ // Mistral Backend Adapter
17
+ // ============================================================================
18
+ class MistralBackendAdapter {
19
+ metadata;
20
+ config;
21
+ baseURL;
22
+ constructor(config) {
23
+ this.config = config;
24
+ this.baseURL = config.baseURL || 'https://api.mistral.ai/v1';
25
+ this.metadata = {
26
+ name: 'mistral-backend',
27
+ version: '1.0.0',
28
+ provider: 'Mistral',
29
+ capabilities: {
30
+ streaming: true,
31
+ multiModal: false,
32
+ tools: true,
33
+ maxContextTokens: 32000,
34
+ systemMessageStrategy: 'in-messages',
35
+ supportsMultipleSystemMessages: false,
36
+ supportsTemperature: true,
37
+ supportsTopP: true,
38
+ supportsTopK: false,
39
+ supportsSeed: true,
40
+ supportsFrequencyPenalty: false,
41
+ supportsPresencePenalty: false,
42
+ maxStopSequences: 0,
43
+ },
44
+ config: { baseURL: this.baseURL },
45
+ };
46
+ }
47
+ async execute(request, signal) {
48
+ try {
49
+ const mistralRequest = this.fromIR(request);
50
+ const startTime = Date.now();
51
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
52
+ method: 'POST',
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ Authorization: `Bearer ${this.config.apiKey}`,
56
+ ...this.config.headers,
57
+ },
58
+ body: JSON.stringify(mistralRequest),
59
+ signal,
60
+ });
61
+ if (!response.ok) {
62
+ const errorBody = await response.text();
63
+ throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
64
+ backend: this.metadata.name,
65
+ });
66
+ }
67
+ const data = (await response.json());
68
+ return this.toIR(data, request, Date.now() - startTime);
69
+ }
70
+ catch (error) {
71
+ if (error instanceof ai_matey_errors_1.NetworkError || error instanceof ai_matey_errors_1.ProviderError) {
72
+ throw error;
73
+ }
74
+ throw new ai_matey_errors_1.ProviderError({
75
+ code: ai_matey_errors_1.ErrorCode.PROVIDER_ERROR,
76
+ message: `Mistral request failed: ${error instanceof Error ? error.message : String(error)}`,
77
+ isRetryable: true,
78
+ provenance: { backend: this.metadata.name },
79
+ cause: error instanceof Error ? error : undefined,
80
+ });
81
+ }
82
+ }
83
+ async *executeStream(request, signal) {
84
+ try {
85
+ const mistralRequest = this.fromIR(request);
86
+ mistralRequest.stream = true;
87
+ // Get effective streaming configuration
88
+ const streamingConfig = (0, ai_matey_utils_2.mergeStreamingConfig)(this.config.streaming);
89
+ const effectiveMode = (0, ai_matey_utils_2.getEffectiveStreamMode)(request.streamMode, undefined, streamingConfig);
90
+ const includeBoth = streamingConfig.includeBoth || effectiveMode === 'accumulated';
91
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
92
+ method: 'POST',
93
+ headers: {
94
+ 'Content-Type': 'application/json',
95
+ Authorization: `Bearer ${this.config.apiKey}`,
96
+ ...this.config.headers,
97
+ },
98
+ body: JSON.stringify(mistralRequest),
99
+ signal,
100
+ });
101
+ if (!response.ok) {
102
+ const errorBody = await response.text();
103
+ throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
104
+ backend: this.metadata.name,
105
+ });
106
+ }
107
+ if (!response.body) {
108
+ throw new ai_matey_errors_1.StreamError({
109
+ code: ai_matey_errors_1.ErrorCode.STREAM_ERROR,
110
+ message: 'No response body',
111
+ provenance: { backend: this.metadata.name },
112
+ });
113
+ }
114
+ let sequence = 0;
115
+ yield {
116
+ type: 'start',
117
+ sequence: sequence++,
118
+ metadata: {
119
+ ...request.metadata,
120
+ provenance: { ...request.metadata.provenance, backend: this.metadata.name },
121
+ },
122
+ };
123
+ const reader = response.body.getReader();
124
+ const decoder = new TextDecoder();
125
+ let buffer = '';
126
+ let contentBuffer = '';
127
+ try {
128
+ while (true) {
129
+ const { done, value } = await reader.read();
130
+ if (done) {
131
+ break;
132
+ }
133
+ buffer += decoder.decode(value, { stream: true });
134
+ const lines = buffer.split('\n');
135
+ buffer = lines.pop() || '';
136
+ for (const line of lines) {
137
+ if (!line.trim() || !line.startsWith('data: ')) {
138
+ continue;
139
+ }
140
+ const data = line.slice(6).trim();
141
+ if (data === '[DONE]') {
142
+ continue;
143
+ }
144
+ try {
145
+ const chunk = JSON.parse(data);
146
+ const delta = chunk.choices?.[0]?.delta?.content;
147
+ const finishReason = chunk.choices?.[0]?.finish_reason;
148
+ if (delta) {
149
+ contentBuffer += delta;
150
+ // Build content chunk with optional accumulated field
151
+ const contentChunk = {
152
+ type: 'content',
153
+ sequence: sequence++,
154
+ delta,
155
+ role: 'assistant',
156
+ };
157
+ // Add accumulated field if configured
158
+ if (includeBoth) {
159
+ contentChunk.accumulated = contentBuffer;
160
+ }
161
+ yield contentChunk;
162
+ }
163
+ if (finishReason) {
164
+ const message = { role: 'assistant', content: contentBuffer };
165
+ yield {
166
+ type: 'done',
167
+ sequence: sequence++,
168
+ finishReason: this.mapFinishReason(finishReason),
169
+ message,
170
+ };
171
+ }
172
+ }
173
+ catch (parseError) {
174
+ console.warn('Failed to parse Mistral SSE chunk:', data, parseError);
175
+ }
176
+ }
177
+ }
178
+ }
179
+ finally {
180
+ reader.releaseLock();
181
+ }
182
+ }
183
+ catch (error) {
184
+ yield {
185
+ type: 'error',
186
+ sequence: 0,
187
+ error: {
188
+ code: error instanceof Error ? error.name : 'UNKNOWN_ERROR',
189
+ message: error instanceof Error ? error.message : String(error),
190
+ },
191
+ };
192
+ }
193
+ }
194
+ async healthCheck() {
195
+ try {
196
+ const response = await fetch(`${this.baseURL}/models`, {
197
+ method: 'GET',
198
+ headers: { Authorization: `Bearer ${this.config.apiKey}` },
199
+ signal: AbortSignal.timeout(5000),
200
+ });
201
+ return response.ok;
202
+ }
203
+ catch {
204
+ return false;
205
+ }
206
+ }
207
+ estimateCost(request) {
208
+ const estimatedTokens = this.estimateTokens(request);
209
+ return Promise.resolve((estimatedTokens / 1000) * 0.002); // Rough estimate: $0.002 per 1K tokens
210
+ }
211
+ /**
212
+ * Convert IR request to Mistral format.
213
+ *
214
+ * Public method for testing and debugging - see what will be sent to Mistral.
215
+ */
216
+ fromIR(request) {
217
+ const { messages } = (0, ai_matey_utils_1.normalizeSystemMessages)(request.messages, this.metadata.capabilities.systemMessageStrategy, this.metadata.capabilities.supportsMultipleSystemMessages);
218
+ const mistralMessages = messages.map((msg) => ({
219
+ role: msg.role,
220
+ content: typeof msg.content === 'string'
221
+ ? msg.content
222
+ : msg.content.map((c) => (c.type === 'text' ? c.text : JSON.stringify(c))).join(''),
223
+ }));
224
+ return {
225
+ model: request.parameters?.model || 'mistral-small',
226
+ messages: mistralMessages,
227
+ temperature: request.parameters?.temperature,
228
+ max_tokens: request.parameters?.maxTokens,
229
+ top_p: request.parameters?.topP,
230
+ stream: request.stream,
231
+ random_seed: request.parameters?.seed,
232
+ };
233
+ }
234
+ /**
235
+ * Convert Mistral response to IR format.
236
+ *
237
+ * Public method for testing and debugging - parse Mistral responses manually.
238
+ */
239
+ toIR(response, originalRequest, latencyMs) {
240
+ const choice = response.choices[0];
241
+ if (!choice) {
242
+ throw new ai_matey_errors_1.AdapterConversionError({
243
+ code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
244
+ message: 'No choices in Mistral response',
245
+ provenance: { backend: this.metadata.name },
246
+ });
247
+ }
248
+ const message = { role: 'assistant', content: choice.message.content };
249
+ return {
250
+ message,
251
+ finishReason: this.mapFinishReason(choice.finish_reason || 'stop'),
252
+ usage: {
253
+ promptTokens: response.usage.prompt_tokens,
254
+ completionTokens: response.usage.completion_tokens,
255
+ totalTokens: response.usage.total_tokens,
256
+ },
257
+ metadata: {
258
+ ...originalRequest.metadata,
259
+ providerResponseId: response.id,
260
+ provenance: { ...originalRequest.metadata.provenance, backend: this.metadata.name },
261
+ custom: { ...originalRequest.metadata.custom, mistralResponseId: response.id, latencyMs },
262
+ },
263
+ raw: response,
264
+ };
265
+ }
266
+ mapFinishReason(reason) {
267
+ switch (reason) {
268
+ case 'stop':
269
+ return 'stop';
270
+ case 'length':
271
+ case 'model_length':
272
+ return 'length';
273
+ default:
274
+ return 'stop';
275
+ }
276
+ }
277
+ estimateTokens(request) {
278
+ let totalChars = 0;
279
+ for (const message of request.messages) {
280
+ if (typeof message.content === 'string') {
281
+ totalChars += message.content.length;
282
+ }
283
+ }
284
+ return Math.ceil(totalChars / 4);
285
+ }
286
+ }
287
+ exports.MistralBackendAdapter = MistralBackendAdapter;
288
+ //# sourceMappingURL=mistral.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral.js","sourceRoot":"","sources":["../../../src/providers/mistral.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * NVIDIA Backend Adapter
4
+ *
5
+ * Adapts Universal IR to NVIDIA NIM (NVIDIA Inference Microservices) API.
6
+ * NVIDIA NIM provides optimized inference for various models with OpenAI-compatible endpoints.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.NVIDIABackendAdapter = void 0;
12
+ exports.createNVIDIAAdapter = createNVIDIAAdapter;
13
+ const openai_js_1 = require("./openai.js");
14
+ /**
15
+ * Backend adapter for NVIDIA NIM API.
16
+ *
17
+ * NVIDIA NIM (NVIDIA Inference Microservices) provides optimized inference
18
+ * with OpenAI-compatible API. Supports various models including Llama,
19
+ * Mistral, and other popular open-source models.
20
+ *
21
+ * @example Basic Usage
22
+ * ```typescript
23
+ * import { NVIDIABackendAdapter } from 'ai.matey';
24
+ *
25
+ * const adapter = new NVIDIABackendAdapter({
26
+ * apiKey: process.env.NVIDIA_API_KEY,
27
+ * });
28
+ * ```
29
+ *
30
+ * @example With Specific Model
31
+ * ```typescript
32
+ * const adapter = new NVIDIABackendAdapter({
33
+ * apiKey: process.env.NVIDIA_API_KEY,
34
+ * });
35
+ *
36
+ * const response = await adapter.execute({
37
+ * messages: [{ role: 'user', content: 'Hello!' }],
38
+ * parameters: {
39
+ * model: 'meta/llama-3.1-405b-instruct',
40
+ * },
41
+ * });
42
+ * ```
43
+ *
44
+ * @example With Custom NIM Endpoint
45
+ * ```typescript
46
+ * const adapter = new NVIDIABackendAdapter({
47
+ * apiKey: process.env.NVIDIA_API_KEY,
48
+ * baseURL: 'https://your-nim-endpoint.nvidia.com/v1',
49
+ * });
50
+ * ```
51
+ *
52
+ * @example Streaming with NVIDIA NIM
53
+ * ```typescript
54
+ * const stream = adapter.executeStream({
55
+ * messages: [{ role: 'user', content: 'Tell me a story' }],
56
+ * parameters: {
57
+ * model: 'nvidia/llama-3.1-nemotron-70b-instruct',
58
+ * },
59
+ * });
60
+ *
61
+ * for await (const chunk of stream) {
62
+ * if (chunk.type === 'content') {
63
+ * console.log(chunk.delta);
64
+ * }
65
+ * }
66
+ * ```
67
+ */
68
+ class NVIDIABackendAdapter extends openai_js_1.OpenAIBackendAdapter {
69
+ constructor(config) {
70
+ // NVIDIA NIM API endpoint
71
+ const nvidiaConfig = {
72
+ ...config,
73
+ baseURL: config.baseURL || 'https://integrate.api.nvidia.com/v1',
74
+ };
75
+ // Pass NVIDIA-specific metadata to parent constructor
76
+ super(nvidiaConfig, {
77
+ name: 'nvidia-backend',
78
+ version: '1.0.0',
79
+ provider: 'NVIDIA',
80
+ capabilities: {
81
+ streaming: true,
82
+ multiModal: false, // Most NIM models are text-only
83
+ tools: true,
84
+ maxContextTokens: 128000, // Varies by model
85
+ systemMessageStrategy: 'in-messages',
86
+ supportsMultipleSystemMessages: false,
87
+ supportsTemperature: true,
88
+ supportsTopP: true,
89
+ supportsTopK: false,
90
+ supportsSeed: true,
91
+ supportsFrequencyPenalty: true,
92
+ supportsPresencePenalty: true,
93
+ maxStopSequences: 4,
94
+ },
95
+ config: {
96
+ baseURL: nvidiaConfig.baseURL,
97
+ },
98
+ });
99
+ }
100
+ /**
101
+ * Health check for NVIDIA NIM API.
102
+ */
103
+ async healthCheck() {
104
+ try {
105
+ const response = await fetch(`${this.baseURL}/models`, {
106
+ method: 'GET',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ Authorization: `Bearer ${this.config.apiKey}`,
110
+ ...this.config.headers,
111
+ },
112
+ signal: AbortSignal.timeout(5000),
113
+ });
114
+ return response.ok;
115
+ }
116
+ catch {
117
+ return false;
118
+ }
119
+ }
120
+ /**
121
+ * Estimate cost for NVIDIA NIM.
122
+ */
123
+ async estimateCost(request) {
124
+ // NVIDIA NIM pricing varies by model and deployment
125
+ // For cloud API, estimate based on token usage
126
+ const estimatedInputTokens = (await super.estimateCost(request)) || 0;
127
+ const estimatedOutputTokens = Math.min(request.parameters?.maxTokens || 1000, 4000);
128
+ // Rough estimate for NVIDIA cloud API (varies by model)
129
+ // Self-hosted NIM is free (just compute costs)
130
+ const baseURL = this.metadata.config.baseURL;
131
+ if (baseURL.includes('integrate.api.nvidia.com')) {
132
+ const inputCost = (estimatedInputTokens * 1000 * 0.2) / 1_000_000; // Rough estimate
133
+ const outputCost = (estimatedOutputTokens / 1_000_000) * 0.2;
134
+ return inputCost + outputCost;
135
+ }
136
+ // Self-hosted or custom endpoint
137
+ return null;
138
+ }
139
+ }
140
+ exports.NVIDIABackendAdapter = NVIDIABackendAdapter;
141
+ /**
142
+ * Create an NVIDIA NIM backend adapter.
143
+ *
144
+ * @param config - Adapter configuration
145
+ * @returns NVIDIA backend adapter
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * import { createNVIDIAAdapter } from 'ai.matey';
150
+ *
151
+ * const adapter = createNVIDIAAdapter({
152
+ * apiKey: process.env.NVIDIA_API_KEY,
153
+ * });
154
+ * ```
155
+ *
156
+ * @example Self-Hosted NIM
157
+ * ```typescript
158
+ * const adapter = createNVIDIAAdapter({
159
+ * baseURL: 'http://localhost:8000/v1',
160
+ * apiKey: 'not-needed', // Self-hosted may not need API key
161
+ * });
162
+ * ```
163
+ */
164
+ function createNVIDIAAdapter(config) {
165
+ return new NVIDIABackendAdapter(config);
166
+ }
167
+ //# sourceMappingURL=nvidia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nvidia.js","sourceRoot":"","sources":["../../../src/providers/nvidia.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAkKH,kDAEC;AAlKD,2CAA4F;AAG5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAa,oBACX,SAAQ,gCAAoB;IAG5B,YAAY,MAA4B;QACtC,0BAA0B;QAC1B,MAAM,YAAY,GAAyB;YACzC,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,qCAAqC;SACjE,CAAC;QAEF,sDAAsD;QACtD,KAAK,CAAC,YAAY,EAAE;YAClB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,KAAK,EAAE,gCAAgC;gBACnD,KAAK,EAAE,IAAI;gBACX,gBAAgB,EAAE,MAAM,EAAE,kBAAkB;gBAC5C,qBAAqB,EAAE,aAAa;gBACpC,8BAA8B,EAAE,KAAK;gBACrC,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,KAAK;gBACnB,YAAY,EAAE,IAAI;gBAClB,wBAAwB,EAAE,IAAI;gBAC9B,uBAAuB,EAAE,IAAI;gBAC7B,gBAAgB,EAAE,CAAC;aACpB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,YAAY,CAAC,OAAO;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBAC7C,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;iBACvB;gBACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAsB;QACvC,oDAAoD;QACpD,+CAA+C;QAC/C,MAAM,oBAAoB,GAAG,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;QAEpF,wDAAwD;QACxD,+CAA+C;QAC/C,MAAM,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,MAA8B,CAAC,OAAO,CAAC;QACtE,IAAI,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,CAAC,oBAAoB,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,iBAAiB;YACpF,MAAM,UAAU,GAAG,CAAC,qBAAqB,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC;YAC7D,OAAO,SAAS,GAAG,UAAU,CAAC;QAChC,CAAC;QAED,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA9ED,oDA8EC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,mBAAmB,CAAC,MAA4B;IAC9D,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}