@revealui/ai 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/llm/client.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { ProviderHealthMonitor } from './provider-health.js';
|
|
|
10
10
|
import type { Embedding, LLMChatOptions, LLMChunk, LLMEmbedOptions, LLMProvider, LLMResponse, LLMStreamOptions, Message } from './providers/base.js';
|
|
11
11
|
import { type CacheStats, type ResponseCacheOptions } from './response-cache.js';
|
|
12
12
|
import { type SemanticCacheOptions, type SemanticCacheStats } from './semantic-cache.js';
|
|
13
|
-
export type LLMProviderType = 'anthropic' | 'openai' | 'groq' | 'huggingface' | 'ollama' | 'inference-snaps';
|
|
13
|
+
export type LLMProviderType = 'anthropic' | 'openai' | 'groq' | 'huggingface' | 'ollama' | 'inference-snaps' | 'xai';
|
|
14
14
|
/**
|
|
15
15
|
* Providers reachable from a hosted (serverless) deployment. Localhost-only
|
|
16
16
|
* providers are false. Consumed by PR-2/PR-3 (resolver + settings UI) to pick
|
|
@@ -155,6 +155,7 @@ export declare class LLMClient {
|
|
|
155
155
|
* ollama → gemma4:e2b (base URL defaults to http://localhost:11434)
|
|
156
156
|
* anthropic → claude-sonnet-4-6 (base URL defaults to https://api.anthropic.com/v1)
|
|
157
157
|
* openai → gpt-4o (base URL defaults to https://api.openai.com/v1)
|
|
158
|
+
* xai → grok-4.5 (base URL defaults to https://api.x.ai/v1)
|
|
158
159
|
*/
|
|
159
160
|
export declare function createLLMClientFromEnv(): LLMClient;
|
|
160
161
|
/**
|
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;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EACL,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,OAAO,EACR,MAAM,qBAAqB,CAAC;
|
|
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
|
@@ -16,6 +16,7 @@ import { InferenceSnapsProvider, } from './providers/inference-snaps.js';
|
|
|
16
16
|
import { OllamaProvider } from './providers/ollama.js';
|
|
17
17
|
import { OpenAIProvider } from './providers/openai.js';
|
|
18
18
|
import { OpenAICompatProvider } from './providers/openai-compat.js';
|
|
19
|
+
import { XaiProvider } from './providers/xai.js';
|
|
19
20
|
import { ResponseCache } from './response-cache.js';
|
|
20
21
|
import { SemanticCache, } from './semantic-cache.js';
|
|
21
22
|
import { estimateRequest as _estimateRequestTokens } from './token-counter.js';
|
|
@@ -31,6 +32,7 @@ export const hostedViable = {
|
|
|
31
32
|
huggingface: true,
|
|
32
33
|
ollama: false,
|
|
33
34
|
'inference-snaps': false,
|
|
35
|
+
xai: true,
|
|
34
36
|
};
|
|
35
37
|
/** True when the provider can serve a hosted (serverless) deployment. */
|
|
36
38
|
export function isHostedViable(provider) {
|
|
@@ -114,6 +116,8 @@ export class LLMClient {
|
|
|
114
116
|
return new OllamaProvider(config);
|
|
115
117
|
case 'inference-snaps':
|
|
116
118
|
return new InferenceSnapsProvider(config);
|
|
119
|
+
case 'xai':
|
|
120
|
+
return new XaiProvider(config);
|
|
117
121
|
case 'huggingface':
|
|
118
122
|
// HuggingFace exposes an OpenAI-compatible inference endpoint; baseURL is
|
|
119
123
|
// per-model (HF_MODEL_URL), so it has no dedicated wrapper — the compat
|
|
@@ -466,6 +470,7 @@ export class LLMClient {
|
|
|
466
470
|
* ollama → gemma4:e2b (base URL defaults to http://localhost:11434)
|
|
467
471
|
* anthropic → claude-sonnet-4-6 (base URL defaults to https://api.anthropic.com/v1)
|
|
468
472
|
* openai → gpt-4o (base URL defaults to https://api.openai.com/v1)
|
|
473
|
+
* xai → grok-4.5 (base URL defaults to https://api.x.ai/v1)
|
|
469
474
|
*/
|
|
470
475
|
export function createLLMClientFromEnv() {
|
|
471
476
|
// Auto-detect provider when LLM_PROVIDER is not explicitly set. The existing
|
|
@@ -490,6 +495,9 @@ export function createLLMClientFromEnv() {
|
|
|
490
495
|
else if (process.env.OPENAI_API_KEY) {
|
|
491
496
|
provider = 'openai';
|
|
492
497
|
}
|
|
498
|
+
else if (process.env.XAI_API_KEY) {
|
|
499
|
+
provider = 'xai';
|
|
500
|
+
}
|
|
493
501
|
else {
|
|
494
502
|
// Zero-config Ubuntu default: assume Inference Snaps on the standard local
|
|
495
503
|
// port. This localhost default is unreachable inside a hosted serverless
|
|
@@ -515,6 +523,11 @@ export function createLLMClientFromEnv() {
|
|
|
515
523
|
baseURL = process.env.OPENAI_BASE_URL ?? 'https://api.openai.com/v1';
|
|
516
524
|
defaultModel = 'gpt-4o';
|
|
517
525
|
}
|
|
526
|
+
else if (provider === 'xai') {
|
|
527
|
+
apiKey = process.env.XAI_API_KEY;
|
|
528
|
+
baseURL = process.env.XAI_BASE_URL ?? 'https://api.x.ai/v1';
|
|
529
|
+
defaultModel = 'grok-4.5';
|
|
530
|
+
}
|
|
518
531
|
else if (provider === 'huggingface') {
|
|
519
532
|
apiKey = process.env.HF_TOKEN;
|
|
520
533
|
baseURL = process.env.HF_MODEL_URL;
|
|
@@ -541,7 +554,7 @@ export function createLLMClientFromEnv() {
|
|
|
541
554
|
if (!apiKey) {
|
|
542
555
|
throw new Error(`API key not found for provider "${provider}". Set the corresponding env var ` +
|
|
543
556
|
`(INFERENCE_SNAPS_BASE_URL, GROQ_API_KEY, OLLAMA_BASE_URL, HF_TOKEN, ` +
|
|
544
|
-
`ANTHROPIC_API_KEY, or
|
|
557
|
+
`ANTHROPIC_API_KEY, OPENAI_API_KEY, or XAI_API_KEY).`);
|
|
545
558
|
}
|
|
546
559
|
return new LLMClient({
|
|
547
560
|
provider,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xAI (Grok) Provider
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper over OpenAICompatProvider using xAI's OpenAI-compatible
|
|
5
|
+
* surface at https://api.x.ai/v1. No proprietary xAI SDK — the fleet posture
|
|
6
|
+
* is "No proprietary provider SDKs" (see client.ts). BYOK only: the user
|
|
7
|
+
* brings their own xAI API key, RevealUI never hosts one.
|
|
8
|
+
*
|
|
9
|
+
* Docs: https://docs.x.ai/developers/grok-4-5
|
|
10
|
+
*/
|
|
11
|
+
import type { Embedding, LLMChatOptions, LLMChunk, LLMEmbedOptions, LLMProvider, LLMProviderConfig, LLMResponse, LLMStreamOptions, Message, ReasonerCapabilities } from './base.js';
|
|
12
|
+
export interface XaiProviderConfig extends Omit<LLMProviderConfig, 'apiKey'> {
|
|
13
|
+
apiKey: string;
|
|
14
|
+
/** Defaults to https://api.x.ai/v1 */
|
|
15
|
+
baseURL?: string;
|
|
16
|
+
/** Defaults to grok-4.5 */
|
|
17
|
+
model?: string;
|
|
18
|
+
timeout?: number;
|
|
19
|
+
maxRetries?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class XaiProvider implements LLMProvider {
|
|
22
|
+
private inner;
|
|
23
|
+
constructor(config: XaiProviderConfig);
|
|
24
|
+
capabilities(): ReasonerCapabilities;
|
|
25
|
+
chat(messages: Message[], options?: LLMChatOptions): Promise<LLMResponse>;
|
|
26
|
+
stream(messages: Message[], options?: LLMStreamOptions): AsyncIterable<LLMChunk>;
|
|
27
|
+
embed(_text: string | string[], _options?: LLMEmbedOptions): Promise<Embedding | Embedding[]>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=xai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/xai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,oBAAoB,EACrB,MAAM,WAAW,CAAC;AAGnB,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,KAAK,CAAuB;gBAExB,MAAM,EAAE,iBAAiB;IAQrC,YAAY,IAAI,oBAAoB;IAepC,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;IAIhF,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;CAG9F"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xAI (Grok) Provider
|
|
3
|
+
*
|
|
4
|
+
* Thin wrapper over OpenAICompatProvider using xAI's OpenAI-compatible
|
|
5
|
+
* surface at https://api.x.ai/v1. No proprietary xAI SDK — the fleet posture
|
|
6
|
+
* is "No proprietary provider SDKs" (see client.ts). BYOK only: the user
|
|
7
|
+
* brings their own xAI API key, RevealUI never hosts one.
|
|
8
|
+
*
|
|
9
|
+
* Docs: https://docs.x.ai/developers/grok-4-5
|
|
10
|
+
*/
|
|
11
|
+
import { OpenAICompatProvider } from './openai-compat.js';
|
|
12
|
+
export class XaiProvider {
|
|
13
|
+
inner;
|
|
14
|
+
constructor(config) {
|
|
15
|
+
this.inner = new OpenAICompatProvider({
|
|
16
|
+
...config,
|
|
17
|
+
baseURL: config.baseURL ?? 'https://api.x.ai/v1',
|
|
18
|
+
model: config.model ?? 'grok-4.5',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
capabilities() {
|
|
22
|
+
return {
|
|
23
|
+
providerTag: 'xai',
|
|
24
|
+
tools: true,
|
|
25
|
+
parallelToolCalls: false,
|
|
26
|
+
vision: false,
|
|
27
|
+
streaming: true,
|
|
28
|
+
// xAI exposes no embeddings endpoint on its OpenAI-compat surface.
|
|
29
|
+
embeddings: false,
|
|
30
|
+
reasoningEffort: false,
|
|
31
|
+
promptCache: false,
|
|
32
|
+
structuredOutput: false,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
chat(messages, options) {
|
|
36
|
+
return this.inner.chat(messages, options);
|
|
37
|
+
}
|
|
38
|
+
stream(messages, options) {
|
|
39
|
+
return this.inner.stream(messages, options);
|
|
40
|
+
}
|
|
41
|
+
embed(_text, _options) {
|
|
42
|
+
throw new Error('xAI does not expose an embeddings endpoint. Use OpenAI or Ollama.');
|
|
43
|
+
}
|
|
44
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revealui/ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "AI runtime for agent-driven products — agents, memory, LLM providers (Inference Snaps, Ollama, OpenAI-compatible), tools, and orchestration. Anthropic-SDK-free.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"lru-cache": "^11.5.1",
|
|
27
27
|
"zod": "^4.4.3",
|
|
28
|
-
"@revealui/
|
|
29
|
-
"@revealui/
|
|
30
|
-
"@revealui/db": "0.
|
|
28
|
+
"@revealui/core": "0.12.0",
|
|
29
|
+
"@revealui/contracts": "0.8.0",
|
|
30
|
+
"@revealui/db": "0.9.0",
|
|
31
31
|
"@revealui/resilience": "0.2.4"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|