/** * Perplexity LLM Provider * * Implements LLMProvider interface for Perplexity models. * Extends OpenAICompatibleProvider for shared functionality. * * @example * ```typescript * const provider = createPerplexityProvider({ * model: 'llama-3.1-sonar-large-128k-online', * apiKey: process.env.PERPLEXITY_API_KEY * }); * ``` * * @remarks * - Requires valid Perplexity API key * - Default model is llama-3.1-sonar-small-128k-online * - Sonar models have built-in web search capabilities */ import type { ChatOptions } from './types.js'; import { ProviderError } from '../errors.js'; import { OpenAICompatibleProvider } from './openai-compatible.js'; /** * Configuration for PerplexityProvider */ export interface PerplexityProviderConfig { /** Perplexity API key (falls back to PERPLEXITY_API_KEY env var) */ apiKey?: string; /** Base URL for Perplexity API (default: https://api.perplexity.ai) */ baseUrl?: string; /** Default model to use (default: llama-3.1-sonar-small-128k-online) */ model?: string; /** Default max tokens (default: 4096) */ maxTokens?: number; /** Request timeout in milliseconds (default: 120000) */ timeout?: number; /** Optional token estimator (e.g., tiktoken) for debug payload */ estimateTokens?: (text: string) => number; } /** * Perplexity LLM Provider * * Provides streaming chat completion using Perplexity's API. * Sonar models include real-time web search capabilities. */ export declare class PerplexityProvider extends OpenAICompatibleProvider { readonly name = "perplexity"; private readonly apiKey; constructor(config?: PerplexityProviderConfig); /** * Perplexity authentication with Bearer token */ protected getAuthHeaders(): Record; /** * Perplexity chat completions endpoint (OpenAI-compatible) */ protected getEndpointPath(): string; /** * Perplexity uses standard OpenAI body format */ protected buildProviderSpecificBody(_options?: ChatOptions): Record; /** * Map HTTP errors with Perplexity-specific messages */ protected mapHttpError(status: number, body: string, _model: string): ProviderError; /** * Map connection errors with Perplexity-specific messages */ protected mapConnectionError(_error: Error): ProviderError; } /** * Create a Perplexity provider instance * * @example * ```typescript * // Using environment variable (PERPLEXITY_API_KEY) * const provider = createPerplexityProvider(); * * // With explicit API key * const provider = createPerplexityProvider({ apiKey: 'pplx-...' }); * * // With custom model (sonar models have web search) * const provider = createPerplexityProvider({ * model: 'llama-3.1-sonar-large-128k-online' * }); * ``` */ export declare function createPerplexityProvider(config?: PerplexityProviderConfig): PerplexityProvider;