guoyuanquan@mail.taiji.com.cn месяцев назад: 5
Сommit
adbbc65a14

+ 178 - 0
.difyignore

@@ -0,0 +1,178 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+#   For a library or package, you might want to ignore these files since the code is
+#   intended to run in multiple environments; otherwise, check them in:
+.python-version
+
+# pipenv
+#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+#   However, in case of collaboration, if having platform-specific dependencies or dependencies
+#   having no cross-platform support, pipenv may install dependencies that don't work, or not
+#   install all needed dependencies.
+Pipfile.lock
+
+# UV
+#   Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
+#   This is especially recommended for binary packages to ensure reproducibility, and is more
+#   commonly ignored for libraries.
+uv.lock
+
+# poetry
+#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+#   This is especially recommended for binary packages to ensure reproducibility, and is more
+#   commonly ignored for libraries.
+#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+poetry.lock
+
+# pdm
+#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+#   in version control.
+#   https://pdm.fming.dev/latest/usage/project/#working-with-version-control
+.pdm.toml
+.pdm-python
+.pdm-build/
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+#  and can be added to the global gitignore or merged into this file.  For a more nuclear
+#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
+.idea/
+
+# Vscode
+.vscode/
+
+# Git
+.git/
+.gitignore
+
+# Mac
+.DS_Store
+
+# Windows
+Thumbs.db

+ 4 - 0
.env.example

@@ -0,0 +1,4 @@
+INSTALL_METHOD=remote
+REMOTE_INSTALL_HOST=debug.dify.ai
+REMOTE_INSTALL_PORT=5003
+REMOTE_INSTALL_KEY=********-****-****-****-************

+ 171 - 0
.gitignore

@@ -0,0 +1,171 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+#   For a library or package, you might want to ignore these files since the code is
+#   intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+#   However, in case of collaboration, if having platform-specific dependencies or dependencies
+#   having no cross-platform support, pipenv may install dependencies that don't work, or not
+#   install all needed dependencies.
+#Pipfile.lock
+
+# UV
+#   Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
+#   This is especially recommended for binary packages to ensure reproducibility, and is more
+#   commonly ignored for libraries.
+#uv.lock
+
+# poetry
+#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+#   This is especially recommended for binary packages to ensure reproducibility, and is more
+#   commonly ignored for libraries.
+#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+#   in version control.
+#   https://pdm.fming.dev/latest/usage/project/#working-with-version-control
+.pdm.toml
+.pdm-python
+.pdm-build/
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+#  and can be added to the global gitignore or merged into this file.  For a more nuclear
+#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
+.idea/
+
+# Vscode
+.vscode/

+ 117 - 0
GUIDE.md

@@ -0,0 +1,117 @@
+## User Guide of how to develop a Dify Plugin
+
+Hi there, looks like you have already created a Plugin, now let's get you started with the development!
+
+### Choose a Plugin type you want to develop
+
+Before start, you need some basic knowledge about the Plugin types, Plugin supports to extend the following abilities in Dify:
+- **Tool**: Tool Providers like Google Search, Stable Diffusion, etc. it can be used to perform a specific task.
+- **Model**: Model Providers like OpenAI, Anthropic, etc. you can use their models to enhance the AI capabilities.
+- **Endpoint**: Like Service API in Dify and Ingress in Kubernetes, you can extend a http service as an endpoint and control its logics using your own code.
+
+Based on the ability you want to extend, we have divided the Plugin into three types: **Tool**, **Model**, and **Extension**.
+
+- **Tool**: It's a tool provider, but not only limited to tools, you can implement an endpoint there, for example, you need both `Sending Message` and `Receiving Message` if you are building a Discord Bot, **Tool** and **Endpoint** are both required.
+- **Model**: Just a model provider, extending others is not allowed.
+- **Extension**: Other times, you may only need a simple http service to extend the functionalities, **Extension** is the right choice for you.
+
+I believe you have chosen the right type for your Plugin while creating it, if not, you can change it later by modifying the `manifest.yaml` file.
+
+### Manifest
+
+Now you can edit the `manifest.yaml` file to describe your Plugin, here is the basic structure of it:
+
+- version(version, required):Plugin's version
+- type(type, required):Plugin's type, currently only supports `plugin`, future support `bundle`
+- author(string, required):Author, it's the organization name in Marketplace and should also equals to the owner of the repository
+- label(label, required):Multi-language name
+- created_at(RFC3339, required):Creation time, Marketplace requires that the creation time must be less than the current time
+- icon(asset, required):Icon path
+- resource (object):Resources to be applied
+  - memory (int64):Maximum memory usage, mainly related to resource application on SaaS for serverless, unit bytes
+  - permission(object):Permission application
+    - tool(object):Reverse call tool permission
+      - enabled (bool)
+    - model(object):Reverse call model permission
+      - enabled(bool)
+      - llm(bool)
+      - text_embedding(bool)
+      - rerank(bool)
+      - tts(bool)
+      - speech2text(bool)
+      - moderation(bool)
+    - node(object):Reverse call node permission
+      - enabled(bool) 
+    - endpoint(object):Allow to register endpoint permission
+      - enabled(bool)
+    - app(object):Reverse call app permission
+      - enabled(bool)
+    - storage(object):Apply for persistent storage permission
+      - enabled(bool)
+      - size(int64):Maximum allowed persistent memory, unit bytes
+- plugins(object, required):Plugin extension specific ability yaml file list, absolute path in the plugin package, if you need to extend the model, you need to define a file like openai.yaml, and fill in the path here, and the file on the path must exist, otherwise the packaging will fail.
+  - Format
+    - tools(list[string]): Extended tool suppliers, as for the detailed format, please refer to [Tool Guide](https://docs.dify.ai/plugins/schema-definition/tool)
+    - models(list[string]):Extended model suppliers, as for the detailed format, please refer to [Model Guide](https://docs.dify.ai/plugins/schema-definition/model)
+    - endpoints(list[string]):Extended Endpoints suppliers, as for the detailed format, please refer to [Endpoint Guide](https://docs.dify.ai/plugins/schema-definition/endpoint)
+  - Restrictions
+    - Not allowed to extend both tools and models
+    - Not allowed to have no extension
+    - Not allowed to extend both models and endpoints
+    - Currently only supports up to one supplier of each type of extension
+- meta(object)
+  - version(version, required):manifest format version, initial version 0.0.1
+  - arch(list[string], required):Supported architectures, currently only supports amd64 arm64
+  - runner(object, required):Runtime configuration
+    - language(string):Currently only supports python
+    - version(string):Language version, currently only supports 3.12
+    - entrypoint(string):Program entry, in python it should be main
+
+### Install Dependencies
+
+- First of all, you need a Python 3.11+ environment, as our SDK requires that.
+- Then, install the dependencies:
+    ```bash
+    pip install -r requirements.txt
+    ```
+- If you want to add more dependencies, you can add them to the `requirements.txt` file, once you have set the runner to python in the `manifest.yaml` file, `requirements.txt` will be automatically generated and used for packaging and deployment.
+
+### Implement the Plugin
+
+Now you can start to implement your Plugin, by following these examples, you can quickly understand how to implement your own Plugin:
+
+- [OpenAI](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/openai): best practice for model provider
+- [Google Search](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/google): a simple example for tool provider
+- [Neko](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko): a funny example for endpoint group
+
+### Test and Debug the Plugin
+
+You may already noticed that a `.env.example` file in the root directory of your Plugin, just copy it to `.env` and fill in the corresponding values, there are some environment variables you need to set if you want to debug your Plugin locally.
+
+- `INSTALL_METHOD`: Set this to `remote`, your plugin will connect to a Dify instance through the network.
+- `REMOTE_INSTALL_HOST`: The host of your Dify instance, you can use our SaaS instance `https://debug.dify.ai`, or self-hosted Dify instance.
+- `REMOTE_INSTALL_PORT`: The port of your Dify instance, default is 5003
+- `REMOTE_INSTALL_KEY`: You should get your debugging key from the Dify instance you used, at the right top of the plugin management page, you can see a button with a `debug` icon, click it and you will get the key.
+
+Run the following command to start your Plugin:
+
+```bash
+python -m main
+```
+
+Refresh the page of your Dify instance, you should be able to see your Plugin in the list now, but it will be marked as `debugging`, you can use it normally, but not recommended for production.
+
+### Package the Plugin
+
+After all, just package your Plugin by running the following command:
+
+```bash
+dify-plugin plugin package ./ROOT_DIRECTORY_OF_YOUR_PLUGIN
+```
+
+you will get a `plugin.difypkg` file, that's all, you can submit it to the Marketplace now, look forward to your Plugin being listed!
+
+
+## User Privacy Policy
+
+Please fill in the privacy policy of the plugin if you want to make it published on the Marketplace, refer to [PRIVACY.md](PRIVACY.md) for more details.

+ 3 - 0
PRIVACY.md

@@ -0,0 +1,3 @@
+## Privacy
+
+!!! Please fill in the privacy policy of the plugin.

+ 10 - 0
README.md

@@ -0,0 +1,10 @@
+## shenzhen2
+
+**Author:** gyq
+**Version:** 0.0.1
+**Type:** model
+
+### Description
+
+
+

BIN
_assets/deepseek.PNG


+ 6 - 0
_assets/icon.svg

@@ -0,0 +1,6 @@
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+  <path d="M20 20 V80 M20 20 H60 Q80 20 80 40 T60 60 H20" 
+        fill="none" 
+        stroke="black" 
+        stroke-width="5"/>
+</svg>

Разница между файлами не показана из-за своего большого размера
+ 22 - 0
_assets/icon_l_en.svg


Разница между файлами не показана из-за своего большого размера
+ 3 - 0
_assets/icon_s_en.svg


+ 6 - 0
main.py

@@ -0,0 +1,6 @@
+from dify_plugin import Plugin, DifyPluginEnv
+
+plugin = Plugin(DifyPluginEnv(MAX_REQUEST_TIMEOUT=600))
+
+if __name__ == '__main__':
+    plugin.run()

+ 37 - 0
manifest.yaml

@@ -0,0 +1,37 @@
+version: 0.0.6
+type: plugin
+author: gyq
+name: shenzhen2
+label:
+  en_US: shenzhen2
+  zh_Hans: 深圳大数据接口
+description:
+  en_US: shenzhen2
+  zh_Hans: 深圳大数据接口
+icon: icon.svg
+resource:
+  memory: 268435456
+  permission:
+    model:
+      enabled: true
+      llm: true
+      text_embedding: false
+      rerank: false
+      tts: false
+      speech2text: false
+      moderation: false
+plugins:
+  models:
+    - provider/shenzhen2.yaml
+meta:
+  version: 0.0.1
+  arch:
+    - amd64
+    - arm64
+  runner:
+    language: python
+    version: "3.12"
+    entrypoint: main
+created_at: 2025-05-12T10:42:50.6984028+08:00
+privacy: PRIVACY.md
+verified: false

+ 0 - 0
models/llm/__init__.py


+ 1 - 0
models/llm/_position.yaml

@@ -0,0 +1 @@
+- deepseek-chat

+ 78 - 0
models/llm/deepseek-chat.yaml

@@ -0,0 +1,78 @@
+model: deepseek-chat
+label:
+  zh_Hans: deepseek-chat
+  en_US: deepseek-chat
+model_type: llm
+features:
+  - agent-thought
+  - tool-call
+  - multi-tool-call
+  - stream-tool-call
+model_properties:
+  mode: chat
+  context_size: 128000
+parameter_rules:
+  - name: temperature
+    use_template: temperature
+    type: float
+    default: 1
+    min: 0.0
+    max: 2.0
+    help:
+      zh_Hans: 控制生成结果的多样性和随机性。数值越小,越严谨;数值越大,越发散。
+      en_US: Control the diversity and randomness of generated results. The smaller the value, the more rigorous it is; the larger the value, the more divergent it is.
+  - name: max_tokens
+    use_template: max_tokens
+    type: int
+    default: 4096
+    min: 1
+    max: 8192
+    help:
+      zh_Hans: 指定生成结果长度的上限。如果生成结果截断,可以调大该参数。
+      en_US: Specifies the upper limit on the length of generated results. If the generated results are truncated, you can increase this parameter.
+  - name: top_p
+    use_template: top_p
+    type: float
+    default: 1
+    min: 0.01
+    max: 1.00
+    help:
+      zh_Hans: 控制生成结果的随机性。数值越小,随机性越弱;数值越大,随机性越强。一般而言,top_p 和 temperature 两个参数选择一个进行调整即可。
+      en_US: Control the randomness of generated results. The smaller the value, the weaker the randomness; the larger the value, the stronger the randomness. Generally speaking, you can adjust one of the two parameters top_p and temperature.
+  - name: logprobs
+    label:
+      en_US: Logprobs
+    help:
+      zh_Hans: 是否返回所输出 token 的对数概率。如果为 true,则在 message 的 content 中返回每个输出 token 的对数概率。
+      en_US: Whether to return the log probability of the output token. If true, returns the log probability of each output token in the content of message .
+    type: boolean
+  - name: top_logprobs
+    label:
+      en_US: Top Logprobs
+    type: int
+    default: 0
+    min: 0
+    max: 20
+    help:
+      zh_Hans: 一个介于 0 到 20 之间的整数 N,指定每个输出位置返回输出概率 top N 的 token,且返回这些 token 的对数概率。指定此参数时,logprobs 必须为 true。
+      en_US: An integer N between 0 and 20, specifying that each output position returns the top N tokens with output probability, and returns the logarithmic probability of these tokens. When specifying this parameter, logprobs must be true.
+  - name: frequency_penalty
+    use_template: frequency_penalty
+    default: 0
+    min: -2.0
+    max: 2.0
+    help:
+      zh_Hans: 介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚,降低模型重复相同内容的可能性。
+      en_US: A number between -2.0 and 2.0. If the value is positive, new tokens are penalized based on their frequency of occurrence in existing text, reducing the likelihood that the model will repeat the same content.
+  - name: response_format
+    label:
+      zh_Hans: 回复格式
+      en_US: Response Format
+    type: string
+    help:
+      zh_Hans: 指定模型必须输出的格式
+      en_US: specifying the format that the model must output
+    required: false
+    options:
+      - text
+      - json_object

+ 41 - 0
models/llm/llm.py

@@ -0,0 +1,41 @@
+from collections.abc import Generator
+from typing import Optional, Union
+from dify_plugin.entities.model.llm import LLMMode, LLMResult
+from dify_plugin.entities.model.message import PromptMessage, PromptMessageTool
+from yarl import URL
+from dify_plugin import OAICompatLargeLanguageModel
+
+
+class DeepseekLargeLanguageModel(OAICompatLargeLanguageModel):
+    def _invoke(
+        self,
+        model: str,
+        credentials: dict,
+        prompt_messages: list[PromptMessage],
+        model_parameters: dict,
+        tools: Optional[list[PromptMessageTool]] = None,
+        stop: Optional[list[str]] = None,
+        stream: bool = True,
+        user: Optional[str] = None,
+    ) -> Union[LLMResult, Generator]:
+        self._add_custom_parameters(credentials)
+        return super()._invoke(model, credentials, prompt_messages, model_parameters, tools, stop, stream)
+
+    # def validate_credentials(self, model: str, credentials: dict) -> None:
+    #     self._add_custom_parameters(credentials)
+    #     super().validate_credentials(model, credentials)
+
+    @staticmethod
+    def _add_custom_parameters(credentials) -> None:
+        credentials["endpoint_url"] = str("http://10.132.200.185:30012/gateway/ti/v1/")
+        credentials["mode"] = LLMMode.CHAT.value
+        credentials["function_calling_type"] = "tool_call"
+        credentials["stream_function_calling"] = "support"
+        credentials["extra_headers"] = {
+        "Content-type": "application/json",
+        "X-TC-Project": "1",
+        "X-TC-Service": "deepseek-r1-h800-master-sglang",
+        "X-TC-Action": "/v1/chat/completions",
+        "X-TC-Version": "2020-10-01",
+        "szc-api-key": "f4eb2eb55b4f4a17a5"
+}

+ 21 - 0
provider/shenzhen2.py

@@ -0,0 +1,21 @@
+import logging
+from collections.abc import Mapping
+
+from dify_plugin import ModelProvider
+from dify_plugin.entities.model import ModelType
+from dify_plugin.errors.model import CredentialsValidateFailedError
+
+logger = logging.getLogger(__name__)
+
+
+class Shenzhen2ModelProvider(ModelProvider):
+    def validate_provider_credentials(self, credentials: Mapping) -> None:
+        try:
+            pass
+        except CredentialsValidateFailedError as ex:
+            raise ex
+        except Exception as ex:
+            logger.exception(
+                f"{self.get_provider_schema().provider} credentials validate failed"
+            )
+            raise ex

+ 51 - 0
provider/shenzhen2.yaml

@@ -0,0 +1,51 @@
+background: '#c0cdff'
+configurate_methods:
+- predefined-model
+description:
+  en_US: Models provided by deepseek, such as deepseek-reasoner、deepseek-chat、deepseek-coder.
+  zh_Hans: 深度求索提供的模型,例如 deepseek-reasoner、deepseek-chat、deepseek-coder 。
+extra:
+  python:
+    model_sources:
+    - models/llm/llm.py
+    provider_source: provider/shenzhen2.py
+help:
+  title:
+    en_US: Get your API Key from deepseek
+    zh_Hans: 从深度求索获取 API Key
+  url:
+    en_US: https://platform.deepseek.com/api_keys
+icon_large:
+  en_US: icon_l_en.svg
+icon_small:
+  en_US: icon_s_en.svg
+label:
+  en_US: deepseek
+  zh_Hans: 深圳大数据模型
+models:
+  llm:
+    position: models/llm/_position.yaml
+    predefined:
+    - models/llm/*.yaml
+provider: deepseek
+provider_credential_schema:
+  credential_form_schemas:
+  - label:
+      en_US: API Key
+    placeholder:
+      en_US: Enter your API Key
+      zh_Hans: 在此输入您的 API Key
+    required: false
+    type: secret-input
+    variable: api_key
+  - label:
+      en_US: Custom API endpoint URL
+      zh_Hans: 自定义 API endpoint 地址
+    placeholder:
+      en_US: Base URL, e.g. https://api.deepseek.com/v1 or https://api.deepseek.com
+      zh_Hans: Base URL, e.g. https://api.deepseek.com/v1 or https://api.deepseek.com
+    required: false
+    type: text-input
+    variable: endpoint_url
+supported_model_types:
+- llm

+ 1 - 0
requirements.txt

@@ -0,0 +1 @@
+dify_plugin~=0.0.1b72

BIN
shenzhen2.difypkg