@tanstack/ai-devtools-core 0.2.1 โ 0.2.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/README.md +1 -0
- package/dist/esm/components/ConversationDetails.js +74 -1
- package/dist/esm/components/ConversationDetails.js.map +1 -1
- package/dist/esm/components/conversation/ActivityEventsTab.d.ts +8 -0
- package/dist/esm/components/conversation/ActivityEventsTab.js +72 -0
- package/dist/esm/components/conversation/ActivityEventsTab.js.map +1 -0
- package/dist/esm/components/conversation/ConversationHeader.js +109 -66
- package/dist/esm/components/conversation/ConversationHeader.js.map +1 -1
- package/dist/esm/components/conversation/ConversationTabs.d.ts +1 -1
- package/dist/esm/components/conversation/ConversationTabs.js +107 -3
- package/dist/esm/components/conversation/ConversationTabs.js.map +1 -1
- package/dist/esm/components/conversation/MessageCard.js +83 -28
- package/dist/esm/components/conversation/MessageCard.js.map +1 -1
- package/dist/esm/components/conversation/index.d.ts +1 -0
- package/dist/esm/store/ai-context.d.ts +19 -2
- package/dist/esm/store/ai-context.js +528 -262
- package/dist/esm/store/ai-context.js.map +1 -1
- package/dist/esm/styles/use-styles.d.ts +7 -0
- package/dist/esm/styles/use-styles.js +65 -1
- package/dist/esm/styles/use-styles.js.map +1 -1
- package/package.json +2 -2
- package/src/components/ConversationDetails.tsx +70 -1
- package/src/components/conversation/ActivityEventsTab.tsx +57 -0
- package/src/components/conversation/ConversationHeader.tsx +52 -36
- package/src/components/conversation/ConversationTabs.tsx +121 -2
- package/src/components/conversation/MessageCard.tsx +45 -10
- package/src/components/conversation/index.ts +1 -0
- package/src/store/ai-context.tsx +783 -418
- package/src/styles/use-styles.ts +65 -1
package/README.md
CHANGED
|
@@ -45,6 +45,7 @@ A powerful, type-safe AI SDK for building AI-powered applications.
|
|
|
45
45
|
- Headless chat state management with adapters (SSE, HTTP stream, custom)
|
|
46
46
|
- Isomorphic type-safe tools with server/client execution
|
|
47
47
|
- **Enhanced integration with TanStack Start** - Share implementations between AI tools and server functions
|
|
48
|
+
- **Observability events** - Structured, typed events for text, tools, image, speech, transcription, and video ([docs](./docs/guides/observability.md))
|
|
48
49
|
|
|
49
50
|
### <a href="https://tanstack.com/ai">Read the docs โ</b></a>
|
|
50
51
|
|
|
@@ -7,6 +7,7 @@ import { ConversationTabs } from "./conversation/ConversationTabs.js";
|
|
|
7
7
|
import { MessagesTab } from "./conversation/MessagesTab.js";
|
|
8
8
|
import { ChunksTab } from "./conversation/ChunksTab.js";
|
|
9
9
|
import { SummariesTab } from "./conversation/SummariesTab.js";
|
|
10
|
+
import { ActivityEventsTab } from "./conversation/ActivityEventsTab.js";
|
|
10
11
|
var _tmpl$ = /* @__PURE__ */ template(`<div>Select a conversation to view details`), _tmpl$2 = /* @__PURE__ */ template(`<div><div>`);
|
|
11
12
|
const ConversationDetails = () => {
|
|
12
13
|
const {
|
|
@@ -26,11 +27,31 @@ const ConversationDetails = () => {
|
|
|
26
27
|
setActiveTab("chunks");
|
|
27
28
|
} else if (conv.hasSummarize || conv.summaries && conv.summaries.length > 0) {
|
|
28
29
|
setActiveTab("summaries");
|
|
30
|
+
} else if (conv.hasImage || conv.imageEvents && conv.imageEvents.length > 0) {
|
|
31
|
+
setActiveTab("image");
|
|
32
|
+
} else if (conv.hasSpeech || conv.speechEvents && conv.speechEvents.length > 0) {
|
|
33
|
+
setActiveTab("speech");
|
|
34
|
+
} else if (conv.hasTranscription || conv.transcriptionEvents && conv.transcriptionEvents.length > 0) {
|
|
35
|
+
setActiveTab("transcription");
|
|
36
|
+
} else if (conv.hasVideo || conv.videoEvents && conv.videoEvents.length > 0) {
|
|
37
|
+
setActiveTab("video");
|
|
29
38
|
} else {
|
|
30
39
|
setActiveTab("chunks");
|
|
31
40
|
}
|
|
32
41
|
} else {
|
|
33
|
-
|
|
42
|
+
if (conv.messages.length > 0) {
|
|
43
|
+
setActiveTab("messages");
|
|
44
|
+
} else if (conv.hasImage || conv.imageEvents && conv.imageEvents.length > 0) {
|
|
45
|
+
setActiveTab("image");
|
|
46
|
+
} else if (conv.hasSpeech || conv.speechEvents && conv.speechEvents.length > 0) {
|
|
47
|
+
setActiveTab("speech");
|
|
48
|
+
} else if (conv.hasTranscription || conv.transcriptionEvents && conv.transcriptionEvents.length > 0) {
|
|
49
|
+
setActiveTab("transcription");
|
|
50
|
+
} else if (conv.hasVideo || conv.videoEvents && conv.videoEvents.length > 0) {
|
|
51
|
+
setActiveTab("video");
|
|
52
|
+
} else {
|
|
53
|
+
setActiveTab("messages");
|
|
54
|
+
}
|
|
34
55
|
}
|
|
35
56
|
}
|
|
36
57
|
});
|
|
@@ -100,6 +121,58 @@ const ConversationDetails = () => {
|
|
|
100
121
|
});
|
|
101
122
|
}
|
|
102
123
|
}), null);
|
|
124
|
+
insert(_el$3, createComponent(Show, {
|
|
125
|
+
get when() {
|
|
126
|
+
return activeTab() === "image";
|
|
127
|
+
},
|
|
128
|
+
get children() {
|
|
129
|
+
return createComponent(ActivityEventsTab, {
|
|
130
|
+
title: "Image Activity",
|
|
131
|
+
get events() {
|
|
132
|
+
return conv().imageEvents ?? [];
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}), null);
|
|
137
|
+
insert(_el$3, createComponent(Show, {
|
|
138
|
+
get when() {
|
|
139
|
+
return activeTab() === "speech";
|
|
140
|
+
},
|
|
141
|
+
get children() {
|
|
142
|
+
return createComponent(ActivityEventsTab, {
|
|
143
|
+
title: "Speech Activity",
|
|
144
|
+
get events() {
|
|
145
|
+
return conv().speechEvents ?? [];
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}), null);
|
|
150
|
+
insert(_el$3, createComponent(Show, {
|
|
151
|
+
get when() {
|
|
152
|
+
return activeTab() === "transcription";
|
|
153
|
+
},
|
|
154
|
+
get children() {
|
|
155
|
+
return createComponent(ActivityEventsTab, {
|
|
156
|
+
title: "Transcription Activity",
|
|
157
|
+
get events() {
|
|
158
|
+
return conv().transcriptionEvents ?? [];
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}), null);
|
|
163
|
+
insert(_el$3, createComponent(Show, {
|
|
164
|
+
get when() {
|
|
165
|
+
return activeTab() === "video";
|
|
166
|
+
},
|
|
167
|
+
get children() {
|
|
168
|
+
return createComponent(ActivityEventsTab, {
|
|
169
|
+
title: "Video Activity",
|
|
170
|
+
get events() {
|
|
171
|
+
return conv().videoEvents ?? [];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}), null);
|
|
103
176
|
effect((_p$) => {
|
|
104
177
|
var _v$ = styles().conversationDetails.container, _v$2 = styles().conversationDetails.contentArea;
|
|
105
178
|
_v$ !== _p$.e && className(_el$2, _p$.e = _v$);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationDetails.js","sources":["../../../src/components/ConversationDetails.tsx"],"sourcesContent":["import { Show, createEffect, createSignal } from 'solid-js'\nimport { useStyles } from '../styles/use-styles'\nimport { useAIStore } from '../store/ai-context'\nimport {\n ChunksTab,\n ConversationHeader,\n ConversationTabs,\n MessagesTab,\n SummariesTab,\n} from './conversation'\nimport type { TabType } from './conversation'\nimport type { Conversation } from '../store/ai-context'\nimport type { Component } from 'solid-js'\n\nexport const ConversationDetails: Component = () => {\n const { state } = useAIStore()\n const styles = useStyles()\n const [activeTab, setActiveTab] = createSignal<TabType>('messages')\n\n const activeConversation = (): Conversation | undefined => {\n if (!state.activeConversationId) return undefined\n return state.conversations[state.activeConversationId]\n }\n\n // Update active tab when conversation changes\n createEffect(() => {\n const conv = activeConversation()\n if (conv) {\n // For server conversations, always use chunks (messages tab is hidden)\n if (conv.type === 'server') {\n if (conv.chunks.length > 0) {\n setActiveTab('chunks')\n } else if (\n conv.hasSummarize ||\n (conv.summaries && conv.summaries.length > 0)\n ) {\n setActiveTab('summaries')\n } else {\n setActiveTab('chunks')\n }\n } else {\n // For client conversations, default to messages tab\n setActiveTab('messages')\n }\n }\n })\n\n return (\n <Show\n when={activeConversation()}\n fallback={\n <div class={styles().conversationDetails.emptyState}>\n Select a conversation to view details\n </div>\n }\n >\n {(conv) => (\n <div class={styles().conversationDetails.container}>\n <ConversationHeader conversation={conv()} />\n <ConversationTabs\n conversation={conv()}\n activeTab={activeTab()}\n onTabChange={setActiveTab}\n />\n <div class={styles().conversationDetails.contentArea}>\n <Show when={activeTab() === 'messages'}>\n <MessagesTab messages={conv().messages} />\n </Show>\n <Show when={activeTab() === 'chunks'}>\n <ChunksTab chunks={conv().chunks} messages={conv().messages} />\n </Show>\n <Show when={activeTab() === 'summaries'}>\n <SummariesTab summaries={conv().summaries ?? []} />\n </Show>\n </div>\n </div>\n )}\n </Show>\n )\n}\n"],"names":["ConversationDetails","state","useAIStore","styles","useStyles","activeTab","setActiveTab","createSignal","activeConversation","activeConversationId","undefined","conversations","createEffect","conv","type","chunks","length","hasSummarize","summaries","_$createComponent","Show","when","fallback","_el$","_tmpl$","_$effect","_$className","conversationDetails","emptyState","children","_el$2","_tmpl$2","_el$3","firstChild","_$insert","ConversationHeader","conversation","ConversationTabs","onTabChange","MessagesTab","
|
|
1
|
+
{"version":3,"file":"ConversationDetails.js","sources":["../../../src/components/ConversationDetails.tsx"],"sourcesContent":["import { Show, createEffect, createSignal } from 'solid-js'\nimport { useStyles } from '../styles/use-styles'\nimport { useAIStore } from '../store/ai-context'\nimport {\n ActivityEventsTab,\n ChunksTab,\n ConversationHeader,\n ConversationTabs,\n MessagesTab,\n SummariesTab,\n} from './conversation'\nimport type { TabType } from './conversation'\nimport type { Conversation } from '../store/ai-context'\nimport type { Component } from 'solid-js'\n\nexport const ConversationDetails: Component = () => {\n const { state } = useAIStore()\n const styles = useStyles()\n const [activeTab, setActiveTab] = createSignal<TabType>('messages')\n\n const activeConversation = (): Conversation | undefined => {\n if (!state.activeConversationId) return undefined\n return state.conversations[state.activeConversationId]\n }\n\n // Update active tab when conversation changes\n createEffect(() => {\n const conv = activeConversation()\n if (conv) {\n // For server conversations, always use chunks (messages tab is hidden)\n if (conv.type === 'server') {\n if (conv.chunks.length > 0) {\n setActiveTab('chunks')\n } else if (\n conv.hasSummarize ||\n (conv.summaries && conv.summaries.length > 0)\n ) {\n setActiveTab('summaries')\n } else if (\n conv.hasImage ||\n (conv.imageEvents && conv.imageEvents.length > 0)\n ) {\n setActiveTab('image')\n } else if (\n conv.hasSpeech ||\n (conv.speechEvents && conv.speechEvents.length > 0)\n ) {\n setActiveTab('speech')\n } else if (\n conv.hasTranscription ||\n (conv.transcriptionEvents && conv.transcriptionEvents.length > 0)\n ) {\n setActiveTab('transcription')\n } else if (\n conv.hasVideo ||\n (conv.videoEvents && conv.videoEvents.length > 0)\n ) {\n setActiveTab('video')\n } else {\n setActiveTab('chunks')\n }\n } else {\n // For client conversations, default to messages tab\n if (conv.messages.length > 0) {\n setActiveTab('messages')\n } else if (\n conv.hasImage ||\n (conv.imageEvents && conv.imageEvents.length > 0)\n ) {\n setActiveTab('image')\n } else if (\n conv.hasSpeech ||\n (conv.speechEvents && conv.speechEvents.length > 0)\n ) {\n setActiveTab('speech')\n } else if (\n conv.hasTranscription ||\n (conv.transcriptionEvents && conv.transcriptionEvents.length > 0)\n ) {\n setActiveTab('transcription')\n } else if (\n conv.hasVideo ||\n (conv.videoEvents && conv.videoEvents.length > 0)\n ) {\n setActiveTab('video')\n } else {\n setActiveTab('messages')\n }\n }\n }\n })\n\n return (\n <Show\n when={activeConversation()}\n fallback={\n <div class={styles().conversationDetails.emptyState}>\n Select a conversation to view details\n </div>\n }\n >\n {(conv) => (\n <div class={styles().conversationDetails.container}>\n <ConversationHeader conversation={conv()} />\n <ConversationTabs\n conversation={conv()}\n activeTab={activeTab()}\n onTabChange={setActiveTab}\n />\n <div class={styles().conversationDetails.contentArea}>\n <Show when={activeTab() === 'messages'}>\n <MessagesTab messages={conv().messages} />\n </Show>\n <Show when={activeTab() === 'chunks'}>\n <ChunksTab chunks={conv().chunks} messages={conv().messages} />\n </Show>\n <Show when={activeTab() === 'summaries'}>\n <SummariesTab summaries={conv().summaries ?? []} />\n </Show>\n <Show when={activeTab() === 'image'}>\n <ActivityEventsTab\n title=\"Image Activity\"\n events={conv().imageEvents ?? []}\n />\n </Show>\n <Show when={activeTab() === 'speech'}>\n <ActivityEventsTab\n title=\"Speech Activity\"\n events={conv().speechEvents ?? []}\n />\n </Show>\n <Show when={activeTab() === 'transcription'}>\n <ActivityEventsTab\n title=\"Transcription Activity\"\n events={conv().transcriptionEvents ?? []}\n />\n </Show>\n <Show when={activeTab() === 'video'}>\n <ActivityEventsTab\n title=\"Video Activity\"\n events={conv().videoEvents ?? []}\n />\n </Show>\n </div>\n </div>\n )}\n </Show>\n )\n}\n"],"names":["ConversationDetails","state","useAIStore","styles","useStyles","activeTab","setActiveTab","createSignal","activeConversation","activeConversationId","undefined","conversations","createEffect","conv","type","chunks","length","hasSummarize","summaries","hasImage","imageEvents","hasSpeech","speechEvents","hasTranscription","transcriptionEvents","hasVideo","videoEvents","messages","_$createComponent","Show","when","fallback","_el$","_tmpl$","_$effect","_$className","conversationDetails","emptyState","children","_el$2","_tmpl$2","_el$3","firstChild","_$insert","ConversationHeader","conversation","ConversationTabs","onTabChange","MessagesTab","ChunksTab","SummariesTab","ActivityEventsTab","title","events","_p$","_v$","container","_v$2","contentArea","e","t"],"mappings":";;;;;;;;;;;AAeO,MAAMA,sBAAiCA,MAAM;AAClD,QAAM;AAAA,IAAEC;AAAAA,EAAAA,IAAUC,WAAAA;AAClB,QAAMC,SAASC,UAAAA;AACf,QAAM,CAACC,WAAWC,YAAY,IAAIC,aAAsB,UAAU;AAElE,QAAMC,qBAAqBA,MAAgC;AACzD,QAAI,CAACP,MAAMQ,qBAAsB,QAAOC;AACxC,WAAOT,MAAMU,cAAcV,MAAMQ,oBAAoB;AAAA,EACvD;AAGAG,eAAa,MAAM;AACjB,UAAMC,OAAOL,mBAAAA;AACb,QAAIK,MAAM;AAER,UAAIA,KAAKC,SAAS,UAAU;AAC1B,YAAID,KAAKE,OAAOC,SAAS,GAAG;AAC1BV,uBAAa,QAAQ;AAAA,QACvB,WACEO,KAAKI,gBACJJ,KAAKK,aAAaL,KAAKK,UAAUF,SAAS,GAC3C;AACAV,uBAAa,WAAW;AAAA,QAC1B,WACEO,KAAKM,YACJN,KAAKO,eAAeP,KAAKO,YAAYJ,SAAS,GAC/C;AACAV,uBAAa,OAAO;AAAA,QACtB,WACEO,KAAKQ,aACJR,KAAKS,gBAAgBT,KAAKS,aAAaN,SAAS,GACjD;AACAV,uBAAa,QAAQ;AAAA,QACvB,WACEO,KAAKU,oBACJV,KAAKW,uBAAuBX,KAAKW,oBAAoBR,SAAS,GAC/D;AACAV,uBAAa,eAAe;AAAA,QAC9B,WACEO,KAAKY,YACJZ,KAAKa,eAAeb,KAAKa,YAAYV,SAAS,GAC/C;AACAV,uBAAa,OAAO;AAAA,QACtB,OAAO;AACLA,uBAAa,QAAQ;AAAA,QACvB;AAAA,MACF,OAAO;AAEL,YAAIO,KAAKc,SAASX,SAAS,GAAG;AAC5BV,uBAAa,UAAU;AAAA,QACzB,WACEO,KAAKM,YACJN,KAAKO,eAAeP,KAAKO,YAAYJ,SAAS,GAC/C;AACAV,uBAAa,OAAO;AAAA,QACtB,WACEO,KAAKQ,aACJR,KAAKS,gBAAgBT,KAAKS,aAAaN,SAAS,GACjD;AACAV,uBAAa,QAAQ;AAAA,QACvB,WACEO,KAAKU,oBACJV,KAAKW,uBAAuBX,KAAKW,oBAAoBR,SAAS,GAC/D;AACAV,uBAAa,eAAe;AAAA,QAC9B,WACEO,KAAKY,YACJZ,KAAKa,eAAeb,KAAKa,YAAYV,SAAS,GAC/C;AACAV,uBAAa,OAAO;AAAA,QACtB,OAAO;AACLA,uBAAa,UAAU;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAAsB,gBACGC,MAAI;AAAA,IAAA,IACHC,OAAI;AAAA,aAAEtB,mBAAAA;AAAAA,IAAoB;AAAA,IAAA,IAC1BuB,WAAQ;AAAA,cAAA,MAAA;AAAA,YAAAC,OAAAC,OAAAA;AAAAC,eAAA,MAAAC,UAAAH,MACM7B,SAASiC,oBAAoBC,UAAU,CAAA;AAAA,eAAAL;AAAAA,MAAA,GAAA;AAAA,IAAA;AAAA,IAAAM,UAKnDzB,WAAI,MAAA;AAAA,UAAA0B,QAAAC,QAAAA,GAAAC,QAAAF,MAAAG;AAAAC,aAAAJ,OAAAX,gBAEDgB,oBAAkB;AAAA,QAAA,IAACC,eAAY;AAAA,iBAAEhC,KAAAA;AAAAA,QAAM;AAAA,MAAA,CAAA,GAAA4B,KAAA;AAAAE,aAAAJ,OAAAX,gBACvCkB,kBAAgB;AAAA,QAAA,IACfD,eAAY;AAAA,iBAAEhC,KAAAA;AAAAA,QAAM;AAAA,QAAA,IACpBR,YAAS;AAAA,iBAAEA,UAAAA;AAAAA,QAAW;AAAA,QACtB0C,aAAazC;AAAAA,MAAAA,CAAY,GAAAmC,KAAA;AAAAE,aAAAF,OAAAb,gBAGxBC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAU;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBACnCoB,aAAW;AAAA,YAAA,IAACrB,WAAQ;AAAA,qBAAEd,OAAOc;AAAAA,YAAQ;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAgB,aAAAF,OAAAb,gBAEvCC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAQ;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBACjCqB,WAAS;AAAA,YAAA,IAAClC,SAAM;AAAA,qBAAEF,OAAOE;AAAAA,YAAM;AAAA,YAAA,IAAEY,WAAQ;AAAA,qBAAEd,OAAOc;AAAAA,YAAQ;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAgB,aAAAF,OAAAb,gBAE5DC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAW;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBACpCsB,cAAY;AAAA,YAAA,IAAChC,YAAS;AAAA,qBAAEL,KAAAA,EAAOK,aAAa,CAAA;AAAA,YAAE;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAyB,aAAAF,OAAAb,gBAEhDC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAO;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBAChCuB,mBAAiB;AAAA,YAChBC,OAAK;AAAA,YAAA,IACLC,SAAM;AAAA,qBAAExC,KAAAA,EAAOO,eAAe,CAAA;AAAA,YAAE;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAuB,aAAAF,OAAAb,gBAGnCC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAQ;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBACjCuB,mBAAiB;AAAA,YAChBC,OAAK;AAAA,YAAA,IACLC,SAAM;AAAA,qBAAExC,KAAAA,EAAOS,gBAAgB,CAAA;AAAA,YAAE;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAqB,aAAAF,OAAAb,gBAGpCC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAe;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBACxCuB,mBAAiB;AAAA,YAChBC,OAAK;AAAA,YAAA,IACLC,SAAM;AAAA,qBAAExC,KAAAA,EAAOW,uBAAuB,CAAA;AAAA,YAAE;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAmB,aAAAF,OAAAb,gBAG3CC,MAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEzB,gBAAgB;AAAA,QAAO;AAAA,QAAA,IAAAiC,WAAA;AAAA,iBAAAV,gBAChCuB,mBAAiB;AAAA,YAChBC,OAAK;AAAA,YAAA,IACLC,SAAM;AAAA,qBAAExC,KAAAA,EAAOa,eAAe,CAAA;AAAA,YAAE;AAAA,UAAA,CAAA;AAAA,QAAA;AAAA,MAAA,CAAA,GAAA,IAAA;AAAAQ,aAAAoB,CAAAA,QAAA;AAAA,YAAAC,MAtC5BpD,SAASiC,oBAAoBoB,WAASC,OAOpCtD,SAASiC,oBAAoBsB;AAAWH,gBAAAD,IAAAK,KAAAxB,UAAAI,OAAAe,IAAAK,IAAAJ,GAAA;AAAAE,iBAAAH,IAAAM,KAAAzB,UAAAM,OAAAa,IAAAM,IAAAH,IAAA;AAAA,eAAAH;AAAAA,MAAA,GAAA;AAAA,QAAAK,GAAAjD;AAAAA,QAAAkD,GAAAlD;AAAAA,MAAAA,CAAA;AAAA,aAAA6B;AAAAA,IAAA,GAAA;AAAA,EAAA,CAoCvD;AAGP;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Component } from 'solid-js';
|
|
2
|
+
import { ActivityEvent } from '../../store/ai-context.js';
|
|
3
|
+
interface ActivityEventsTabProps {
|
|
4
|
+
title: string;
|
|
5
|
+
events: Array<ActivityEvent>;
|
|
6
|
+
}
|
|
7
|
+
export declare const ActivityEventsTab: Component<ActivityEventsTabProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div><div><div><div></div><div> events</div></div><div>Activity event log</div></div><div>`), _tmpl$2 = /* @__PURE__ */ template(`<div>No events yet`), _tmpl$3 = /* @__PURE__ */ template(`<div><div> ยท </div><pre>`);
|
|
5
|
+
const ActivityEventsTab = (props) => {
|
|
6
|
+
const styles = useStyles();
|
|
7
|
+
const formattedTimestamp = (timestamp) => new Date(timestamp).toLocaleTimeString();
|
|
8
|
+
return createComponent(Show, {
|
|
9
|
+
get when() {
|
|
10
|
+
return props.events.length > 0;
|
|
11
|
+
},
|
|
12
|
+
get fallback() {
|
|
13
|
+
return (() => {
|
|
14
|
+
var _el$9 = _tmpl$2();
|
|
15
|
+
effect(() => className(_el$9, styles().conversationDetails.noChunks));
|
|
16
|
+
return _el$9;
|
|
17
|
+
})();
|
|
18
|
+
},
|
|
19
|
+
get children() {
|
|
20
|
+
var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$6 = _el$5.firstChild, _el$7 = _el$3.nextSibling, _el$8 = _el$2.nextSibling;
|
|
21
|
+
insert(_el$4, () => props.title);
|
|
22
|
+
insert(_el$5, () => props.events.length, _el$6);
|
|
23
|
+
insert(_el$8, createComponent(For, {
|
|
24
|
+
get each() {
|
|
25
|
+
return props.events;
|
|
26
|
+
},
|
|
27
|
+
children: (event) => (() => {
|
|
28
|
+
var _el$0 = _tmpl$3(), _el$1 = _el$0.firstChild, _el$10 = _el$1.firstChild, _el$11 = _el$1.nextSibling;
|
|
29
|
+
insert(_el$1, () => event.name, _el$10);
|
|
30
|
+
insert(_el$1, () => formattedTimestamp(event.timestamp), null);
|
|
31
|
+
insert(_el$11, () => JSON.stringify(event.payload, null, 2));
|
|
32
|
+
effect((_p$) => {
|
|
33
|
+
var _v$8 = styles().detailSection, _v$9 = styles().detailSectionHeader, _v$0 = styles().conversationDetails.jsonPreview;
|
|
34
|
+
_v$8 !== _p$.e && className(_el$0, _p$.e = _v$8);
|
|
35
|
+
_v$9 !== _p$.t && className(_el$1, _p$.t = _v$9);
|
|
36
|
+
_v$0 !== _p$.a && className(_el$11, _p$.a = _v$0);
|
|
37
|
+
return _p$;
|
|
38
|
+
}, {
|
|
39
|
+
e: void 0,
|
|
40
|
+
t: void 0,
|
|
41
|
+
a: void 0
|
|
42
|
+
});
|
|
43
|
+
return _el$0;
|
|
44
|
+
})()
|
|
45
|
+
}));
|
|
46
|
+
effect((_p$) => {
|
|
47
|
+
var _v$ = styles().conversationDetails.streamContainer, _v$2 = styles().conversationDetails.streamHeader, _v$3 = styles().conversationDetails.streamHeaderRow, _v$4 = styles().conversationDetails.streamTitle, _v$5 = `${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeCount}`, _v$6 = styles().conversationDetails.streamSubtitle, _v$7 = styles().conversationDetails.messageGroups;
|
|
48
|
+
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
49
|
+
_v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
|
|
50
|
+
_v$3 !== _p$.a && className(_el$3, _p$.a = _v$3);
|
|
51
|
+
_v$4 !== _p$.o && className(_el$4, _p$.o = _v$4);
|
|
52
|
+
_v$5 !== _p$.i && className(_el$5, _p$.i = _v$5);
|
|
53
|
+
_v$6 !== _p$.n && className(_el$7, _p$.n = _v$6);
|
|
54
|
+
_v$7 !== _p$.s && className(_el$8, _p$.s = _v$7);
|
|
55
|
+
return _p$;
|
|
56
|
+
}, {
|
|
57
|
+
e: void 0,
|
|
58
|
+
t: void 0,
|
|
59
|
+
a: void 0,
|
|
60
|
+
o: void 0,
|
|
61
|
+
i: void 0,
|
|
62
|
+
n: void 0,
|
|
63
|
+
s: void 0
|
|
64
|
+
});
|
|
65
|
+
return _el$;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
export {
|
|
70
|
+
ActivityEventsTab
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=ActivityEventsTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActivityEventsTab.js","sources":["../../../../src/components/conversation/ActivityEventsTab.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { useStyles } from '../../styles/use-styles'\nimport type { Component } from 'solid-js'\nimport type { ActivityEvent } from '../../store/ai-context'\n\ninterface ActivityEventsTabProps {\n title: string\n events: Array<ActivityEvent>\n}\n\nexport const ActivityEventsTab: Component<ActivityEventsTabProps> = (props) => {\n const styles = useStyles()\n\n const formattedTimestamp = (timestamp: number) =>\n new Date(timestamp).toLocaleTimeString()\n\n return (\n <Show\n when={props.events.length > 0}\n fallback={\n <div class={styles().conversationDetails.noChunks}>No events yet</div>\n }\n >\n <div class={styles().conversationDetails.streamContainer}>\n <div class={styles().conversationDetails.streamHeader}>\n <div class={styles().conversationDetails.streamHeaderRow}>\n <div class={styles().conversationDetails.streamTitle}>\n {props.title}\n </div>\n <div\n class={`${styles().conversationDetails.chunkBadge} ${styles().conversationDetails.chunkBadgeCount}`}\n >\n {props.events.length} events\n </div>\n </div>\n <div class={styles().conversationDetails.streamSubtitle}>\n Activity event log\n </div>\n </div>\n <div class={styles().conversationDetails.messageGroups}>\n <For each={props.events}>\n {(event) => (\n <div class={styles().detailSection}>\n <div class={styles().detailSectionHeader}>\n {event.name} ยท {formattedTimestamp(event.timestamp)}\n </div>\n <pre class={styles().conversationDetails.jsonPreview}>\n {JSON.stringify(event.payload, null, 2)}\n </pre>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n )\n}\n"],"names":["ActivityEventsTab","props","styles","useStyles","formattedTimestamp","timestamp","Date","toLocaleTimeString","_$createComponent","Show","when","events","length","fallback","_el$9","_tmpl$2","_$effect","_$className","conversationDetails","noChunks","children","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","_el$5","nextSibling","_el$6","_el$7","_el$8","_$insert","title","For","each","event","_el$0","_tmpl$3","_el$1","_el$10","_el$11","name","JSON","stringify","payload","_p$","_v$8","detailSection","_v$9","detailSectionHeader","_v$0","jsonPreview","e","t","a","undefined","_v$","streamContainer","_v$2","streamHeader","_v$3","streamHeaderRow","_v$4","streamTitle","_v$5","chunkBadge","chunkBadgeCount","_v$6","streamSubtitle","_v$7","messageGroups","o","i","n","s"],"mappings":"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"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { template, insert, createComponent, effect, className, memo } from "solid-js/web";
|
|
2
2
|
import { Show, For } from "solid-js";
|
|
3
|
+
import { JsonTree } from "@tanstack/devtools-ui";
|
|
3
4
|
import { useStyles } from "../../styles/use-styles.js";
|
|
4
5
|
import { formatDuration } from "../utils/format.js";
|
|
5
|
-
var _tmpl$ = /* @__PURE__ */ template(`<div>๐ <!> iterations`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>๐ฏ Tokens:</span><span>Prompt: </span><span>โข</span><span>Completion: </span><span>โข</span><span>Total: `), _tmpl$
|
|
6
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div>๐ <!> iterations`), _tmpl$2 = /* @__PURE__ */ template(`<div><span>๐ง</span><div>`), _tmpl$3 = /* @__PURE__ */ template(`<div><span>โ๏ธ Options:</span><div>`), _tmpl$4 = /* @__PURE__ */ template(`<div><span>๐ฏ Tokens:</span><span>Prompt: </span><span>โข</span><span>Completion: </span><span>โข</span><span>Total: `), _tmpl$5 = /* @__PURE__ */ template(`<details><summary>๐งช Model options</summary><div>`), _tmpl$6 = /* @__PURE__ */ template(`<details><summary>๐งฉ System prompts (<!>)</summary><div>`), _tmpl$7 = /* @__PURE__ */ template(`<div><div><div><div></div><div></div></div><div>`), _tmpl$8 = /* @__PURE__ */ template(`<span>`), _tmpl$9 = /* @__PURE__ */ template(`<span>: `), _tmpl$0 = /* @__PURE__ */ template(`<div><div>#</div><div>`);
|
|
6
7
|
const ConversationHeader = (props) => {
|
|
7
8
|
const styles = useStyles();
|
|
8
9
|
const conv = () => props.conversation;
|
|
9
10
|
const toolNames = () => conv().toolNames ?? [];
|
|
10
11
|
const options = () => conv().options;
|
|
11
|
-
const
|
|
12
|
+
const modelOptions = () => conv().modelOptions;
|
|
12
13
|
const iterationCount = () => conv().iterationCount;
|
|
14
|
+
const systemPrompts = () => conv().systemPrompts ?? [];
|
|
13
15
|
return (() => {
|
|
14
|
-
var _el$ = _tmpl$
|
|
16
|
+
var _el$ = _tmpl$7(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling, _el$0 = _el$3.nextSibling;
|
|
15
17
|
insert(_el$4, () => conv().label);
|
|
16
18
|
insert(_el$5, () => conv().status);
|
|
17
19
|
insert(_el$3, createComponent(Show, {
|
|
@@ -40,23 +42,26 @@ const ConversationHeader = (props) => {
|
|
|
40
42
|
})(), null);
|
|
41
43
|
insert(_el$2, createComponent(Show, {
|
|
42
44
|
get when() {
|
|
43
|
-
return
|
|
45
|
+
return toolNames().length > 0;
|
|
44
46
|
},
|
|
45
47
|
get children() {
|
|
46
48
|
var _el$1 = _tmpl$2(), _el$10 = _el$1.firstChild, _el$11 = _el$10.nextSibling;
|
|
47
|
-
_el$11
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
insert(_el$11, createComponent(For, {
|
|
50
|
+
get each() {
|
|
51
|
+
return toolNames();
|
|
52
|
+
},
|
|
53
|
+
children: (toolName) => (() => {
|
|
54
|
+
var _el$34 = _tmpl$8();
|
|
55
|
+
insert(_el$34, toolName);
|
|
56
|
+
effect(() => className(_el$34, styles().conversationDetails.toolBadge));
|
|
57
|
+
return _el$34;
|
|
58
|
+
})()
|
|
59
|
+
}));
|
|
55
60
|
effect((_p$) => {
|
|
56
|
-
var _v$ = styles().conversationDetails.
|
|
61
|
+
var _v$ = styles().conversationDetails.toolsRow, _v$2 = styles().conversationDetails.toolsLabel, _v$3 = styles().conversationDetails.toolsList;
|
|
57
62
|
_v$ !== _p$.e && className(_el$1, _p$.e = _v$);
|
|
58
63
|
_v$2 !== _p$.t && className(_el$10, _p$.t = _v$2);
|
|
59
|
-
_v$3 !== _p$.a && className(_el$
|
|
64
|
+
_v$3 !== _p$.a && className(_el$11, _p$.a = _v$3);
|
|
60
65
|
return _p$;
|
|
61
66
|
}, {
|
|
62
67
|
e: void 0,
|
|
@@ -68,87 +73,78 @@ const ConversationHeader = (props) => {
|
|
|
68
73
|
}), null);
|
|
69
74
|
insert(_el$2, createComponent(Show, {
|
|
70
75
|
get when() {
|
|
71
|
-
return
|
|
76
|
+
return memo(() => !!options())() && Object.keys(options()).length > 0;
|
|
72
77
|
},
|
|
73
78
|
get children() {
|
|
74
|
-
var _el$
|
|
75
|
-
insert(_el$
|
|
79
|
+
var _el$12 = _tmpl$3(), _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling;
|
|
80
|
+
insert(_el$14, createComponent(For, {
|
|
76
81
|
get each() {
|
|
77
|
-
return
|
|
82
|
+
return Object.entries(options());
|
|
78
83
|
},
|
|
79
|
-
children: (
|
|
80
|
-
var _el$
|
|
81
|
-
insert(_el$
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
children: ([key, value]) => (() => {
|
|
85
|
+
var _el$35 = _tmpl$9(), _el$36 = _el$35.firstChild;
|
|
86
|
+
insert(_el$35, key, _el$36);
|
|
87
|
+
insert(_el$35, () => typeof value === "object" ? JSON.stringify(value) : String(value), null);
|
|
88
|
+
effect(() => className(_el$35, styles().conversationDetails.optionBadge));
|
|
89
|
+
return _el$35;
|
|
84
90
|
})()
|
|
85
91
|
}));
|
|
86
92
|
effect((_p$) => {
|
|
87
|
-
var _v$4 = styles().conversationDetails.
|
|
88
|
-
_v$4 !== _p$.e && className(_el$
|
|
89
|
-
_v$5 !== _p$.t && className(_el$
|
|
90
|
-
_v$6 !== _p$.a && className(_el$
|
|
93
|
+
var _v$4 = styles().conversationDetails.optionsRow, _v$5 = styles().conversationDetails.optionsLabel, _v$6 = styles().conversationDetails.optionsCompact;
|
|
94
|
+
_v$4 !== _p$.e && className(_el$12, _p$.e = _v$4);
|
|
95
|
+
_v$5 !== _p$.t && className(_el$13, _p$.t = _v$5);
|
|
96
|
+
_v$6 !== _p$.a && className(_el$14, _p$.a = _v$6);
|
|
91
97
|
return _p$;
|
|
92
98
|
}, {
|
|
93
99
|
e: void 0,
|
|
94
100
|
t: void 0,
|
|
95
101
|
a: void 0
|
|
96
102
|
});
|
|
97
|
-
return _el$
|
|
103
|
+
return _el$12;
|
|
98
104
|
}
|
|
99
105
|
}), null);
|
|
100
106
|
insert(_el$2, createComponent(Show, {
|
|
101
107
|
get when() {
|
|
102
|
-
return
|
|
108
|
+
return conv().usage;
|
|
103
109
|
},
|
|
104
110
|
get children() {
|
|
105
|
-
var _el$
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
effect(() => className(_el$29, styles().conversationDetails.optionBadge));
|
|
115
|
-
return _el$29;
|
|
116
|
-
})()
|
|
117
|
-
}));
|
|
111
|
+
var _el$15 = _tmpl$4(), _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling;
|
|
112
|
+
_el$17.firstChild;
|
|
113
|
+
var _el$19 = _el$17.nextSibling, _el$20 = _el$19.nextSibling;
|
|
114
|
+
_el$20.firstChild;
|
|
115
|
+
var _el$22 = _el$20.nextSibling, _el$23 = _el$22.nextSibling;
|
|
116
|
+
_el$23.firstChild;
|
|
117
|
+
insert(_el$17, () => conv().usage?.promptTokens.toLocaleString() || 0, null);
|
|
118
|
+
insert(_el$20, () => conv().usage?.completionTokens.toLocaleString() || 0, null);
|
|
119
|
+
insert(_el$23, () => conv().usage?.totalTokens.toLocaleString() || 0, null);
|
|
118
120
|
effect((_p$) => {
|
|
119
|
-
var _v$7 = styles().conversationDetails.
|
|
120
|
-
_v$7 !== _p$.e && className(_el$
|
|
121
|
-
_v$8 !== _p$.t && className(_el$
|
|
122
|
-
_v$9 !== _p$.a && className(_el$
|
|
121
|
+
var _v$7 = styles().conversationDetails.usageInfo, _v$8 = styles().conversationDetails.usageLabel, _v$9 = styles().conversationDetails.usageBold;
|
|
122
|
+
_v$7 !== _p$.e && className(_el$15, _p$.e = _v$7);
|
|
123
|
+
_v$8 !== _p$.t && className(_el$16, _p$.t = _v$8);
|
|
124
|
+
_v$9 !== _p$.a && className(_el$23, _p$.a = _v$9);
|
|
123
125
|
return _p$;
|
|
124
126
|
}, {
|
|
125
127
|
e: void 0,
|
|
126
128
|
t: void 0,
|
|
127
129
|
a: void 0
|
|
128
130
|
});
|
|
129
|
-
return _el$
|
|
131
|
+
return _el$15;
|
|
130
132
|
}
|
|
131
133
|
}), null);
|
|
132
134
|
insert(_el$2, createComponent(Show, {
|
|
133
135
|
get when() {
|
|
134
|
-
return memo(() => !!
|
|
136
|
+
return memo(() => !!modelOptions())() && Object.keys(modelOptions()).length > 0;
|
|
135
137
|
},
|
|
136
138
|
get children() {
|
|
137
139
|
var _el$25 = _tmpl$5(), _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling;
|
|
138
|
-
insert(_el$27, createComponent(
|
|
139
|
-
get
|
|
140
|
-
return
|
|
140
|
+
insert(_el$27, createComponent(JsonTree, {
|
|
141
|
+
get value() {
|
|
142
|
+
return modelOptions();
|
|
141
143
|
},
|
|
142
|
-
|
|
143
|
-
var _el$32 = _tmpl$8(), _el$33 = _el$32.firstChild;
|
|
144
|
-
insert(_el$32, key, _el$33);
|
|
145
|
-
insert(_el$32, () => typeof value === "object" ? JSON.stringify(value) : String(value), null);
|
|
146
|
-
effect(() => className(_el$32, styles().conversationDetails.optionBadge));
|
|
147
|
-
return _el$32;
|
|
148
|
-
})()
|
|
144
|
+
defaultExpansionDepth: 2
|
|
149
145
|
}));
|
|
150
146
|
effect((_p$) => {
|
|
151
|
-
var _v$0 = styles().conversationDetails.
|
|
147
|
+
var _v$0 = styles().conversationDetails.collapsibleSection, _v$1 = styles().conversationDetails.collapsibleSummary, _v$10 = styles().conversationDetails.collapsibleContent;
|
|
152
148
|
_v$0 !== _p$.e && className(_el$25, _p$.e = _v$0);
|
|
153
149
|
_v$1 !== _p$.t && className(_el$26, _p$.t = _v$1);
|
|
154
150
|
_v$10 !== _p$.a && className(_el$27, _p$.a = _v$10);
|
|
@@ -161,14 +157,61 @@ const ConversationHeader = (props) => {
|
|
|
161
157
|
return _el$25;
|
|
162
158
|
}
|
|
163
159
|
}), null);
|
|
160
|
+
insert(_el$2, createComponent(Show, {
|
|
161
|
+
get when() {
|
|
162
|
+
return systemPrompts().length > 0;
|
|
163
|
+
},
|
|
164
|
+
get children() {
|
|
165
|
+
var _el$28 = _tmpl$6(), _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild, _el$32 = _el$30.nextSibling;
|
|
166
|
+
_el$32.nextSibling;
|
|
167
|
+
var _el$33 = _el$29.nextSibling;
|
|
168
|
+
insert(_el$29, () => systemPrompts().length, _el$32);
|
|
169
|
+
insert(_el$33, createComponent(For, {
|
|
170
|
+
get each() {
|
|
171
|
+
return systemPrompts();
|
|
172
|
+
},
|
|
173
|
+
children: (prompt, index) => (() => {
|
|
174
|
+
var _el$38 = _tmpl$0(), _el$39 = _el$38.firstChild;
|
|
175
|
+
_el$39.firstChild;
|
|
176
|
+
var _el$41 = _el$39.nextSibling;
|
|
177
|
+
insert(_el$39, () => index() + 1, null);
|
|
178
|
+
insert(_el$41, prompt);
|
|
179
|
+
effect((_p$) => {
|
|
180
|
+
var _v$20 = styles().conversationDetails.systemPromptItem, _v$21 = styles().conversationDetails.systemPromptIndex, _v$22 = styles().conversationDetails.systemPromptText;
|
|
181
|
+
_v$20 !== _p$.e && className(_el$38, _p$.e = _v$20);
|
|
182
|
+
_v$21 !== _p$.t && className(_el$39, _p$.t = _v$21);
|
|
183
|
+
_v$22 !== _p$.a && className(_el$41, _p$.a = _v$22);
|
|
184
|
+
return _p$;
|
|
185
|
+
}, {
|
|
186
|
+
e: void 0,
|
|
187
|
+
t: void 0,
|
|
188
|
+
a: void 0
|
|
189
|
+
});
|
|
190
|
+
return _el$38;
|
|
191
|
+
})()
|
|
192
|
+
}));
|
|
193
|
+
effect((_p$) => {
|
|
194
|
+
var _v$11 = styles().conversationDetails.collapsibleSection, _v$12 = styles().conversationDetails.collapsibleSummary, _v$13 = styles().conversationDetails.collapsibleContent;
|
|
195
|
+
_v$11 !== _p$.e && className(_el$28, _p$.e = _v$11);
|
|
196
|
+
_v$12 !== _p$.t && className(_el$29, _p$.t = _v$12);
|
|
197
|
+
_v$13 !== _p$.a && className(_el$33, _p$.a = _v$13);
|
|
198
|
+
return _p$;
|
|
199
|
+
}, {
|
|
200
|
+
e: void 0,
|
|
201
|
+
t: void 0,
|
|
202
|
+
a: void 0
|
|
203
|
+
});
|
|
204
|
+
return _el$28;
|
|
205
|
+
}
|
|
206
|
+
}), null);
|
|
164
207
|
effect((_p$) => {
|
|
165
|
-
var _v$
|
|
166
|
-
_v$
|
|
167
|
-
_v$
|
|
168
|
-
_v$
|
|
169
|
-
_v$
|
|
170
|
-
_v$
|
|
171
|
-
_v$
|
|
208
|
+
var _v$14 = styles().panelHeader, _v$15 = styles().conversationDetails.headerContent, _v$16 = styles().conversationDetails.headerRow, _v$17 = styles().conversationDetails.headerLabel, _v$18 = `${styles().conversationDetails.statusBadge} ${conv().status === "active" ? styles().conversationDetails.statusActive : conv().status === "completed" ? styles().conversationDetails.statusCompleted : styles().conversationDetails.statusError}`, _v$19 = styles().conversationDetails.metaInfo;
|
|
209
|
+
_v$14 !== _p$.e && className(_el$, _p$.e = _v$14);
|
|
210
|
+
_v$15 !== _p$.t && className(_el$2, _p$.t = _v$15);
|
|
211
|
+
_v$16 !== _p$.a && className(_el$3, _p$.a = _v$16);
|
|
212
|
+
_v$17 !== _p$.o && className(_el$4, _p$.o = _v$17);
|
|
213
|
+
_v$18 !== _p$.i && className(_el$5, _p$.i = _v$18);
|
|
214
|
+
_v$19 !== _p$.n && className(_el$0, _p$.n = _v$19);
|
|
172
215
|
return _p$;
|
|
173
216
|
}, {
|
|
174
217
|
e: void 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationHeader.js","sources":["../../../../src/components/conversation/ConversationHeader.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 { Conversation } from '../../store/ai-context'\n\ninterface ConversationHeaderProps {\n conversation: Conversation\n}\n\nexport const ConversationHeader: Component<ConversationHeaderProps> = (\n props,\n) => {\n const styles = useStyles()\n const conv = () => props.conversation\n\n const toolNames = () => conv().toolNames ?? []\n const options = () => conv().options\n const providerOptions = () => conv().providerOptions\n const iterationCount = () => conv().iterationCount\n\n return (\n <div class={styles().panelHeader}>\n <div class={styles().conversationDetails.headerContent}>\n <div class={styles().conversationDetails.headerRow}>\n <div class={styles().conversationDetails.headerLabel}>\n {conv().label}\n </div>\n <div\n class={`${styles().conversationDetails.statusBadge} ${\n conv().status === 'active'\n ? styles().conversationDetails.statusActive\n : conv().status === 'completed'\n ? styles().conversationDetails.statusCompleted\n : styles().conversationDetails.statusError\n }`}\n >\n {conv().status}\n </div>\n <Show when={iterationCount() !== undefined && iterationCount()! > 1}>\n <div class={styles().conversationDetails.iterationBadge}>\n ๐ {iterationCount()} iterations\n </div>\n </Show>\n </div>\n <div class={styles().conversationDetails.metaInfo}>\n {conv().model && `Model: ${conv().model}`}\n {conv().provider && ` โข Provider: ${conv().provider}`}\n {conv().completedAt &&\n ` โข Duration: ${formatDuration(conv().completedAt! - conv().startedAt)}`}\n </div>\n <Show when={conv().usage}>\n <div class={styles().conversationDetails.usageInfo}>\n <span class={styles().conversationDetails.usageLabel}>\n ๐ฏ Tokens:\n </span>\n <span>\n Prompt: {conv().usage?.promptTokens.toLocaleString() || 0}\n </span>\n <span>โข</span>\n <span>\n Completion: {conv().usage?.completionTokens.toLocaleString() || 0}\n </span>\n <span>โข</span>\n <span class={styles().conversationDetails.usageBold}>\n Total: {conv().usage?.totalTokens.toLocaleString() || 0}\n </span>\n </div>\n </Show>\n {/* Tools list - always visible */}\n <Show when={toolNames().length > 0}>\n <div class={styles().conversationDetails.toolsRow}>\n <span class={styles().conversationDetails.toolsLabel}>๐ง</span>\n <div class={styles().conversationDetails.toolsList}>\n <For each={toolNames()}>\n {(toolName) => (\n <span class={styles().conversationDetails.toolBadge}>\n {toolName}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n {/* Options - always visible in compact form */}\n <Show when={options() && Object.keys(options()!).length > 0}>\n <div class={styles().conversationDetails.optionsRow}>\n <span class={styles().conversationDetails.optionsLabel}>\n โ๏ธ Options:\n </span>\n <div class={styles().conversationDetails.optionsCompact}>\n <For each={Object.entries(options()!)}>\n {([key, value]) => (\n <span class={styles().conversationDetails.optionBadge}>\n {key}:{' '}\n {typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n {/* Provider Options - always visible in compact form */}\n <Show\n when={providerOptions() && Object.keys(providerOptions()!).length > 0}\n >\n <div class={styles().conversationDetails.optionsRow}>\n <span class={styles().conversationDetails.optionsLabel}>\n ๐ท๏ธ Provider:\n </span>\n <div class={styles().conversationDetails.optionsCompact}>\n <For each={Object.entries(providerOptions()!)}>\n {([key, value]) => (\n <span class={styles().conversationDetails.optionBadge}>\n {key}:{' '}\n {typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["ConversationHeader","props","styles","useStyles","conv","conversation","toolNames","options","providerOptions","iterationCount","_el$","_tmpl$6","_el$2","firstChild","_el$3","_el$4","_el$5","nextSibling","_el$0","_$insert","label","status","_$createComponent","Show","when","_$memo","undefined","children","_el$6","_tmpl$","_el$7","_el$9","_$effect","_$className","conversationDetails","iterationBadge","_c$","model","_c$2","provider","_c$3","completedAt","formatDuration","startedAt","usage","_el$1","_tmpl$2","_el$10","_el$11","_el$13","_el$14","_el$16","_el$17","promptTokens","toLocaleString","completionTokens","totalTokens","_p$","_v$","usageInfo","_v$2","usageLabel","_v$3","usageBold","e","t","a","length","_el$19","_tmpl$3","_el$20","_el$21","For","each","toolName","_el$28","_tmpl$7","toolBadge","_v$4","toolsRow","_v$5","toolsLabel","_v$6","toolsList","Object","keys","_el$22","_tmpl$4","_el$23","_el$24","entries","key","value","_el$29","_tmpl$8","_el$30","JSON","stringify","String","optionBadge","_v$7","optionsRow","_v$8","optionsLabel","_v$9","optionsCompact","_el$25","_tmpl$5","_el$26","_el$27","_el$32","_el$33","_v$0","_v$1","_v$10","_v$11","panelHeader","_v$12","headerContent","_v$13","headerRow","_v$14","headerLabel","_v$15","statusBadge","statusActive","statusCompleted","statusError","_v$16","metaInfo","o","i","n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConversationHeader.js","sources":["../../../../src/components/conversation/ConversationHeader.tsx"],"sourcesContent":["import { For, Show } from 'solid-js'\nimport { JsonTree } from '@tanstack/devtools-ui'\nimport { useStyles } from '../../styles/use-styles'\nimport { formatDuration } from '../utils'\nimport type { Component } from 'solid-js'\nimport type { Conversation } from '../../store/ai-context'\n\ninterface ConversationHeaderProps {\n conversation: Conversation\n}\n\nexport const ConversationHeader: Component<ConversationHeaderProps> = (\n props,\n) => {\n const styles = useStyles()\n const conv = () => props.conversation\n\n const toolNames = () => conv().toolNames ?? []\n const options = () => conv().options\n const modelOptions = () => conv().modelOptions\n const iterationCount = () => conv().iterationCount\n const systemPrompts = () => conv().systemPrompts ?? []\n\n return (\n <div class={styles().panelHeader}>\n <div class={styles().conversationDetails.headerContent}>\n <div class={styles().conversationDetails.headerRow}>\n <div class={styles().conversationDetails.headerLabel}>\n {conv().label}\n </div>\n <div\n class={`${styles().conversationDetails.statusBadge} ${\n conv().status === 'active'\n ? styles().conversationDetails.statusActive\n : conv().status === 'completed'\n ? styles().conversationDetails.statusCompleted\n : styles().conversationDetails.statusError\n }`}\n >\n {conv().status}\n </div>\n <Show when={iterationCount() !== undefined && iterationCount()! > 1}>\n <div class={styles().conversationDetails.iterationBadge}>\n ๐ {iterationCount()} iterations\n </div>\n </Show>\n </div>\n <div class={styles().conversationDetails.metaInfo}>\n {conv().model && `Model: ${conv().model}`}\n {conv().provider && ` โข Provider: ${conv().provider}`}\n {conv().completedAt &&\n ` โข Duration: ${formatDuration(conv().completedAt! - conv().startedAt)}`}\n </div>\n {/* Tools list - always visible */}\n <Show when={toolNames().length > 0}>\n <div class={styles().conversationDetails.toolsRow}>\n <span class={styles().conversationDetails.toolsLabel}>๐ง</span>\n <div class={styles().conversationDetails.toolsList}>\n <For each={toolNames()}>\n {(toolName) => (\n <span class={styles().conversationDetails.toolBadge}>\n {toolName}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n {/* Options - always visible in compact form */}\n <Show when={options() && Object.keys(options()!).length > 0}>\n <div class={styles().conversationDetails.optionsRow}>\n <span class={styles().conversationDetails.optionsLabel}>\n โ๏ธ Options:\n </span>\n <div class={styles().conversationDetails.optionsCompact}>\n <For each={Object.entries(options()!)}>\n {([key, value]) => (\n <span class={styles().conversationDetails.optionBadge}>\n {key}:{' '}\n {typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)}\n </span>\n )}\n </For>\n </div>\n </div>\n </Show>\n <Show when={conv().usage}>\n <div class={styles().conversationDetails.usageInfo}>\n <span class={styles().conversationDetails.usageLabel}>\n ๐ฏ Tokens:\n </span>\n <span>\n Prompt: {conv().usage?.promptTokens.toLocaleString() || 0}\n </span>\n <span>โข</span>\n <span>\n Completion: {conv().usage?.completionTokens.toLocaleString() || 0}\n </span>\n <span>โข</span>\n <span class={styles().conversationDetails.usageBold}>\n Total: {conv().usage?.totalTokens.toLocaleString() || 0}\n </span>\n </div>\n </Show>\n {/* Model options - collapsible */}\n <Show when={modelOptions() && Object.keys(modelOptions()!).length > 0}>\n <details class={styles().conversationDetails.collapsibleSection}>\n <summary class={styles().conversationDetails.collapsibleSummary}>\n ๐งช Model options\n </summary>\n <div class={styles().conversationDetails.collapsibleContent}>\n <JsonTree\n value={modelOptions() as Record<string, unknown>}\n defaultExpansionDepth={2}\n />\n </div>\n </details>\n </Show>\n {/* System prompts - collapsible */}\n <Show when={systemPrompts().length > 0}>\n <details class={styles().conversationDetails.collapsibleSection}>\n <summary class={styles().conversationDetails.collapsibleSummary}>\n ๐งฉ System prompts ({systemPrompts().length})\n </summary>\n <div class={styles().conversationDetails.collapsibleContent}>\n <For each={systemPrompts()}>\n {(prompt, index) => (\n <div class={styles().conversationDetails.systemPromptItem}>\n <div class={styles().conversationDetails.systemPromptIndex}>\n #{index() + 1}\n </div>\n <div class={styles().conversationDetails.systemPromptText}>\n {prompt}\n </div>\n </div>\n )}\n </For>\n </div>\n </details>\n </Show>\n </div>\n </div>\n )\n}\n"],"names":["ConversationHeader","props","styles","useStyles","conv","conversation","toolNames","options","modelOptions","iterationCount","systemPrompts","_el$","_tmpl$7","_el$2","firstChild","_el$3","_el$4","_el$5","nextSibling","_el$0","_$insert","label","status","_$createComponent","Show","when","_$memo","undefined","children","_el$6","_tmpl$","_el$7","_el$9","_$effect","_$className","conversationDetails","iterationBadge","_c$","model","_c$2","provider","_c$3","completedAt","formatDuration","startedAt","length","_el$1","_tmpl$2","_el$10","_el$11","For","each","toolName","_el$34","_tmpl$8","toolBadge","_p$","_v$","toolsRow","_v$2","toolsLabel","_v$3","toolsList","e","t","a","Object","keys","_el$12","_tmpl$3","_el$13","_el$14","entries","key","value","_el$35","_tmpl$9","_el$36","JSON","stringify","String","optionBadge","_v$4","optionsRow","_v$5","optionsLabel","_v$6","optionsCompact","usage","_el$15","_tmpl$4","_el$16","_el$17","_el$19","_el$20","_el$22","_el$23","promptTokens","toLocaleString","completionTokens","totalTokens","_v$7","usageInfo","_v$8","usageLabel","_v$9","usageBold","_el$25","_tmpl$5","_el$26","_el$27","JsonTree","defaultExpansionDepth","_v$0","collapsibleSection","_v$1","collapsibleSummary","_v$10","collapsibleContent","_el$28","_tmpl$6","_el$29","_el$30","_el$32","_el$33","prompt","index","_el$38","_tmpl$0","_el$39","_el$41","_v$20","systemPromptItem","_v$21","systemPromptIndex","_v$22","systemPromptText","_v$11","_v$12","_v$13","_v$14","panelHeader","_v$15","headerContent","_v$16","headerRow","_v$17","headerLabel","_v$18","statusBadge","statusActive","statusCompleted","statusError","_v$19","metaInfo","o","i","n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component } from 'solid-js';
|
|
2
2
|
import { Conversation } from '../../store/ai-context.js';
|
|
3
|
-
export type TabType = 'messages' | 'chunks' | 'summaries';
|
|
3
|
+
export type TabType = 'messages' | 'chunks' | 'summaries' | 'image' | 'speech' | 'transcription' | 'video';
|
|
4
4
|
interface ConversationTabsProps {
|
|
5
5
|
conversation: Conversation;
|
|
6
6
|
activeTab: TabType;
|