DSL exports of the apps, import instructions in README

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido van Dijk
2026-09-21 09:24:25 +02:00
parent edf987f58a
commit 5daf506729
7 changed files with 1535 additions and 0 deletions
+254
View File
@@ -0,0 +1,254 @@
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: workflow
name: Text at level
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
kind: app
version: 0.7.0
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
- remote_url
enabled: false
fileUploadConfig:
attachment_image_file_size_limit: 2
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
file_upload_limit: 50
image_file_batch_limit: 10
image_file_size_limit: 10
knowledge_file_size_limit: 50
single_chunk_attachment_limit: 10
skill_file_size_limit: 50
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 3
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: llm
id: 1789938975576--1789939221760-target
source: '1789938975576'
sourceHandle: source
target: '1789939221760'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: llm
id: 1789939221760--1789939284953-target
source: '1789939221760'
sourceHandle: source
target: '1789939284953'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: end
id: 1789939284953--1789939323209-target
source: '1789939284953'
sourceHandle: source
target: '1789939323209'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: User Input
type: start
variables:
- default: ''
hint: ''
label: The text you want to adapt
max_length: 5000
options: []
placeholder: ''
required: true
type: paragraph
variable: text
- hint: ''
label: Level
options:
- year 6
- year 7
- year 9
- year 12
placeholder: ''
required: true
type: select
variable: level
height: 134
id: '1789938975576'
position:
x: 80
y: 282
positionAbsolute:
x: 80
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: false
variable_selector: []
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: f40476ac-a09a-4e92-b358-695f89703c7a
role: system
text: 'Rewrite the text below so that a student at this level can read it.
Keep all the factual content. Do not replace technical terms, but explain
them in a subordinate clause. Write short sentences.
Level: {{#1789938975576.level#}}
Text: {{#1789938975576.text#}}'
selected: false
title: LLM
type: llm
vision:
enabled: false
height: 87
id: '1789939221760'
position:
x: 382
y: 282
positionAbsolute:
x: 382
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: false
variable_selector: []
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: 99018d18-8dd6-47d0-80b8-99d56108f7e0
role: system
text: 'Write three comprehension questions about the text below. Question
1 is about a fact in the text, question 2 about the main idea, question
3 asks the student to apply something. Do not give answers.
Text: {{#1789939221760.text#}}'
selected: false
title: LLM 2
type: llm
vision:
enabled: false
height: 87
id: '1789939284953'
position:
x: 684
y: 282
positionAbsolute:
x: 684
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
outputs:
- value_selector:
- '1789939221760'
- text
value_type: string
variable: rewritten_text
- value_selector:
- '1789939284953'
- text
value_type: string
variable: questions
selected: false
title: Output
type: end
height: 114
id: '1789939323209'
position:
x: 986
y: 282
positionAbsolute:
x: 986
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
viewport:
x: -877.9220779220777
y: 85.78808995882173
zoom: 1.4254038644282545
rag_pipeline_variables: []
@@ -0,0 +1,122 @@
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: agent-chat
name: School guide assistant
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
kind: app
model_config:
agent_mode:
enabled: true
max_iteration: 10
prompt: null
strategy: function_call
tools: []
annotation_reply:
enabled: false
chat_prompt_config:
prompt:
- role: system
text: ''
completion_prompt_config:
conversation_histories_role:
assistant_prefix: ''
user_prefix: ''
prompt:
text: ''
dataset_configs:
datasets:
datasets:
- dataset:
enabled: true
id: 368e0cf3-6774-459c-9beb-0479aa6f72b5
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
reranking_model_name: qwen3-rerank
reranking_provider_name: langgenius/tongyi/tongyi
retrieval_model: multiple
top_k: 4
dataset_query_variable: ''
external_data_tools: []
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
- .MP4
- .MOV
- .MPEG
- .WEBM
allowed_file_types: []
allowed_file_upload_methods:
- remote_url
- local_file
enabled: false
image:
detail: high
enabled: false
number_limits: 3
transfer_methods:
- remote_url
- local_file
number_limits: 3
model:
completion_params:
stop: []
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
more_like_this:
enabled: false
opening_statement: ''
pre_prompt: 'You are the school guide assistant of Example College. You answer questions
from parents and students about the school rules.
Rules:
- Base your answer only on the school guide in your knowledge base.
- If the answer is not in the school guide, say honestly that you do not know
and refer to reception.
- Answer briefly and in plain English, at most five sentences.
- Where possible, name the chapter of the school guide the answer comes from.
Reception mode: if a staff member starts with "Reception:" and then pastes a question
from a parent, you write the reply that the staff member can send to that parent.
Then follow the style guide in your knowledge base: address the parent formally,
reading level B1, no abbreviations, no words from the list of words to avoid,
at most six sentences, and end with a way to get in touch. If you do not know
the answer from the school guide, write a short message saying you will check
and put [FILL IN] where the staff member must add the real answer.'
prompt_type: simple
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
user_input_form: []
version: 0.7.0
@@ -0,0 +1,121 @@
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: agent-chat
name: Parent letter assistant
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
kind: app
model_config:
agent_mode:
enabled: true
max_iteration: 10
prompt: null
strategy: function_call
tools: []
annotation_reply:
enabled: false
chat_prompt_config:
prompt:
- role: system
text: ''
completion_prompt_config:
conversation_histories_role:
assistant_prefix: ''
user_prefix: ''
prompt:
text: ''
dataset_configs:
datasets:
datasets:
- dataset:
enabled: true
id: 368e0cf3-6774-459c-9beb-0479aa6f72b5
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
reranking_model_name: qwen3-rerank
reranking_provider_name: langgenius/tongyi/tongyi
retrieval_model: multiple
top_k: 4
dataset_query_variable: ''
external_data_tools: []
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
- .MP4
- .MOV
- .MPEG
- .WEBM
allowed_file_types: []
allowed_file_upload_methods:
- remote_url
- local_file
enabled: false
image:
detail: high
enabled: false
number_limits: 3
transfer_methods:
- remote_url
- local_file
number_limits: 3
model:
completion_params:
stop: []
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
more_like_this:
enabled: false
opening_statement: ''
pre_prompt: 'You are the parent letter assistant of Example College. Teachers, form
tutors and heads of year paste a draft letter or a few loose sentences, and you
turn it into a letter that parents understand at first reading.
Method:
1. Always consult the style guide in your knowledge base first. Apply the rules
on reading level B1, formal address, words to avoid, the structure of a parent
letter and the length.
2. If it is not clear who the letter is for (which class or year group) or what
the parent has to do, ask that first; do not guess.
3. First give the rewritten letter, with a subject line, and then under the heading
"What I changed" a list of at most five points, each with the rule from the style
guide it belongs to.
4. Do not invent dates, names or appointments that are not in the supplied text.
If something a parent needs to know is missing, put [FILL IN] in that place.
5. Be brief. No introduction, no compliment, no sign-off from you.'
prompt_type: simple
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
user_input_form: []
version: 0.7.0
@@ -0,0 +1,633 @@
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: workflow
name: School news
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/tongyi:0.2.22@9cea96ffc7977f536c02999c80ff1283b1819aab9b6fa2fdf789d0c6c7d03715
version: null
kind: app
version: 0.7.0
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
- remote_url
enabled: false
fileUploadConfig:
attachment_image_file_size_limit: 2
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
file_upload_limit: 50
image_file_batch_limit: 10
image_file_size_limit: 10
knowledge_file_size_limit: 50
single_chunk_attachment_limit: 10
skill_file_size_limit: 50
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 3
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: knowledge-retrieval
id: 1789970877464--1789971129095-target
source: '1789970877464'
sourceHandle: source
target: '1789971129095'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 1789971129095--1789971168021-target
source: '1789971129095'
sourceHandle: source
target: '1789971168021'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: llm
id: 1789971168021--1789971306805-target
source: '1789971168021'
sourceHandle: source
target: '1789971306805'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: llm
id: 1789971306805--1789971527769-target
source: '1789971306805'
sourceHandle: source
target: '1789971527769'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: llm
id: 1789971527769--1789974076229-target
source: '1789971527769'
sourceHandle: ''
target: '1789974076229'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: code
id: 1789974076229--1789974245797-target
source: '1789974076229'
sourceHandle: ''
target: '1789974245797'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: code
targetType: if-else
id: 1789974245797--1789974430545-target
source: '1789974245797'
sourceHandle: ''
target: '1789974430545'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: end
id: 1789974430545-true-1789974474578-target
source: '1789974430545'
sourceHandle: 'true'
target: '1789974474578'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: end
id: 1789974430545-false-1789974564321-target
source: '1789974430545'
sourceHandle: 'false'
target: '1789974564321'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: User Input
type: start
variables:
- default: ''
hint: ''
label: What has happened or is going to happen? (who, what, where, when)
options: []
placeholder: ''
required: true
type: paragraph
variable: core_message
- default: ''
hint: ''
label: 'For which class or year group? (or: whole school)'
options: []
placeholder: ''
required: true
type: text-input
variable: year_group
- hint: ''
label: Which tone fits this message?
options:
- informative
- celebratory
- urgent
placeholder: ''
required: true
type: select
variable: tone
height: 160
id: '1789970877464'
position:
x: 80
y: 282
positionAbsolute:
x: 80
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
dataset_ids:
- oTycHUKIxz5h9TqTOxYZojCNnbtTICvzVXxyCqucL8j6opdim+1j1Pa/ejwe91Qg
multiple_retrieval_config:
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
model: qwen3-rerank
provider: langgenius/tongyi/tongyi
top_k: 4
query_attachment_selector: []
query_variable_selector:
- '1789970877464'
- core_message
retrieval_mode: multiple
selected: false
title: Knowledge Retrieval
type: knowledge-retrieval
height: 89
id: '1789971129095'
position:
x: 382
y: 282
positionAbsolute:
x: 382
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: true
variable_selector:
- '1789971129095'
- result
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: 8cfee75c-0407-46b1-bcec-b19c6bb59459
role: system
text: 'Start your answer with the line WEBSITE followed by an empty line.
You write for Example College, a secondary school. Write a news item for
the website of at most 200 words. The headline is an active sentence of
at most eight words, without an exclamation mark. The first paragraph
answers who, what, where and when. End with a next step or a way to get
in touch. Stick strictly to the style guide below: reading level B1, formal
address for parents, words to avoid, names and photos of students. Adapt
to the chosen tone. Invent no facts. If something is missing, write [FILL
IN].
Style guide: {{#context#}}
Year group: {{#1789970877464.year_group#}}
Tone: {{#1789970877464.tone#}}
Core message: {{#1789970877464.core_message#}}'
selected: false
title: Website
type: llm
vision:
enabled: false
height: 87
id: '1789971168021'
position:
x: 684
y: 282
positionAbsolute:
x: 684
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: true
variable_selector:
- '1789971129095'
- result
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: 6d05c2e0-dfe6-4cd7-8cb8-f527927ed86e
role: system
text: 'Start your answer with the line PARENT APP followed by an empty line.
You write for Example College, a secondary school. Write a message for
the parent app of at most 80 words: parents read this on their phone.
One message, one date, one action; no introduction and no headline. Address
parents formally. Stick strictly to the style guide below. Adapt to the
chosen tone. Invent no facts. If something is missing, write [FILL IN].
Style guide: {{#context#}}
Year group: {{#1789970877464.year_group#}}
Tone: {{#1789970877464.tone#}}
Core message: {{#1789970877464.core_message#}}'
selected: false
title: Parent app
type: llm
vision:
enabled: false
height: 87
id: '1789971306805'
position:
x: 986
y: 282
positionAbsolute:
x: 986
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: true
variable_selector:
- '1789971129095'
- result
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: e86f1562-baba-4d04-b3f8-f47f4348b803
role: system
text: 'Start your answer with the line SOCIAL followed by an empty line.
You write for Example College, a secondary school. Write a post for the
school''s social media (Instagram and LinkedIn) of at most 60 words. Warm
and concrete, no hype. End with at most three hashtags, always including
#ExampleCollege. No names of students and no reference to recognisable
photos of students. Stick to the style guide below. Adapt to the chosen
tone. Invent no facts. If something is missing, write [FILL IN].
Style guide: {{#context#}}
Year group: {{#1789970877464.year_group#}}
Tone: {{#1789970877464.tone#}}
Core message: {{#1789970877464.core_message#}}'
selected: false
title: Social
type: llm
vision:
enabled: false
height: 87
id: '1789971527769'
position:
x: 1288
y: 282
positionAbsolute:
x: 1288
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
context:
enabled: true
variable_selector:
- '1789971129095'
- result
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: 46332227-30db-4baf-a45f-59440772a731
role: system
text: 'You are the checker of Example College. Below is a draft message
for the parent app. Assess it on these points from the style guide: at
most 80 words; parents are addressed formally; one message, one date and
one action; no abbreviations and no words from the list of words to avoid;
no names of students; reading level B1 (short sentences, everyday words).
Work in two steps. Step 1: briefly name what is wrong (or write: nothing).
Step 2: give the improved version. Invent no facts; what is not in the
draft stays [FILL IN]. Do not remove facts, dates or times that are in
the draft; a deadline for signing up belongs to the action and stays.
Do not change digits into words.
As your answer give ONLY the improved text, without step 1, without a
heading and without explanation. If the draft is already good, return
it unchanged.
Style guide: {{#context#}}
Draft message: {{#1789971306805.text#}}'
selected: false
title: Checker
type: llm
vision:
enabled: false
height: 87
id: '1789974076229'
position:
x: 1590
y: 282
positionAbsolute:
x: 1590
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(website: str, parent_app: str, social: str) -> dict:\n \
\ reasons = []\n forbidden = [\"by means of\", \"with regard to\", \"\
asap\", \"w.r.t.\", \"kindly\", \"parent(s)/carer(s)\", \"utilise\"]\n \
\ texts = ((\"website\", website, 230), (\"parent app\", parent_app, 90),\
\ (\"social\", social, 70))\n for name, text, maximum in texts:\n \
\ count = len(text.split())\n if count > maximum:\n \
\ reasons.append(f\"{name}: {count} words, maximum {maximum}\")\n \
\ if \"[FILL IN]\" in text:\n reasons.append(f\"{name}: contains\
\ [FILL IN], information is missing\")\n for word in forbidden:\n\
\ if word in text.lower():\n reasons.append(f\"\
{name}: contains the word to avoid '{word.strip()}'\")\n if \"#examplecollege\"\
\ not in social.lower():\n reasons.append(\"social: #ExampleCollege\
\ is missing\")\n return {\n \"ok\": 0 if reasons else 1,\n \
\ \"reasons\": \"\\n\".join(reasons) if reasons else \"All rules satisfied.\"\
,\n }\n"
code_language: python3
outputs:
ok:
children: null
type: number
reasons:
children: null
type: string
selected: false
title: Gatekeeper
type: code
variables:
- value_selector:
- '1789971168021'
- text
value_type: string
variable: website
- value_selector:
- '1789974076229'
- text
value_type: string
variable: parent_app
- value_selector:
- '1789971527769'
- text
value_type: string
variable: social
height: 51
id: '1789974245797'
position:
x: 1892
y: 282
positionAbsolute:
x: 1892
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: '='
id: 905ee344-fc66-4bfd-91d0-773aa3a8ffe4
value: '1'
varType: number
variable_selector:
- '1789974245797'
- ok
logical_operator: and
selected: false
title: IF/ELSE
type: if-else
height: 123
id: '1789974430545'
position:
x: 2194
y: 282
positionAbsolute:
x: 2194
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
outputs:
- value_selector:
- '1789971168021'
- text
value_type: string
variable: website
- value_selector:
- '1789974076229'
- text
value_type: string
variable: parent_app
- value_selector:
- '1789971527769'
- text
value_type: string
variable: social
selected: false
title: Approved
type: end
height: 140
id: '1789974474578'
position:
x: 2496
y: 282
positionAbsolute:
x: 2496
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
outputs:
- value_selector:
- '1789974245797'
- reasons
value_type: string
variable: rejected_because
- value_selector:
- '1789971168021'
- text
value_type: string
variable: draft_website
- value_selector:
- '1789974076229'
- text
value_type: string
variable: draft_parent_app
- value_selector:
- '1789971527769'
- text
value_type: string
variable: draft_social
selected: false
title: To the communications officer
type: end
height: 166
id: '1789974564321'
position:
x: 2496
y: 461
positionAbsolute:
x: 2496
y: 461
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: -679.6126274026951
y: 109.12408509473971
zoom: 0.4152130788699637
rag_pipeline_variables: []
@@ -0,0 +1,380 @@
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: workflow
name: Transcription tool
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai:1.0.5@51583313a5988d5dca405063831ffeeacdc1f2e95f32a8c10b4c281ceef39ebb
version: null
kind: app
version: 0.7.0
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
- remote_url
enabled: false
fileUploadConfig:
attachment_image_file_size_limit: 2
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
file_upload_limit: 50
image_file_batch_limit: 10
image_file_size_limit: 10
knowledge_file_size_limit: 50
single_chunk_attachment_limit: 10
skill_file_size_limit: 50
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 3
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
isInLoop: false
sourceType: start
targetType: tool
id: 1789973195460--1789973681972-target
source: '1789973195460'
sourceHandle: ''
target: '1789973681972'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: tool
targetType: llm
id: 1789973681972--1789973772088-target
source: '1789973681972'
sourceHandle: ''
target: '1789973772088'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: end
id: 1789973772088--1789973899206-target
source: '1789973772088'
sourceHandle: ''
target: '1789973899206'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: User Input
type: start
variables:
- allowed_file_extensions: []
allowed_file_types:
- audio
allowed_file_upload_methods:
- local_file
default: ''
hide: false
hint: ''
label: Recording of the meeting (mp3, m4a or wav)
options: []
placeholder: ''
required: true
type: file
variable: recording
height: 108
id: '1789973195460'
position:
x: 80
y: 282
positionAbsolute:
x: 80
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
zIndex: 0
- data:
is_team_authorization: true
paramSchemas:
- auto_generate: null
default: null
form: llm
human_description:
en_US: The audio file to be converted.
ja_JP: The audio file to be converted.
pt_BR: The audio file to be converted.
zh_Hans: 要转换的音频文件。
input_schema: null
label:
en_US: Audio File
ja_JP: Audio File
pt_BR: Audio File
zh_Hans: 音频文件
llm_description: The audio file to be converted.
max: null
min: null
multiple: false
name: audio_file
options: []
placeholder: null
precision: null
required: true
scope: null
template: null
type: file
- auto_generate: null
default: null
form: form
human_description:
en_US: All available ASR models. You can config model in the Model Provider
of Settings.
ja_JP: All available ASR models. You can config model in the Model Provider
of Settings.
pt_BR: All available ASR models. You can config model in the Model Provider
of Settings.
zh_Hans: 所有可用的 ASR 模型。你可以在设置中的模型供应商里配置。
input_schema: null
label:
en_US: Model
ja_JP: Model
pt_BR: Model
zh_Hans: Model
llm_description: null
max: null
min: null
multiple: false
name: model
options:
- icon: null
label:
en_US: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai)
ja_JP: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai)
pt_BR: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai)
zh_Hans: gpt-4o-mini-transcribe-2025-12-15(langgenius/openai/openai)
value: langgenius/openai/openai#gpt-4o-mini-transcribe-2025-12-15
- icon: null
label:
en_US: gpt-4o-mini-transcribe(langgenius/openai/openai)
ja_JP: gpt-4o-mini-transcribe(langgenius/openai/openai)
pt_BR: gpt-4o-mini-transcribe(langgenius/openai/openai)
zh_Hans: gpt-4o-mini-transcribe(langgenius/openai/openai)
value: langgenius/openai/openai#gpt-4o-mini-transcribe
- icon: null
label:
en_US: gpt-4o-transcribe-diarize(langgenius/openai/openai)
ja_JP: gpt-4o-transcribe-diarize(langgenius/openai/openai)
pt_BR: gpt-4o-transcribe-diarize(langgenius/openai/openai)
zh_Hans: gpt-4o-transcribe-diarize(langgenius/openai/openai)
value: langgenius/openai/openai#gpt-4o-transcribe-diarize
- icon: null
label:
en_US: gpt-4o-transcribe(langgenius/openai/openai)
ja_JP: gpt-4o-transcribe(langgenius/openai/openai)
pt_BR: gpt-4o-transcribe(langgenius/openai/openai)
zh_Hans: gpt-4o-transcribe(langgenius/openai/openai)
value: langgenius/openai/openai#gpt-4o-transcribe
- icon: null
label:
en_US: whisper-1(langgenius/openai/openai)
ja_JP: whisper-1(langgenius/openai/openai)
pt_BR: whisper-1(langgenius/openai/openai)
zh_Hans: whisper-1(langgenius/openai/openai)
value: langgenius/openai/openai#whisper-1
placeholder: null
precision: null
required: true
scope: null
template: null
type: select
params:
audio_file: ''
model: ''
plugin_id: null
plugin_unique_identifier: ''
provider_icon: https://cloud.dify.ai/console/api/workspaces/current/tool-provider/builtin/audio/icon
provider_id: audio
provider_name: audio
provider_show_name: Audio
provider_type: builtin
selected: false
title: Speech To Text
tool_configurations:
model:
type: constant
value: langgenius/openai/openai#gpt-4o-transcribe-diarize
tool_description: Convert audio file to text.
tool_label: Speech To Text
tool_name: asr
tool_node_version: '2'
tool_parameters:
audio_file:
type: variable
value:
- '1789973195460'
- recording
type: tool
height: 87
id: '1789973681972'
position:
x: 382
y: 282
positionAbsolute:
x: 382
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: false
variable_selector: []
model:
completion_params: {}
mode: chat
name: gpt-5-mini
provider: langgenius/openai/openai
prompt_template:
- id: fc3c9e64-5361-4d05-9d64-1704260d1ee7
role: system
text: 'Start your answer with the line # MINUTES followed by an empty line.
You write the minutes of a meeting at a school, based on the transcript
below. The transcript comes from automatic speech recognition and may
contain errors in names and numbers; write down what is most likely and
put a question mark in brackets after anything you are not sure of.
Write in English, businesslike and brief. Use exactly this structure with
these headings:
## Meeting
One line: which meeting, date, those present (if the transcript shows
it).
## Summary
At most five sentences about what was discussed.
## Decisions
Numbered list. Only what was really decided, no intentions.
## Action points
Table with columns: What, Who, When. If no date is given, write "not mentioned".
## Deferred
Items deliberately moved to a later meeting, with the reason.
Leave out side tracks and informal remarks. Invent nothing that is not
in the transcript.
Transcript: {{#1789973681972.text#}}'
selected: false
title: Minutes
type: llm
vision:
enabled: false
height: 87
id: '1789973772088'
position:
x: 684
y: 282
positionAbsolute:
x: 684
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
outputs:
- value_selector:
- '1789973772088'
- text
value_type: string
variable: minutes
- value_selector:
- '1789973681972'
- text
value_type: string
variable: transcript
selected: false
title: Output
type: end
height: 114
id: '1789973899206'
position:
x: 986
y: 282
positionAbsolute:
x: 986
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: -21.72663921444405
y: 9.100411783338643
zoom: 0.9613557174532783
rag_pipeline_variables: []
+1
View File
@@ -6,6 +6,7 @@ This is what changed per release.
## 2026-09-20, English screenshots
- Guides 01, 02, 03 and 07 rebuilt with the English Dify interface and English apps (Text at level, School guide assistant, Parent letter assistant, School news with checks; links in the README). The other guides follow.
- Every Studio app as a `.dify.yml` file in its guide's folder, to import via Studio, Create, Import DSL file. Instructions in the README.
- New appendix 00-self-hosting: running Dify Community Edition yourself with Docker (Windows, Mac, Linux).
## 2026-09-20, first release
+24
View File
@@ -63,6 +63,30 @@ The apps are live to try out:
- Materials check (06; Dutch build): https://udify.app/agent/lkWKedkSW2d3nqBV
- Study coach biology (08; Dutch build): https://udify.app/chat/fP0TJW3s8IXOj9BO
## Installing the apps in your own Dify
Every Studio app is also in its guide's folder as a file: `<name>.dify.yml`. That is Dify's DSL
export. This is how you put it in your own workspace (online or self-hosted):
1. Download the `.dify.yml` file from the folder.
2. In Dify go to **Studio**, click **Create** and choose **Import DSL file**.
3. Drag the file into the window and click **Create**.
4. At every LLM step pick your own model (the export refers to gpt-5-mini via OpenAI) and under
**Knowledge** attach your own knowledge base; that does not travel with the file. Create it
first with the sample document from the same folder (guide 02, steps 1 to 5).
5. **Publish**.
The files contain no keys. The Agent Console apps of 04 and 06 have no export (yet); you build
those with the guide.
| File | Guide |
| --- | --- |
| 01-workflow/text-at-level.dify.yml | 01 |
| 02-agent-knowledge-base/school-guide-assistant.dify.yml | 02 (including the Reception mode from 03) |
| 03-school-communication/parent-letter-assistant.dify.yml | 03 |
| 03-school-communication/school-news.dify.yml | 03 and 07 (version 2, with Checker and Gatekeeper) |
| 05-transcription-tool/transcription-tool.dify.yml | 05 |
## Building or editing yourself
Every folder has the same structure: