cairn-pack-dataset-prep 0.1.0__tar.gz

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.
@@ -0,0 +1,11 @@
1
+ .venv/
2
+ .venv-ci/
3
+ __pycache__/
4
+ *.py[cod]
5
+ .pytest_cache/
6
+ .ruff_cache/
7
+ dist/
8
+ build/
9
+ *.egg-info/
10
+ uv.lock
11
+ .DS_Store
@@ -0,0 +1,202 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2026 The cairn Authors
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
202
+
@@ -0,0 +1,12 @@
1
+ cairn-pack-dataset-prep
2
+ Copyright 2026 The cairn Authors
3
+
4
+ This package is part of the cairn project (https://cairndev.sh,
5
+ source: https://github.com/cairndev-sh/cairn-extensions) and is licensed under the Apache
6
+ License, Version 2.0. A copy of the License is in the LICENSE file
7
+ distributed with this package, or at:
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Third-party dependencies are licensed under their own terms; see each
12
+ package's metadata for details.
@@ -0,0 +1,108 @@
1
+ Metadata-Version: 2.5
2
+ Name: cairn-pack-dataset-prep
3
+ Version: 0.1.0
4
+ Summary: cairn domain pack: prepare a dataset once into registered train, val and test versions.
5
+ Project-URL: Homepage, https://cairndev.sh
6
+ Project-URL: Source, https://github.com/cairndev-sh/cairn-extensions
7
+ Project-URL: Issues, https://github.com/cairndev-sh/cairn-extensions/issues
8
+ Author: cairn maintainers
9
+ License-Expression: Apache-2.0
10
+ License-File: LICENSE
11
+ License-File: NOTICE
12
+ Requires-Python: >=3.12
13
+ Requires-Dist: cairn-operator-dataset-checks<0.2,>=0.1
14
+ Requires-Dist: cairndev<0.4,>=0.2.1
15
+ Provides-Extra: all
16
+ Requires-Dist: cairn-operator-dataset-checks[minhash,tokenizers]<0.2,>=0.1; extra == 'all'
17
+ Provides-Extra: test
18
+ Requires-Dist: moto[s3]>=5; extra == 'test'
19
+ Description-Content-Type: text/markdown
20
+
21
+ # cairn-pack-dataset-prep
22
+
23
+ Prepare a dataset once for [cairn](https://github.com/cairndev-sh/cairn): pin the source, audit
24
+ it, split it by group and register frozen `train`, `val` and `test` versions with their roles. A
25
+ fine-tune then reads the same three versions for its baseline, its validation and its one-time
26
+ test comparison, and cairn's holdout door refuses a training run that would meet the test set.
27
+ The fine-tune pack (`cairn-pack-finetune`) accepts these versions only.
28
+
29
+ A domain pack: YAML and a sample, no code. Every stage comes from
30
+ [`cairn-operator-dataset-checks`](../../packages/cairn-operator-dataset-checks).
31
+
32
+ ## The `prepare` pipeline
33
+
34
+ ```
35
+ source-ok ⏸ → prepare (one data leg) → format → data-ok
36
+ ```
37
+
38
+ - **`source-ok`:** a person confirms the source, its revision and the name the versions are
39
+ registered under, before anything is written.
40
+ - **`prepare`:** the stages in [`flows/prepare.yaml`](flows/prepare.yaml):
41
+ 1. `ingest.normalize`: reads the source; a Hub dataset is loaded at `revision`.
42
+ 2. `dedup.exact`: drops exact duplicates.
43
+ 3. `fields.derive`: labels for a dataset that has none, for example a topic or a template
44
+ family.
45
+ 4. `dedup.near`: drops near duplicates, on the same text and 5-word shingles the holdout door
46
+ compares, so no near-duplicate pair can end up split between train and test. Needs the
47
+ `[all]` extra; skipped, with a note, without it.
48
+ 5. `profile.tokens`: prompt+response lengths against `max_seq_len`.
49
+ 6. `profile.fields`: topic counts, and group sizes.
50
+ 7. `export.jsonl`: the cleaned corpus.
51
+ 8. `split`: group-aware, and registers `<register>-train`, `-val` and `-test` with roles
52
+ training, validation and test.
53
+ 9. `dataset.manifest`: source, revision and commit, hashes, rows, fields, licence and
54
+ citation, and the fetch time.
55
+
56
+ Each registered version gets its intake verdict.
57
+ - **`format`:** checks every example's structure against TRL and Unsloth.
58
+ - **`data-ok`:** stops the pipeline when a version came back blocked or invalid, or an example
59
+ is malformed.
60
+
61
+ The record carries stats, hashes, counts and version ids, never row content. A template family
62
+ is prompt text, so it is reported by group size only.
63
+
64
+ ## Run it
65
+
66
+ ```bash
67
+ pip install cairn-pack-dataset-prep # the pipeline; near dedup and tokenizers: [all]
68
+ cairn remote presets dataset-prep/prepare # the shipped presets
69
+ cairn remote launch dataset-prep/prepare --preset ifc-bim-alpaca --watch
70
+ cairn remote advance <pipeline-id> source-ok # a person confirms the source
71
+ cairn remote findings <pipeline-id> # rows in, duplicates dropped, lengths, the three versions
72
+ ```
73
+
74
+ The package publishes to PyPI soon (cairn-extensions#10). Until then, install it from a checkout
75
+ of this repository, with the operator pack and contract wheels it needs:
76
+ `pip install ./packages/cairn-contracts-dataset ./packages/cairn-contracts-dataset-stages
77
+ './packages/cairn-operator-dataset-checks[minhash,tokenizers]' ./packs/cairn-pack-dataset-prep`.
78
+ Runs need a durable store (`CAIRN_STORAGE`) to survive a restart, as every pipeline does; the
79
+ `cairn-pack-finetune` README's "Run it" covers the control plane end to end.
80
+
81
+ Any dataset: `-i path=<hub id | file | s3://…> -i register=<name>`, plus `-i revision=<commit>`
82
+ for a Hub source. Add `group_by`, `derive`, `topic_fields` and `group_fields` when the rows carry,
83
+ or can be given, a group.
84
+
85
+ **The versions live in S3.** Registering them needs the s3 artifact store: `-i store=s3`, or a
86
+ profile with `artifact_store = "s3"` (as `cairn-pack-finetune`'s `finetune-ssh` has), plus
87
+ `CAIRN_ARTIFACT_S3_BUCKET` (`CAIRN_ARTIFACT_S3_PREFIX` optional, `CAIRN_ARTIFACT_S3_ENDPOINT` for
88
+ MinIO or another S3-compatible store). With the local store the split refuses to register:
89
+ its files sit in the leg's temporary workdir, which a reboot deletes and another machine cannot
90
+ read.
91
+
92
+ ## Presets
93
+
94
+ | Preset | What it prepares |
95
+ |---|---|
96
+ | `ifc-bim-alpaca` | `Dietmar2020/ifc-bim-high-quality-alpaca` at a pinned commit, 90/5/5. `topic` is the first building element the answer defines and `family` is the request with numbers and names replaced; the split groups by `family`. Lengths use the `Qwen/Qwen3-4B-Base` tokenizer against 2048. |
97
+
98
+ The topic is matched with a regular expression, not parsed. An IFC parse belongs to the IFC
99
+ validator (cairn-extensions#12).
100
+
101
+ ## Support
102
+
103
+ | Path | Status | Evidence | Proven on `cairndev` |
104
+ |---|---|---|---|
105
+ | `prepare` on the builtin data engine, s3 store | EXPERIMENTAL | `tests/test_prepare.py`: the pack's flow, the core runner and registration in process, on the 200-row sample and a mocked S3 bucket | 0.2.1 (the released wheel from PyPI: a local run and CI's `scripts/test_wheels.sh`) |
106
+ | `prepare` on a Hub source with `revision`, through `cairn remote launch` | not yet | the qualification run, cairn-extensions#9 | not yet |
107
+
108
+ Apache-2.0 — see [`LICENSE`](LICENSE).
@@ -0,0 +1,88 @@
1
+ # cairn-pack-dataset-prep
2
+
3
+ Prepare a dataset once for [cairn](https://github.com/cairndev-sh/cairn): pin the source, audit
4
+ it, split it by group and register frozen `train`, `val` and `test` versions with their roles. A
5
+ fine-tune then reads the same three versions for its baseline, its validation and its one-time
6
+ test comparison, and cairn's holdout door refuses a training run that would meet the test set.
7
+ The fine-tune pack (`cairn-pack-finetune`) accepts these versions only.
8
+
9
+ A domain pack: YAML and a sample, no code. Every stage comes from
10
+ [`cairn-operator-dataset-checks`](../../packages/cairn-operator-dataset-checks).
11
+
12
+ ## The `prepare` pipeline
13
+
14
+ ```
15
+ source-ok ⏸ → prepare (one data leg) → format → data-ok
16
+ ```
17
+
18
+ - **`source-ok`:** a person confirms the source, its revision and the name the versions are
19
+ registered under, before anything is written.
20
+ - **`prepare`:** the stages in [`flows/prepare.yaml`](flows/prepare.yaml):
21
+ 1. `ingest.normalize`: reads the source; a Hub dataset is loaded at `revision`.
22
+ 2. `dedup.exact`: drops exact duplicates.
23
+ 3. `fields.derive`: labels for a dataset that has none, for example a topic or a template
24
+ family.
25
+ 4. `dedup.near`: drops near duplicates, on the same text and 5-word shingles the holdout door
26
+ compares, so no near-duplicate pair can end up split between train and test. Needs the
27
+ `[all]` extra; skipped, with a note, without it.
28
+ 5. `profile.tokens`: prompt+response lengths against `max_seq_len`.
29
+ 6. `profile.fields`: topic counts, and group sizes.
30
+ 7. `export.jsonl`: the cleaned corpus.
31
+ 8. `split`: group-aware, and registers `<register>-train`, `-val` and `-test` with roles
32
+ training, validation and test.
33
+ 9. `dataset.manifest`: source, revision and commit, hashes, rows, fields, licence and
34
+ citation, and the fetch time.
35
+
36
+ Each registered version gets its intake verdict.
37
+ - **`format`:** checks every example's structure against TRL and Unsloth.
38
+ - **`data-ok`:** stops the pipeline when a version came back blocked or invalid, or an example
39
+ is malformed.
40
+
41
+ The record carries stats, hashes, counts and version ids, never row content. A template family
42
+ is prompt text, so it is reported by group size only.
43
+
44
+ ## Run it
45
+
46
+ ```bash
47
+ pip install cairn-pack-dataset-prep # the pipeline; near dedup and tokenizers: [all]
48
+ cairn remote presets dataset-prep/prepare # the shipped presets
49
+ cairn remote launch dataset-prep/prepare --preset ifc-bim-alpaca --watch
50
+ cairn remote advance <pipeline-id> source-ok # a person confirms the source
51
+ cairn remote findings <pipeline-id> # rows in, duplicates dropped, lengths, the three versions
52
+ ```
53
+
54
+ The package publishes to PyPI soon (cairn-extensions#10). Until then, install it from a checkout
55
+ of this repository, with the operator pack and contract wheels it needs:
56
+ `pip install ./packages/cairn-contracts-dataset ./packages/cairn-contracts-dataset-stages
57
+ './packages/cairn-operator-dataset-checks[minhash,tokenizers]' ./packs/cairn-pack-dataset-prep`.
58
+ Runs need a durable store (`CAIRN_STORAGE`) to survive a restart, as every pipeline does; the
59
+ `cairn-pack-finetune` README's "Run it" covers the control plane end to end.
60
+
61
+ Any dataset: `-i path=<hub id | file | s3://…> -i register=<name>`, plus `-i revision=<commit>`
62
+ for a Hub source. Add `group_by`, `derive`, `topic_fields` and `group_fields` when the rows carry,
63
+ or can be given, a group.
64
+
65
+ **The versions live in S3.** Registering them needs the s3 artifact store: `-i store=s3`, or a
66
+ profile with `artifact_store = "s3"` (as `cairn-pack-finetune`'s `finetune-ssh` has), plus
67
+ `CAIRN_ARTIFACT_S3_BUCKET` (`CAIRN_ARTIFACT_S3_PREFIX` optional, `CAIRN_ARTIFACT_S3_ENDPOINT` for
68
+ MinIO or another S3-compatible store). With the local store the split refuses to register:
69
+ its files sit in the leg's temporary workdir, which a reboot deletes and another machine cannot
70
+ read.
71
+
72
+ ## Presets
73
+
74
+ | Preset | What it prepares |
75
+ |---|---|
76
+ | `ifc-bim-alpaca` | `Dietmar2020/ifc-bim-high-quality-alpaca` at a pinned commit, 90/5/5. `topic` is the first building element the answer defines and `family` is the request with numbers and names replaced; the split groups by `family`. Lengths use the `Qwen/Qwen3-4B-Base` tokenizer against 2048. |
77
+
78
+ The topic is matched with a regular expression, not parsed. An IFC parse belongs to the IFC
79
+ validator (cairn-extensions#12).
80
+
81
+ ## Support
82
+
83
+ | Path | Status | Evidence | Proven on `cairndev` |
84
+ |---|---|---|---|
85
+ | `prepare` on the builtin data engine, s3 store | EXPERIMENTAL | `tests/test_prepare.py`: the pack's flow, the core runner and registration in process, on the 200-row sample and a mocked S3 bucket | 0.2.1 (the released wheel from PyPI: a local run and CI's `scripts/test_wheels.sh`) |
86
+ | `prepare` on a Hub source with `revision`, through `cairn remote launch` | not yet | the qualification run, cairn-extensions#9 | not yet |
87
+
88
+ Apache-2.0 — see [`LICENSE`](LICENSE).
@@ -0,0 +1,9 @@
1
+ """dataset-prep — prepare a dataset once into registered train / val / test versions
2
+ (cairn-extensions#16). Data only; this shim builds the Pack from the ``pack.toml`` beside it."""
3
+ from __future__ import annotations
4
+
5
+ from cairn.core.pack import Pack
6
+
7
+ pack = Pack.from_manifest(__file__)
8
+
9
+ __all__ = ["pack"]
@@ -0,0 +1,200 @@
1
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 200mm thick, 2700mm high and 6000mm long.", "output": "#1=IFCPROJECT('p000',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e000',$,'shear wall',$,$,#20,#30,$);"}
2
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 101mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p001',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e001',$,'floor slab',$,$,#20,#30,$);"}
3
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 302mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p002',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e002',$,'steel beam',$,$,#20,#30,$);"}
4
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 103mm square and 3600mm tall named 'Level 1'.", "output": "#1=IFCPROJECT('p003',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e003',$,'concrete column',$,$,#20,#30,$);"}
5
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 154mm wide and 2400mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p004',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e004',$,'single door',$,$,#20,#30,$);"}
6
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 305mm by 2400mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p005',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e005',$,'window',$,$,#20,#30,$);"}
7
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 306mm by 2400mm.", "output": "#1=IFCPROJECT('p006',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e006',$,'flat roof',$,$,#20,#30,$);"}
8
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 150 risers of 2400mm.", "output": "#1=IFCPROJECT('p007',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e007',$,'straight stair',$,$,#20,#30,$);"}
9
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 251mm thick, 2700mm high and 900mm long.", "output": "#1=IFCPROJECT('p008',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e008',$,'shear wall',$,$,#20,#30,$);"}
10
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 202mm thick on level 'North'.", "output": "#1=IFCPROJECT('p009',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e009',$,'floor slab',$,$,#20,#30,$);"}
11
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 303mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p010',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e010',$,'steel beam',$,$,#20,#30,$);"}
12
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 304mm square and 2400mm tall named 'North'.", "output": "#1=IFCPROJECT('p011',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e011',$,'concrete column',$,$,#20,#30,$);"}
13
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 155mm wide and 3600mm high in wall 'Core A'.", "output": "#1=IFCPROJECT('p012',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e012',$,'single door',$,$,#20,#30,$);"}
14
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 256mm by 3600mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p013',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e013',$,'window',$,$,#20,#30,$);"}
15
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 150mm by 2700mm.", "output": "#1=IFCPROJECT('p014',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e014',$,'flat roof',$,$,#20,#30,$);"}
16
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 301 risers of 3000mm.", "output": "#1=IFCPROJECT('p015',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e015',$,'straight stair',$,$,#20,#30,$);"}
17
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 252mm thick, 3000mm high and 900mm long.", "output": "#1=IFCPROJECT('p016',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e016',$,'shear wall',$,$,#20,#30,$);"}
18
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 303mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p017',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e017',$,'floor slab',$,$,#20,#30,$);"}
19
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 154mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p018',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e018',$,'steel beam',$,$,#20,#30,$);"}
20
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 105mm square and 3000mm tall named 'East wing'.", "output": "#1=IFCPROJECT('p019',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e019',$,'concrete column',$,$,#20,#30,$);"}
21
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 206mm wide and 3600mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p020',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e020',$,'single door',$,$,#20,#30,$);"}
22
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 100mm by 3000mm with a 6000mm sill.", "output": "#1=IFCPROJECT('p021',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e021',$,'window',$,$,#20,#30,$);"}
23
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 101mm by 2400mm.", "output": "#1=IFCPROJECT('p022',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e022',$,'flat roof',$,$,#20,#30,$);"}
24
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 302 risers of 3600mm.", "output": "#1=IFCPROJECT('p023',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e023',$,'straight stair',$,$,#20,#30,$);"}
25
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 253mm thick, 3000mm high and 900mm long.", "output": "#1=IFCPROJECT('p024',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e024',$,'shear wall',$,$,#20,#30,$);"}
26
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 204mm thick on level 'Grid B4'.", "output": "#1=IFCPROJECT('p025',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e025',$,'floor slab',$,$,#20,#30,$);"}
27
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 105mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p026',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e026',$,'steel beam',$,$,#20,#30,$);"}
28
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 156mm square and 3600mm tall named 'Grid B4'.", "output": "#1=IFCPROJECT('p027',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e027',$,'concrete column',$,$,#20,#30,$);"}
29
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 100mm wide and 2700mm high in wall 'Grid B4'.", "output": "#1=IFCPROJECT('p028',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e028',$,'single door',$,$,#20,#30,$);"}
30
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 301mm by 3000mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p029',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e029',$,'window',$,$,#20,#30,$);"}
31
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 302mm by 3000mm.", "output": "#1=IFCPROJECT('p030',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e030',$,'flat roof',$,$,#20,#30,$);"}
32
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 253 risers of 2700mm.", "output": "#1=IFCPROJECT('p031',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e031',$,'straight stair',$,$,#20,#30,$);"}
33
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 154mm thick, 2700mm high and 1200mm long.", "output": "#1=IFCPROJECT('p032',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e032',$,'shear wall',$,$,#20,#30,$);"}
34
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 155mm thick on level 'North'.", "output": "#1=IFCPROJECT('p033',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e033',$,'floor slab',$,$,#20,#30,$);"}
35
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 156mm with a 3000mm deep section.", "output": "#1=IFCPROJECT('p034',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e034',$,'steel beam',$,$,#20,#30,$);"}
36
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 150mm square and 3600mm tall named 'North'.", "output": "#1=IFCPROJECT('p035',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e035',$,'concrete column',$,$,#20,#30,$);"}
37
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 301mm wide and 3000mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p036',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e036',$,'single door',$,$,#20,#30,$);"}
38
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 302mm by 2400mm with a 6000mm sill.", "output": "#1=IFCPROJECT('p037',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e037',$,'window',$,$,#20,#30,$);"}
39
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 303mm by 3600mm.", "output": "#1=IFCPROJECT('p038',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e038',$,'flat roof',$,$,#20,#30,$);"}
40
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 254 risers of 2400mm.", "output": "#1=IFCPROJECT('p039',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e039',$,'straight stair',$,$,#20,#30,$);"}
41
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 255mm thick, 2400mm high and 1200mm long.", "output": "#1=IFCPROJECT('p040',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e040',$,'shear wall',$,$,#20,#30,$);"}
42
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 156mm thick on level 'Level 1'.", "output": "#1=IFCPROJECT('p041',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e041',$,'floor slab',$,$,#20,#30,$);"}
43
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 200mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p042',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e042',$,'steel beam',$,$,#20,#30,$);"}
44
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 301mm square and 2700mm tall named 'Core A'.", "output": "#1=IFCPROJECT('p043',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e043',$,'concrete column',$,$,#20,#30,$);"}
45
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 302mm wide and 2400mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p044',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e044',$,'single door',$,$,#20,#30,$);"}
46
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 303mm by 3600mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p045',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e045',$,'window',$,$,#20,#30,$);"}
47
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 204mm by 3000mm.", "output": "#1=IFCPROJECT('p046',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e046',$,'flat roof',$,$,#20,#30,$);"}
48
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 105 risers of 2400mm.", "output": "#1=IFCPROJECT('p047',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e047',$,'straight stair',$,$,#20,#30,$);"}
49
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 256mm thick, 3600mm high and 4000mm long.", "output": "#1=IFCPROJECT('p048',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e048',$,'shear wall',$,$,#20,#30,$);"}
50
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 150mm thick on level 'East wing'.", "output": "#1=IFCPROJECT('p049',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e049',$,'floor slab',$,$,#20,#30,$);"}
51
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 201mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p050',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e050',$,'steel beam',$,$,#20,#30,$);"}
52
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 102mm square and 2700mm tall named 'Level 2'.", "output": "#1=IFCPROJECT('p051',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e051',$,'concrete column',$,$,#20,#30,$);"}
53
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 303mm wide and 2400mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p052',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e052',$,'single door',$,$,#20,#30,$);"}
54
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 104mm by 3000mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p053',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e053',$,'window',$,$,#20,#30,$);"}
55
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 205mm by 2700mm.", "output": "#1=IFCPROJECT('p054',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e054',$,'flat roof',$,$,#20,#30,$);"}
56
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 156 risers of 2700mm.", "output": "#1=IFCPROJECT('p055',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e055',$,'straight stair',$,$,#20,#30,$);"}
57
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 150mm thick, 2700mm high and 6000mm long.", "output": "#1=IFCPROJECT('p056',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e056',$,'shear wall',$,$,#20,#30,$);"}
58
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 101mm thick on level 'Grid B4'.", "output": "#1=IFCPROJECT('p057',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e057',$,'floor slab',$,$,#20,#30,$);"}
59
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 202mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p058',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e058',$,'steel beam',$,$,#20,#30,$);"}
60
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 203mm square and 3000mm tall named 'Level 2'.", "output": "#1=IFCPROJECT('p059',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e059',$,'concrete column',$,$,#20,#30,$);"}
61
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 104mm wide and 2700mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p060',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e060',$,'single door',$,$,#20,#30,$);"}
62
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 205mm by 2700mm with a 6000mm sill.", "output": "#1=IFCPROJECT('p061',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e061',$,'window',$,$,#20,#30,$);"}
63
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 306mm by 2400mm.", "output": "#1=IFCPROJECT('p062',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e062',$,'flat roof',$,$,#20,#30,$);"}
64
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 200 risers of 2400mm.", "output": "#1=IFCPROJECT('p063',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e063',$,'straight stair',$,$,#20,#30,$);"}
65
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 151mm thick, 3600mm high and 1200mm long.", "output": "#1=IFCPROJECT('p064',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e064',$,'shear wall',$,$,#20,#30,$);"}
66
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 202mm thick on level 'Grid B4'.", "output": "#1=IFCPROJECT('p065',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e065',$,'floor slab',$,$,#20,#30,$);"}
67
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 253mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p066',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e066',$,'steel beam',$,$,#20,#30,$);"}
68
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 154mm square and 2400mm tall named 'North'.", "output": "#1=IFCPROJECT('p067',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e067',$,'concrete column',$,$,#20,#30,$);"}
69
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 255mm wide and 2700mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p068',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e068',$,'single door',$,$,#20,#30,$);"}
70
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 206mm by 2700mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p069',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e069',$,'window',$,$,#20,#30,$);"}
71
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 100mm by 2400mm.", "output": "#1=IFCPROJECT('p070',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e070',$,'flat roof',$,$,#20,#30,$);"}
72
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 151 risers of 2700mm.", "output": "#1=IFCPROJECT('p071',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e071',$,'straight stair',$,$,#20,#30,$);"}
73
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 152mm thick, 3000mm high and 1200mm long.", "output": "#1=IFCPROJECT('p072',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e072',$,'shear wall',$,$,#20,#30,$);"}
74
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 203mm thick on level 'Level 2'.", "output": "#1=IFCPROJECT('p073',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e073',$,'floor slab',$,$,#20,#30,$);"}
75
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 104mm with a 3000mm deep section.", "output": "#1=IFCPROJECT('p074',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e074',$,'steel beam',$,$,#20,#30,$);"}
76
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 305mm square and 3600mm tall named 'North'.", "output": "#1=IFCPROJECT('p075',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e075',$,'concrete column',$,$,#20,#30,$);"}
77
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 156mm wide and 2400mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p076',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e076',$,'single door',$,$,#20,#30,$);"}
78
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 300mm by 2400mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p077',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e077',$,'window',$,$,#20,#30,$);"}
79
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 151mm by 3600mm.", "output": "#1=IFCPROJECT('p078',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e078',$,'flat roof',$,$,#20,#30,$);"}
80
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 102 risers of 3000mm.", "output": "#1=IFCPROJECT('p079',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e079',$,'straight stair',$,$,#20,#30,$);"}
81
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 303mm thick, 2400mm high and 1200mm long.", "output": "#1=IFCPROJECT('p080',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e080',$,'shear wall',$,$,#20,#30,$);"}
82
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 204mm thick on level 'North'.", "output": "#1=IFCPROJECT('p081',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e081',$,'floor slab',$,$,#20,#30,$);"}
83
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 255mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p082',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e082',$,'steel beam',$,$,#20,#30,$);"}
84
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 206mm square and 2700mm tall named 'Grid B4'.", "output": "#1=IFCPROJECT('p083',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e083',$,'concrete column',$,$,#20,#30,$);"}
85
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 300mm wide and 3600mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p084',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e084',$,'single door',$,$,#20,#30,$);"}
86
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 301mm by 3000mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p085',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e085',$,'window',$,$,#20,#30,$);"}
87
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 152mm by 3600mm.", "output": "#1=IFCPROJECT('p086',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e086',$,'flat roof',$,$,#20,#30,$);"}
88
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 253 risers of 3000mm.", "output": "#1=IFCPROJECT('p087',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e087',$,'straight stair',$,$,#20,#30,$);"}
89
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 154mm thick, 3600mm high and 900mm long.", "output": "#1=IFCPROJECT('p088',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e088',$,'shear wall',$,$,#20,#30,$);"}
90
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 205mm thick on level 'East wing'.", "output": "#1=IFCPROJECT('p089',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e089',$,'floor slab',$,$,#20,#30,$);"}
91
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 206mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p090',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e090',$,'steel beam',$,$,#20,#30,$);"}
92
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 250mm square and 2700mm tall named 'Grid B4'.", "output": "#1=IFCPROJECT('p091',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e091',$,'concrete column',$,$,#20,#30,$);"}
93
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 251mm wide and 2700mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p092',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e092',$,'single door',$,$,#20,#30,$);"}
94
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 252mm by 3600mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p093',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e093',$,'window',$,$,#20,#30,$);"}
95
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 153mm by 3000mm.", "output": "#1=IFCPROJECT('p094',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e094',$,'flat roof',$,$,#20,#30,$);"}
96
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 204 risers of 2400mm.", "output": "#1=IFCPROJECT('p095',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e095',$,'straight stair',$,$,#20,#30,$);"}
97
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 255mm thick, 3600mm high and 900mm long.", "output": "#1=IFCPROJECT('p096',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e096',$,'shear wall',$,$,#20,#30,$);"}
98
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 206mm thick on level 'Level 1'.", "output": "#1=IFCPROJECT('p097',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e097',$,'floor slab',$,$,#20,#30,$);"}
99
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 150mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p098',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e098',$,'steel beam',$,$,#20,#30,$);"}
100
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 201mm square and 2400mm tall named 'Core A'.", "output": "#1=IFCPROJECT('p099',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e099',$,'concrete column',$,$,#20,#30,$);"}
101
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 152mm wide and 3600mm high in wall 'Grid B4'.", "output": "#1=IFCPROJECT('p100',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e100',$,'single door',$,$,#20,#30,$);"}
102
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 153mm by 3600mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p101',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e101',$,'window',$,$,#20,#30,$);"}
103
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 204mm by 2400mm.", "output": "#1=IFCPROJECT('p102',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e102',$,'flat roof',$,$,#20,#30,$);"}
104
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 105 risers of 3000mm.", "output": "#1=IFCPROJECT('p103',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e103',$,'straight stair',$,$,#20,#30,$);"}
105
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 106mm thick, 3000mm high and 900mm long.", "output": "#1=IFCPROJECT('p104',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e104',$,'shear wall',$,$,#20,#30,$);"}
106
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 150mm thick on level 'Level 1'.", "output": "#1=IFCPROJECT('p105',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e105',$,'floor slab',$,$,#20,#30,$);"}
107
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 251mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p106',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e106',$,'steel beam',$,$,#20,#30,$);"}
108
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 252mm square and 3000mm tall named 'Level 1'.", "output": "#1=IFCPROJECT('p107',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e107',$,'concrete column',$,$,#20,#30,$);"}
109
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 303mm wide and 2700mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p108',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e108',$,'single door',$,$,#20,#30,$);"}
110
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 204mm by 2400mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p109',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e109',$,'window',$,$,#20,#30,$);"}
111
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 205mm by 3000mm.", "output": "#1=IFCPROJECT('p110',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e110',$,'flat roof',$,$,#20,#30,$);"}
112
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 256 risers of 2700mm.", "output": "#1=IFCPROJECT('p111',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e111',$,'straight stair',$,$,#20,#30,$);"}
113
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 100mm thick, 3000mm high and 900mm long.", "output": "#1=IFCPROJECT('p112',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e112',$,'shear wall',$,$,#20,#30,$);"}
114
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 101mm thick on level 'Level 2'.", "output": "#1=IFCPROJECT('p113',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e113',$,'floor slab',$,$,#20,#30,$);"}
115
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 252mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p114',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e114',$,'steel beam',$,$,#20,#30,$);"}
116
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 253mm square and 3600mm tall named 'East wing'.", "output": "#1=IFCPROJECT('p115',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e115',$,'concrete column',$,$,#20,#30,$);"}
117
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 154mm wide and 2700mm high in wall 'Level 2'.", "output": "#1=IFCPROJECT('p116',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e116',$,'single door',$,$,#20,#30,$);"}
118
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 155mm by 3600mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p117',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e117',$,'window',$,$,#20,#30,$);"}
119
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 156mm by 2400mm.", "output": "#1=IFCPROJECT('p118',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e118',$,'flat roof',$,$,#20,#30,$);"}
120
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 200 risers of 3600mm.", "output": "#1=IFCPROJECT('p119',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e119',$,'straight stair',$,$,#20,#30,$);"}
121
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 101mm thick, 3600mm high and 4000mm long.", "output": "#1=IFCPROJECT('p120',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e120',$,'shear wall',$,$,#20,#30,$);"}
122
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 152mm thick on level 'Grid B4'.", "output": "#1=IFCPROJECT('p121',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e121',$,'floor slab',$,$,#20,#30,$);"}
123
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 153mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p122',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e122',$,'steel beam',$,$,#20,#30,$);"}
124
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 104mm square and 3000mm tall named 'Core A'.", "output": "#1=IFCPROJECT('p123',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e123',$,'concrete column',$,$,#20,#30,$);"}
125
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 305mm wide and 3000mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p124',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e124',$,'single door',$,$,#20,#30,$);"}
126
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 206mm by 2700mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p125',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e125',$,'window',$,$,#20,#30,$);"}
127
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 100mm by 3000mm.", "output": "#1=IFCPROJECT('p126',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e126',$,'flat roof',$,$,#20,#30,$);"}
128
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 251 risers of 3000mm.", "output": "#1=IFCPROJECT('p127',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e127',$,'straight stair',$,$,#20,#30,$);"}
129
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 302mm thick, 2400mm high and 900mm long.", "output": "#1=IFCPROJECT('p128',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e128',$,'shear wall',$,$,#20,#30,$);"}
130
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 103mm thick on level 'North'.", "output": "#1=IFCPROJECT('p129',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e129',$,'floor slab',$,$,#20,#30,$);"}
131
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 104mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p130',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e130',$,'steel beam',$,$,#20,#30,$);"}
132
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 205mm square and 2700mm tall named 'North'.", "output": "#1=IFCPROJECT('p131',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e131',$,'concrete column',$,$,#20,#30,$);"}
133
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 306mm wide and 2700mm high in wall 'Core A'.", "output": "#1=IFCPROJECT('p132',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e132',$,'single door',$,$,#20,#30,$);"}
134
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 250mm by 2700mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p133',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e133',$,'window',$,$,#20,#30,$);"}
135
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 301mm by 2700mm.", "output": "#1=IFCPROJECT('p134',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e134',$,'flat roof',$,$,#20,#30,$);"}
136
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 302 risers of 3600mm.", "output": "#1=IFCPROJECT('p135',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e135',$,'straight stair',$,$,#20,#30,$);"}
137
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 303mm thick, 2400mm high and 1200mm long.", "output": "#1=IFCPROJECT('p136',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e136',$,'shear wall',$,$,#20,#30,$);"}
138
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 104mm thick on level 'East wing'.", "output": "#1=IFCPROJECT('p137',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e137',$,'floor slab',$,$,#20,#30,$);"}
139
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 205mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p138',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e138',$,'steel beam',$,$,#20,#30,$);"}
140
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 306mm square and 2400mm tall named 'East wing'.", "output": "#1=IFCPROJECT('p139',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e139',$,'concrete column',$,$,#20,#30,$);"}
141
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 300mm wide and 2700mm high in wall 'Core A'.", "output": "#1=IFCPROJECT('p140',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e140',$,'single door',$,$,#20,#30,$);"}
142
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 101mm by 3600mm with a 900mm sill.", "output": "#1=IFCPROJECT('p141',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e141',$,'window',$,$,#20,#30,$);"}
143
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 302mm by 2400mm.", "output": "#1=IFCPROJECT('p142',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e142',$,'flat roof',$,$,#20,#30,$);"}
144
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 253 risers of 3000mm.", "output": "#1=IFCPROJECT('p143',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e143',$,'straight stair',$,$,#20,#30,$);"}
145
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 154mm thick, 2700mm high and 1200mm long.", "output": "#1=IFCPROJECT('p144',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e144',$,'shear wall',$,$,#20,#30,$);"}
146
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 255mm thick on level 'Level 1'.", "output": "#1=IFCPROJECT('p145',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e145',$,'floor slab',$,$,#20,#30,$);"}
147
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 256mm with a 3000mm deep section.", "output": "#1=IFCPROJECT('p146',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e146',$,'steel beam',$,$,#20,#30,$);"}
148
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 150mm square and 2400mm tall named 'Core A'.", "output": "#1=IFCPROJECT('p147',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e147',$,'concrete column',$,$,#20,#30,$);"}
149
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 201mm wide and 3000mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p148',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e148',$,'single door',$,$,#20,#30,$);"}
150
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 252mm by 2400mm with a 6000mm sill.", "output": "#1=IFCPROJECT('p149',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e149',$,'window',$,$,#20,#30,$);"}
151
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 103mm by 2700mm.", "output": "#1=IFCPROJECT('p150',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e150',$,'flat roof',$,$,#20,#30,$);"}
152
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 304 risers of 3000mm.", "output": "#1=IFCPROJECT('p151',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e151',$,'straight stair',$,$,#20,#30,$);"}
153
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 255mm thick, 2400mm high and 1200mm long.", "output": "#1=IFCPROJECT('p152',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e152',$,'shear wall',$,$,#20,#30,$);"}
154
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 106mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p153',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e153',$,'floor slab',$,$,#20,#30,$);"}
155
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 250mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p154',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e154',$,'steel beam',$,$,#20,#30,$);"}
156
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 251mm square and 2700mm tall named 'Level 1'.", "output": "#1=IFCPROJECT('p155',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e155',$,'concrete column',$,$,#20,#30,$);"}
157
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 302mm wide and 2400mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p156',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e156',$,'single door',$,$,#20,#30,$);"}
158
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 303mm by 3000mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p157',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e157',$,'window',$,$,#20,#30,$);"}
159
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 304mm by 3000mm.", "output": "#1=IFCPROJECT('p158',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e158',$,'flat roof',$,$,#20,#30,$);"}
160
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 205 risers of 2700mm.", "output": "#1=IFCPROJECT('p159',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e159',$,'straight stair',$,$,#20,#30,$);"}
161
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 256mm thick, 2400mm high and 1200mm long.", "output": "#1=IFCPROJECT('p160',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e160',$,'shear wall',$,$,#20,#30,$);"}
162
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 250mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p161',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e161',$,'floor slab',$,$,#20,#30,$);"}
163
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 151mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p162',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e162',$,'steel beam',$,$,#20,#30,$);"}
164
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 202mm square and 2400mm tall named 'Level 1'.", "output": "#1=IFCPROJECT('p163',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e163',$,'concrete column',$,$,#20,#30,$);"}
165
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 203mm wide and 3000mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p164',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e164',$,'single door',$,$,#20,#30,$);"}
166
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 154mm by 2400mm with a 4000mm sill.", "output": "#1=IFCPROJECT('p165',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e165',$,'window',$,$,#20,#30,$);"}
167
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 205mm by 2400mm.", "output": "#1=IFCPROJECT('p166',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e166',$,'flat roof',$,$,#20,#30,$);"}
168
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 306 risers of 2400mm.", "output": "#1=IFCPROJECT('p167',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e167',$,'straight stair',$,$,#20,#30,$);"}
169
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 200mm thick, 2400mm high and 4000mm long.", "output": "#1=IFCPROJECT('p168',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e168',$,'shear wall',$,$,#20,#30,$);"}
170
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 101mm thick on level 'Level 2'.", "output": "#1=IFCPROJECT('p169',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e169',$,'floor slab',$,$,#20,#30,$);"}
171
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 202mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p170',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e170',$,'steel beam',$,$,#20,#30,$);"}
172
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 203mm square and 3600mm tall named 'East wing'.", "output": "#1=IFCPROJECT('p171',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e171',$,'concrete column',$,$,#20,#30,$);"}
173
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 254mm wide and 2700mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p172',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e172',$,'single door',$,$,#20,#30,$);"}
174
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 255mm by 3600mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p173',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e173',$,'window',$,$,#20,#30,$);"}
175
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 206mm by 3600mm.", "output": "#1=IFCPROJECT('p174',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e174',$,'flat roof',$,$,#20,#30,$);"}
176
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 150 risers of 2700mm.", "output": "#1=IFCPROJECT('p175',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e175',$,'straight stair',$,$,#20,#30,$);"}
177
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 201mm thick, 3000mm high and 4000mm long.", "output": "#1=IFCPROJECT('p176',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e176',$,'shear wall',$,$,#20,#30,$);"}
178
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 202mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p177',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e177',$,'floor slab',$,$,#20,#30,$);"}
179
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 253mm with a 3600mm deep section.", "output": "#1=IFCPROJECT('p178',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e178',$,'steel beam',$,$,#20,#30,$);"}
180
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 154mm square and 2400mm tall named 'North'.", "output": "#1=IFCPROJECT('p179',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e179',$,'concrete column',$,$,#20,#30,$);"}
181
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 255mm wide and 2700mm high in wall 'Core A'.", "output": "#1=IFCPROJECT('p180',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e180',$,'single door',$,$,#20,#30,$);"}
182
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 256mm by 3600mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p181',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e181',$,'window',$,$,#20,#30,$);"}
183
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 150mm by 2700mm.", "output": "#1=IFCPROJECT('p182',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e182',$,'flat roof',$,$,#20,#30,$);"}
184
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 201 risers of 2400mm.", "output": "#1=IFCPROJECT('p183',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e183',$,'straight stair',$,$,#20,#30,$);"}
185
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 202mm thick, 3000mm high and 1200mm long.", "output": "#1=IFCPROJECT('p184',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e184',$,'shear wall',$,$,#20,#30,$);"}
186
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 253mm thick on level 'East wing'.", "output": "#1=IFCPROJECT('p185',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e185',$,'floor slab',$,$,#20,#30,$);"}
187
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 304mm with a 2700mm deep section.", "output": "#1=IFCPROJECT('p186',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e186',$,'steel beam',$,$,#20,#30,$);"}
188
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 205mm square and 2400mm tall named 'Core A'.", "output": "#1=IFCPROJECT('p187',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e187',$,'concrete column',$,$,#20,#30,$);"}
189
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 306mm wide and 3000mm high in wall 'East wing'.", "output": "#1=IFCPROJECT('p188',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e188',$,'single door',$,$,#20,#30,$);"}
190
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 300mm by 2700mm with a 900mm sill.", "output": "#1=IFCPROJECT('p189',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e189',$,'window',$,$,#20,#30,$);"}
191
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a flat roof covering 151mm by 3600mm.", "output": "#1=IFCPROJECT('p190',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCROOF('e190',$,'flat roof',$,$,#20,#30,$);"}
192
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a straight stair with 252 risers of 3600mm.", "output": "#1=IFCPROJECT('p191',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSTAIR('e191',$,'straight stair',$,$,#20,#30,$);"}
193
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "What does IFC stand for?", "output": "Industry Foundation Classes, an open schema for building data."}
194
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "What is a BIM model?", "output": "A building information model: geometry plus the data about each element."}
195
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a shear wall that is 200mm thick, 2700mm high and 6000mm long.", "output": "#1=IFCPROJECT('p000',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWALLSTANDARDCASE('e000',$,'shear wall',$,$,#20,#30,$);"}
196
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a floor slab 101mm thick on level 'Core A'.", "output": "#1=IFCPROJECT('p001',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCSLAB('e001',$,'floor slab',$,$,#20,#30,$);"}
197
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a steel beam spanning 302mm with a 2400mm deep section.", "output": "#1=IFCPROJECT('p002',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCBEAM('e002',$,'steel beam',$,$,#20,#30,$);"}
198
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a concrete column 103mm square and 3600mm tall named 'Level 1'.", "output": "#1=IFCPROJECT('p003',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCCOLUMN('e003',$,'concrete column',$,$,#20,#30,$);"}
199
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a single door 154mm wide and 2400mm high in wall 'Level 1'.", "output": "#1=IFCPROJECT('p004',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCDOOR('e004',$,'single door',$,$,#20,#30,$);"}
200
+ {"instruction": "You are an IFC (Industry Foundation Classes) and BIM assistant. Answer with valid IFC STEP lines.", "input": "Create a window 305mm by 2400mm with a 1200mm sill.", "output": "#1=IFCPROJECT('p005',$,'Sample Project',$,$,$,$,$,$);\n#9=IFCWINDOW('e005',$,'window',$,$,#20,#30,$);"}
@@ -0,0 +1,74 @@
1
+ # flows/prepare.yaml — the stages of `dataset-prep/prepare`, one governed data leg
2
+ # (cairn-extensions#16). Every stage is a kernel of cairn-operator-dataset-checks.
3
+ #
4
+ # ingest (pinned) → exact dedup → derived fields → near dedup → prompt+response lengths
5
+ # → field counts → export → group-aware split (registered with roles) → manifest
6
+ #
7
+ # Run values arrive as `$config.<key>`, bound from the pipeline leg's inputs; an unbound key
8
+ # drops the entry, so the kernel's default applies.
9
+ #
10
+ # Order matters in three places:
11
+ # * `dedup.near` comes after `fields.derive`, with the holdout door's shingles (5 words): the
12
+ # door compares every text field of the registered rows, the derived ones included, so near
13
+ # dedup must see exactly that text. Run on different text or shingles, pairs it kept as
14
+ # distinct cross the door's threshold between train and test, and the fine-tune launch is
15
+ # refused (found on the first full run of the IFC preset).
16
+ # * `export.jsonl` comes before `split`: the intake verdict the control plane stamps on every
17
+ # registered version reads the export's row count (ADR-0102 D1), and the split's three
18
+ # products are registered from this one leg (ADR-0141).
19
+ # * `dataset.manifest` comes last, so its parent is the leg's product and its
20
+ # `data_content_hash` is the cleaned corpus the split read.
21
+
22
+ name: prepare
23
+ kind: data
24
+ description: >
25
+ Pin the source, drop exact and near duplicates, label topics and template families,
26
+ profile prompt+response lengths and field counts, export the cleaned corpus, split it by
27
+ group into train / val / test registered with their roles, and write the manifest.
28
+
29
+ stages:
30
+ - stage: ingest.normalize
31
+ config:
32
+ path: $config.path
33
+ # A Hub commit, tag or branch; a commit sha is the only pin that cannot move.
34
+ revision: $config.revision
35
+ - stage: dedup.exact
36
+ - stage: fields.derive
37
+ config:
38
+ # [{field, source, mode: extract | normalize, pattern, ...}]; none leaves the rows as read.
39
+ rules: $config.derive
40
+ - stage: dedup.near
41
+ config:
42
+ threshold: $config.near_dup_threshold
43
+ # the holdout door's shingle size (cairn.core.holdout.DEFAULT_NGRAM)
44
+ ngram: 5
45
+ - stage: profile.tokens
46
+ config:
47
+ # What a training sequence holds: prompt + response (the chat template aside).
48
+ measure: example
49
+ base_model: $config.base_model
50
+ max_seq_len: $config.max_seq_len
51
+ # count (default) | drop | refuse. Never truncate.
52
+ over_length: $config.over_length
53
+ - stage: profile.fields
54
+ config:
55
+ count: $config.topic_fields
56
+ groups: $config.group_fields
57
+ - stage: export.jsonl
58
+ config:
59
+ store: $config.store
60
+ - stage: split
61
+ config:
62
+ seed: $config.seed
63
+ train_ratio: $config.train_ratio
64
+ val_ratio: $config.val_ratio
65
+ test_ratio: $config.test_ratio
66
+ group_by: $config.group_by
67
+ # The streaming hash backend: the same corpus and seed give the same split on any box.
68
+ backend: hash
69
+ export: true
70
+ register: $config.register
71
+ store: $config.store
72
+ - stage: dataset.manifest
73
+ config:
74
+ store: $config.store
@@ -0,0 +1,28 @@
1
+ # dataset-prep — turn a raw source into frozen, registered train / val / test dataset versions
2
+ # a fine-tune can consume (cairn-extensions#16).
3
+ #
4
+ # A domain pack is DATA plus glue, never operators (ADR-0127 D2): this manifest, the `prepare`
5
+ # pipeline (the runnable surface), the `prepare` flow it runs (the stages, all from
6
+ # cairn-operator-dataset-checks), the presets (named input sets) and a small sample. Assets are
7
+ # found by convention (`pipelines/`, `flows/`, `presets/`, `data/`), so there is no `[assets]`.
8
+ #
9
+ # Preparing once and training many times keeps a held-out claim honest: the baseline, the
10
+ # validation and the one-time test comparison read the same versions, and the holdout door
11
+ # refuses a training run that would meet the `test` version. The fine-tune pack accepts these
12
+ # versions only (cairn-pack-finetune, cairn-extensions#7).
13
+
14
+ [pack]
15
+ name = "dataset-prep"
16
+ version = "0.1.0"
17
+ description = "Prepare a dataset once: pin the source, audit it, split it by group and register train, val and test versions with their roles."
18
+ tags = [
19
+ "domain:modelops",
20
+ "domain:dataset-prep",
21
+ "data:jsonl",
22
+ ]
23
+ kind = "domain"
24
+ publisher = "cairn"
25
+ trust_level = "official"
26
+
27
+ [compat]
28
+ cairn_engine = ">=0.2.1,<0.4"
@@ -0,0 +1,104 @@
1
+ # pipelines/prepare.yaml — prepare a dataset once (cairn-extensions#16).
2
+ #
3
+ # source-ok ⏸ → prepare (data flow) → format → data gate
4
+ #
5
+ # `source-ok` is a person confirming the source, its pin and the name before anything is
6
+ # written. `prepare` runs flows/prepare.yaml as one governed leg and, when it lands, the control plane
7
+ # registers `<register>-train`, `-val` and `-test` with roles training, validation and test,
8
+ # stamps each with its intake verdict, and registers the manifest (a report). `format` checks
9
+ # the cleaned corpus's example structure against the trainers it must feed. `data-ok` stops
10
+ # the pipeline (fail-closed) when a version came back blocked or invalid, or any example is
11
+ # malformed. The versions stay registered (the registry is append-only); a launch that names
12
+ # a blocked or invalid one is refused by the core's intake door either way, and the fine-tune
13
+ # pack's admission checks each version's role and verdict.
14
+ #
15
+ # The versions need the s3 store (`store: s3`, or a profile with `artifact_store = "s3"` and
16
+ # CAIRN_ARTIFACT_S3_BUCKET): the split refuses to register from the local store, whose files sit
17
+ # in the leg's temporary workdir, are deleted at a reboot, and cannot be read from another
18
+ # machine (the `format` leg, the holdout door, a trainer on a GPU box).
19
+ #
20
+ # Nothing here writes row content into the record: stats, hashes, counts and version ids.
21
+ name: prepare
22
+ kind: pipeline
23
+ visibility: public
24
+ description: >
25
+ Pin a dataset source, drop duplicates, profile prompt+response lengths and topics, split it
26
+ by group into train / val / test and register the three versions with their roles.
27
+ outcome: Turn a raw dataset into frozen train, val and test versions
28
+ suite: data
29
+
30
+ inputs:
31
+ # `$inherit: prepare` wires every input below into the `prepare` leg by name (ADR-0106 D2);
32
+ # the specs stay because a `kind: data` flow declares only placeholder names.
33
+ $inherit: prepare
34
+ path: {type: str, description: "A Hugging Face dataset id, a local JSONL/CSV/Parquet file or an s3:// object."}
35
+ revision: {type: str, default: "", description: "Hub commit, tag or branch to load the source at; a commit sha is the only pin that cannot move. Ignored for a file."}
36
+ register: {type: str, description: "Dataset name prefix: versions <register>-train, -val and -test are registered."}
37
+ seed: {type: int, default: 13, description: "Split seed; the same corpus and seed give the same three versions."}
38
+ train_ratio: {type: float, default: 0.9}
39
+ val_ratio: {type: float, default: 0.05}
40
+ test_ratio: {type: float, default: 0.05}
41
+ group_by: {type: str, default: "", description: "Row field no group may straddle (a template family); empty = every row its own group."}
42
+ derive:
43
+ type: list
44
+ default: []
45
+ description: "fields.derive rules: [{field, source, mode: extract | normalize, pattern, replace, default, case}]."
46
+ topic_fields: {type: list, default: [], description: "Label fields counted by value in the audit (top 20)."}
47
+ group_fields: {type: list, default: [], description: "Grouping fields reported by size only (their values are prompt text)."}
48
+ near_dup_threshold: {type: float, default: 0.8, description: "Jaccard similarity above which two examples are near duplicates."}
49
+ base_model: {type: str, default: "", description: "The model to be trained; its tokenizer counts the lengths (whitespace words without one, said in the report)."}
50
+ max_seq_len: {type: int, default: 0, description: "Training sequence length; longer examples are counted (0 = no limit)."}
51
+ over_length: {type: str, default: "count", description: "count | drop | refuse for examples over max_seq_len. Never truncate."}
52
+ store: {type: str, default: "", description: "s3 or local for the exported files; empty = the environment's artifact store. Registering the versions needs s3."}
53
+
54
+ governance:
55
+ budget: {usd: 1}
56
+ series: dataset-prep
57
+ approvers: data-owners
58
+
59
+ steps:
60
+ # The PERSON gate before anything is written: the versions this run registers are frozen
61
+ # under `register`, so someone confirms what is being read, at which pin, and under what name.
62
+ - gate: source-ok
63
+ approvers: data-owners
64
+ show:
65
+ - input.path
66
+ - input.revision
67
+ - input.register
68
+ - input.group_by
69
+ - input.test_ratio
70
+
71
+ - id: prepare
72
+ label: Pin, audit, split and register
73
+ flow: prepare
74
+ depends_on: [source-ok]
75
+ timeout: 60m
76
+
77
+ - id: format
78
+ label: Check the example structure
79
+ task: dataset/format
80
+ depends_on: [prepare]
81
+ with:
82
+ path: $steps.prepare.export_jsonl_output
83
+ target_trainers: [trl, unsloth]
84
+
85
+ # The DATA gate: answered by the data. `intake_verdicts` holds `<name>@<v>=<verdict>` for
86
+ # every version the leg registered (ADR-0102 D1).
87
+ - gate: data-ok
88
+ depends_on: [format]
89
+ predicate: >-
90
+ steps.format.conformant == steps.format.total &&
91
+ length(steps.prepare.findings.intake_verdicts[?contains(@, '=blocked') || contains(@, '=invalid_format')]) == `0`
92
+
93
+ outputs:
94
+ versions: prepare.dataset_versions
95
+ verdicts: prepare.intake_verdicts
96
+ manifest: prepare.dataset_manifest_output
97
+ rows_in: prepare.ingest_normalize_rows
98
+ exact_duplicates: prepare.dedup_exact_dropped
99
+ near_duplicates: prepare.dedup_near_dropped_near
100
+ tokens_p95: prepare.profile_tokens_tokens_p95
101
+ over_length_rows: prepare.profile_tokens_over_length_rows
102
+ topics: prepare.profile_fields_topic_values
103
+ topic_counts: prepare.profile_fields_topic_counts
104
+ format: format.detected_format
@@ -0,0 +1,46 @@
1
+ # presets/ifc-bim-alpaca.yaml — the IFC/BIM Alpaca dataset, prepared for a Qwen3-4B QLoRA run
2
+ # (cairn-extensions#16). `cairn remote launch dataset-prep/prepare --preset ifc-bim-alpaca`.
3
+ #
4
+ # The dataset has `instruction`, `input` and `output` only, and `instruction` is the same on
5
+ # every row, so the topic and the template family are derived:
6
+ # * `topic` — the first building element the answer defines (IFCWALL, IFCSLAB, …), `other`
7
+ # when it defines none. A regular expression, not an IFC parser: the IFC validator
8
+ # (cairn-extensions#12) is where a real parse belongs.
9
+ # * `family` — the request with its numbers and quoted names replaced, so two requests that
10
+ # differ only in dimensions or names are one family, and the split keeps each family on one
11
+ # side.
12
+ # The two fields are added to the rows; the trainer formats `instruction`, `input` and
13
+ # `output` only.
14
+ pipeline: dataset-prep/prepare
15
+ presets:
16
+ - name: ifc-bim-alpaca
17
+ description: >
18
+ Dietmar2020/ifc-bim-high-quality-alpaca at a pinned commit, 90/5/5 by template family,
19
+ lengths with the Qwen3-4B-Base tokenizer against a 2048-token sequence.
20
+ inputs:
21
+ path: Dietmar2020/ifc-bim-high-quality-alpaca
22
+ # The Hub commit read on 2026-10-22. Move the pin deliberately: a new commit is new data.
23
+ revision: 08d61c3c082c063c1647c59aeef1cf1107db6474
24
+ register: ifc-bim-alpaca
25
+ seed: 3407
26
+ train_ratio: 0.9
27
+ val_ratio: 0.05
28
+ test_ratio: 0.05
29
+ group_by: family
30
+ derive:
31
+ - field: topic
32
+ source: output
33
+ mode: extract
34
+ pattern: '=\s*(IFC(?:WALL|SLAB|BEAM|COLUMN|DOOR|WINDOW|ROOF|STAIR|RAMP|RAILING|PLATE|MEMBER|FOOTING|PILE|COVERING|CURTAINWALL|SPACE|OPENINGELEMENT|BUILDINGELEMENTPROXY)\w*)\s*\('
35
+ default: other
36
+ - field: family
37
+ source: input
38
+ mode: normalize
39
+ pattern: "\\d+(?:\\.\\d+)?|'[^']*'|\"[^\"]*\""
40
+ replace: "#"
41
+ case: lower
42
+ topic_fields: [topic]
43
+ group_fields: [family]
44
+ base_model: Qwen/Qwen3-4B-Base
45
+ max_seq_len: 2048
46
+ over_length: count
@@ -0,0 +1,57 @@
1
+ # cairn-pack-dataset-prep — the dataset-prep domain pack as a data wheel (cairn-extensions#16).
2
+ #
3
+ # Discovered through the `cairn.packs` entry point declared here: `pip install
4
+ # cairn-pack-dataset-prep` is all the engine needs. The wheel carries this directory under the
5
+ # import name `cairn_pack_dataset_prep`: the manifest, the one-line shim the entry point
6
+ # targets, and the declarative assets. No operator; every stage the flow names comes from
7
+ # cairn-operator-dataset-checks. In a checkout, `CAIRN_PACK_PATH=packs/cairn-pack-dataset-prep`
8
+ # loads the same directory as a dev pack.
9
+ [project]
10
+ name = "cairn-pack-dataset-prep"
11
+ version = "0.1.0"
12
+ description = "cairn domain pack: prepare a dataset once into registered train, val and test versions."
13
+ readme = "README.md"
14
+ requires-python = ">=3.12"
15
+ license = "Apache-2.0"
16
+ license-files = ["LICENSE", "NOTICE"]
17
+ authors = [{name = "cairn maintainers"}]
18
+ dependencies = [
19
+ "cairndev>=0.2.1,<0.4",
20
+ # The kernels the flow names (ingest.normalize 1.2.0, fields.derive, profile.fields,
21
+ # profile.tokens 1.1.0, split 1.0.0 with export, dataset.manifest).
22
+ "cairn-operator-dataset-checks>=0.1,<0.2",
23
+ ]
24
+
25
+ [project.optional-dependencies]
26
+ # Near-duplicate dedup (dedup.near is an honest skip without it) and the tokenizer that counts
27
+ # lengths with the base model's own vocabulary (whitespace words without it).
28
+ all = ["cairn-operator-dataset-checks[minhash,tokenizers]>=0.1,<0.2"]
29
+ # test — what the pack's own tests import beyond pytest; CI installs it (scripts/test_wheels.sh).
30
+ test = ["moto[s3]>=5"]
31
+
32
+ [project.urls]
33
+ Homepage = "https://cairndev.sh"
34
+ Source = "https://github.com/cairndev-sh/cairn-extensions"
35
+ Issues = "https://github.com/cairndev-sh/cairn-extensions/issues"
36
+
37
+ [project.entry-points."cairn.packs"]
38
+ dataset-prep = "cairn_pack_dataset_prep:pack"
39
+
40
+ [build-system]
41
+ requires = ["hatchling"]
42
+ build-backend = "hatchling.build"
43
+
44
+ [tool.hatch.build.targets.wheel]
45
+ bypass-selection = true
46
+
47
+ [tool.hatch.build.targets.wheel.force-include]
48
+ "__init__.py" = "cairn_pack_dataset_prep/__init__.py"
49
+ "pack.toml" = "cairn_pack_dataset_prep/pack.toml"
50
+ "pipelines" = "cairn_pack_dataset_prep/pipelines"
51
+ "flows" = "cairn_pack_dataset_prep/flows"
52
+ "presets" = "cairn_pack_dataset_prep/presets"
53
+ "data" = "cairn_pack_dataset_prep/data"
54
+
55
+ [tool.hatch.build.targets.sdist]
56
+ include = ["__init__.py", "pack.toml", "pipelines", "flows", "presets", "data", "tests", "README.md", "LICENSE",
57
+ "NOTICE", "pyproject.toml"]
@@ -0,0 +1,144 @@
1
+ """dataset-prep/prepare end to end, in process (cairn-extensions#16).
2
+
3
+ The pack's own flow is resolved through the core (`resolve_flow_ref`, with the pack loaded from
4
+ this checkout), run by the core runner on the 200-row IFC-shaped sample with the
5
+ `ifc-bim-alpaca` preset's rules, and registered through the leg's own registration path
6
+ (`register_leg_descriptors`, which stamps each version's intake verdict). Then the holdout door
7
+ runs on what was registered. Hermetic: a local file instead of the Hub, whitespace token counts,
8
+ no minhash extra (near dedup is an honest skip), sqlite, and a moto-mocked S3 bucket for the
9
+ exported files (the split registers its versions only from the s3 store, cairn-extensions#6)."""
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ from pathlib import Path
14
+
15
+ import pytest
16
+ import yaml
17
+
18
+ PACK = Path(__file__).resolve().parents[1]
19
+ SAMPLE = PACK / "data" / "sample-ifc.jsonl"
20
+ BUCKET = "cairn-test-artifacts"
21
+
22
+
23
+ @pytest.fixture(autouse=True)
24
+ def s3(monkeypatch):
25
+ """The s3 artifact store the exports land in, mocked."""
26
+ boto3 = pytest.importorskip("boto3")
27
+ moto = pytest.importorskip("moto")
28
+ monkeypatch.setenv("AWS_ACCESS_KEY_ID", "test")
29
+ monkeypatch.setenv("AWS_SECRET_ACCESS_KEY", "test")
30
+ monkeypatch.setenv("AWS_DEFAULT_REGION", "eu-central-1")
31
+ monkeypatch.setenv("CAIRN_ARTIFACT_S3_BUCKET", BUCKET)
32
+ monkeypatch.setenv("CAIRN_ARTIFACT_S3_PREFIX", "datasets")
33
+ for name in ("CAIRN_ARTIFACT_S3_ENDPOINT", "OBS_ARTIFACT_S3_ENDPOINT", "OBS_ARTIFACT_S3_BUCKET"):
34
+ monkeypatch.delenv(name, raising=False)
35
+ with moto.mock_aws():
36
+ client = boto3.client("s3", region_name="eu-central-1")
37
+ client.create_bucket(Bucket=BUCKET, CreateBucketConfiguration={"LocationConstraint": "eu-central-1"})
38
+ yield client
39
+
40
+
41
+ @pytest.fixture(autouse=True)
42
+ def _pack_from_checkout(monkeypatch):
43
+ """Load this checkout's pack as a dev pack (CAIRN_PACK_PATH), as `cairn` does at start."""
44
+ from cairn.core.pack import registry
45
+ from cairn.core.pack.loader import load_all_packs
46
+
47
+ monkeypatch.setenv("CAIRN_PACK_PATH", str(PACK))
48
+ registry.clear()
49
+ load_all_packs()
50
+ yield
51
+ registry.clear()
52
+
53
+
54
+ def _preset_config(**over) -> dict:
55
+ doc = yaml.safe_load((PACK / "presets" / "ifc-bim-alpaca.yaml").read_text(encoding="utf-8"))
56
+ (preset,) = [p for p in doc["presets"] if p["name"] == "ifc-bim-alpaca"]
57
+ # The sample instead of the Hub; no tokenizer download; the exports in the (mocked) s3 store.
58
+ return {**preset["inputs"], "path": str(SAMPLE), "revision": "", "base_model": "", "store": "s3", **over}
59
+
60
+
61
+ def _prepare(workdir: Path, config: dict):
62
+ from cairn.core.dataflow import Budget, DataflowSpec
63
+ from cairn.core.dataflow.defs import resolve_flow_ref
64
+ from cairn.core.dataflow.runner import run_dataflow
65
+
66
+ stages = resolve_flow_ref("dataset-prep/prepare", config, kind="data")
67
+ return run_dataflow(DataflowSpec(stages=stages, budget=Budget()), workdir)
68
+
69
+
70
+ async def _register(result, store) -> dict:
71
+ from cairn.core.dispatch.leg_executor import register_leg_descriptors
72
+
73
+ out_stats = dict(result.stats) # the leg's stats are what the intake verdict reads
74
+ await register_leg_descriptors(result.output_artifacts + result.named_outputs, store,
75
+ run_id="run-prepare", out_stats=out_stats)
76
+ return out_stats
77
+
78
+
79
+ @pytest.fixture
80
+ async def store(tmp_path):
81
+ from cairn.core.storage.artifacts import SqliteArtifactStore
82
+
83
+ s = SqliteArtifactStore(str(tmp_path / "registry.db"))
84
+ yield s
85
+ await s.close()
86
+
87
+
88
+ async def test_prepare_registers_three_versions_with_their_roles_and_verdicts(tmp_path, store):
89
+ result = _prepare(tmp_path / "wd", _preset_config())
90
+ stats = await _register(result, store)
91
+ assert stats["dataset_versions"] == ["ifc-bim-alpaca-train@1", "ifc-bim-alpaca-val@1", "ifc-bim-alpaca-test@1"]
92
+ for name, role in (("train", "training"), ("val", "validation"), ("test", "test")):
93
+ meta = await store.get_dataset_version_meta(f"ifc-bim-alpaca-{name}")
94
+ assert meta["role"] == role
95
+ assert all(v.endswith(("=admitted", "=degraded")) for v in stats["intake_verdicts"]), stats["intake_verdicts"]
96
+ # The audit: duplicates, prompt+response lengths, topics; the split kept every family on one side.
97
+ assert (stats["ingest.normalize.rows"], stats["dedup.exact.dropped"]) == (200, 6)
98
+ assert stats["profile.tokens.measure"] == "example" and stats["profile.tokens.prompt_tokens_p95"] > 0
99
+ # near dedup runs only with the [minhash] extra; every count below follows what it dropped
100
+ near = stats["dedup.near.dropped_near"]
101
+ topics = dict(zip(stats["profile.fields.topic_values"], stats["profile.fields.topic_counts"]))
102
+ assert 24 - near <= topics["IFCWALLSTANDARDCASE"] <= 24 and topics["other"] == 2
103
+ assert stats["split.no_leakage"] is True
104
+ assert sum(d.rows for d in result.named_outputs) == 194 - near
105
+ assert all(d.uri.startswith(f"s3://{BUCKET}/datasets/dataflow/") for d in result.named_outputs)
106
+
107
+
108
+ def test_registering_from_the_local_store_is_refused(tmp_path):
109
+ """A version registered from a local split would name a file in the leg's temporary workdir."""
110
+ with pytest.raises(Exception, match="`register` needs `store: s3`"):
111
+ _prepare(tmp_path / "wd", _preset_config(store="local"))
112
+
113
+
114
+ async def test_the_manifest_and_the_record_carry_no_row_content(tmp_path, store, s3):
115
+ result = _prepare(tmp_path / "wd", _preset_config())
116
+ stats = await _register(result, store)
117
+ _bucket, _, key = stats["dataset.manifest.output"].removeprefix("s3://").partition("/")
118
+ manifest = json.loads(s3.get_object(Bucket=_bucket, Key=key)["Body"].read())
119
+ assert manifest["rows"] == 194 - stats["dedup.near.dropped_near"] and set(manifest["fields"]) == {"instruction", "input", "output", "topic", "family"}
120
+ record = json.dumps(stats) + json.dumps(manifest)
121
+ for text in ("shear wall", "IFCPROJECT(", "Industry Foundation Classes, an open"):
122
+ assert text not in record
123
+
124
+
125
+ def test_the_same_source_and_seed_give_the_same_three_versions(tmp_path):
126
+ first = _prepare(tmp_path / "a", _preset_config())
127
+ again = _prepare(tmp_path / "b", _preset_config())
128
+ other = _prepare(tmp_path / "c", _preset_config(seed=1))
129
+ hashes = [[d.content_hash for d in r.named_outputs] for r in (first, again, other)]
130
+ assert hashes[0] == hashes[1] and hashes[0] != hashes[2]
131
+
132
+
133
+ async def test_the_holdout_door_refuses_training_on_data_that_holds_the_test_split(tmp_path, store):
134
+ from cairn.core.holdout import check_holdout
135
+
136
+ result = _prepare(tmp_path / "wd", _preset_config())
137
+ await _register(result, store)
138
+ clean = await check_holdout(["dataset:ifc-bim-alpaca-train@1"], store=store, workspace_id="default")
139
+ assert clean.checked and clean.ok and [h.name for h in clean.holdouts] == ["ifc-bim-alpaca-test"]
140
+ # The whole cleaned corpus (the leg's export) registered as training data holds every test row.
141
+ export = next(d for d in result.output_artifacts if d.stats.get("format") == "jsonl")
142
+ await store.register_dataset_version("ifc-bim-alpaca-all", export.content_hash, actor="t")
143
+ leaky = await check_holdout(["dataset:ifc-bim-alpaca-all@1"], store=store, workspace_id="default")
144
+ assert leaky.checked and not leaky.ok and leaky.overlaps