Programmer-RD-AI
Update Agent UI Verion
bbe4eea
raw
history blame
5.34 kB
import { useCallback } from 'react'
import { getSessionAPI, getAllSessionsAPI } from '@/api/os'
import { useStore } from '../store'
import { toast } from 'sonner'
import { ChatMessage, ToolCall, ReasoningMessage, ChatEntry } from '@/types/os'
import { getJsonMarkdown } from '@/lib/utils'
interface SessionResponse {
session_id: string
agent_id: string
user_id: string | null
runs?: ChatEntry[]
memory: {
runs?: ChatEntry[]
chats?: ChatEntry[]
}
agent_data: Record<string, unknown>
}
interface LoaderArgs {
entityType: 'agent' | 'team' | null
agentId?: string | null
teamId?: string | null
dbId: string | null
}
const useSessionLoader = () => {
const setMessages = useStore((state) => state.setMessages)
const selectedEndpoint = useStore((state) => state.selectedEndpoint)
const setIsSessionsLoading = useStore((state) => state.setIsSessionsLoading)
const setSessionsData = useStore((state) => state.setSessionsData)
const getSessions = useCallback(
async ({ entityType, agentId, teamId, dbId }: LoaderArgs) => {
const selectedId = entityType === 'agent' ? agentId : teamId
if (!selectedEndpoint || !entityType || !selectedId || !dbId) return
try {
setIsSessionsLoading(true)
const sessions = await getAllSessionsAPI(
selectedEndpoint,
entityType,
selectedId,
dbId
)
console.log('Fetched sessions:', sessions)
setSessionsData(sessions.data ?? [])
} catch {
toast.error('Error loading sessions')
setSessionsData([])
} finally {
setIsSessionsLoading(false)
}
},
[selectedEndpoint, setSessionsData, setIsSessionsLoading]
)
const getSession = useCallback(
async (
{ entityType, agentId, teamId, dbId }: LoaderArgs,
sessionId: string
) => {
const selectedId = entityType === 'agent' ? agentId : teamId
if (
!selectedEndpoint ||
!sessionId ||
!entityType ||
!selectedId ||
!dbId
)
return
console.log(entityType)
try {
const response: SessionResponse = await getSessionAPI(
selectedEndpoint,
entityType,
sessionId,
dbId
)
console.log('Fetched session:', response)
if (response) {
if (Array.isArray(response)) {
const messagesFor = response.flatMap((run) => {
const filteredMessages: ChatMessage[] = []
if (run) {
filteredMessages.push({
role: 'user',
content: run.run_input ?? '',
created_at: run.created_at
})
}
if (run) {
const toolCalls = [
...(run.tools ?? []),
...(run.extra_data?.reasoning_messages ?? []).reduce(
(acc: ToolCall[], msg: ReasoningMessage) => {
if (msg.role === 'tool') {
acc.push({
role: msg.role,
content: msg.content,
tool_call_id: msg.tool_call_id ?? '',
tool_name: msg.tool_name ?? '',
tool_args: msg.tool_args ?? {},
tool_call_error: msg.tool_call_error ?? false,
metrics: msg.metrics ?? { time: 0 },
created_at:
msg.created_at ?? Math.floor(Date.now() / 1000)
})
}
return acc
},
[]
)
]
filteredMessages.push({
role: 'agent',
content: (run.content as string) ?? '',
tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
extra_data: run.extra_data,
images: run.images,
videos: run.videos,
audio: run.audio,
response_audio: run.response_audio,
created_at: run.created_at
})
}
return filteredMessages
})
const processedMessages = messagesFor.map(
(message: ChatMessage) => {
if (Array.isArray(message.content)) {
const textContent = message.content
.filter((item: { type: string }) => item.type === 'text')
.map((item) => item.text)
.join(' ')
return {
...message,
content: textContent
}
}
if (typeof message.content !== 'string') {
return {
...message,
content: getJsonMarkdown(message.content)
}
}
return message
}
)
setMessages(processedMessages)
return processedMessages
}
}
} catch {
return null
}
},
[selectedEndpoint, setMessages]
)
return { getSession, getSessions }
}
export default useSessionLoader