77 lines
1.9 KiB
TypeScript
77 lines
1.9 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
Index,
|
|
} from 'typeorm';
|
|
|
|
/**
|
|
* Token 使用统计实体
|
|
* 记录每次 Claude API 调用的 token 消耗
|
|
*/
|
|
@Entity('token_usages')
|
|
@Index('idx_token_usages_user', ['userId'])
|
|
@Index('idx_token_usages_conversation', ['conversationId'])
|
|
@Index('idx_token_usages_created', ['createdAt'])
|
|
@Index('idx_token_usages_model', ['model'])
|
|
export class TokenUsageEntity {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ name: 'user_id', type: 'uuid', nullable: true })
|
|
userId: string | null;
|
|
|
|
@Column({ name: 'conversation_id', type: 'uuid' })
|
|
conversationId: string;
|
|
|
|
@Column({ name: 'message_id', type: 'uuid', nullable: true })
|
|
messageId: string | null;
|
|
|
|
@Column({ length: 50 })
|
|
model: string;
|
|
|
|
// 输入 tokens
|
|
@Column({ name: 'input_tokens', default: 0 })
|
|
inputTokens: number;
|
|
|
|
// 输出 tokens
|
|
@Column({ name: 'output_tokens', default: 0 })
|
|
outputTokens: number;
|
|
|
|
// 缓存创建的 tokens (Prompt Caching)
|
|
@Column({ name: 'cache_creation_tokens', default: 0 })
|
|
cacheCreationTokens: number;
|
|
|
|
// 缓存命中的 tokens (Prompt Caching)
|
|
@Column({ name: 'cache_read_tokens', default: 0 })
|
|
cacheReadTokens: number;
|
|
|
|
// 总 tokens (input + output)
|
|
@Column({ name: 'total_tokens', default: 0 })
|
|
totalTokens: number;
|
|
|
|
// 估算成本 (美元)
|
|
@Column({ name: 'estimated_cost', type: 'decimal', precision: 10, scale: 6, default: 0 })
|
|
estimatedCost: number;
|
|
|
|
// 意图类型
|
|
@Column({ name: 'intent_type', type: 'varchar', length: 30, nullable: true })
|
|
intentType: string | null;
|
|
|
|
// 工具调用次数
|
|
@Column({ name: 'tool_calls', default: 0 })
|
|
toolCalls: number;
|
|
|
|
// 响应长度(字符数)
|
|
@Column({ name: 'response_length', default: 0 })
|
|
responseLength: number;
|
|
|
|
// 请求耗时(毫秒)
|
|
@Column({ name: 'latency_ms', default: 0 })
|
|
latencyMs: number;
|
|
|
|
@CreateDateColumn({ name: 'created_at' })
|
|
createdAt: Date;
|
|
}
|