dify-ai-provider
Version:
Dify provider for Vercel AI SDK
102 lines (97 loc) • 3.48 kB
TypeScript
import { FetchFunction } from '@ai-sdk/provider-utils';
import { LanguageModelV2, LanguageModelV2CallOptions } from '@ai-sdk/provider';
type DifyChatModelId = string;
interface Logger {
debug: (message: string, extra?: Record<string, any>) => void;
info: (message: string, extra?: Record<string, any>) => void;
warn: (message: string, extra?: Record<string, any>) => void;
error: (message: string, extra?: Record<string, any>) => void;
}
interface DifyChatSettings {
/**
* Additional inputs to send with the request.
* This corresponds to the 'inputs' field in Dify's API.
*/
inputs?: Record<string, any>;
/**
* Response mode, defaults to "streaming".
*/
responseMode?: "streaming" | "blocking";
/**
* API key.
*/
apiKey?: string;
/**
* Logger instance for debugging. If not provided, uses default console logger at info level.
* Set to `false` to disable logging.
*/
logger?: Logger | false;
/**
* Inject tool definitions into the query prompt for LLMs that don't natively support tool calling.
* Defaults to `true` (appended to query). Set to `false` to disable.
*/
injectToolsPrompt?: boolean;
/**
* Log request and response messages. Defaults to `false`.
*/
logMessages?: boolean;
}
interface ModelConfig {
provider: string;
baseURL: string;
headers: () => Record<string, string>;
fetch?: FetchFunction;
}
declare class DifyChatLanguageModel implements LanguageModelV2 {
private settings;
readonly specificationVersion: "v2";
readonly modelId: string;
readonly supportedUrls: Record<string, RegExp[]>;
private readonly generateId;
private readonly chatMessagesEndpoint;
private readonly config;
private readonly logger?;
constructor(modelId: DifyChatModelId, settings: DifyChatSettings, config: ModelConfig);
private createErrorHandler;
get provider(): string;
doGenerate(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2["doGenerate"]>>>;
doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2["doStream"]>>>;
/**
* Get the request body for the Dify API
*/
private getRequestBody;
private findConversationId;
private buildQuery;
private extractSystemPrompt;
private extractTextFromMessage;
private extractToolResult;
}
interface DifyProvider {
(modelId: DifyChatModelId, settings?: DifyChatSettings): DifyChatLanguageModel;
chat(modelId: DifyChatModelId, settings?: DifyChatSettings): DifyChatLanguageModel;
}
interface DifyProviderSettings {
/**
* Use a different URL prefix for API calls, e.g. to use self-hosted Dify instance.
*/
baseURL?: 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;
/**
* Logger instance for debugging. Set to `false` to disable logging.
*/
logger?: Logger | false;
}
declare function createDifyProvider(options?: DifyProviderSettings): DifyProvider;
/**
* Default Dify provider instance.
*/
declare const difyProvider: DifyProvider;
export { type DifyProvider, type DifyProviderSettings, createDifyProvider, difyProvider };