/**
 * LLM Provider 接口
 * 
 * 定义 LLM 服务提供者的统一接口
 */
export interface LLMProvider {
  /**
   * 发送聊天消息并获取完整响应
   */
  chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;

  /**
   * 发送聊天消息并获取流式响应
   */
  streamChat(
    messages: ChatMessage[],
    callbacks: StreamCallbacks,
    options?: ChatOptions,
  ): Promise<void>;

  /**
   * 检查服务是否可用
   */
  isAvailable(): Promise<boolean>;
}

/**
 * 聊天消息
 */
export interface ChatMessage {
  role: 'system' | 'user' | 'assistant';
  content: string;
}

/**
 * 聊天选项
 */
export interface ChatOptions {
  model?: string;
  temperature?: number;
  maxTokens?: number;
  topP?: number;
  frequencyPenalty?: number;
  presencePenalty?: number;
  stop?: string[];
}

/**
 * 聊天响应
 */
export interface ChatResponse {
  content: string;
  finishReason: 'stop' | 'length' | 'content_filter' | 'function_call' | null;
  usage: {
    promptTokens: number;
    completionTokens: number;
    totalTokens: number;
  };
}

/**
 * 流式回调
 */
export interface StreamCallbacks {
  onToken: (token: string) => void;
  onComplete: (fullContent: string, usage?: TokenUsage) => void;
  onError: (error: Error) => void;
}

/**
 * Token 使用量
 */
export interface TokenUsage {
  promptTokens: number;
  completionTokens: number;
  totalTokens: number;
}
