base.ts•2.06 kB
import { GetSecondOpinionInput, LLMResponse, LLMError } from '../types.js';
export interface LLMProvider {
  /**
   * Get a response from the LLM provider
   * @param params The input parameters for the request
   * @returns A promise that resolves to either a successful response or an error
   */
  getResponse(params: GetSecondOpinionInput): Promise<LLMResponse | LLMError>;
  /**
   * Check if this provider supports reasoning effort parameter
   * @returns boolean indicating if reasoning_effort is supported
   */
  supportsReasoningEffort(): boolean;
  /**
   * Check if a specific model supports reasoning effort parameter
   * @param model The model name to check
   * @returns boolean indicating if reasoning_effort is supported for this model
   */
  supportsReasoningEffortForModel(model: string): boolean;
  /**
   * Get the available models for this provider
   * @returns Array of model identifiers
   */
  getAvailableModels(): string[];
  /**
   * Validate if a given model name is valid for this provider
   * @param model The model name to validate
   * @returns boolean indicating if the model is valid
   */
  isValidModel(model: string): boolean;
}
/**
 * Base error handler for LLM providers
 * @param error The error object
 * @param provider The name of the provider where the error occurred
 * @returns A standardized LLMError object
 */
export function handleProviderError(error: unknown, provider: string): LLMError {
  let errorMessage = 'An unknown error occurred';
  if (error instanceof Error) {
    errorMessage = error.message;
  } else if (typeof error === 'string') {
    errorMessage = error;
  }
  return {
    isError: true,
    content: [{
      type: 'text',
      text: `Error from ${provider}: ${errorMessage}`
    }]
  };
}
/**
 * Create a successful response object
 * @param text The text response from the LLM
 * @returns A standardized LLMResponse object
 */
export function createSuccessResponse(text: string): LLMResponse {
  return {
    isError: false,
    content: [{ type: 'text', text }]
  };
}