import type { Viewport } from 'reactflow' import type { VisionFile } from '@/types/app' import type { Edge, Node, } from '@/app/components/workflow/types' import type { Metadata } from '@/app/components/base/chat/chat/type' // Log type contains key:string conversation_id:string created_at:string quesiton:string answer:string export type Conversation = { id: string key: string conversationId: string question: string answer: string userRate: number adminRate: number } export type ConversationListResponse = { logs: Conversation[] } export const fetchLogs = (url: string) => fetch(url).then(r => r.json()) export const CompletionParams = ['temperature', 'top_p', 'presence_penalty', 'max_token', 'stop', 'frequency_penalty'] as const export type CompletionParamType = typeof CompletionParams[number] export type CompletionParamsType = { max_tokens: number temperature: number top_p: number stop: string[] presence_penalty: number frequency_penalty: number } export type LogModelConfig = { name: string provider: string completion_params: CompletionParamsType } export type ModelConfigDetail = { introduction: string prompt_template: string prompt_variables: Array<{ key: string name: string description: string type: string | number default: string options: string[] }> completion_params: CompletionParamsType } export type LogAnnotation = { id: string content: string account: { id: string name: string email: string } created_at: number } export type Annotation = { id: string authorName: string logAnnotation?: LogAnnotation created_at?: number } export type MessageContent = { id: string conversation_id: string query: string inputs: Record message: { role: string; text: string; files?: VisionFile[] }[] message_tokens: number answer_tokens: number answer: string provider_response_latency: number created_at: number annotation: LogAnnotation annotation_hit_history: { annotation_id: string annotation_create_account: { id: string name: string email: string } created_at: number } feedbacks: Array<{ rating: 'like' | 'dislike' | null content: string | null from_source?: 'admin' | 'user' from_end_user_id?: string }> message_files: VisionFile[] metadata: Metadata agent_thoughts: any[] // TODO workflow_run_id: string } export type CompletionConversationGeneralDetail = { id: string status: 'normal' | 'finished' from_source: 'api' | 'console' from_end_user_id: string from_end_user_session_id: string from_account_id: string read_at: Date created_at: number updated_at: number annotation: Annotation user_feedback_stats: { like: number dislike: number } admin_feedback_stats: { like: number dislike: number } model_config: { provider: string model_id: string configs: Pick } message: Pick } export type CompletionConversationFullDetailResponse = { id: string status: 'normal' | 'finished' from_source: 'api' | 'console' from_end_user_id: string from_account_id: string // read_at: Date created_at: number model_config: { provider: string model_id: string configs: ModelConfigDetail } message: MessageContent } export type CompletionConversationsResponse = { data: Array has_more: boolean limit: number total: number page: number } export type CompletionConversationsRequest = { keyword: string start: string end: string annotation_status: string page: number limit: number // The default value is 20 and the range is 1-100 } export type ChatConversationGeneralDetail = Omit & { summary: string message_count: number annotated: boolean } export type ChatConversationsResponse = { data: Array has_more: boolean limit: number total: number page: number } export type ChatConversationsRequest = CompletionConversationsRequest & { message_count: number } export type ChatConversationFullDetailResponse = Omit & { message_count: number model_config: { provider: string model_id: string configs: ModelConfigDetail model: LogModelConfig } } export type ChatMessagesRequest = { conversation_id: string first_id?: string limit: number } export type ChatMessage = MessageContent export type ChatMessagesResponse = { data: Array has_more: boolean limit: number } export const MessageRatings = ['like', 'dislike', null] as const export type MessageRating = typeof MessageRatings[number] export type LogMessageFeedbacksRequest = { message_id: string rating: MessageRating content?: string } export type LogMessageFeedbacksResponse = { result: 'success' | 'error' } export type LogMessageAnnotationsRequest = Omit export type LogMessageAnnotationsResponse = LogMessageFeedbacksResponse export type AnnotationsCountResponse = { count: number } export type WorkflowRunDetail = { id: string version: string status: 'running' | 'succeeded' | 'failed' | 'stopped' error?: string elapsed_time: number total_tokens: number total_price: number currency: string total_steps: number finished_at: number } export type AccountInfo = { id: string name: string email: string } export type EndUserInfo = { id: string type: 'browser' | 'service_api' is_anonymous: boolean session_id: string } export type WorkflowAppLogDetail = { id: string workflow_run: WorkflowRunDetail created_from: 'service-api' | 'web-app' | 'explore' created_by_role: 'account' | 'end_user' created_by_account?: AccountInfo created_by_end_user?: EndUserInfo created_at: number read_at?: number } export type WorkflowLogsResponse = { data: Array has_more: boolean limit: number total: number page: number } export type WorkflowLogsRequest = { keyword: string status: string page: number limit: number // The default value is 20 and the range is 1-100 } export type WorkflowRunDetailResponse = { id: string sequence_number: number version: string graph: { nodes: Node[] edges: Edge[] viewport?: Viewport } inputs: string status: 'running' | 'succeeded' | 'failed' | 'stopped' outputs?: string error?: string elapsed_time?: number total_tokens?: number total_steps: number created_by_role: 'account' | 'end_user' created_by_account?: AccountInfo created_by_end_user?: EndUserInfo created_at: number finished_at: number } export type AgentLogMeta = { status: string executor: string start_time: string elapsed_time: number total_tokens: number agent_mode: string iterations: number error?: string } export type ToolCall = { status: string error?: string | null time_cost?: number tool_icon: any tool_input?: any tool_output?: any tool_name?: string tool_label?: any tool_parameters?: any } export type AgentIteration = { created_at: string files: string[] thought: string tokens: number tool_calls: ToolCall[] tool_raw: { inputs: string outputs: string } } export type AgentLogFile = { id: string type: string url: string name: string belongs_to: string } export type AgentLogDetailRequest = { conversation_id: string message_id: string } export type AgentLogDetailResponse = { meta: AgentLogMeta iterations: AgentIteration[] files: AgentLogFile[] }