@revealui/ai 0.1.2 → 0.1.3
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/dist/llm/client.d.ts +1 -1
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +15 -4
- package/dist/llm/providers/anthropic.d.ts.map +1 -1
- package/dist/llm/providers/anthropic.js +17 -3
- package/dist/llm/providers/base.d.ts +28 -1
- package/dist/llm/providers/base.d.ts.map +1 -1
- package/dist/llm/providers/inference-snaps.d.ts +44 -0
- package/dist/llm/providers/inference-snaps.d.ts.map +1 -0
- package/dist/llm/providers/inference-snaps.js +65 -0
- package/dist/llm/providers/openai.d.ts.map +1 -1
- package/dist/llm/providers/openai.js +2 -0
- package/dist/llm/semantic-cache.d.ts.map +1 -1
- package/dist/llm/semantic-cache.js +9 -1
- package/dist/llm/server.d.ts +1 -0
- package/dist/llm/server.d.ts.map +1 -1
- package/dist/llm/server.js +1 -0
- package/package.json +4 -4
package/dist/llm/client.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import type { ProviderHealthMonitor } from './provider-health.js';
|
|
|
15
15
|
import type { Embedding, LLMChatOptions, LLMChunk, LLMEmbedOptions, LLMResponse, LLMStreamOptions, Message } from './providers/base.js';
|
|
16
16
|
import { type CacheStats, type ResponseCacheOptions } from './response-cache.js';
|
|
17
17
|
import { type SemanticCacheOptions, type SemanticCacheStats } from './semantic-cache.js';
|
|
18
|
-
export type LLMProviderType = 'openai' | 'anthropic' | 'vultr' | 'groq' | 'ollama' | 'huggingface';
|
|
18
|
+
export type LLMProviderType = 'openai' | 'anthropic' | 'vultr' | 'groq' | 'ollama' | 'huggingface' | 'inference-snaps';
|
|
19
19
|
export interface LLMClientConfig {
|
|
20
20
|
provider: LLMProviderType;
|
|
21
21
|
apiKey: string;
|
package/dist/llm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY3F;AAID,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAInD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAEjE,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,eAAe,EAEf,WAAW,EACX,gBAAgB,EAChB,OAAO,EACR,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/llm/client.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/client.js
CHANGED
|
@@ -44,6 +44,7 @@ import { tenantProviderConfigs, userApiKeys } from '@revealui/db/schema';
|
|
|
44
44
|
import { and, eq } from 'drizzle-orm';
|
|
45
45
|
import { AnthropicProvider } from './providers/anthropic.js';
|
|
46
46
|
import { GroqProvider } from './providers/groq.js';
|
|
47
|
+
import { InferenceSnapsProvider, } from './providers/inference-snaps.js';
|
|
47
48
|
import { OllamaProvider } from './providers/ollama.js';
|
|
48
49
|
import { OpenAIProvider } from './providers/openai.js';
|
|
49
50
|
import { VultrProvider } from './providers/vultr.js';
|
|
@@ -112,6 +113,8 @@ export class LLMClient {
|
|
|
112
113
|
return new GroqProvider(config);
|
|
113
114
|
case 'ollama':
|
|
114
115
|
return new OllamaProvider(config);
|
|
116
|
+
case 'inference-snaps':
|
|
117
|
+
return new InferenceSnapsProvider(config);
|
|
115
118
|
default:
|
|
116
119
|
throw new Error(`Unknown provider type: ${String(type)}`);
|
|
117
120
|
}
|
|
@@ -377,6 +380,9 @@ export function createLLMClientFromEnv() {
|
|
|
377
380
|
if (process.env.LLM_PROVIDER) {
|
|
378
381
|
provider = process.env.LLM_PROVIDER;
|
|
379
382
|
}
|
|
383
|
+
else if (process.env.INFERENCE_SNAPS_BASE_URL) {
|
|
384
|
+
provider = 'inference-snaps';
|
|
385
|
+
}
|
|
380
386
|
else if (process.env.GROQ_API_KEY) {
|
|
381
387
|
provider = 'groq';
|
|
382
388
|
}
|
|
@@ -389,9 +395,9 @@ export function createLLMClientFromEnv() {
|
|
|
389
395
|
else {
|
|
390
396
|
// No provider configured — throw a clear error. OpenAI is intentionally excluded from
|
|
391
397
|
// auto-detection (no revenue yet). Set LLM_PROVIDER=openai explicitly if needed.
|
|
392
|
-
throw new Error('No LLM provider configured. Set one of:
|
|
393
|
-
'OLLAMA_BASE_URL (local),
|
|
394
|
-
'Alternatively, set LLM_PROVIDER explicitly.');
|
|
398
|
+
throw new Error('No LLM provider configured. Set one of: INFERENCE_SNAPS_BASE_URL (local snap), ' +
|
|
399
|
+
'GROQ_API_KEY (recommended cloud), OLLAMA_BASE_URL (local Ollama), ' +
|
|
400
|
+
'or ANTHROPIC_API_KEY. Alternatively, set LLM_PROVIDER explicitly.');
|
|
395
401
|
}
|
|
396
402
|
let apiKey;
|
|
397
403
|
let baseURL;
|
|
@@ -422,9 +428,14 @@ export function createLLMClientFromEnv() {
|
|
|
422
428
|
baseURL = process.env.OLLAMA_BASE_URL;
|
|
423
429
|
defaultModel = 'llama3.2:3b';
|
|
424
430
|
}
|
|
431
|
+
else if (provider === 'inference-snaps') {
|
|
432
|
+
apiKey = 'inference-snaps'; // inference-snaps ignores the API key
|
|
433
|
+
baseURL = process.env.INFERENCE_SNAPS_BASE_URL;
|
|
434
|
+
defaultModel = 'gemma3';
|
|
435
|
+
}
|
|
425
436
|
if (!apiKey) {
|
|
426
437
|
throw new Error(`API key not found for provider "${provider}". Set the corresponding env var ` +
|
|
427
|
-
`(GROQ_API_KEY, OLLAMA_BASE_URL, ANTHROPIC_API_KEY, or OPENAI_API_KEY).`);
|
|
438
|
+
`(INFERENCE_SNAPS_BASE_URL, GROQ_API_KEY, OLLAMA_BASE_URL, ANTHROPIC_API_KEY, or OPENAI_API_KEY).`);
|
|
428
439
|
}
|
|
429
440
|
return new LLMClient({
|
|
430
441
|
provider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,OAAO,EAER,MAAM,WAAW,CAAA;AAelB,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAqDD,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,uBAAuB;IAKrC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IA6F/E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;IAUpF,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;IAoGvF;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;;OAGG;IACH,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;CAkBvB"}
|
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Implementation of LLMProvider for Anthropic Claude API
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* Extract plain text from a message content value.
|
|
8
|
+
* Anthropic has its own image format — for now, image parts are silently skipped
|
|
9
|
+
* and only text parts are forwarded. Vision via Anthropic is out of scope.
|
|
10
|
+
*/
|
|
11
|
+
function toTextContent(content) {
|
|
12
|
+
if (typeof content === 'string')
|
|
13
|
+
return content;
|
|
14
|
+
return content
|
|
15
|
+
.filter((p) => p.type === 'text')
|
|
16
|
+
.map((p) => p.text)
|
|
17
|
+
.join('\n');
|
|
18
|
+
}
|
|
6
19
|
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
20
|
const isTextBlock = (block) => block.type === 'text' && typeof block.text === 'string';
|
|
8
21
|
const isToolUseBlock = (block) => block.type === 'tool_use';
|
|
@@ -198,12 +211,12 @@ export class AnthropicProvider {
|
|
|
198
211
|
}
|
|
199
212
|
// If caching disabled, use simple string format
|
|
200
213
|
if (!enableCache) {
|
|
201
|
-
return systemMessages.map((m) => m.content).join('\n');
|
|
214
|
+
return systemMessages.map((m) => toTextContent(m.content)).join('\n');
|
|
202
215
|
}
|
|
203
216
|
// With caching, use structured format and cache the last block
|
|
204
217
|
return systemMessages.map((msg, index) => ({
|
|
205
218
|
type: 'text',
|
|
206
|
-
text: msg.content,
|
|
219
|
+
text: toTextContent(msg.content),
|
|
207
220
|
// Cache the last system message (most likely to be reused)
|
|
208
221
|
...(index === systemMessages.length - 1 && msg.cacheControl
|
|
209
222
|
? { cache_control: msg.cacheControl }
|
|
@@ -239,7 +252,8 @@ export class AnthropicProvider {
|
|
|
239
252
|
}
|
|
240
253
|
const formatted = {
|
|
241
254
|
role: msg.role === 'assistant' ? 'assistant' : 'user',
|
|
242
|
-
|
|
255
|
+
// Anthropic uses a different image format; extract text only for now.
|
|
256
|
+
content: toTextContent(msg.content),
|
|
243
257
|
};
|
|
244
258
|
return formatted;
|
|
245
259
|
})
|
|
@@ -3,9 +3,36 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Abstract interface for all LLM providers (OpenAI, Anthropic, etc.)
|
|
5
5
|
*/
|
|
6
|
+
/**
|
|
7
|
+
* A plain text content part — used in multipart messages.
|
|
8
|
+
*/
|
|
9
|
+
export interface TextPart {
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* An image content part — base64 data URL or HTTPS URL.
|
|
15
|
+
* Supported by OpenAI-compatible providers (inference-snaps, Ollama vision, GPT-4o).
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* { type: 'image_url', image_url: { url: 'data:image/jpeg;base64,...' } }
|
|
19
|
+
*/
|
|
20
|
+
export interface ImagePart {
|
|
21
|
+
type: 'image_url';
|
|
22
|
+
image_url: {
|
|
23
|
+
/** Base64 data URL (data:image/jpeg;base64,...) or HTTPS image URL */
|
|
24
|
+
url: string;
|
|
25
|
+
/** Resolution hint for the model. Defaults to 'auto'. */
|
|
26
|
+
detail?: 'low' | 'high' | 'auto';
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Union of all content part types for multipart messages. */
|
|
30
|
+
export type ContentPart = TextPart | ImagePart;
|
|
6
31
|
export interface Message {
|
|
7
32
|
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
8
|
-
content
|
|
33
|
+
/** Plain text or multipart content (text + images). Arrays are passed through
|
|
34
|
+
* to OpenAI-compatible providers as-is; other providers receive text parts only. */
|
|
35
|
+
content: string | ContentPart[];
|
|
9
36
|
name?: string;
|
|
10
37
|
toolCalls?: ToolCall[];
|
|
11
38
|
toolCallId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IAC9C,OAAO,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Inference Snaps Provider
|
|
3
|
+
*
|
|
4
|
+
* Local inference via Canonical's inference-snaps OpenAI-compatible API.
|
|
5
|
+
* No API key required. Zero cost, fully offline, hardware-optimized.
|
|
6
|
+
*
|
|
7
|
+
* Supported models (snaps):
|
|
8
|
+
* gemma3 — general LLM + vision (text/image in, text out)
|
|
9
|
+
* deepseek-r1 — reasoning LLM
|
|
10
|
+
* qwen-vl — vision-language model (image + text)
|
|
11
|
+
* nemotron-nano — general LLM (reasoning + non-reasoning)
|
|
12
|
+
*
|
|
13
|
+
* Install a model:
|
|
14
|
+
* sudo snap install gemma3
|
|
15
|
+
* gemma3 set http.port=9090 # optional: change port (default varies)
|
|
16
|
+
* gemma3 status # shows base URL and available models
|
|
17
|
+
*
|
|
18
|
+
* Set env vars:
|
|
19
|
+
* INFERENCE_SNAPS_BASE_URL=http://localhost:9090/v1
|
|
20
|
+
* LLM_MODEL=gemma3 # must match the snap name / model ID
|
|
21
|
+
* LLM_EMBED_MODEL=gemma3 # optional: model for embeddings
|
|
22
|
+
*
|
|
23
|
+
* Docs: https://documentation.ubuntu.com/inference-snaps
|
|
24
|
+
*/
|
|
25
|
+
import type { Embedding, LLMChatOptions, LLMChunk, LLMEmbedOptions, LLMProvider, LLMProviderConfig, LLMResponse, LLMStreamOptions, Message } from './base.js';
|
|
26
|
+
export interface InferenceSnapsProviderConfig extends Omit<LLMProviderConfig, 'apiKey'> {
|
|
27
|
+
apiKey?: string;
|
|
28
|
+
/** Base URL of the inference-snaps service, e.g. http://localhost:9090/v1 */
|
|
29
|
+
baseURL: string;
|
|
30
|
+
/** Chat/vision model name — must match the snap's model ID (e.g. 'gemma3', 'deepseek-r1') */
|
|
31
|
+
model?: string;
|
|
32
|
+
/** Embedding model name. Defaults to the chat model when omitted. */
|
|
33
|
+
embedModel?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare class InferenceSnapsProvider implements LLMProvider {
|
|
36
|
+
private inner;
|
|
37
|
+
private embedModel;
|
|
38
|
+
private baseURL;
|
|
39
|
+
constructor(config: InferenceSnapsProviderConfig);
|
|
40
|
+
chat(messages: Message[], options?: LLMChatOptions): Promise<LLMResponse>;
|
|
41
|
+
stream(messages: Message[], options?: LLMStreamOptions): AsyncIterable<LLMChunk>;
|
|
42
|
+
embed(text: string | string[], _options?: LLMEmbedOptions): Promise<Embedding | Embedding[]>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=inference-snaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference-snaps.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/inference-snaps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,OAAO,EACR,MAAM,WAAW,CAAA;AAGlB,MAAM,WAAW,4BAA6B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IACrF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAA;IACf,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,sBAAuB,YAAW,WAAW;IACxD,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,4BAA4B;IAahD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;IAI1E,KAAK,CACT,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;CAsBpC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Inference Snaps Provider
|
|
3
|
+
*
|
|
4
|
+
* Local inference via Canonical's inference-snaps OpenAI-compatible API.
|
|
5
|
+
* No API key required. Zero cost, fully offline, hardware-optimized.
|
|
6
|
+
*
|
|
7
|
+
* Supported models (snaps):
|
|
8
|
+
* gemma3 — general LLM + vision (text/image in, text out)
|
|
9
|
+
* deepseek-r1 — reasoning LLM
|
|
10
|
+
* qwen-vl — vision-language model (image + text)
|
|
11
|
+
* nemotron-nano — general LLM (reasoning + non-reasoning)
|
|
12
|
+
*
|
|
13
|
+
* Install a model:
|
|
14
|
+
* sudo snap install gemma3
|
|
15
|
+
* gemma3 set http.port=9090 # optional: change port (default varies)
|
|
16
|
+
* gemma3 status # shows base URL and available models
|
|
17
|
+
*
|
|
18
|
+
* Set env vars:
|
|
19
|
+
* INFERENCE_SNAPS_BASE_URL=http://localhost:9090/v1
|
|
20
|
+
* LLM_MODEL=gemma3 # must match the snap name / model ID
|
|
21
|
+
* LLM_EMBED_MODEL=gemma3 # optional: model for embeddings
|
|
22
|
+
*
|
|
23
|
+
* Docs: https://documentation.ubuntu.com/inference-snaps
|
|
24
|
+
*/
|
|
25
|
+
import { OpenAIProvider } from './openai.js';
|
|
26
|
+
export class InferenceSnapsProvider {
|
|
27
|
+
inner;
|
|
28
|
+
embedModel;
|
|
29
|
+
baseURL;
|
|
30
|
+
constructor(config) {
|
|
31
|
+
this.baseURL = config.baseURL;
|
|
32
|
+
// Use the same model for embeddings unless explicitly overridden
|
|
33
|
+
this.embedModel = config.embedModel ?? config.model ?? 'gemma3';
|
|
34
|
+
this.inner = new OpenAIProvider({
|
|
35
|
+
...config,
|
|
36
|
+
// inference-snaps ignores the API key; OpenAI client requires a non-empty value
|
|
37
|
+
apiKey: config.apiKey ?? 'inference-snaps',
|
|
38
|
+
baseURL: config.baseURL,
|
|
39
|
+
model: config.model ?? 'gemma3',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
chat(messages, options) {
|
|
43
|
+
return this.inner.chat(messages, options);
|
|
44
|
+
}
|
|
45
|
+
stream(messages, options) {
|
|
46
|
+
return this.inner.stream(messages, options);
|
|
47
|
+
}
|
|
48
|
+
async embed(text, _options) {
|
|
49
|
+
const texts = Array.isArray(text) ? text : [text];
|
|
50
|
+
const response = await fetch(`${this.baseURL}/embeddings`, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers: { 'Content-Type': 'application/json' },
|
|
53
|
+
body: JSON.stringify({ model: this.embedModel, input: texts }),
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
throw new Error(`inference-snaps embeddings error: ${response.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const data = (await response.json());
|
|
59
|
+
const embeddings = (data.data ?? []).map((item) => {
|
|
60
|
+
const vector = item.embedding ?? [];
|
|
61
|
+
return { vector, dimension: vector.length, model: this.embedModel };
|
|
62
|
+
});
|
|
63
|
+
return Array.isArray(text) ? embeddings : embeddings[0];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,SAAS,EAET,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,OAAO,EAER,MAAM,WAAW,CAAA;AAElB,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAsDD,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,oBAAoB;IAKlC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAgFzE,KAAK,CACT,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;IA2C5B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;IA0FvF,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,SAAS,EAET,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,OAAO,EAER,MAAM,WAAW,CAAA;AAElB,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAsDD,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAE,oBAAoB;IAKlC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAgFzE,KAAK,CACT,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;IA2C5B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC;IA0FvF,OAAO,CAAC,cAAc;CA4BvB"}
|
|
@@ -224,6 +224,8 @@ export class OpenAIProvider {
|
|
|
224
224
|
return messages.map((msg) => {
|
|
225
225
|
const formatted = {
|
|
226
226
|
role: msg.role,
|
|
227
|
+
// Pass array content through as-is — OpenAI-compatible APIs (including
|
|
228
|
+
// inference-snaps vision models) accept the same multipart format natively.
|
|
227
229
|
content: msg.content,
|
|
228
230
|
};
|
|
229
231
|
if (msg.name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-cache.d.ts","sourceRoot":"","sources":["../../src/llm/semantic-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,KAAK,CAIZ;IACD,OAAO,CAAC,MAAM,CAAkC;gBAEpC,OAAO,GAAE,oBAAyB;IAiB9C;;;;;OAKG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAwFrE;;;;;;OAMG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;KACpB,GACA,OAAO,CAAC,IAAI,CAAC;IAqChB;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"semantic-cache.d.ts","sourceRoot":"","sources":["../../src/llm/semantic-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,KAAK,CAIZ;IACD,OAAO,CAAC,MAAM,CAAkC;gBAEpC,OAAO,GAAE,oBAAyB;IAiB9C;;;;;OAKG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAwFrE;;;;;;OAMG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,WAAW,EAAE,MAAM,CAAA;KACpB,GACA,OAAO,CAAC,IAAI,CAAC;IAqChB;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;IAczC;;OAEG;IACH,QAAQ,IAAI,kBAAkB;IAmB9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAQlB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAMrC;;;;;;;;;;;;OAYG;IACG,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAKpF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE;IACP,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;CACvB,GACA;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB,CAUA;AAQD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAKpF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|
|
@@ -192,7 +192,15 @@ export class SemanticCache {
|
|
|
192
192
|
extractQuery(messages) {
|
|
193
193
|
return messages
|
|
194
194
|
.filter((m) => m.role === 'user')
|
|
195
|
-
.map((m) =>
|
|
195
|
+
.map((m) => {
|
|
196
|
+
if (typeof m.content === 'string')
|
|
197
|
+
return m.content;
|
|
198
|
+
// Multipart: extract text parts only for cache key generation
|
|
199
|
+
return m.content
|
|
200
|
+
.filter((p) => p.type === 'text')
|
|
201
|
+
.map((p) => p.text)
|
|
202
|
+
.join(' ');
|
|
203
|
+
})
|
|
196
204
|
.join(' ');
|
|
197
205
|
}
|
|
198
206
|
/**
|
package/dist/llm/server.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export * from './client.js';
|
|
|
8
8
|
export * from './providers/anthropic.js';
|
|
9
9
|
export * from './providers/base.js';
|
|
10
10
|
export * from './providers/groq.js';
|
|
11
|
+
export * from './providers/inference-snaps.js';
|
|
11
12
|
export * from './providers/ollama.js';
|
|
12
13
|
export * from './providers/openai.js';
|
|
13
14
|
export * from './providers/vultr.js';
|
package/dist/llm/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/llm/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,aAAa,CAAA;AAG3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/llm/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,aAAa,CAAA;AAG3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA"}
|
package/dist/llm/server.js
CHANGED
|
@@ -10,6 +10,7 @@ export * from './client.js';
|
|
|
10
10
|
export * from './providers/anthropic.js';
|
|
11
11
|
export * from './providers/base.js';
|
|
12
12
|
export * from './providers/groq.js';
|
|
13
|
+
export * from './providers/inference-snaps.js';
|
|
13
14
|
export * from './providers/ollama.js';
|
|
14
15
|
export * from './providers/openai.js';
|
|
15
16
|
export * from './providers/vultr.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revealui/ai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "AI system for RevealUI - memory, LLM, orchestration, and tools",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"lru-cache": "^11.2.5",
|
|
22
22
|
"zod": "^4.3.5",
|
|
23
|
-
"@revealui/
|
|
24
|
-
"@revealui/core": "0.2.
|
|
25
|
-
"@revealui/
|
|
23
|
+
"@revealui/db": "^0.2.0",
|
|
24
|
+
"@revealui/core": "0.2.1",
|
|
25
|
+
"@revealui/contracts": "1.1.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@testing-library/react": "^16.3.2",
|