// src/types.ts
export type Provider = 'anthropic' | 'openai';

export interface ModelConfig {
  provider: Provider;
  modelId: string;
  maxTokens?: number;
  temperature?: number;
}

export interface Message {
  role: 'system' | 'user' | 'assistant';
  content: string;
}

export interface AIClientConfig {
  defaultProvider?: Provider;
  defaultModel?: string;
  anthropicApiKey?: string;
  openaiApiKey?: string;
}

export interface CompletionOptions {
  model?: string;
  provider?: Provider;
  maxTokens?: number;
  temperature?: number;
  responseFormat?: 'text' | 'json';
  topP?: number;
  frequencyPenalty?: number;
  presencePenalty?: number;
  stop?: string[];
  seed?: number;
}

export class AIError extends Error {
  constructor(
    message: string,
    public provider: Provider,
    public statusCode?: number,
    public raw?: any
  ) {
    super(message);
    this.name = 'AIError';
  }
}

export enum AIErrorCode {
  INVALID_API_KEY = 'invalid_api_key',
  RATE_LIMIT = 'rate_limit',
  CONTEXT_LENGTH = 'context_length',
  BAD_REQUEST = 'bad_request',
  SERVER_ERROR = 'server_error',
  TIMEOUT = 'timeout'
}