@tanstack/ai-devtools-core 0.0.3 → 0.1.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/README.md +26 -0
- package/dist/esm/components/ConversationDetails.js +0 -15
- package/dist/esm/components/ConversationDetails.js.map +1 -1
- package/dist/esm/components/conversation/ChunksCollapsible.js.map +1 -1
- package/dist/esm/components/conversation/ConversationTabs.d.ts +1 -1
- package/dist/esm/components/conversation/ConversationTabs.js +6 -22
- package/dist/esm/components/conversation/ConversationTabs.js.map +1 -1
- package/dist/esm/components/conversation/index.d.ts +0 -1
- package/dist/esm/store/ai-context.d.ts +0 -11
- package/dist/esm/store/ai-context.js +3 -57
- package/dist/esm/store/ai-context.js.map +1 -1
- package/package.json +3 -3
- package/src/components/ConversationDetails.tsx +0 -9
- package/src/components/conversation/ChunksCollapsible.tsx +1 -3
- package/src/components/conversation/ConversationTabs.tsx +1 -17
- package/src/components/conversation/index.ts +0 -1
- package/src/store/ai-context.tsx +3 -94
- package/dist/esm/components/conversation/EmbeddingsTab.d.ts +0 -7
- package/dist/esm/components/conversation/EmbeddingsTab.js +0 -90
- package/dist/esm/components/conversation/EmbeddingsTab.js.map +0 -1
- package/src/components/conversation/EmbeddingsTab.tsx +0 -80
package/src/store/ai-context.tsx
CHANGED
|
@@ -86,15 +86,6 @@ export interface Chunk {
|
|
|
86
86
|
chunkCount: number
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
export interface EmbeddingOperation {
|
|
90
|
-
id: string
|
|
91
|
-
model: string
|
|
92
|
-
inputCount: number
|
|
93
|
-
duration: number
|
|
94
|
-
timestamp: number
|
|
95
|
-
status: 'started' | 'completed'
|
|
96
|
-
}
|
|
97
|
-
|
|
98
89
|
export interface SummarizeOperation {
|
|
99
90
|
id: string
|
|
100
91
|
model: string
|
|
@@ -123,10 +114,7 @@ export interface Conversation {
|
|
|
123
114
|
providerOptions?: Record<string, unknown>
|
|
124
115
|
/** Flags for which operation types this conversation has */
|
|
125
116
|
hasChat?: boolean
|
|
126
|
-
hasEmbedding?: boolean
|
|
127
117
|
hasSummarize?: boolean
|
|
128
|
-
/** Embedding operations in this conversation */
|
|
129
|
-
embeddings?: Array<EmbeddingOperation>
|
|
130
118
|
/** Summarize operations in this conversation */
|
|
131
119
|
summaries?: Array<SummarizeOperation>
|
|
132
120
|
}
|
|
@@ -1309,7 +1297,7 @@ export const AIProvider: ParentComponent = (props) => {
|
|
|
1309
1297
|
// ============= Chat Events (for usage tracking) =============
|
|
1310
1298
|
|
|
1311
1299
|
cleanupFns.push(
|
|
1312
|
-
aiEventClient.on('
|
|
1300
|
+
aiEventClient.on('text:started', (e) => {
|
|
1313
1301
|
const streamId = e.payload.streamId
|
|
1314
1302
|
const model = e.payload.model
|
|
1315
1303
|
const provider = e.payload.provider
|
|
@@ -1350,7 +1338,7 @@ export const AIProvider: ParentComponent = (props) => {
|
|
|
1350
1338
|
)
|
|
1351
1339
|
|
|
1352
1340
|
cleanupFns.push(
|
|
1353
|
-
aiEventClient.on('
|
|
1341
|
+
aiEventClient.on('text:completed', (e) => {
|
|
1354
1342
|
const { requestId, usage } = e.payload
|
|
1355
1343
|
|
|
1356
1344
|
const conversationId = requestToConversation.get(requestId)
|
|
@@ -1371,7 +1359,7 @@ export const AIProvider: ParentComponent = (props) => {
|
|
|
1371
1359
|
)
|
|
1372
1360
|
|
|
1373
1361
|
cleanupFns.push(
|
|
1374
|
-
aiEventClient.on('
|
|
1362
|
+
aiEventClient.on('text:iteration', (e) => {
|
|
1375
1363
|
const { requestId, iterationNumber } = e.payload
|
|
1376
1364
|
|
|
1377
1365
|
const conversationId = requestToConversation.get(requestId)
|
|
@@ -1466,85 +1454,6 @@ export const AIProvider: ParentComponent = (props) => {
|
|
|
1466
1454
|
}),
|
|
1467
1455
|
)
|
|
1468
1456
|
|
|
1469
|
-
// ============= Embedding Events =============
|
|
1470
|
-
|
|
1471
|
-
cleanupFns.push(
|
|
1472
|
-
aiEventClient.on('embedding:started', (e) => {
|
|
1473
|
-
const { requestId, model, inputCount, timestamp, clientId } = e.payload
|
|
1474
|
-
|
|
1475
|
-
// Try to find an active conversation to attach to, or create a new one
|
|
1476
|
-
let conversationId = clientId
|
|
1477
|
-
if (!conversationId || !state.conversations[conversationId]) {
|
|
1478
|
-
// Find most recent active client conversation
|
|
1479
|
-
const activeClients = Object.values(state.conversations)
|
|
1480
|
-
.filter((c) => c.type === 'client' && c.status === 'active')
|
|
1481
|
-
.sort((a, b) => b.startedAt - a.startedAt)
|
|
1482
|
-
|
|
1483
|
-
if (activeClients.length > 0 && activeClients[0]) {
|
|
1484
|
-
conversationId = activeClients[0].id
|
|
1485
|
-
} else {
|
|
1486
|
-
// Create a new conversation for embeddings
|
|
1487
|
-
conversationId = `embedding-${requestId}`
|
|
1488
|
-
getOrCreateConversation(
|
|
1489
|
-
conversationId,
|
|
1490
|
-
'server',
|
|
1491
|
-
`Embedding (${model})`,
|
|
1492
|
-
)
|
|
1493
|
-
updateConversation(conversationId, { model })
|
|
1494
|
-
}
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
|
-
requestToConversation.set(requestId, conversationId)
|
|
1498
|
-
|
|
1499
|
-
const embeddingOp: EmbeddingOperation = {
|
|
1500
|
-
id: requestId,
|
|
1501
|
-
model,
|
|
1502
|
-
inputCount,
|
|
1503
|
-
duration: 0,
|
|
1504
|
-
timestamp,
|
|
1505
|
-
status: 'started',
|
|
1506
|
-
}
|
|
1507
|
-
|
|
1508
|
-
const conv = state.conversations[conversationId]
|
|
1509
|
-
if (conv) {
|
|
1510
|
-
const embeddings = conv.embeddings || []
|
|
1511
|
-
setState('conversations', conversationId, 'embeddings', [
|
|
1512
|
-
...embeddings,
|
|
1513
|
-
embeddingOp,
|
|
1514
|
-
])
|
|
1515
|
-
setState('conversations', conversationId, 'hasEmbedding', true)
|
|
1516
|
-
}
|
|
1517
|
-
}),
|
|
1518
|
-
)
|
|
1519
|
-
|
|
1520
|
-
cleanupFns.push(
|
|
1521
|
-
aiEventClient.on('embedding:completed', (e) => {
|
|
1522
|
-
const { requestId, duration } = e.payload
|
|
1523
|
-
|
|
1524
|
-
const conversationId = requestToConversation.get(requestId)
|
|
1525
|
-
if (!conversationId || !state.conversations[conversationId]) return
|
|
1526
|
-
|
|
1527
|
-
const conv = state.conversations[conversationId]
|
|
1528
|
-
if (!conv.embeddings) return
|
|
1529
|
-
|
|
1530
|
-
const embeddingIndex = conv.embeddings.findIndex(
|
|
1531
|
-
(op) => op.id === requestId,
|
|
1532
|
-
)
|
|
1533
|
-
if (embeddingIndex >= 0) {
|
|
1534
|
-
setState(
|
|
1535
|
-
'conversations',
|
|
1536
|
-
conversationId,
|
|
1537
|
-
'embeddings',
|
|
1538
|
-
embeddingIndex,
|
|
1539
|
-
produce((op: EmbeddingOperation) => {
|
|
1540
|
-
op.duration = duration
|
|
1541
|
-
op.status = 'completed'
|
|
1542
|
-
}),
|
|
1543
|
-
)
|
|
1544
|
-
}
|
|
1545
|
-
}),
|
|
1546
|
-
)
|
|
1547
|
-
|
|
1548
1457
|
// ============= Summarize Events =============
|
|
1549
1458
|
|
|
1550
1459
|
cleanupFns.push(
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { createComponent, template, insert, effect, className } from "solid-js/web";
|
|
2
|
-
import { Show, For } from "solid-js";
|
|
3
|
-
import { useStyles } from "../../styles/use-styles.js";
|
|
4
|
-
import { formatDuration } from "../utils/format.js";
|
|
5
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<div>No embedding operations yet`), _tmpl$3 = /* @__PURE__ */ template(`<div>⏱️ `), _tmpl$4 = /* @__PURE__ */ template(`<div><div><div>🔢</div><div>Embedding</div><div></div></div><div><div><span>Model:</span><span></span></div><div><span>Inputs:</span><span> item</span></div><div><span>Started:</span><span>`);
|
|
6
|
-
const EmbeddingsTab = (props) => {
|
|
7
|
-
const styles = useStyles();
|
|
8
|
-
return createComponent(Show, {
|
|
9
|
-
get when() {
|
|
10
|
-
return props.embeddings.length > 0;
|
|
11
|
-
},
|
|
12
|
-
get fallback() {
|
|
13
|
-
return (() => {
|
|
14
|
-
var _el$2 = _tmpl$2();
|
|
15
|
-
effect(() => className(_el$2, styles().conversationDetails.emptyMessages));
|
|
16
|
-
return _el$2;
|
|
17
|
-
})();
|
|
18
|
-
},
|
|
19
|
-
get children() {
|
|
20
|
-
var _el$ = _tmpl$();
|
|
21
|
-
insert(_el$, createComponent(For, {
|
|
22
|
-
get each() {
|
|
23
|
-
return props.embeddings;
|
|
24
|
-
},
|
|
25
|
-
children: (embedding) => (() => {
|
|
26
|
-
var _el$3 = _tmpl$4(), _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling, _el$7 = _el$6.nextSibling, _el$0 = _el$4.nextSibling, _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling, _el$12 = _el$1.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$14.firstChild, _el$16 = _el$12.nextSibling, _el$17 = _el$16.firstChild, _el$18 = _el$17.nextSibling;
|
|
27
|
-
insert(_el$7, () => embedding.status);
|
|
28
|
-
insert(_el$4, createComponent(Show, {
|
|
29
|
-
get when() {
|
|
30
|
-
return embedding.duration > 0;
|
|
31
|
-
},
|
|
32
|
-
get children() {
|
|
33
|
-
var _el$8 = _tmpl$3();
|
|
34
|
-
_el$8.firstChild;
|
|
35
|
-
insert(_el$8, () => formatDuration(embedding.duration), null);
|
|
36
|
-
effect(() => className(_el$8, styles().conversationDetails.durationBadge));
|
|
37
|
-
return _el$8;
|
|
38
|
-
}
|
|
39
|
-
}), null);
|
|
40
|
-
insert(_el$11, () => embedding.model);
|
|
41
|
-
insert(_el$14, () => embedding.inputCount, _el$15);
|
|
42
|
-
insert(_el$14, () => embedding.inputCount !== 1 ? "s" : "", null);
|
|
43
|
-
insert(_el$18, () => new Date(embedding.timestamp).toLocaleTimeString());
|
|
44
|
-
effect((_p$) => {
|
|
45
|
-
var _v$ = styles().conversationDetails.operationCard, _v$2 = styles().conversationDetails.operationHeader, _v$3 = styles().conversationDetails.operationIcon, _v$4 = styles().conversationDetails.operationTitle, _v$5 = `${styles().conversationDetails.operationStatus} ${embedding.status === "completed" ? styles().conversationDetails.operationStatusCompleted : styles().conversationDetails.operationStatusPending}`, _v$6 = styles().conversationDetails.operationDetails, _v$7 = styles().conversationDetails.operationDetail, _v$8 = styles().conversationDetails.operationLabel, _v$9 = styles().conversationDetails.operationValue, _v$0 = styles().conversationDetails.operationDetail, _v$1 = styles().conversationDetails.operationLabel, _v$10 = styles().conversationDetails.operationValue, _v$11 = styles().conversationDetails.operationDetail, _v$12 = styles().conversationDetails.operationLabel, _v$13 = styles().conversationDetails.operationValue;
|
|
46
|
-
_v$ !== _p$.e && className(_el$3, _p$.e = _v$);
|
|
47
|
-
_v$2 !== _p$.t && className(_el$4, _p$.t = _v$2);
|
|
48
|
-
_v$3 !== _p$.a && className(_el$5, _p$.a = _v$3);
|
|
49
|
-
_v$4 !== _p$.o && className(_el$6, _p$.o = _v$4);
|
|
50
|
-
_v$5 !== _p$.i && className(_el$7, _p$.i = _v$5);
|
|
51
|
-
_v$6 !== _p$.n && className(_el$0, _p$.n = _v$6);
|
|
52
|
-
_v$7 !== _p$.s && className(_el$1, _p$.s = _v$7);
|
|
53
|
-
_v$8 !== _p$.h && className(_el$10, _p$.h = _v$8);
|
|
54
|
-
_v$9 !== _p$.r && className(_el$11, _p$.r = _v$9);
|
|
55
|
-
_v$0 !== _p$.d && className(_el$12, _p$.d = _v$0);
|
|
56
|
-
_v$1 !== _p$.l && className(_el$13, _p$.l = _v$1);
|
|
57
|
-
_v$10 !== _p$.u && className(_el$14, _p$.u = _v$10);
|
|
58
|
-
_v$11 !== _p$.c && className(_el$16, _p$.c = _v$11);
|
|
59
|
-
_v$12 !== _p$.w && className(_el$17, _p$.w = _v$12);
|
|
60
|
-
_v$13 !== _p$.m && className(_el$18, _p$.m = _v$13);
|
|
61
|
-
return _p$;
|
|
62
|
-
}, {
|
|
63
|
-
e: void 0,
|
|
64
|
-
t: void 0,
|
|
65
|
-
a: void 0,
|
|
66
|
-
o: void 0,
|
|
67
|
-
i: void 0,
|
|
68
|
-
n: void 0,
|
|
69
|
-
s: void 0,
|
|
70
|
-
h: void 0,
|
|
71
|
-
r: void 0,
|
|
72
|
-
d: void 0,
|
|
73
|
-
l: void 0,
|
|
74
|
-
u: void 0,
|
|
75
|
-
c: void 0,
|
|
76
|
-
w: void 0,
|
|
77
|
-
m: void 0
|
|
78
|
-
});
|
|
79
|
-
return _el$3;
|
|
80
|
-
})()
|
|
81
|
-
}));
|
|
82
|
-
effect(() => className(_el$, styles().conversationDetails.messagesList));
|
|
83
|
-
return _el$;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
export {
|
|
88
|
-
EmbeddingsTab
|
|
89
|
-
};
|
|
90
|
-
//# sourceMappingURL=EmbeddingsTab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingsTab.js","sources":["../../../../src/components/conversation/EmbeddingsTab.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport { formatDuration } from '../utils'\nimport type { Component } from 'solid-js'\nimport type { EmbeddingOperation } from '../../store/ai-context'\n\ninterface EmbeddingsTabProps {\n embeddings: Array<EmbeddingOperation>\n}\n\nexport const EmbeddingsTab: Component<EmbeddingsTabProps> = (props) => {\n const styles = useStyles()\n\n return (\n <Show\n when={props.embeddings.length > 0}\n fallback={\n <div class={styles().conversationDetails.emptyMessages}>\n No embedding operations yet\n </div>\n }\n >\n <div class={styles().conversationDetails.messagesList}>\n <For each={props.embeddings}>\n {(embedding) => (\n <div class={styles().conversationDetails.operationCard}>\n <div class={styles().conversationDetails.operationHeader}>\n <div class={styles().conversationDetails.operationIcon}>🔢</div>\n <div class={styles().conversationDetails.operationTitle}>\n Embedding\n </div>\n <div\n class={`${styles().conversationDetails.operationStatus} ${\n embedding.status === 'completed'\n ? styles().conversationDetails.operationStatusCompleted\n : styles().conversationDetails.operationStatusPending\n }`}\n >\n {embedding.status}\n </div>\n <Show when={embedding.duration > 0}>\n <div class={styles().conversationDetails.durationBadge}>\n ⏱️ {formatDuration(embedding.duration)}\n </div>\n </Show>\n </div>\n <div class={styles().conversationDetails.operationDetails}>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Model:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {embedding.model}\n </span>\n </div>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Inputs:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {embedding.inputCount} item\n {embedding.inputCount !== 1 ? 's' : ''}\n </span>\n </div>\n <div class={styles().conversationDetails.operationDetail}>\n <span class={styles().conversationDetails.operationLabel}>\n Started:\n </span>\n <span class={styles().conversationDetails.operationValue}>\n {new Date(embedding.timestamp).toLocaleTimeString()}\n </span>\n </div>\n </div>\n </div>\n )}\n </For>\n </div>\n </Show>\n )\n}\n"],"names":["EmbeddingsTab","props","styles","useStyles","_$createComponent","Show","when","embeddings","length","fallback","_el$2","_tmpl$2","_$effect","_$className","conversationDetails","emptyMessages","children","_el$","_tmpl$","_$insert","For","each","embedding","_el$3","_tmpl$4","_el$4","firstChild","_el$5","_el$6","nextSibling","_el$7","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_el$17","_el$18","status","duration","_el$8","_tmpl$3","formatDuration","durationBadge","model","inputCount","Date","timestamp","toLocaleTimeString","_p$","_v$","operationCard","_v$2","operationHeader","_v$3","operationIcon","_v$4","operationTitle","_v$5","operationStatus","operationStatusCompleted","operationStatusPending","_v$6","operationDetails","_v$7","operationDetail","_v$8","operationLabel","_v$9","operationValue","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","e","t","a","o","i","n","s","h","r","d","l","u","c","w","m","undefined","messagesList"],"mappings":"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"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { For, Show } from 'solid-js'
|
|
2
|
-
import { useStyles } from '../../styles/use-styles'
|
|
3
|
-
import { formatDuration } from '../utils'
|
|
4
|
-
import type { Component } from 'solid-js'
|
|
5
|
-
import type { EmbeddingOperation } from '../../store/ai-context'
|
|
6
|
-
|
|
7
|
-
interface EmbeddingsTabProps {
|
|
8
|
-
embeddings: Array<EmbeddingOperation>
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const EmbeddingsTab: Component<EmbeddingsTabProps> = (props) => {
|
|
12
|
-
const styles = useStyles()
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<Show
|
|
16
|
-
when={props.embeddings.length > 0}
|
|
17
|
-
fallback={
|
|
18
|
-
<div class={styles().conversationDetails.emptyMessages}>
|
|
19
|
-
No embedding operations yet
|
|
20
|
-
</div>
|
|
21
|
-
}
|
|
22
|
-
>
|
|
23
|
-
<div class={styles().conversationDetails.messagesList}>
|
|
24
|
-
<For each={props.embeddings}>
|
|
25
|
-
{(embedding) => (
|
|
26
|
-
<div class={styles().conversationDetails.operationCard}>
|
|
27
|
-
<div class={styles().conversationDetails.operationHeader}>
|
|
28
|
-
<div class={styles().conversationDetails.operationIcon}>🔢</div>
|
|
29
|
-
<div class={styles().conversationDetails.operationTitle}>
|
|
30
|
-
Embedding
|
|
31
|
-
</div>
|
|
32
|
-
<div
|
|
33
|
-
class={`${styles().conversationDetails.operationStatus} ${
|
|
34
|
-
embedding.status === 'completed'
|
|
35
|
-
? styles().conversationDetails.operationStatusCompleted
|
|
36
|
-
: styles().conversationDetails.operationStatusPending
|
|
37
|
-
}`}
|
|
38
|
-
>
|
|
39
|
-
{embedding.status}
|
|
40
|
-
</div>
|
|
41
|
-
<Show when={embedding.duration > 0}>
|
|
42
|
-
<div class={styles().conversationDetails.durationBadge}>
|
|
43
|
-
⏱️ {formatDuration(embedding.duration)}
|
|
44
|
-
</div>
|
|
45
|
-
</Show>
|
|
46
|
-
</div>
|
|
47
|
-
<div class={styles().conversationDetails.operationDetails}>
|
|
48
|
-
<div class={styles().conversationDetails.operationDetail}>
|
|
49
|
-
<span class={styles().conversationDetails.operationLabel}>
|
|
50
|
-
Model:
|
|
51
|
-
</span>
|
|
52
|
-
<span class={styles().conversationDetails.operationValue}>
|
|
53
|
-
{embedding.model}
|
|
54
|
-
</span>
|
|
55
|
-
</div>
|
|
56
|
-
<div class={styles().conversationDetails.operationDetail}>
|
|
57
|
-
<span class={styles().conversationDetails.operationLabel}>
|
|
58
|
-
Inputs:
|
|
59
|
-
</span>
|
|
60
|
-
<span class={styles().conversationDetails.operationValue}>
|
|
61
|
-
{embedding.inputCount} item
|
|
62
|
-
{embedding.inputCount !== 1 ? 's' : ''}
|
|
63
|
-
</span>
|
|
64
|
-
</div>
|
|
65
|
-
<div class={styles().conversationDetails.operationDetail}>
|
|
66
|
-
<span class={styles().conversationDetails.operationLabel}>
|
|
67
|
-
Started:
|
|
68
|
-
</span>
|
|
69
|
-
<span class={styles().conversationDetails.operationValue}>
|
|
70
|
-
{new Date(embedding.timestamp).toLocaleTimeString()}
|
|
71
|
-
</span>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
)}
|
|
76
|
-
</For>
|
|
77
|
-
</div>
|
|
78
|
-
</Show>
|
|
79
|
-
)
|
|
80
|
-
}
|