@adia-ai/llm 0.6.0 → 0.6.2
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/CHANGELOG.md +22 -0
- package/adapters/anthropic.d.ts +82 -0
- package/adapters/anthropic.d.ts.map +1 -0
- package/adapters/anthropic.js +94 -96
- package/adapters/anthropic.js.map +1 -0
- package/adapters/gemini.d.ts +32 -0
- package/adapters/gemini.d.ts.map +1 -0
- package/adapters/gemini.js +76 -89
- package/adapters/gemini.js.map +1 -0
- package/adapters/index.d.ts +94 -0
- package/adapters/index.d.ts.map +1 -0
- package/adapters/index.js +91 -103
- package/adapters/index.js.map +1 -0
- package/adapters/openai.d.ts +32 -0
- package/adapters/openai.d.ts.map +1 -0
- package/adapters/openai.js +76 -75
- package/adapters/openai.js.map +1 -0
- package/adapters/sse.d.ts +11 -0
- package/adapters/sse.d.ts.map +1 -0
- package/adapters/sse.js +46 -39
- package/adapters/sse.js.map +1 -0
- package/index.d.ts +14 -0
- package/index.d.ts.map +1 -0
- package/index.js +11 -20
- package/index.js.map +1 -0
- package/llm-bridge.d.ts +102 -0
- package/llm-bridge.d.ts.map +1 -0
- package/llm-bridge.js +204 -219
- package/llm-bridge.js.map +1 -0
- package/llm-stub.d.ts +38 -0
- package/llm-stub.d.ts.map +1 -0
- package/llm-stub.js +43 -57
- package/llm-stub.js.map +1 -0
- package/models.d.ts +25 -0
- package/models.d.ts.map +1 -0
- package/models.js +20 -21
- package/models.js.map +1 -0
- package/package.json +22 -3
package/llm-stub.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StubLLMAdapter — Deterministic LLM adapter for testing.
|
|
3
|
+
*
|
|
4
|
+
* Returns canned A2UI responses for known prompts. Implements the same
|
|
5
|
+
* interface that a real LLM adapter would (complete, stream) so pipeline
|
|
6
|
+
* code can develop against it without API keys.
|
|
7
|
+
*/
|
|
8
|
+
interface CompleteOptions {
|
|
9
|
+
messages: Array<{
|
|
10
|
+
role: string;
|
|
11
|
+
content: string;
|
|
12
|
+
}>;
|
|
13
|
+
systemPrompt?: string;
|
|
14
|
+
}
|
|
15
|
+
interface CompleteResult {
|
|
16
|
+
content: string;
|
|
17
|
+
usage: {
|
|
18
|
+
inputTokens: number;
|
|
19
|
+
outputTokens: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
type StreamChunk = {
|
|
23
|
+
type: 'text';
|
|
24
|
+
content: string;
|
|
25
|
+
};
|
|
26
|
+
export declare class StubLLMAdapter {
|
|
27
|
+
#private;
|
|
28
|
+
/**
|
|
29
|
+
* Complete a prompt and return a full A2UI response.
|
|
30
|
+
*/
|
|
31
|
+
complete({ messages, systemPrompt: _systemPrompt }: CompleteOptions): Promise<CompleteResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Stream a response as an async iterable of chunks.
|
|
34
|
+
*/
|
|
35
|
+
stream(request: CompleteOptions): AsyncGenerator<StreamChunk>;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=llm-stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-stub.d.ts","sourceRoot":"","sources":["src/llm-stub.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAUD,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,qBAAa,cAAc;;IACzB;;OAEG;IACG,QAAQ,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAmBnG;;OAEG;IACI,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAAC,WAAW,CAAC;CAmBrE"}
|
package/llm-stub.js
CHANGED
|
@@ -5,65 +5,51 @@
|
|
|
5
5
|
* interface that a real LLM adapter would (complete, stream) so pipeline
|
|
6
6
|
* code can develop against it without API keys.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
8
|
export class StubLLMAdapter {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
* @param {string} intent
|
|
52
|
-
* @returns {object[]}
|
|
53
|
-
*/
|
|
54
|
-
#buildResponse(intent) {
|
|
55
|
-
return [
|
|
56
|
-
{ id: 'root', component: 'Card', children: ['hdr', 'sec'] },
|
|
57
|
-
{ id: 'hdr', component: 'Header', children: ['title'] },
|
|
58
|
-
{ id: 'title', component: 'Text', variant: 'heading', textContent: 'Generated UI' },
|
|
59
|
-
{ id: 'sec', component: 'Section', children: ['col'] },
|
|
60
|
-
{ id: 'col', component: 'Column', children: ['desc'] },
|
|
61
|
-
{ id: 'desc', component: 'Text', variant: 'body', textContent: intent || 'No intent provided' },
|
|
62
|
-
];
|
|
63
|
-
}
|
|
9
|
+
/**
|
|
10
|
+
* Complete a prompt and return a full A2UI response.
|
|
11
|
+
*/
|
|
12
|
+
async complete({ messages, systemPrompt: _systemPrompt }) {
|
|
13
|
+
const lastMessage = messages?.[messages.length - 1]?.content ?? '';
|
|
14
|
+
const components = this.#buildResponse(lastMessage);
|
|
15
|
+
return {
|
|
16
|
+
content: JSON.stringify([
|
|
17
|
+
{
|
|
18
|
+
type: 'updateComponents',
|
|
19
|
+
surfaceId: 'default',
|
|
20
|
+
components,
|
|
21
|
+
},
|
|
22
|
+
]),
|
|
23
|
+
usage: {
|
|
24
|
+
inputTokens: estimateTokens(JSON.stringify(messages)),
|
|
25
|
+
outputTokens: estimateTokens(JSON.stringify(components)),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Stream a response as an async iterable of chunks.
|
|
31
|
+
*/
|
|
32
|
+
async *stream(request) {
|
|
33
|
+
const result = await this.complete(request);
|
|
34
|
+
// Simulate progressive streaming by yielding the full response
|
|
35
|
+
yield { type: 'text', content: result.content };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Build a canned component tree from the intent text.
|
|
39
|
+
*/
|
|
40
|
+
#buildResponse(intent) {
|
|
41
|
+
return [
|
|
42
|
+
{ id: 'root', component: 'Card', children: ['hdr', 'sec'] },
|
|
43
|
+
{ id: 'hdr', component: 'Header', children: ['title'] },
|
|
44
|
+
{ id: 'title', component: 'Text', variant: 'heading', textContent: 'Generated UI' },
|
|
45
|
+
{ id: 'sec', component: 'Section', children: ['col'] },
|
|
46
|
+
{ id: 'col', component: 'Column', children: ['desc'] },
|
|
47
|
+
{ id: 'desc', component: 'Text', variant: 'body', textContent: intent || 'No intent provided' },
|
|
48
|
+
];
|
|
49
|
+
}
|
|
64
50
|
}
|
|
65
|
-
|
|
66
51
|
/** Rough token estimate (~4 chars per token) */
|
|
67
52
|
function estimateTokens(text) {
|
|
68
|
-
|
|
53
|
+
return Math.ceil((text?.length ?? 0) / 4);
|
|
69
54
|
}
|
|
55
|
+
//# sourceMappingURL=llm-stub.js.map
|
package/llm-stub.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-stub.js","sourceRoot":"","sources":["src/llm-stub.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyBH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAmB;QACvE,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEpD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACtB;oBACE,IAAI,EAAE,kBAAkB;oBACxB,SAAS,EAAE,SAAS;oBACpB,UAAU;iBACX;aACF,CAAC;YACF,KAAK,EAAE;gBACL,WAAW,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACrD,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;aACzD;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAwB;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,+DAA+D;QAC/D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAc;QAC3B,OAAO;YACL,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YAC3D,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;YACvD,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE;YACnF,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;YACtD,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;YACtD,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,oBAAoB,EAAE;SAChG,CAAC;IACJ,CAAC;CACF;AAED,gDAAgD;AAChD,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
package/models.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared model catalog — chat-input-ui grouped-options shape.
|
|
3
|
+
*
|
|
4
|
+
* Three consumers (as of 2026-05-06): playgrounds/chat/, apps/genui/app/factory-chat/,
|
|
5
|
+
* apps/genui/gen-ui/. Each previously carried a near-identical literal
|
|
6
|
+
* array; this module promotes them to one source.
|
|
7
|
+
*
|
|
8
|
+
* Format matches `<chat-input-ui>.models` setter (a 2D grouped-options
|
|
9
|
+
* structure consumed by an internal `<select-ui>` with `<optgroup>`s).
|
|
10
|
+
*
|
|
11
|
+
* import { MODELS, DEFAULT_MODEL } from '@adia-ai/llm/models';
|
|
12
|
+
* chatInput.models = MODELS;
|
|
13
|
+
* chatInput.model = DEFAULT_MODEL;
|
|
14
|
+
*/
|
|
15
|
+
export interface ModelOption {
|
|
16
|
+
value: string;
|
|
17
|
+
label: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ModelGroup {
|
|
20
|
+
label: string;
|
|
21
|
+
options: ModelOption[];
|
|
22
|
+
}
|
|
23
|
+
export declare const MODELS: ModelGroup[];
|
|
24
|
+
export declare const DEFAULT_MODEL = "claude-haiku-4-5-20251001";
|
|
25
|
+
//# sourceMappingURL=models.d.ts.map
|
package/models.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,eAAO,MAAM,MAAM,EAAE,UAAU,EAoB9B,CAAC;AAEF,eAAO,MAAM,aAAa,8BAA8B,CAAC"}
|
package/models.js
CHANGED
|
@@ -12,27 +12,26 @@
|
|
|
12
12
|
* chatInput.models = MODELS;
|
|
13
13
|
* chatInput.model = DEFAULT_MODEL;
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
15
|
export const MODELS = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
16
|
+
{
|
|
17
|
+
label: 'Anthropic',
|
|
18
|
+
options: [
|
|
19
|
+
{ value: 'claude-haiku-4-5-20251001', label: 'Haiku 4.5' },
|
|
20
|
+
{ value: 'claude-sonnet-4-6', label: 'Sonnet 4.6' },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
label: 'OpenAI',
|
|
25
|
+
options: [
|
|
26
|
+
{ value: 'gpt-4o-mini', label: 'GPT-4o Mini' },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: 'Google',
|
|
31
|
+
options: [
|
|
32
|
+
{ value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash' },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
36
35
|
];
|
|
37
|
-
|
|
38
36
|
export const DEFAULT_MODEL = 'claude-haiku-4-5-20251001';
|
|
37
|
+
//# sourceMappingURL=models.js.map
|
package/models.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,MAAM,CAAC,MAAM,MAAM,GAAiB;IAClC;QACE,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE;YAC1D,EAAE,KAAK,EAAE,mBAAmB,EAAW,KAAK,EAAE,YAAY,EAAE;SAC7D;KACF;IACD;QACE,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;SAC/C;KACF;IACD;QACE,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;SACzD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,2BAA2B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adia-ai/llm",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "Provider-agnostic LLM client
|
|
3
|
+
"version": "0.6.2",
|
|
4
|
+
"description": "Provider-agnostic LLM client \u2014 anthropic / openai / gemini adapters with a unified chat() + streamChat() facade. Used by AdiaUI's chat-shell and the A2UI generation pipeline; works in browser (with proxyUrl) and Node.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": {
|
|
@@ -32,14 +32,33 @@
|
|
|
32
32
|
"./package.json": "./package.json"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
-
"adapters
|
|
35
|
+
"adapters/*.js",
|
|
36
|
+
"adapters/*.d.ts",
|
|
37
|
+
"adapters/*.d.ts.map",
|
|
38
|
+
"adapters/*.js.map",
|
|
36
39
|
"llm-bridge.js",
|
|
40
|
+
"llm-bridge.d.ts",
|
|
41
|
+
"llm-bridge.d.ts.map",
|
|
42
|
+
"llm-bridge.js.map",
|
|
37
43
|
"llm-stub.js",
|
|
44
|
+
"llm-stub.d.ts",
|
|
45
|
+
"llm-stub.d.ts.map",
|
|
46
|
+
"llm-stub.js.map",
|
|
38
47
|
"models.js",
|
|
48
|
+
"models.d.ts",
|
|
49
|
+
"models.d.ts.map",
|
|
50
|
+
"models.js.map",
|
|
39
51
|
"index.js",
|
|
52
|
+
"index.d.ts",
|
|
53
|
+
"index.d.ts.map",
|
|
54
|
+
"index.js.map",
|
|
40
55
|
"README.md",
|
|
41
56
|
"CHANGELOG.md"
|
|
42
57
|
],
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsc --build tsconfig.build.json",
|
|
60
|
+
"prepublishOnly": "npm run build"
|
|
61
|
+
},
|
|
43
62
|
"sideEffects": false,
|
|
44
63
|
"publishConfig": {
|
|
45
64
|
"access": "public",
|