Native Input Joins - kimjooyoon/meta-ontology-go GitHub Wiki
์ฌ๋ฌ ์ ๋ ฅ์ ๋ฐ์ ์ค์ ๋ณธ๋ฌธ์ ์ฐ๊ฒฐํ๊ธฐ
์
๋ฐ์ดํธ: 2026-10-04. ๊ฐ๋ฐ #1221ยท
main #1222๋ก ๋ณํฉยท์ค์นํ
์
๋ ฅ ์ฐ๊ฒฐ ๊ธฐ๋ฅ๊ณผ ์ค์ ๊ด์ธก์ ์ค๋ช
ํฉ๋๋ค. ์๋ ๋ช
๋ น์ ์์ค๋
1bef47fc1e7a4aca8ffb1cbd5a5aa7ded2353ce5์
๋๋ค.
์ค์น๋ ๋ฒ์ ์ ํ์ฌ ์ํ์์ ํ์ธํฉ๋๋ค.
์ ๋ ฅ์ ๋ฒํธ๊ฐ ๋ถ์ ์์ผ์ ๋๋ค
ํ๋์ ์์ ์์
๋์ ๋น์ ํ๋ฉด, ์
๋ ฅ์ ๋ถํ์ ๋ฐ๋ ์์ผ์ด๊ณ bind๋ ๊ฐ์
์ ๋ฌํ๋ ์ฐ๊ฒฐ์ ์
๋๋ค. ์์ผ ๋ ๊ฐ๊ฐ ๊ฐ์ Integer ํ์
์ด์ด๋ ์๋ก ๋ค๋ฅธ ์๋ฆฌ๋ฅผ
์ฐจ์งํฉ๋๋ค. ์์ค์ ์ ์ ์์๊ฐ ์์ฑํ ํจ์์ ์ธ์ ์์๊น์ง ์ด์ด์ง๋๋ค.
activity Add(Integer, Integer) -> Integer computes "return input0 + input1"
activity Difference(Integer, Integer) -> Integer computes "return input0 - input1"
bind Left.result -> Add.input0
bind Right.result -> Add.input1
bind Right.result -> Difference.input0
bind Left.result -> Difference.input1
์ด ๊ฒฝ์ฐ Difference๋ Right์์ Left๋ฅผ ๋บ๋๋ค. ๋ ์ฐ๊ฒฐ์ ๋ฐ๊พธ๋ฉด ์๋ฏธ๋ ๋ฐ๋๋๋ค.
๋์ผ ํ์
์ ํ๋์ PROV used ์ฌ์ค๋ก ์ ๋ฆฌํ๋๋ผ๋, ์ ์ธ์ ์
๋ ฅ ์์น๋ ๋ณ๋๋ก
๋ณด์กดํ์ฌ ๊ฐ์ ํ์
๋ ๊ฐ์ ์์๋ฅผ ์ ์งํฉ๋๋ค.
| ์ ์ธ | ๋ณธ๋ฌธ์์ ์ฝ๋ ์ด๋ฆ | ์ธ๋ถ ์ ๋ ฅ ํค |
|---|---|---|
Root(Integer) |
input |
Root |
Compare(Text, Text) |
input0, input1 |
Compare.input0, Compare.input1 |
Label(Integer, Boolean, Text) |
input0, input1, input2 |
์ฐ๊ฒฐํ์ง ์์ ์์น์ Label.inputN |
ํ์ฌ ์์ ๊ณ์ฐ ๋ณธ๋ฌธ์ IntegerยทBooleanยทText ์
๋ ฅ 1~16๊ฐ์ ์ถ๋ ฅ 1๊ฐ๋ฅผ ์ง์ํฉ๋๋ค.
์
๋ ฅ์ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ let์ผ๋ก ๋ง๋ ์ง์ญ ๋ณ์์๋ ๋ค์ ๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค.
์
๋ ฅ ํ๋๋ input, ์ฌ๋ฌ ์
๋ ฅ์ input0๋ถํฐ ์ฌ์ฉํฉ๋๋ค. input01๊ณผ ๊ฐ์
๋ค๋ฅธ ํ๊ธฐ๋ ์ ์ธ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ฒํธ๋ ์ค๋ฅ๋ก ์๋ดํฉ๋๋ค.
์ผ๋ถ ์์น๋ง ์ฐ๊ฒฐํ ์ ์์ต๋๋ค
activity Label(Integer, Boolean, Text) -> Text computes "if input1 && input0 > 0 { return input2 + \"!\" }; return input2"
bind Add.result -> Label.input0
Label.input0์ Add์ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ต๋๋ค. ํธ์ถ์๋ Label.input1๊ณผ
Label.input2๋ง ์ ๊ณตํฉ๋๋ค. ์ฐ๊ฒฐํ ์์น๋ฅผ ์ธ๋ถ ๊ฐ์ผ๋ก ๋ฎ์ด์ฐ์ง ์์ต๋๋ค.
๊ฐ ์
๋ ฅ ์์น์๋ ์์ฐ์ ํ๋๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
{
"schema": "gooo/body-composition-cases/v1",
"cases": [{"inputs": {
"Left": -8,
"Right": 6,
"Label.input1": true,
"Label.input2": "gooo",
"Compare.input0": "๊ฐ์",
"Compare.input1": "๊ฐ์"
},
"expected": {"Add": 27, "Difference": -3, "Label": "gooo!"}}]
}
์ ์ฒด ํ์ผ ํ์๊ณผ ์ ํํ ์ผ๊ณฑ ํ๋์ ๊ธฐ๋๊ฐ์ ์คํ ์ฌ๋ก๋ฅผ ๊ทธ๋๋ก ๋ฐ์ ์์ํ ์ ์์ต๋๋ค. ์ JSON์ ๊ธฐ๋๊ฐ ์ธ ๊ฐ๋ฅผ ์ ๊ณตํ๋ ํ ์ฌ๋ก์ ๋๋ค.
ํ ๋ช ๋ น์ผ๋ก ์กฐ๋ฆฝํ๊ณ ์คํํ๊ธฐ
์์ํ๊ธฐ์์ ์์ค๋ฅผ ๋ฐ์ ์ ์์ ์ฒดํฌ์์์ ๋ฃจํธ์์ ์๋ ๋ฆฌ๋น์ ์ ์ ํํ๊ณ ๋น๋ํฉ๋๋ค. ๊ธฐ์กด ์์ ํ์ผ์ด ์๋ ์ฒดํฌ์์์์๋ ๊ทธ ๋ณ๊ฒฝ์ ๋ณด์กดํฉ๋๋ค.
git fetch origin
git switch --detach 1bef47fc1e7a4aca8ffb1cbd5a5aa7ded2353ce5
gooo_go_bin="$(GOTOOLCHAIN=go1.27.1 go env GOROOT)/bin/go"
"$gooo_go_bin" build -trimpath -o gooo ./cmd/gooo
์ด์ด์ ๊ฐ์ ๋ฃจํธ์์ ์คํํฉ๋๋ค.
./gooo body-compose \
--source examples/body-codegen/native-input-joins.gooo.fixture \
--cases examples/body-codegen/native-input-joins-cases.json \
--out input-joins-results
๊ธฐ๋ณธ ๊ฒฝ๋ก๋ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ํ๋ณด๋ฅผ ํ์ธํฉ๋๋ค. ์ ์ถ๋ ฅ ํด๋์ ์ ํํ Gooo,
Go ํจ์, ์ฐ๊ฒฐ ๋๋ผ์ด๋ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ดํ๊ณ , ํ ๋ฒ ๋น๋ํ ํ๋ก๊ทธ๋จ์ ๋ ๋ฒ
์คํํฉ๋๋ค. ์ ์ฅํ ์กฐ๋ฆฝ ๊ธฐ๋ก์ ์ถ๊ฐ ์ถ๋ก ์์ด ์ ์
๋ ฅ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
body-compose๊ฐ ๋ด๋นํ๋ ์์ ๋ณธ๋ฌธ ์ฐ๊ฒฐ์ ๋ฑ๋ก๋ ํ๋ ๊ตฌํ์ ์คํํ๋
์ผ๋ฐ run ๋ช
๋ น๊ณผ ๋ณ๋์ ์คํ ๊ฒฝ๋ก์
๋๋ค.
์ถ๋ ฅ ํด๋์์ ๋ค์ ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค.
| ํ์ผ | ์ฝ์ ๋ด์ฉ |
|---|---|
original.gooo, cases.json |
์คํ์ ์ฌ์ฉํ ์๋ณธ๊ณผ ๊ธฐ๋๊ฐ |
realized.gooo |
์ ํํ ๋ณธ๋ฌธ์ ๋ฐ์ํ ๋ค์ ๊ฐ๋ฐ์ฉ Gooo |
generated.go, main.go |
์์ฑํ ํจ์์ ์ ๋ ฅ ์ ๋ฌ ์ฝ๋ |
composition.json |
๋ณธ๋ฌธ ์ ํ๊ณผ ์ฐ๊ฒฐ์ ์ ์ฅ ๊ธฐ๋ก |
runtime.json |
์ค์ ๊ฒฐ๊ณผ, ๊ธฐ๋๊ฐ ์ถฉ์กฑ ์, ์ ๋ ฅ๋ณ ์ ๋ฌ ๊ฐ |
runtime.json์ traces์๋ ์ฌ๋ก๋ณ deliveries๊ฐ ์์ต๋๋ค. ๊ฐ ์ ๋ฌ์
inputs๋ ์
๋ ฅ ์์น(port), ํ์
์ ์๋ณ์(entity_id), ๊ฐ์ ๋ง๋ ํ๋
(producer_id), ์ค์ ๊ฐ(value)์ ํจ๊ป ๋ณด๊ดํฉ๋๋ค. ์ฐ๊ฒฐ์์ ๊ฐ์ด
๋ค๋ฐ๋์๋ค๋ฉด ๊ทธ ์์น๋ฅผ ๋ฐ๋ผ๊ฐ๊ณ , ๊ณ์ฐ์ด ๋ฌ๋๋ค๋ฉด actual๊ณผ expected๋ฅผ
๋น๊ตํ ์ ์์ต๋๋ค.
๋ชจ๋ธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๊ณต๊ฐ๋ ์์ฒด ๋ชจ๋ธ์ ๋ ํ์ผ์ ๋ฐ์ต๋๋ค.
hf download asketeddy/gooo-three-choice-feedback-tiny-v1 \
models/set-feedback/fp32/model.json models/set-feedback/fp32/weights.bin \
--revision 24238ca67048b36bc305731799985271bb752dd1 \
--local-dir gooo-models
./gooo body-compose \
--source examples/body-codegen/native-input-joins.gooo.fixture \
--cases examples/body-codegen/native-input-joins-cases.json \
--model gooo-models/models/set-feedback/fp32/model.json \
--out input-joins-model-results
์ฌ์ฉํ ๋ชจ๋ธ์ ์์ฒด three-choice FP32 ๋ชจ๋ธ์ ๋๋ค. ๊ฐ์ค์น ํฌ๊ธฐ๋ 74,624๋ฐ์ดํธ์ด๋ฉฐ ์ด๋ฒ ์ ๋ ฅ ์ฐ๊ฒฐ ์คํ์์๋ ์๋ก ํ์ตํ์ง ์์์ต๋๋ค. ๋ชจ๋ธ์ Left ๋ณธ๋ฌธ์ ์ธ ๊ฐ์ง ์ด์ง ์กฐ๋ฆฝ ์ ํ์ ์ ์ํฉ๋๋ค. AddยทDifferenceยทLabelยท Compare์ ๋ณธ๋ฌธ๊ณผ ์ฐ๊ฒฐ ์์๋ Gooo ์ ์ธ์ ๋ฐ๋ฆ ๋๋ค.
์์ ์ฑ์ ๋ฌด์์ ํ์ธํ๋์ง์ ํจ๊ป ์ฝ์ต๋๋ค
| ํ์ธํ ๊ฒ | ์ด๋ฒ ๊ด์ธก |
|---|---|
| ์ ํํ Left ๋ณธ๋ฌธ์ ์ ํ ์์ | ์ฒซ ๋ชจ๋ธ ํ๋ณด 0/6, ๋ค์ ํ๋ณด 6/6 |
| ์ค์ ํ๋ก๊ทธ๋จ์ ๋ช ์๋ ์ถ๋ ฅ | ํ ์ ์ด์์ 49/49 |
| ์ฌ๋ฌ ์ ๋ ฅ์ด ์ค์ ๊ฐ์ผ๋ก ๋์ฐฉํ๋์ง | ํ ์ ์ด์์ ์ ๋ ฅ 84๊ฐยท์ฐ๊ฒฐ ์ ๋ฌ 42๊ฐ |
| ๋ฐ๋ณต ์์ฑ๊ณผ ์ ์ฅ ๊ธฐ๋ก ์ฌ์คํ | 12๊ฐ ์ ์ด์์ 588/588ยท์ ๋ ฅ 1,008๊ฐยท์ฐ๊ฒฐ 504๊ฐ |
| ํ๋ฆฐ ๊ธฐ๋๊ฐ ํ๋๋ฅผ ์ผ๋ถ๋ฌ ๋ฃ์ ๋ณ๋ ์ ์ด | 48/49 |
์ ์์ ๋ถ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ถ๋ ฅ ๊ธฐ๋๊ฐ์
๋๋ค. ๊ธฐ๋๊ฐ์ ์๋ตํ ์ค๊ฐ ๊ฐ์
๊ด์ธก์๋ ๋จ๊ณ ์ ์์๋ ๋ํด์ง์ง ์์ต๋๋ค. ์
๋ ฅ๋ง๋ค ์์นยทํ์
์ ์๋ณ์ยท์์ฐ์ยท
์ค์ ๊ฐ์ด ๊ธฐ๋ก๋์ด ์ฐ๊ฒฐ์ด ์ด๋์ ํ๋ ธ๋์ง ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
์ ์ธ ๊ธฐ๋๊ฐ์ JSON๋ ํ์ ํ๋ณด 6b6c86f2์์ ์์ฒด ๋ชจ๋ธ์ ํ ๋ฒ ํธ์ถํด
์คํํ๊ณ , ๋ ์ค์ ์คํ์ด ์ผ์นํ๋ฉฐ 3/3์ ๊ธฐ๋กํ์ต๋๋ค.
588๊ฐ๋ ๊ฐ์ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ณตํ ์ ์ด์ ํฉ๊ณ์
๋๋ค. ๋
๋ฆฝ ๊ณผ์ ์์ ์ผ๋ฐ์ ์ธ
์๋ ์ถฉ์กฑ๋ฅ ์ ์ถ์ ํ ๋๋ ๋ณ๋์ ๊ณผ์ ์ ๊ด์ธก์ด ํ์ํฉ๋๋ค.
๊ฐ๋ฐ ํ๋ณด 5af78bcb์ ์ธ ๋ฒ์ฉ ์ธก์ ์์ ๋ชจ๋ธ์ ํ๋ณด 2๊ฐ, ๊ฒฐ์ ๋ก ์ ํ์์
8๊ฐ๋ฅผ ํ์ธํ๊ณ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋๋ฌํ์ต๋๋ค. ์ ์ฒด ๊ทธ๋ํ ์์ฑ ์๊ฐ์ ์ค์๊ฐ์
๋ชจ๋ธ 9.711msยท๊ฒฐ์ ๋ก ์ 6.396ms์์ต๋๋ค. ๋น๋์ ๋ ์คํ์ ํฌํจํ ์ ์ฒด ๋ช
๋ น์
์ฝ 301566ms, ๊ด์ธก๋ ํ๋ก์ธ์ค ์ต๋ RSS๋ ์ฝ 8183MiB์์ต๋๋ค.
๊ณ ์ ๋ ์คํ ์์์ ๋ฐ๋ปํ Go ์บ์์์ ์ธก์ ํ์ผ๋ฉฐ, ์ปดํจํฐ ์ ์ฒด CPU ์ฌ์ฉ๋ฅ ์
์ด ์ธก์ ์ ํจ๊ป ์์งํ์ง ์์์ต๋๋ค.
์๋ณธยท๋น์ฉยท๋์ ์์ฒญยท์ถ๊ฐ ์
๋ ฅ ๊ธฐ๋ก์
ํจ๊ป ๊ณต๊ฐํฉ๋๋ค. ์ธก์ ํ๋ณด์ ๋ฐฐํฌ ๊ฒ์ฌ์์ ์ค๋น ํจ์๋ฅผ ๋ ์๊ฒ ๋๋ ํ์๊ฐ
ํ์ธ๋์ด ํ์ ์์ค 6b6c86f2๋ก ์ ๋ฆฌํ์ต๋๋ค. ๊ฐ๋ฐยทmain์ ๊ฐ ์ ์ฒด CI์ ๋
๋ฆฝ
์ฆ๊ฑฐ๋ฅผ ํ์ธํด main 1bef47fc๋ก ๋ณํฉํ๊ณ CLIยท์คํ๊ธฐ๋ฅผ ํจ๊ป ์ค์นํ์ต๋๋ค.
์ค์น๋ณธ์ ๋ณ๋ ๊ด์ธก
๊ฐ์ ์ด๋ ์ ์ด์์ 588/588ยท์ ๋ ฅ 1,008๊ฐยท์ฐ๊ฒฐ 504๊ฐ์ ๋์ผํ GoooยทGoยท์ฐ๊ฒฐ ์ฝ๋ ์ง๋ฌธ์ ํ์ธํ์ต๋๋ค. ๋ชจ๋ธ์ ์ธ ๋ฒ ์ค์ ํธ์ถํ๊ณ ์ ์ฅ ์ฌ์คํ์ ์ถ๊ฐ ์ถ๋ก 0๋ฒ์ ๋๋ค. ๋์ ์์ฒญ์ 98/98ยท์ ์ ์ข ๋ฃ, ์ถ๊ฐ ์ ๋ ฅ์ 42/42, ์๋์ ์ผ๋ก ๋ฐ๊พผ ๊ธฐ๋๊ฐ์ 48/49์์ต๋๋ค. ์ ์์ฑ ์๊ฐ ์ค์๊ฐ์ ๋ชจ๋ธ 9.449msยท๊ฒฐ์ ๋ก 8.480ms, ์ ์ฒด ๋ช ๋ น ์ค์๊ฐ์ 316.959msยท312.954ms์์ต๋๋ค. ์ ์ฒด ์ด๋ ์ ์ด์ ์ต๋ RSS ๋ฒ์๋ 81.33~83.56MiB์ ๋๋ค. ๋ฐ๋ปํ Go ์บ์ยท๊ณ ์ ์์ยท๊ฐ ์ธ ๋ฒ์ ์ ์ธก์ ์ด๋ฉฐ ์์ธ๋ณ ์๋ ๋ณํ๋ฅผ ์ถ์ ํ์ง ์์ต๋๋ค. ์ค์น ์์คยท์๋ณธยท์๊ฐยท๋ฉ๋ชจ๋ฆฌยท๊ฐ ๊ด์ธก ๋ฒ์. ๊ฐ์ ์ค์น ๊ธฐ๋ก์ ์ฐ๊ตฌ ์ ์ฅ์์๋ ์ฌ๋ ธ์ผ๋ฉฐ, ์ด๋ ์ ์ด์ ์์คยท์์ฑ ์ฝ๋ยท์ค์ ์ถ๋ก ํ์ยท์ ๋ ฅ ๊ด์ธก์ ๊ฒ์ฐํ๋ ํ๊ท ๊ฒ์ฌ๋ฅผ ํฌํจํด 20๊ฐ CI ์์ ์ ํต๊ณผํ์ต๋๋ค.
๋ค์์ ์ด ์ฐ๊ฒฐ์ ํ์ฉํ ๊ณณ
๋ช ์์ ์ธ ์ ๋ ฅ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ชจ๋ธ์ด ํ์ฉ๋ ์ธ์ยท์ฐ๊ฒฐ ํ๋ณด๋ฅผ ๊ณ ๋ฅด๋ ์คํ์ ํ ์ ์์ต๋๋ค. ์กฐ๊ฑด, ๋ณ์ ํ ๋น, ์๋ฃ ์ ๋ฌ์ ์์ค์ ๋จ๊ธฐ๋ฉด์ ๊ฐ ๋จ๊ณ์ ๊ด์ธก์ ๋ค์ ์ ํ์ ์๋ฃ๋ก ์ฌ์ฉํ๋ ๋ฐฉํฅ์ ๋๋ค. ๊ธฐ๋ก๊ฐ์ ๋ฐ๋ ๋ณธ๋ฌธ, ํธ์ถยท๋ฐ๋ณต, ํธ์ถ์ ๋๋ ํผ๋๋ฐฑ์ ๊ฐ๊ฐ์ ์๋ฏธ์ ์คํ ๊ตฌํ์ ์ด์ด ํ์ฅํ ์์ญ์ ๋๋ค.