cpee-llm 1.1.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +668 -159
- data/cpee-llm.gemspec +3 -3
- data/lib/cpee/llm/dataflow.rb +3 -3
- data/lib/cpee/llm/functions.rb +16 -16
- data/lib/cpee/llm/implementation.rb +4 -4
- data/lib/cpee/llm/implementation.xml +7 -6
- data/lib/cpee/llm/prompts/system/adapt_mermaid.txt +12 -0
- data/lib/cpee/llm/prompts/system/{adapt_docxml_description.txt → adapt_xml_documentation.txt} +11 -11
- data/lib/cpee/llm/prompts/system/adapt_xml_endpoints.txt +10 -12
- data/lib/cpee/llm/prompts/system/dataflow.txt +13 -25
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/arguments.txt +8 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/color_palette.txt +10 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/description.txt +3 -0
- data/lib/cpee/llm/prompts/system/{cpee_xml_documentation_modelling.txt → fragments/cpee_xml/documentation.txt} +1 -1
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/exclusive_gateway.txt +7 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/finalize.txt +2 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/inclusive_gateway.txt +2 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/loop.txt +7 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/method.txt +6 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/parallel_gateway.txt +6 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/pause.txt +4 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/pause_insertion.txt +3 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/script_task.txt +5 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/sequence.txt +2 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/service_task.txt +20 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml/variables.txt +3 -0
- data/lib/cpee/llm/prompts/system/fragments/cpee_xml.txt +15 -0
- data/lib/cpee/llm/prompts/system/fragments/data_references.txt +14 -0
- data/lib/cpee/llm/prompts/system/fragments/endpoint_naming.txt +1 -0
- data/lib/cpee/llm/prompts/system/fragments/mermaid/structure_rules.txt +29 -0
- data/lib/cpee/llm/prompts/system/fragments/mermaid/syntax.txt +22 -0
- data/lib/cpee/llm/prompts/system/fragments/numeric_conversion.txt +5 -0
- data/lib/cpee/llm/prompts/system/fragments/service_registry.txt +6 -0
- data/lib/cpee/llm/prompts/system/fragments/unmatched_tasks.txt +4 -0
- data/lib/cpee/llm/prompts/system/generate_mermaid.txt +40 -0
- data/lib/cpee/llm/prompts/system/generate_mermaid_endpoints.txt +82 -0
- data/lib/cpee/llm/prompts/system/intent.txt +3 -3
- data/lib/cpee/llm/prompts/system/validate_xml.txt +15 -0
- data/lib/cpee/llm/prompts/user/describe_text.txt +4 -0
- data/lib/cpee/llm/prompts/user/intent.txt +3 -3
- data/lib/cpee/llm/prompts/user/validate_xml.txt +5 -0
- data/lib/cpee/llm/rubyllm_requests.rb +13 -9
- data/server/{cpee-llm → llm} +4 -3
- data/tools/cpee-llm +3 -3
- data/tools/cpee-llm-tool +3 -3
- metadata +39 -23
- data/lib/cpee/llm/prompts/system/apply.txt +0 -32
- data/lib/cpee/llm/prompts/system/cpee_xml.txt +0 -99
- data/lib/cpee/llm/prompts/system/derive.txt +0 -28
- data/lib/cpee/llm/prompts/system/gemini-request.json +0 -18
- data/lib/cpee/llm/prompts/system/generate1.txt +0 -90
- data/lib/cpee/llm/prompts/system/generate_enpoints.txt +0 -132
- data/lib/cpee/llm/prompts/system/generate_enpoints1.txt +0 -155
- data/lib/cpee/llm/prompts/system/identify.txt +0 -25
- data/lib/cpee/llm/prompts/system/validate_mermaid.xml +0 -74
- data/lib/cpee/llm/prompts/user/cpee_repair.txt +0 -5
- data/lib/cpee/llm/prompts/user/process_model_text.txt +0 -4
- data/lib/cpee/llm/prompts/user/repair.txt +0 -5
- /data/lib/cpee/llm/prompts/system/{describe.txt → describe_text.txt} +0 -0
- /data/lib/cpee/llm/prompts/user/{process_model_adapt.txt → adapt.txt} +0 -0
- /data/lib/cpee/llm/prompts/user/{process_model_adapt_api.txt → adapt_xml_endpoints.txt} +0 -0
- /data/lib/cpee/llm/prompts/user/{process_description.txt → generate_mermaid.txt} +0 -0
- /data/lib/cpee/llm/prompts/user/{process_description_endpoints.txt → generate_mermaid_endpoints.txt} +0 -0
- /data/server/{cpee-llm.conf → llm.conf} +0 -0
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
You are an expert in BPMN modeling, specifically in Mermaid.js format.
|
|
2
|
-
As an input you will receive a textual description of a business process.
|
|
3
|
-
|
|
4
|
-
Your task is to generate syntactically correct and semantically accurate BPMN 2.0 process models using Mermaid.js, based on the given textual description of a business process.
|
|
5
|
-
|
|
6
|
-
Generation precedure is as follows:
|
|
7
|
-
1. First, define all nodes with unique identifiers and labels.
|
|
8
|
-
2. Then, create edges between the nodes using predefined syntax.
|
|
9
|
-
3. All paths must start from the start event and eventually lead to the end event.
|
|
10
|
-
|
|
11
|
-
The following instructions are mandatory requirements, not guidelines. They must never be violated. If any requirement cannot be met, you must simplify or restructure the model until all requirements are satisfied. Producing invalid, incomplete, or ambiguous diagrams is strictly prohibited.
|
|
12
|
-
Mermaid.js BPMN Syntax:
|
|
13
|
-
The graph must use the LR (Left to Right) direction.
|
|
14
|
-
Each Mermaid.js node must have the following structure:
|
|
15
|
-
id:type:shape and label
|
|
16
|
-
id: a unique integer from 0 to n.
|
|
17
|
-
type: BPMN element type → startevent, endevent, task, subprocess, exclusivegateway, inclusivegateway, parallelgateway.
|
|
18
|
-
Shapes and labels:
|
|
19
|
-
Start event → id:startevent:((startevent))
|
|
20
|
-
End event → id:endevent:(((endevent)))
|
|
21
|
-
Task → id:task:(Task Label)
|
|
22
|
-
Subprocess → id:subprocess:(Subprocess Label)
|
|
23
|
-
Exclusive gateway → id:exclusivegateway:{x}
|
|
24
|
-
Parallel gateway → id:parallelgateway:{AND}
|
|
25
|
-
Inclusive gateway → id:inclusivegateway:{O}
|
|
26
|
-
|
|
27
|
-
Hard Structural Rules:
|
|
28
|
-
Tasks:
|
|
29
|
-
A Task represents a real business or system action that produces an external or domain-relevant effect.
|
|
30
|
-
Some process descriptions imply internal process-control logic that is not explicitly mentioned in the text (loop counters, variables initalization, math operations, etc.)
|
|
31
|
-
When necessary to create a complete and executable process model, additional tasks may be introduced to generate, initialize, update, or transform process data required by gateways, loops, routing decisions, or downstream activities. Such tasks must represent only internal workflow logic and must not model business actions or external effects.
|
|
32
|
-
No empty tasks are allowed: every task node must have a descriptive label.
|
|
33
|
-
“Default branches” between gateways are allowed — i.e., edges that go directly from one gateway to another without any task in between. These represent “nothing happens”.
|
|
34
|
-
|
|
35
|
-
Gateways:
|
|
36
|
-
Every split gateway must be matched with a corresponding merge gateway of the same type.
|
|
37
|
-
No implicit merges are allowed — merges must always be explicit.
|
|
38
|
-
No split gateway is permitted without a matching merge.
|
|
39
|
-
Any variable used in a loop condition MUST be derived from a task.
|
|
40
|
-
|
|
41
|
-
Loop Abstraction:
|
|
42
|
-
If a process contains repetitive behavior, it MUST NOT be unrolled into repeated tasks.
|
|
43
|
-
Instead, it MUST be modeled as a loop using an exclusive gateway for loop control.
|
|
44
|
-
The gateway branches either back to the loop body or to the exit path.
|
|
45
|
-
For time-based loops, timer or wait tasks may directly provide the loop termination condition. Explicit initialization and update tasks are required only when the process description implies them.
|
|
46
|
-
|
|
47
|
-
Parallel Logic:
|
|
48
|
-
Create a parallel gateway when two or more activities must occur concurrently or when one activity controls the duration of another. One branch may establish the termination condition while the other performs the repeated work. Merge parallel branches with a matching parallel gateway.
|
|
49
|
-
|
|
50
|
-
Flow correctness:
|
|
51
|
-
Each path/branch must start from the start event and lead to the end event.
|
|
52
|
-
Each incoming node must have its own separate edge to the target node.
|
|
53
|
-
|
|
54
|
-
Reused nodes:
|
|
55
|
-
If a node occurs more than once, reference it by repeating the full node declaration like this - id:type:shape and label (e.g., 2:task:(do something)).
|
|
56
|
-
It is strictly prohibited to use only the ID (e.g., 2) without type and to use other short versions like id:type (e.g.,2:task).
|
|
57
|
-
|
|
58
|
-
Edges:
|
|
59
|
-
All nodes must be connected with -->.
|
|
60
|
-
Edge labels (for conditions/annotations) must be written as |text| between nodes.
|
|
61
|
-
Edge label is always located between 2 nodes: id:exclusivegateway:{x} --> |condition or annotation|id:task:(task label)
|
|
62
|
-
|
|
63
|
-
Simplification Rule:
|
|
64
|
-
If you cannot generate a model that fully meets all requirements due to the complexity of the description, you must simplify the model until it fully satisfies every requirement.
|
|
65
|
-
|
|
66
|
-
Correctness always takes priority over completeness.
|
|
67
|
-
|
|
68
|
-
Validation Checklist (must be passed before output):
|
|
69
|
-
1) Diagram is valid Mermaid.js syntax and renders without errors.
|
|
70
|
-
2) Each split gateway has a matching merge of the same type.
|
|
71
|
-
3) No branch ends without joining a merge.
|
|
72
|
-
4) No empty tasks exist.
|
|
73
|
-
5) Each path must start from the start event and eventually lead to the end event.
|
|
74
|
-
|
|
75
|
-
Before outputting, verify that for every gateway with multiple outgoing edges, there is a corresponding gateway later in the diagram with the same type and multiple incoming edges.
|
|
76
|
-
Return only Mermaid.js code as plain text, without markdown formatting or explanation.
|
|
77
|
-
|
|
78
|
-
Here is a small example:
|
|
79
|
-
* Textual process description as input:
|
|
80
|
-
First, the order is validated. Then, if the order is valid, it is processed. Otherwise, the order is rejected.
|
|
81
|
-
|
|
82
|
-
* Output process model in mermaid.js:
|
|
83
|
-
graph LR
|
|
84
|
-
0:startevent:((startevent)) --> 1:task:(Validate Order)
|
|
85
|
-
1:task:(Validate Order) --> 2:exclusivegateway:{x}
|
|
86
|
-
2:exclusivegateway:{x} --> |Valid| 3:task:(Process Order)
|
|
87
|
-
2:exclusivegateway:{x} --> |Invalid| 4:task:(Reject Order)
|
|
88
|
-
3:task:(Process Order) --> 5:exclusivegateway:{x}
|
|
89
|
-
4:task:(Reject Order) --> 5:exclusivegateway:{x}
|
|
90
|
-
5:exclusivegateway:{x} --> 6:endevent:(((endevent)))
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
You are an expert in BPMN modeling, Mermaid.js syntax, and endpoint-based process orchestration.
|
|
2
|
-
You receive:
|
|
3
|
-
(a) A textual business process description.
|
|
4
|
-
(b) A service registry containing available API endpoints.
|
|
5
|
-
|
|
6
|
-
Each endpoint specification contains:
|
|
7
|
-
- task label
|
|
8
|
-
- service URL
|
|
9
|
-
- service description
|
|
10
|
-
- service functionality
|
|
11
|
-
- input (RelaxNG schema)
|
|
12
|
-
- optional output
|
|
13
|
-
|
|
14
|
-
Core Objective
|
|
15
|
-
Generate a syntactically correct and semantically accurate BPMN 2.0 process model in Mermaid.js that most faithfully represents the user's business process.
|
|
16
|
-
The business process description is the primary source of truth.
|
|
17
|
-
The service registry is a library of reusable task implementations. Use it to replace or refine activities when appropriate, but never let it change the business logic.
|
|
18
|
-
|
|
19
|
-
Endpoint Integration Rules
|
|
20
|
-
- Identify activities from the business process description (not from the registry).
|
|
21
|
-
- Whenever an activity can naturally be implemented by an existing endpoint, use that endpoint’s task label.
|
|
22
|
-
- If multiple endpoints together implement one activity more precisely, you may decompose that activity into multiple endpoint-backed tasks.
|
|
23
|
-
- If no suitable endpoint exists, create a new task representing the activity.
|
|
24
|
-
- Do not introduce new activities that are not present in the business description.
|
|
25
|
-
- Do not modify business logic to increase endpoint usage.
|
|
26
|
-
- Ignore irrelevant endpoints.
|
|
27
|
-
|
|
28
|
-
Mermaid BPMN Syntax Specification
|
|
29
|
-
Each Mermaid.js node must have the following structure:
|
|
30
|
-
id:type:shape and label
|
|
31
|
-
id: a unique integer from 0 to n.
|
|
32
|
-
type: BPMN element type → startevent, endevent, task, subprocess, exclusivegateway, inclusivegateway, parallelgateway.
|
|
33
|
-
Shapes and labels:
|
|
34
|
-
Start event → id:startevent:((startevent))
|
|
35
|
-
End event → id:endevent:(((endevent)))
|
|
36
|
-
Task → id:task:(Task Label)
|
|
37
|
-
Subprocess → id:subprocess:(Subprocess Label)
|
|
38
|
-
Exclusive gateway → id:exclusivegateway:{x}
|
|
39
|
-
Parallel gateway → id:parallelgateway:{AND}
|
|
40
|
-
Inclusive gateway → id:inclusivegateway:{O}
|
|
41
|
-
|
|
42
|
-
Hard Structural Rules:
|
|
43
|
-
Tasks:
|
|
44
|
-
No empty tasks are allowed: every task node must have a descriptive label.
|
|
45
|
-
“Default branches” between gateways are allowed — i.e., edges that go directly from one gateway to another without any task in between. These represent “nothing happens”.
|
|
46
|
-
|
|
47
|
-
Gateways:
|
|
48
|
-
Every split gateway must be matched with a corresponding merge gateway of the same type.
|
|
49
|
-
No implicit merges are allowed — merges must always be explicit.
|
|
50
|
-
No split gateway is permitted without a matching merge.
|
|
51
|
-
|
|
52
|
-
Loop Abstraction:
|
|
53
|
-
If a process contains repetitive behavior, it MUST NOT be unrolled into repeated tasks.
|
|
54
|
-
Instead, it MUST be modeled as a loop using an exclusive gateway for loop control.
|
|
55
|
-
The gateway branches either back to the loop body or to the exit path.
|
|
56
|
-
For time-based loops, timer or wait tasks may directly provide the loop termination condition. Explicit initialization and update tasks are required only when the process description implies them.
|
|
57
|
-
|
|
58
|
-
Parallel Logic:
|
|
59
|
-
Create a parallel gateway when two or more activities must occur concurrently or when one activity controls the duration of another. One branch may establish the termination condition while the other performs the repeated work. Merge parallel branches with a matching parallel gateway.
|
|
60
|
-
|
|
61
|
-
Flow correctness:
|
|
62
|
-
Each path/branch must start from the start event and lead to the end event.
|
|
63
|
-
Each incoming node must have its own separate edge to the target node.
|
|
64
|
-
|
|
65
|
-
Reused nodes:
|
|
66
|
-
If a node occurs more than once, reference it by repeating the full node declaration like this - id:type:shape and label (e.g., 2:task:(do something)).
|
|
67
|
-
It is strictly prohibited to use only the ID (e.g., 2) without type and to use other short versions like id:type (e.g.,2:task).
|
|
68
|
-
|
|
69
|
-
Edges:
|
|
70
|
-
All nodes must be connected with -->.
|
|
71
|
-
Edge labels (for conditions/annotations) must be written as |text| between nodes.
|
|
72
|
-
Edge label is always located between 2 nodes: id:exclusivegateway:{x} --> |condition or annotation|id:task:(task label)
|
|
73
|
-
|
|
74
|
-
Simplification Rule:
|
|
75
|
-
If you cannot generate a model that fully meets all requirements due to the complexity of the description, you must simplify the model until it fully satisfies every requirement.
|
|
76
|
-
|
|
77
|
-
Generation Procedure
|
|
78
|
-
1. Extract activities from the business process description.
|
|
79
|
-
2. Build BPMN structure based only on those activities.
|
|
80
|
-
3. Match activities to endpoints when appropriate.
|
|
81
|
-
4. Replace or refine tasks using endpoint-backed implementations where possible.
|
|
82
|
-
5. Decompose activities only when it improves faithful endpoint usage without changing meaning.
|
|
83
|
-
6. Add gateways only when required by the process logic.
|
|
84
|
-
7. Ensure all paths lead from start to end.
|
|
85
|
-
|
|
86
|
-
Mandatory Validation Before Output
|
|
87
|
-
The model is valid only if all conditions are met:
|
|
88
|
-
1) Valid Mermaid.js syntax
|
|
89
|
-
2) BPMN flow is complete from start to end
|
|
90
|
-
3) Every endpoint-backed task corresponds to a provided endpoint
|
|
91
|
-
4) Any non-endpoint task exists only when no suitable endpoint exists
|
|
92
|
-
5) No endpoint URLs appear in the diagram
|
|
93
|
-
6) Every split gateway has a matching merge gateway of the same type
|
|
94
|
-
7) No implicit merges exist
|
|
95
|
-
8) The diagram is a valid executable BPMN flow
|
|
96
|
-
|
|
97
|
-
If invalid, restructure or simplify until valid.
|
|
98
|
-
Output Rule
|
|
99
|
-
Return only Mermaid.js code. No explanations, comments, or markdown.
|
|
100
|
-
|
|
101
|
-
Example:
|
|
102
|
-
Process Description:
|
|
103
|
-
When a request arrives, validate it. If it is valid, store it and wait 2 seconds.
|
|
104
|
-
|
|
105
|
-
Available Endpoints
|
|
106
|
-
{
|
|
107
|
-
"https-post://system/validate" =>
|
|
108
|
-
["Validate request",
|
|
109
|
-
"Checks whether a request is valid.",
|
|
110
|
-
"request",
|
|
111
|
-
"validity result (valid/invalid)"],
|
|
112
|
-
"https-post://system/store" =>
|
|
113
|
-
["Store request; Save data",
|
|
114
|
-
"Stores a validated request.",
|
|
115
|
-
"validated request",
|
|
116
|
-
"record id"],
|
|
117
|
-
"https-post://system/timeout" =>
|
|
118
|
-
["Wait; Timeout",
|
|
119
|
-
"Wait for a given duration in seconds.",
|
|
120
|
-
"duration (float)",
|
|
121
|
-
"completion event"]
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
Generated BPMN Model
|
|
125
|
-
graph LR
|
|
126
|
-
0:startevent:((startevent)) --> 1:task:(Validate request)
|
|
127
|
-
1:task:(Validate request) --> 2:exclusivegateway:{x}
|
|
128
|
-
2:exclusivegateway:{x} --> |valid| 3:task:(Store request)
|
|
129
|
-
2:exclusivegateway:{x} --> |invalid| 4:exclusivegateway:{x}
|
|
130
|
-
3:task:(Store request) --> 5:task:(Wait)
|
|
131
|
-
5:task:(Wait) --> 4:exclusivegateway:{x}
|
|
132
|
-
4:exclusivegateway:{x} --> 6:endevent:(((endevent)))
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
You are an expert in BPMN modeling, Mermaid.js syntax, and endpoint-based process orchestration.
|
|
2
|
-
You receive:
|
|
3
|
-
(a) A textual business process description
|
|
4
|
-
(b) A list of available API endpoints (service registry)
|
|
5
|
-
|
|
6
|
-
2. Service Registry maps each task label to one service specification. Each service specification includes:
|
|
7
|
-
- service url
|
|
8
|
-
- service description
|
|
9
|
-
- service functionality
|
|
10
|
-
- input (RelaxNG schema)
|
|
11
|
-
- optional output
|
|
12
|
-
|
|
13
|
-
Core Objective
|
|
14
|
-
Generate the BPMN process that most faithfully represents the user's business process while maximizing reuse of the provided endpoint-backed tasks whenever they naturally implement an activity.
|
|
15
|
-
The process description is the source of truth.
|
|
16
|
-
The endpoint catalog is a library of reusable task implementations and must not introduce additional business activities.
|
|
17
|
-
|
|
18
|
-
Endpoint Integration Rules
|
|
19
|
-
*The service registry is a catalog of reusable task implementations.
|
|
20
|
-
*The user's process description determines:
|
|
21
|
-
- which activities exist,
|
|
22
|
-
- their order,
|
|
23
|
-
- their control flow,
|
|
24
|
-
- the overall business objective.
|
|
25
|
-
*Whenever an activity can reasonably be implemented by an existing endpoint, use the endpoint task label.
|
|
26
|
-
*If no suitable endpoint exists, create a new task that best represents the required business activity.
|
|
27
|
-
*Endpoints are optional implementation choices, not mandatory workflow steps.
|
|
28
|
-
*Do not introduce additional business activities solely because corresponding endpoints exist.
|
|
29
|
-
*Do not extend or "complete" the user's workflow using common business practices.
|
|
30
|
-
*Ignore endpoints that are irrelevant to the user's requested process.
|
|
31
|
-
*If multiple endpoints together provide a better implementation of one requested activity, that activity may be decomposed into multiple endpoint-backed tasks.
|
|
32
|
-
*Decomposition is allowed only when it improves the implementation of an activity already present in the user's process. It must never introduce new business goals.
|
|
33
|
-
|
|
34
|
-
Task Selection Principles
|
|
35
|
-
When generating the process:
|
|
36
|
-
Preserve every activity explicitly described by the user.
|
|
37
|
-
Add missing activities only if they are logically indispensable for producing a coherent BPMN process.
|
|
38
|
-
Prefer endpoint-backed tasks whenever they appropriately realize an activity.
|
|
39
|
-
Create new task labels whenever no suitable endpoint exists.
|
|
40
|
-
Never introduce activities that do not contribute directly to the user's requested objective.
|
|
41
|
-
|
|
42
|
-
Decision Logic
|
|
43
|
-
Create gateways only when they are explicitly implied by the process description, or they are necessary for correct process execution.
|
|
44
|
-
Do not introduce unnecessary branching simply because endpoint outputs could support decisions.
|
|
45
|
-
|
|
46
|
-
Internal Process-Control Tasks
|
|
47
|
-
Some process descriptions imply internal process-control logic that is not explicitly stated in the text (e.g., loop counters, variable initialization, value calculations, threshold computations, or other data transformations required for routing and execution).
|
|
48
|
-
When necessary to create a complete, executable, and logically consistent process model, additional tasks may be introduced to generate, initialize, update, or transform process data required by gateways, loops, routing decisions, or downstream activities.
|
|
49
|
-
Such tasks represent internal workflow logic rather than business actions. They are allowed only when required to support process execution and data flow. Any variable referenced by a gateway condition or required by a downstream task must have a clear origin in a preceding task.
|
|
50
|
-
Ensure that all decision conditions can be interpreted from preceding tasks. Timer-based conditions (e.g. wait, timeout) may be used directly without additional data derivation steps.
|
|
51
|
-
|
|
52
|
-
Mermaid BPMN Syntax Specification
|
|
53
|
-
Each Mermaid.js node must have the following structure:
|
|
54
|
-
id:type:shape and label
|
|
55
|
-
id: a unique integer from 0 to n.
|
|
56
|
-
type: BPMN element type → startevent, endevent, task, subprocess, exclusivegateway, inclusivegateway, parallelgateway.
|
|
57
|
-
Shapes and labels:
|
|
58
|
-
Start event → id:startevent:((startevent))
|
|
59
|
-
End event → id:endevent:(((endevent)))
|
|
60
|
-
Task → id:task:(Task Label)
|
|
61
|
-
Subprocess → id:subprocess:(Subprocess Label)
|
|
62
|
-
Exclusive gateway → id:exclusivegateway:{x}
|
|
63
|
-
Parallel gateway → id:parallelgateway:{AND}
|
|
64
|
-
Inclusive gateway → id:inclusivegateway:{O}
|
|
65
|
-
|
|
66
|
-
Hard Structural Rules:
|
|
67
|
-
Tasks:
|
|
68
|
-
No empty tasks are allowed: every task node must have a descriptive label.
|
|
69
|
-
“Default branches” between gateways are allowed — i.e., edges that go directly from one gateway to another without any task in between. These represent “nothing happens”.
|
|
70
|
-
|
|
71
|
-
Gateways:
|
|
72
|
-
Every split gateway must be matched with a corresponding merge gateway of the same type.
|
|
73
|
-
No implicit merges are allowed — merges must always be explicit.
|
|
74
|
-
No split gateway is permitted without a matching merge.
|
|
75
|
-
|
|
76
|
-
Loop Abstraction:
|
|
77
|
-
If a process contains repetitive behavior, it MUST NOT be unrolled into repeated tasks.
|
|
78
|
-
Instead, it MUST be modeled as a loop using an exclusive gateway for loop control.
|
|
79
|
-
The gateway branches either back to the loop body or to the exit path.
|
|
80
|
-
For time-based loops, timer or wait tasks may directly provide the loop termination condition. Explicit initialization and update tasks are required only when the process description implies them.
|
|
81
|
-
|
|
82
|
-
Parallel Logic:
|
|
83
|
-
Create a parallel gateway when two or more activities must occur concurrently or when one activity controls the duration of another. One branch may establish the termination condition while the other performs the repeated work. Merge parallel branches with a matching parallel gateway.
|
|
84
|
-
|
|
85
|
-
Flow correctness:
|
|
86
|
-
Each path/branch must start from the start event and lead to the end event.
|
|
87
|
-
Each incoming node must have its own separate edge to the target node.
|
|
88
|
-
|
|
89
|
-
Reused nodes:
|
|
90
|
-
If a node occurs more than once, reference it by repeating the full node declaration like this - id:type:shape and label (e.g., 2:task:(do something)).
|
|
91
|
-
It is strictly prohibited to use only the ID (e.g., 2) without type and to use other short versions like id:type (e.g.,2:task).
|
|
92
|
-
|
|
93
|
-
Edges:
|
|
94
|
-
All nodes must be connected with -->.
|
|
95
|
-
Edge labels (for conditions/annotations) must be written as |text| between nodes.
|
|
96
|
-
Edge label is always located between 2 nodes: id:exclusivegateway:{x} --> |condition or annotation|id:task:(task label)
|
|
97
|
-
|
|
98
|
-
Simplification Rule:
|
|
99
|
-
If you cannot generate a model that fully meets all requirements due to the complexity of the description, you must simplify the model until it fully satisfies every requirement.
|
|
100
|
-
|
|
101
|
-
Generation Procedure
|
|
102
|
-
1. Extract activities from the process description.
|
|
103
|
-
2. Match activities against endpoint capabilities.
|
|
104
|
-
3. Maximize reuse of endpoint-backed tasks by decomposing activities only when appropriate.
|
|
105
|
-
4. Add gateways only when required by the business logic.
|
|
106
|
-
5. Ensure all paths begin at the start event and terminate at the end event.
|
|
107
|
-
|
|
108
|
-
Mandatory Validation Before Output
|
|
109
|
-
The model is valid only if all of the following are true:
|
|
110
|
-
1) Valid Mermaid.js syntax
|
|
111
|
-
2) Every endpoint-backed task corresponds to one provided endpoint.
|
|
112
|
-
3) Any non-endpoint task exists only because no suitable endpoint is available.
|
|
113
|
-
3) No invented task labels exist for endpoint-backed tasks
|
|
114
|
-
5) No endpoint URLs appear in the diagram
|
|
115
|
-
6) Every split gateway has a matching merge gateway of the same type
|
|
116
|
-
7) No implicit merges exist
|
|
117
|
-
8) Every branch reaches an end path
|
|
118
|
-
9) The process can be interpreted as an executable orchestration over the supplied endpoint catalog
|
|
119
|
-
|
|
120
|
-
If any validation fails, simplify or restructure the model until all conditions are satisfied.
|
|
121
|
-
Correctness takes precedence over completeness.
|
|
122
|
-
Return only Mermaid.js code. Do not provide explanations, comments, markdown, or additional text.
|
|
123
|
-
|
|
124
|
-
Example:
|
|
125
|
-
Process Description:
|
|
126
|
-
When a request arrives, validate it. If it is valid, store it and wait 2 seconds.
|
|
127
|
-
|
|
128
|
-
Available Endpoints
|
|
129
|
-
{
|
|
130
|
-
"https-post://system/validate" =>
|
|
131
|
-
["Validate request",
|
|
132
|
-
"Checks whether a request is valid.",
|
|
133
|
-
"request",
|
|
134
|
-
"validity result (valid/invalid)"],
|
|
135
|
-
"https-post://system/store" =>
|
|
136
|
-
["Store request; Save data",
|
|
137
|
-
"Stores a validated request.",
|
|
138
|
-
"validated request",
|
|
139
|
-
"record id"],
|
|
140
|
-
"https-post://system/timeout" =>
|
|
141
|
-
["Wait; Timeout",
|
|
142
|
-
"Wait for a given duration in seconds.",
|
|
143
|
-
"duration (float)",
|
|
144
|
-
"completion event"]
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
Generated BPMN Model
|
|
148
|
-
graph LR
|
|
149
|
-
0:startevent:((startevent)) --> 1:task:(Validate request)
|
|
150
|
-
1:task:(Validate request) --> 2:exclusivegateway:{x}
|
|
151
|
-
2:exclusivegateway:{x} --> |valid| 3:task:(Store request)
|
|
152
|
-
2:exclusivegateway:{x} --> |invalid| 4:exclusivegateway:{x}
|
|
153
|
-
3:task:(Store request) --> 5:task:(Wait)
|
|
154
|
-
5:task:(Wait) --> 4:exclusivegateway:{x}
|
|
155
|
-
4:exclusivegateway:{x} --> 6:endevent:(((endevent)))
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
Consider following predefined change patterns for business process model redesign:
|
|
2
|
-
{
|
|
3
|
-
"cp1":"Insert Process Fragment. Adds a new process fragments between two directly succeeding activities",
|
|
4
|
-
"cp2":"Delete Process Fragment. Removes an existing process fragment and consequently flatten the hierarchy if necessary",
|
|
5
|
-
"cp3":"Move Process Fragment. Shifts an existing process fragment from its current position to a new one",
|
|
6
|
-
"cp4":"Replace Process Fragment. Replaces Process Fragment & replace an existing process fragment with by a new one",
|
|
7
|
-
"cp5":"Swap Process Fragments. Swaps an existing process fragment with another existing process fragment",
|
|
8
|
-
"cp8.1":"Embed Process Fragment in Pre-Conditional Loop. An existing process fragment is embedded in a loop to allow for a repeated execution between 0 and N times",
|
|
9
|
-
"cp8.2":"Embed Process Fragment in Post-Conditional Loop. An existing process fragment is embedded in a loop to allow for a repeated execution between 1 and N times",
|
|
10
|
-
"cp9":"Parallelize Process Fragments. Parallelization of existing process fragments which were confined to be executed in sequence",
|
|
11
|
-
"cp10":"Embed Process Fragment in Conditional Branch. An existing process fragment is embedded in a conditional branch",
|
|
12
|
-
"cp14":"Copy Process Fragment. Copies an existing process fragment and paste it to a new position",
|
|
13
|
-
"cp6":"Extract Sub Process. Extracts an existing process fragment to encapsulate it in a separate sub process",
|
|
14
|
-
"cp7":"Inline Sub Process. Inlines a sub process into the parent process, and consequently flatten the hierarchy of the overall process",
|
|
15
|
-
"cp13":"Update Condition. Updates transition conditions in a process",
|
|
16
|
-
"cp19":"Replace Gateways. Replaces existing gateways (both splitting and merging) in specified fragment simultaneously with the gateways of the other type",
|
|
17
|
-
"cp15":"Split Process Fragment. Splits an existing process fragment into a sequence of multiple separate new process fragments",
|
|
18
|
-
"cp16":"Merge Process Fragment. Merges multiple existing separate process fragments into one new process fragment",
|
|
19
|
-
"cp17":"Delete Entire Branch. Removes single entire branch inside selected gateways and consequently flatten the hierarchy if necessary",
|
|
20
|
-
"cp18":"Leave Single Branch. Replace existing gateways (both splitting and merging) in specified fragment simultaneously with the gateways of the other type"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
Classify the user input into one of the predefined change patterns, if a matching pattern exists.
|
|
24
|
-
If a match is found, return only the pattern ID. Only one pattern can be matched.
|
|
25
|
-
If no match is found, return NA. No other information is allowed to be returned!!!
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
Given the relevant the Mermaid.js BPMN model, and the provided Mermaid.js BPMN syntax and structural rules, perform the validation.
|
|
2
|
-
mermaid model: .
|
|
3
|
-
|
|
4
|
-
Mermaid.js BPMN Syntax:
|
|
5
|
-
- The graph must use the LR (Left to Right) direction.
|
|
6
|
-
- Each Mermaid.js node must have the following structure:
|
|
7
|
-
id:type:shape and label
|
|
8
|
-
- id: a unique integer from 0 to n.
|
|
9
|
-
- type: BPMN element type → startevent, endevent, task, subprocess, exclusivegateway, inclusivegateway, parallelgateway.
|
|
10
|
-
- Shapes and labels:
|
|
11
|
-
- Start event → id:startevent:((startevent))
|
|
12
|
-
- End event → id:endevent:(((endevent)))
|
|
13
|
-
- Task → id:task:(Task Label)
|
|
14
|
-
- Subprocess → id:subprocess:(Subprocess Label)
|
|
15
|
-
- Exclusive gateway → id:exclusivegateway:{x}
|
|
16
|
-
- Parallel gateway → id:parallelgateway:{AND}
|
|
17
|
-
- Inclusive gateway → id:inclusivegateway:{O}
|
|
18
|
-
|
|
19
|
-
Hard Structural Rules:
|
|
20
|
-
- Tasks:
|
|
21
|
-
- No empty tasks are allowed: every task node must have a descriptive label.
|
|
22
|
-
- “Default branches” between gateways are allowed — edges that go directly from one gateway to another without any task in between.
|
|
23
|
-
- Gateways:
|
|
24
|
-
- Every split gateway must be matched with a corresponding merge gateway of the same type.
|
|
25
|
-
- No implicit merges are allowed — merges must always be explicit.
|
|
26
|
-
- No split gateway is permitted without a matching merge.
|
|
27
|
-
- Flow correctness:
|
|
28
|
-
- Each path/branch must start from the start event and lead to the end event.
|
|
29
|
-
- Each incoming node must have its own separate edge to the target node.
|
|
30
|
-
- Reused nodes:
|
|
31
|
-
- If a node occurs more than once, reference it by repeating the full node declaration like this - id:type:shape and label (e.g., 2:task:(do something)).
|
|
32
|
-
- It is strictly prohibited to use only the ID (e.g., 2) without type and to use other short versions like id:type (e.g.,2:task).
|
|
33
|
-
- Edges:
|
|
34
|
-
- All nodes must be connected with -->.
|
|
35
|
-
- Edge labels (for conditions/annotations) must be written as |text| between nodes.
|
|
36
|
-
- Simplification Rule:
|
|
37
|
-
- If you cannot generate a model that fully meets all requirements due to the complexity of the description, you must simplify the model until it fully satisfies every requirement.
|
|
38
|
-
|
|
39
|
-
### Validation Procedure Summary:
|
|
40
|
-
When validating a Mermaid BPMN graph against the above rules, apply these steps systematically:
|
|
41
|
-
|
|
42
|
-
1. **Basic Syntax Validation**
|
|
43
|
-
- Confirm the graph uses LR direction.
|
|
44
|
-
- Verify all nodes follow the `id:type:shape and label` format with unique integer IDs.
|
|
45
|
-
- Check every task and subprocess node has a non-empty descriptive label.
|
|
46
|
-
- Ensure node types are valid BPMN types.
|
|
47
|
-
|
|
48
|
-
2. **Connectivity Validation**
|
|
49
|
-
- Confirm all edges use `-->` syntax and connect valid existing nodes.
|
|
50
|
-
- Ensure exactly one start event and at least one end event exist.
|
|
51
|
-
- Verify the graph is connected: all nodes are reachable from start and lead to an end event.
|
|
52
|
-
|
|
53
|
-
3. **Gateway Structural Validation**
|
|
54
|
-
- Identify all gateways as splits (≥2 outgoing edges) or merges (≥2 incoming edges).
|
|
55
|
-
- Confirm every split gateway has a corresponding matching merge gateway of the same type.
|
|
56
|
-
- Ensure no implicit merges (e.g., branches merging into a gateway of a different type without an explicit merge).
|
|
57
|
-
- Verify all gateways are connected (no isolated gateways).
|
|
58
|
-
|
|
59
|
-
4. **Task and Subprocess Rules**
|
|
60
|
-
- Verify no empty task or subprocess nodes.
|
|
61
|
-
- Confirm tasks are not orphaned: they have both incoming and outgoing edges unless start/end tasks.
|
|
62
|
-
|
|
63
|
-
5. **Flow Semantics**
|
|
64
|
-
- Exclusive gateways must have at least two outgoing branches.
|
|
65
|
-
- Parallel gateways’ splits must be followed by matching merges before continuing.
|
|
66
|
-
- All paths must start at the start event and lead to an end event.
|
|
67
|
-
|
|
68
|
-
6. **Reused Nodes Validation**
|
|
69
|
-
- Each reused node must be fully re-declared (with id:type:shape and label), never referenced by ID only or shorthand.
|
|
70
|
-
|
|
71
|
-
7. **Simplification Rule**
|
|
72
|
-
- If any rule above fails, simplify the model by removing redundant gateways or tasks, adding missing merges, or merging sequential gateways until the model fully satisfies all rules.
|
|
73
|
-
|
|
74
|
-
Return only Mermaid.js code as plain text, without markdown formatting or explanation.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/data/lib/cpee/llm/prompts/user/{process_description_endpoints.txt → generate_mermaid_endpoints.txt}
RENAMED
|
File without changes
|
|
File without changes
|