dify/web/models/log.ts

355 lines
7.6 KiB
TypeScript

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 question: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<ConversationListResponse>(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<string, any>
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
parent_message_id: string | null
}
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<ModelConfigDetail, 'prompt_template'>
}
message: Pick<MessageContent, 'inputs' | 'query' | 'answer' | 'message'>
}
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<CompletionConversationGeneralDetail>
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<CompletionConversationGeneralDetail, 'message' | 'annotation'> & {
summary: string
message_count: number
annotated: boolean
}
export type ChatConversationsResponse = {
data: Array<ChatConversationGeneralDetail>
has_more: boolean
limit: number
total: number
page: number
}
export type ChatConversationsRequest = CompletionConversationsRequest & { message_count: number }
export type ChatConversationFullDetailResponse = Omit<CompletionConversationGeneralDetail, 'message' | 'model_config'> & {
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<ChatMessage>
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<LogMessageFeedbacksRequest, 'rating'>
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<WorkflowAppLogDetail>
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[]
}