App
Reverse App requesting means plugins can access App data in Dify. This module supports both streaming and non-streaming App calls.
Endpoints Type:
For
Chatbot/Agent/Chatflow
type applications, they are all chat-type applications, having the same input and output parameters, thus can be uniformly viewed as a Chat Interface.For Workflow applications, they occupy a separate Workflow Interface.
For Completion (text generation) applications, they occupy a separate Completion Interface.
Note: Plugins can only access Apps within the same Workspace as the plugin.
Requesting Chat Interface Entry Point
Entry
self.session.app.chat
Endpoint Specification
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
conversation_id: str,
files: list,
) -> Generator[dict, None, None] | dict:
pass
When response_mode
is streaming
, the interface returns Generator[dict]
, otherwise returns dict
. For specific interface fields, refer to ServiceApi
return results.
Example
We can request a Chat type App in an Endpoint
and directly return the results:
import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint
class Duck(Endpoint):
def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
"""
Invokes the endpoint with the given request.
"""
app_id = values["app_id"]
def generator():
response = self.session.app.workflow.invoke(
app_id=app_id, inputs={}, response_mode="streaming", files=[]
)
for data in response:
yield f"{json.dumps(data)} <br>"
return Response(generator(), status=200, content_type="text/html")
Requesting Workflow Endpint Entry Point
Entry
self.session.app.workflow
Endpoint Specification
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
files: list,
) -> Generator[dict, None, None] | dict:
pass
Requesting Completion Endpoint
Entry
self.session.app.completion
Endpoint Specification
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
files: list,
) -> Generator[dict, None, None] | dict:
pass
Last updated