This Documentation is Being Deprecated
This page is being phased out as part of our documentation reorganization.
Click this card to be redirected to the updated version with the most current information.
If you notice any discrepancies or areas needing improvement in the new documentation, please use the “Report an issue” button at the bottom of the page.
Prerequisites
- Dify plugin scaffolding tool
- Python environment, version ≥ 3.12
Create New Project
In the current path, run the CLI tool to create a new dify plugin project:dify and copied it to the /usr/local/bin path, you can run the following command to create a new plugin project:
Choose Model Plugin Template
Plugins are divided into three types: tools, models, and extensions. All templates in the scaffolding tool provide complete code projects. This example will use anLLM type plugin.
Configure Plugin Permissions
Configure the following permissions for this LLM plugin:- Models
- LLM
- Storage
Model Type Configuration
Model providers support three configuration methods:- predefined-model: Common large model types, only requiring unified provider credentials to use predefined models under the provider. For example, OpenAI provider offers a series of predefined models like gpt-3.5-turbo-0125 and gpt-4o-2024-05-13. For detailed development instructions, refer to Integrating Predefined Models.
- customizable-model: You need to manually add credential configurations for each model. For example, Xinference supports both LLM and Text Embedding, but each model has a unique model_uid. To integrate both, you need to configure a model_uid for each model. For detailed development instructions, refer to Integrating Custom Models.
Adding a New Model Provider
Here are the main steps to add a new model provider:- Create Model Provider Configuration YAML File Add a YAML file in the provider directory to describe the provider’s basic information and parameter configuration. Write content according to ProviderSchema requirements to ensure consistency with system specifications.
- Write Model Provider Code Create provider class code, implementing a Python class that meets system interface requirements for connecting with the provider’s API and implementing core functionality.
Here are the full details of how to do each step.
1. Create Model Provider Configuration File
Manifest is a YAML format file that declares the model provider’s basic information, supported model types, configuration methods, and credential rules. The plugin project template will automatically generate configuration files under the/providers path.
Here’s an example of the anthropic.yaml configuration file for Anthropic:
OpenAI provides a fine-tuned model, you need to add the model_credential_schema field.
The following is sample code for the OpenAI family of models:
2. Write model provider code
Create a python file with the same name, e.g.anthropic.py, in the /providers folder and implement a class that inherits from the __base.provider.Provider base class, e.g. AnthropicProvider. The following is the Anthropic sample code:
__base.model_provider.ModelProvider base class and implement the validate_provider_credentials vendor uniform credentials validation method, see AnthropicProvider.
validate_provider_credentials implementation first and reuse it directly after the model credentials verification method is implemented. For other types of model providers, please refer to the following configuration methods.
Custom Model Providers
For custom model providers likeXinference, you can skip the full implementation step. Simply create an empty class called XinferenceProvider and implement an empty validate_provider_credentials method in it.
Detailed Explanation:
• XinferenceProvider is a placeholder class used to identify custom model providers.
• While the validate_provider_credentials method won’t be actually called, it must exist because its parent class is abstract and requires all child classes to implement this method. By providing an empty implementation, we can avoid instantiation errors that would occur from not implementing the abstract method.
Edit this page | Report an issue