@tanstack/ai-devtools-core 0.0.3 → 0.1.1

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.
@@ -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('chat:started', (e) => {
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('chat:completed', (e) => {
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('chat:iteration', (e) => {
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,7 +0,0 @@
1
- import { Component } from 'solid-js';
2
- import { EmbeddingOperation } from '../../store/ai-context.js';
3
- interface EmbeddingsTabProps {
4
- embeddings: Array<EmbeddingOperation>;
5
- }
6
- export declare const EmbeddingsTab: Component<EmbeddingsTabProps>;
7
- export {};
@@ -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
- }