mirror of
https://github.com/langgenius/dify.git
synced 2026-06-01 06:28:14 +08:00
First slice of the Agent App type (新 Agent 作为独立 App 类型,替代 chatbot/agent-legacy/completion). Design: https://km.dify.langgenius.ai/wiki/spaces/DT/pages/460161070/Agent+App+Type * New ``AppMode.AGENT = "agent"`` (distinct from legacy ``agent-chat`` ReAct app). Runtime model/prompt/tools live in the bound Agent Soul, so the default template seeds no model_config. * Create flow: creating an Agent App also creates a roster Agent bound 1:1 via ``Agent.app_id`` (decision Q1), inside the same transaction so app + backing agent persist atomically. ``AgentRosterService.create_backing_agent_for_app`` builds the agent + a v1 (empty) Agent Soul snapshot without committing; the user configures model/prompt/tools afterward in the Composer. * ``App.bound_agent_id`` resolves the backing roster Agent from the app id (so the console can open the Composer in roster-detail mode); surfaced on the app detail response. Returns None for non-agent apps (short-circuits, no DB hit). * ``CreateAppParams`` / ``AppListParams`` accept "agent"; list filter handles it. Scope: S1 only (foundation). Runtime/preview, web/service API, access & sharing, logs and feature flags land in S2–S7 per the design. Tests: roster backing-agent build/link/get + enum/template/params/bound_agent_id short-circuit. 46 passing in app + agent service suites; ruff + pyrefly clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
95 lines
2.5 KiB
Python
95 lines
2.5 KiB
Python
import json
|
|
from collections.abc import Mapping
|
|
|
|
from models.model import AppMode
|
|
|
|
default_app_templates: Mapping[AppMode, Mapping] = {
|
|
# workflow default mode
|
|
AppMode.WORKFLOW: {
|
|
"app": {
|
|
"mode": AppMode.WORKFLOW,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
}
|
|
},
|
|
# completion default mode
|
|
AppMode.COMPLETION: {
|
|
"app": {
|
|
"mode": AppMode.COMPLETION,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
},
|
|
"model_config": {
|
|
"model": {
|
|
"provider": "openai",
|
|
"name": "gpt-4o",
|
|
"mode": "chat",
|
|
"completion_params": {},
|
|
},
|
|
"user_input_form": json.dumps(
|
|
[
|
|
{
|
|
"paragraph": {
|
|
"label": "Query",
|
|
"variable": "query",
|
|
"required": True,
|
|
"default": "",
|
|
},
|
|
},
|
|
]
|
|
),
|
|
"pre_prompt": "{{query}}",
|
|
},
|
|
},
|
|
# chat default mode
|
|
AppMode.CHAT: {
|
|
"app": {
|
|
"mode": AppMode.CHAT,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
},
|
|
"model_config": {
|
|
"model": {
|
|
"provider": "openai",
|
|
"name": "gpt-4o",
|
|
"mode": "chat",
|
|
"completion_params": {},
|
|
},
|
|
},
|
|
},
|
|
# advanced-chat default mode
|
|
AppMode.ADVANCED_CHAT: {
|
|
"app": {
|
|
"mode": AppMode.ADVANCED_CHAT,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
},
|
|
},
|
|
# agent-chat default mode
|
|
AppMode.AGENT_CHAT: {
|
|
"app": {
|
|
"mode": AppMode.AGENT_CHAT,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
},
|
|
"model_config": {
|
|
"model": {
|
|
"provider": "openai",
|
|
"name": "gpt-4o",
|
|
"mode": "chat",
|
|
"completion_params": {},
|
|
},
|
|
},
|
|
},
|
|
# agent default mode (new Agent App type). The runtime model / prompt / tools
|
|
# come from the bound Agent Soul snapshot, so no model_config is seeded here;
|
|
# app_model_config is created lazily when app-level feature flags are set.
|
|
AppMode.AGENT: {
|
|
"app": {
|
|
"mode": AppMode.AGENT,
|
|
"enable_site": True,
|
|
"enable_api": True,
|
|
},
|
|
},
|
|
}
|