@ai-sdk/perplexity
Version:
The **[Perplexity provider](https://ai-sdk.dev/providers/ai-sdk-providers/perplexity)** for the [AI SDK](https://ai-sdk.dev/docs) contains language model support for Perplexity's Sonar API - a powerful answer engine with real-time web search capabilities.
102 lines (87 loc) • 2.66 kB
text/typescript
import {
LanguageModelV3,
NoSuchModelError,
ProviderV3,
} from '@ai-sdk/provider';
import {
FetchFunction,
generateId,
loadApiKey,
withoutTrailingSlash,
withUserAgentSuffix,
} from '@ai-sdk/provider-utils';
import { PerplexityLanguageModel } from './perplexity-language-model';
import { PerplexityLanguageModelId } from './perplexity-language-model-options';
import { VERSION } from './version';
export interface PerplexityProvider extends ProviderV3 {
/**
* Creates an Perplexity chat model for text generation.
*/
(modelId: PerplexityLanguageModelId): LanguageModelV3;
/**
* Creates an Perplexity language model for text generation.
*/
languageModel(modelId: PerplexityLanguageModelId): LanguageModelV3;
/**
* @deprecated Use `embeddingModel` instead.
*/
textEmbeddingModel(modelId: string): never;
}
export interface PerplexityProviderSettings {
/**
* Base URL for the perplexity API calls.
*/
baseURL?: string;
/**
* API key for authenticating requests.
*/
apiKey?: string;
/**
* Custom headers to include in the requests.
*/
headers?: Record<string, string>;
/**
* Custom fetch implementation. You can use it as a middleware to intercept requests,
* or to provide a custom fetch implementation for e.g. testing.
*/
fetch?: FetchFunction;
}
export function createPerplexity(
options: PerplexityProviderSettings = {},
): PerplexityProvider {
const getHeaders = () =>
withUserAgentSuffix(
{
Authorization: `Bearer ${loadApiKey({
apiKey: options.apiKey,
environmentVariableName: 'PERPLEXITY_API_KEY',
description: 'Perplexity',
})}`,
...options.headers,
},
`ai-sdk/perplexity/${VERSION}`,
);
const createLanguageModel = (modelId: PerplexityLanguageModelId) => {
return new PerplexityLanguageModel(modelId, {
baseURL: withoutTrailingSlash(
options.baseURL ?? 'https://api.perplexity.ai',
)!,
headers: getHeaders,
generateId,
fetch: options.fetch,
});
};
const provider = (modelId: PerplexityLanguageModelId) =>
createLanguageModel(modelId);
provider.specificationVersion = 'v3' as const;
provider.languageModel = createLanguageModel;
provider.embeddingModel = (modelId: string) => {
throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
};
provider.textEmbeddingModel = provider.embeddingModel;
provider.imageModel = (modelId: string) => {
throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
};
return provider;
}
export const perplexity = createPerplexity();