chore: create message_sent event to track model provider and id model
This commit is contained in:
parent
fa397038ef
commit
310ca7cb23
@ -40,6 +40,8 @@ import { useShallow } from 'zustand/react/shallow'
|
||||
import { McpExtensionToolLoader } from './McpExtensionToolLoader'
|
||||
import { ExtensionTypeEnum, MCPExtension } from '@janhq/core'
|
||||
import { ExtensionManager } from '@/lib/extension'
|
||||
import { useAnalytic } from '@/hooks/useAnalytic'
|
||||
import posthog from 'posthog-js'
|
||||
|
||||
type ChatInputProps = {
|
||||
className?: string
|
||||
@ -88,6 +90,7 @@ const ChatInput = ({
|
||||
const selectedModel = useModelProvider((state) => state.selectedModel)
|
||||
const selectedProvider = useModelProvider((state) => state.selectedProvider)
|
||||
const sendMessage = useChat()
|
||||
const { productAnalytic } = useAnalytic()
|
||||
const [message, setMessage] = useState('')
|
||||
const [dropdownToolsAvailable, setDropdownToolsAvailable] = useState(false)
|
||||
const [tooltipToolsAvailable, setTooltipToolsAvailable] = useState(false)
|
||||
@ -176,7 +179,6 @@ const ChatInput = ({
|
||||
const mcpExtension = extensionManager.get<MCPExtension>(ExtensionTypeEnum.MCP)
|
||||
const MCPToolComponent = mcpExtension?.getToolComponent?.()
|
||||
|
||||
|
||||
const handleSendMesage = async (prompt: string) => {
|
||||
if (!selectedModel) {
|
||||
setMessage('Please select a model to start chatting.')
|
||||
@ -186,6 +188,19 @@ const ChatInput = ({
|
||||
return
|
||||
}
|
||||
setMessage('')
|
||||
|
||||
// Track message send event with PostHog (only if product analytics is enabled)
|
||||
if (productAnalytic && selectedModel && selectedProvider) {
|
||||
try {
|
||||
posthog.capture('message_sent', {
|
||||
model_provider: selectedProvider,
|
||||
model_id: selectedModel.id,
|
||||
})
|
||||
} catch (error) {
|
||||
console.debug('Failed to track message send event:', error)
|
||||
}
|
||||
}
|
||||
|
||||
sendMessage(
|
||||
prompt,
|
||||
true,
|
||||
@ -703,74 +718,75 @@ const ChatInput = ({
|
||||
)}
|
||||
|
||||
{selectedModel?.capabilities?.includes('tools') &&
|
||||
hasActiveMCPServers && (
|
||||
MCPToolComponent ? (
|
||||
// Use custom MCP component
|
||||
<McpExtensionToolLoader
|
||||
tools={tools}
|
||||
hasActiveMCPServers={hasActiveMCPServers}
|
||||
selectedModelHasTools={selectedModel?.capabilities?.includes('tools') ?? false}
|
||||
initialMessage={initialMessage}
|
||||
MCPToolComponent={MCPToolComponent}
|
||||
/>
|
||||
) : (
|
||||
// Use default tools dropdown
|
||||
<TooltipProvider>
|
||||
<Tooltip
|
||||
open={tooltipToolsAvailable}
|
||||
onOpenChange={setTooltipToolsAvailable}
|
||||
hasActiveMCPServers &&
|
||||
(MCPToolComponent ? (
|
||||
// Use custom MCP component
|
||||
<McpExtensionToolLoader
|
||||
tools={tools}
|
||||
hasActiveMCPServers={hasActiveMCPServers}
|
||||
selectedModelHasTools={
|
||||
selectedModel?.capabilities?.includes('tools') ?? false
|
||||
}
|
||||
initialMessage={initialMessage}
|
||||
MCPToolComponent={MCPToolComponent}
|
||||
/>
|
||||
) : (
|
||||
// Use default tools dropdown
|
||||
<TooltipProvider>
|
||||
<Tooltip
|
||||
open={tooltipToolsAvailable}
|
||||
onOpenChange={setTooltipToolsAvailable}
|
||||
>
|
||||
<TooltipTrigger
|
||||
asChild
|
||||
disabled={dropdownToolsAvailable}
|
||||
>
|
||||
<TooltipTrigger
|
||||
asChild
|
||||
disabled={dropdownToolsAvailable}
|
||||
<div
|
||||
onClick={(e) => {
|
||||
setDropdownToolsAvailable(false)
|
||||
e.stopPropagation()
|
||||
}}
|
||||
>
|
||||
<div
|
||||
onClick={(e) => {
|
||||
setDropdownToolsAvailable(false)
|
||||
e.stopPropagation()
|
||||
<DropdownToolsAvailable
|
||||
initialMessage={initialMessage}
|
||||
onOpenChange={(isOpen) => {
|
||||
setDropdownToolsAvailable(isOpen)
|
||||
if (isOpen) {
|
||||
setTooltipToolsAvailable(false)
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DropdownToolsAvailable
|
||||
initialMessage={initialMessage}
|
||||
onOpenChange={(isOpen) => {
|
||||
setDropdownToolsAvailable(isOpen)
|
||||
if (isOpen) {
|
||||
setTooltipToolsAvailable(false)
|
||||
}
|
||||
}}
|
||||
>
|
||||
{(isOpen, toolsCount) => {
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'h-7 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1 cursor-pointer relative',
|
||||
isOpen && 'bg-main-view-fg/10'
|
||||
)}
|
||||
>
|
||||
<IconTool
|
||||
size={18}
|
||||
className="text-main-view-fg/50"
|
||||
/>
|
||||
{toolsCount > 0 && (
|
||||
<div className="absolute -top-2 -right-2 bg-accent text-accent-fg text-xs rounded-full size-5 flex items-center justify-center font-medium">
|
||||
<span className="leading-0 text-xs">
|
||||
{toolsCount > 99 ? '99+' : toolsCount}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}}
|
||||
</DropdownToolsAvailable>
|
||||
</div>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{t('tools')}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
)
|
||||
)}
|
||||
{(isOpen, toolsCount) => {
|
||||
return (
|
||||
<div
|
||||
className={cn(
|
||||
'h-7 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1 cursor-pointer relative',
|
||||
isOpen && 'bg-main-view-fg/10'
|
||||
)}
|
||||
>
|
||||
<IconTool
|
||||
size={18}
|
||||
className="text-main-view-fg/50"
|
||||
/>
|
||||
{toolsCount > 0 && (
|
||||
<div className="absolute -top-2 -right-2 bg-accent text-accent-fg text-xs rounded-full size-5 flex items-center justify-center font-medium">
|
||||
<span className="leading-0 text-xs">
|
||||
{toolsCount > 99 ? '99+' : toolsCount}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}}
|
||||
</DropdownToolsAvailable>
|
||||
</div>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{t('tools')}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
))}
|
||||
{selectedModel?.capabilities?.includes('web_search') && (
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user