LLM

class pipecat.services.perplexity.llm.PerplexityLLMService(*, api_key, base_url='https://api.perplexity.ai', model='sonar', **kwargs)[source]

Bases: OpenAILLMService

A service for interacting with Perplexity’s API.

This service extends OpenAILLMService to work with Perplexity’s API while maintaining compatibility with the OpenAI-style interface. It specifically handles the difference in token usage reporting between Perplexity (incremental) and OpenAI (final summary).

Parameters:
  • api_key (str) – The API key for accessing Perplexity’s API

  • base_url (str, optional) – The base URL for Perplexity’s API. Defaults to “https://api.perplexity.ai

  • model (str, optional) – The model identifier to use. Defaults to “sonar”

  • **kwargs – Additional keyword arguments passed to OpenAILLMService

async get_chat_completions(context, messages)[source]

Get chat completions from Perplexity API using OpenAI-compatible parameters.

Parameters:
  • context (OpenAILLMContext) – The context containing conversation history and settings

  • messages (List[ChatCompletionDeveloperMessageParam | ChatCompletionSystemMessageParam | ChatCompletionUserMessageParam | ChatCompletionAssistantMessageParam | ChatCompletionToolMessageParam | ChatCompletionFunctionMessageParam]) – The messages to send to the API

Returns:

A stream of chat completion chunks

Return type:

AsyncStream[ChatCompletionChunk]

async start_llm_usage_metrics(tokens)[source]

Accumulate token usage metrics during processing.

Perplexity reports token usage incrementally during streaming, unlike OpenAI which provides a final summary. We accumulate the counts and report the total at the end of processing.

Parameters:

tokens (LLMTokenUsage)