From b2ee8b90317baf3641976170819f065303afc0ef Mon Sep 17 00:00:00 2001 From: Jaakko Vanhala Date: Sun, 12 Apr 2026 18:48:14 +0300 Subject: [PATCH] Pipelinen parannuksia building blockeilla --- network-poc/frontend/public/GUIDE.md | 138 ++++ .../frontend/src/components/AgentBar.astro | 50 +- .../frontend/src/components/Editor.astro | 2 +- network-poc/frontend/src/pages/index.astro | 541 ++++++++----- network-poc/frontend/src/styles/global.css | 38 +- network-poc/hub/src/main.rs | 6 +- network-poc/native-node/src/tui_dashboard.rs | 2 +- network-poc/nodes.db | Bin 40960 -> 49152 bytes zipit/loop_runs/baseline_v1/Dockerfile | 16 + zipit/loop_runs/baseline_v1/main.py | 76 ++ zipit/loop_runs/baseline_v1/models.py | 23 + zipit/loop_runs/baseline_v1/pyproject.toml | 32 + zipit/loop_runs/baseline_v1/report.json | 105 +++ zipit/loop_runs/baseline_v1/requirements | 34 + zipit/loop_runs/baseline_v1/schemas.py | 16 + zipit/loop_runs/baseline_v1/test_main.py | 59 ++ zipit/loop_runs/v2_strict/Dockerfile | 18 + zipit/loop_runs/v2_strict/main.py | 64 ++ zipit/loop_runs/v2_strict/models.py | 18 + zipit/loop_runs/v2_strict/pyproject.toml | 13 + zipit/loop_runs/v2_strict/report.json | 113 +++ zipit/loop_runs/v2_strict/requirements | 32 + zipit/loop_runs/v2_strict/schemas.py | 18 + zipit/loop_runs/v2_strict/test_main.py | 57 ++ zipit/loop_runs/v3_docker/Dockerfile | 16 + zipit/loop_runs/v3_docker/docker-compose.yml | 10 + zipit/loop_runs/v3_docker/main.py | 64 ++ zipit/loop_runs/v3_docker/models.py | 18 + zipit/loop_runs/v3_docker/pyproject.toml | 16 + zipit/loop_runs/v3_docker/report.json | 134 ++++ zipit/loop_runs/v3_docker/requirements | 30 + zipit/loop_runs/v3_docker/schemas.py | 18 + zipit/loop_runs/v3_docker/test_main.py | 57 ++ zipit/loop_runs/v4_docker/Dockerfile | 11 + zipit/loop_runs/v4_docker/main.py | 58 ++ zipit/loop_runs/v4_docker/models.py | 18 + zipit/loop_runs/v4_docker/pyproject.toml | 13 + zipit/loop_runs/v4_docker/report.json | 145 ++++ zipit/loop_runs/v4_docker/requirements | 30 + zipit/loop_runs/v4_docker/schemas.py | 18 + zipit/loop_runs/v4_docker/test_main.py | 59 ++ zipit/loop_runs/v5_feedback/Dockerfile | 11 + zipit/loop_runs/v5_feedback/main.py | 74 ++ zipit/loop_runs/v5_feedback/models.py | 25 + zipit/loop_runs/v5_feedback/pyproject.toml | 13 + zipit/loop_runs/v5_feedback/report.json | 163 ++++ zipit/loop_runs/v5_feedback/requirements | 40 + zipit/loop_runs/v5_feedback/schemas.py | 18 + zipit/loop_runs/v5_feedback/test_main.py | 51 ++ zipit/loop_runs/v6_stable/Dockerfile | 11 + zipit/loop_runs/v6_stable/main.py | 62 ++ zipit/loop_runs/v6_stable/models.py | 23 + zipit/loop_runs/v6_stable/pyproject.toml | 15 + zipit/loop_runs/v6_stable/report.json | 126 +++ zipit/loop_runs/v6_stable/requirements | 32 + zipit/loop_runs/v6_stable/schemas.py | 18 + zipit/loop_runs/v6_stable/test_main.py | 58 ++ zipit/loop_runs/v7_enum_fix/Dockerfile | 11 + .../loop_runs/v7_enum_fix/docker-compose.yml | 10 + zipit/loop_runs/v7_enum_fix/main.py | 63 ++ zipit/loop_runs/v7_enum_fix/models.py | 18 + zipit/loop_runs/v7_enum_fix/pyproject.toml | 17 + zipit/loop_runs/v7_enum_fix/report.json | 123 +++ zipit/loop_runs/v7_enum_fix/requirements | 32 + zipit/loop_runs/v7_enum_fix/schemas.py | 18 + zipit/loop_runs/v7_enum_fix/test_main.py | 56 ++ zipit/loop_runs/v8_cache_fix/Dockerfile | 11 + .../loop_runs/v8_cache_fix/docker-compose.yml | 10 + zipit/loop_runs/v8_cache_fix/main.py | 63 ++ zipit/loop_runs/v8_cache_fix/models.py | 18 + zipit/loop_runs/v8_cache_fix/pyproject.toml | 17 + zipit/loop_runs/v8_cache_fix/report.json | 123 +++ zipit/loop_runs/v8_cache_fix/requirements | 32 + zipit/loop_runs/v8_cache_fix/schemas.py | 18 + zipit/loop_runs/v8_cache_fix/test_main.py | 56 ++ zipit/projekti.zip | Bin 0 -> 95678 bytes zipit/projekti_clean/Dockerfile | 30 + zipit/projekti_clean/README.md | 50 ++ zipit/projekti_clean/agents.yaml | 150 ++++ zipit/projekti_clean/crew.py | 85 +++ zipit/projekti_clean/main.py | 56 ++ zipit/projekti_clean/models.py | 16 + .../prompts/0_client_requirements.md | 64 ++ .../prompts/1_data_models.py.md | 122 +++ .../prompts/2_coder_schemas.py.md | 142 ++++ .../projekti_clean/prompts/3_coder_main.py.md | 244 ++++++ .../prompts/4_coder_pyproject.toml.md | 212 ++++++ zipit/projekti_clean/prompts/5_qa_review.md | 174 +++++ .../prompts/6_qa_test_main.py.md | 291 +++++++ .../prompts/7_tester_dockerfile.md | 93 +++ .../prompts/8_observer_readme.md.md | 404 ++++++++++ zipit/projekti_clean/pyproject.toml | 12 + zipit/projekti_clean/schemas.py | 13 + zipit/projekti_clean/tasks.yaml | 442 +++++++++++ zipit/projekti_clean/test_main.py | 116 +++ zipit/rest-api-kyttjhallinnalle.zip | Bin 0 -> 47852 bytes zipit/rest_api_check/Dockerfile | 11 + zipit/rest_api_check/README.md | 56 ++ zipit/rest_api_check/agents.yaml | 115 +++ zipit/rest_api_check/crew.py | 93 +++ zipit/rest_api_check/docker-compose.yml | 5 + zipit/rest_api_check/main.py | 52 ++ zipit/rest_api_check/models.py | 18 + .../prompts/0_client_requirements.md | 84 ++ .../prompts/1_manager_json-speksi.md | 112 +++ .../prompts/2_data_models.py.md | 39 + .../prompts/3_coder_schemas.py.md | 35 + .../rest_api_check/prompts/4_coder_main.py.md | 73 ++ .../prompts/5_qa_test_main.py.md | 78 ++ .../prompts/6_coder_pyproject.toml.md | 32 + .../prompts/7_tester_dockerfile.md | 32 + .../rest_api_check/prompts/8_qa_validointi.md | 21 + .../prompts/9_observer_readme.md.md | 336 ++++++++ zipit/rest_api_check/pyproject.toml | 11 + zipit/rest_api_check/schemas.py | 14 + zipit/rest_api_check/tasks.yaml | 170 +++++ zipit/rest_api_check/test_main.py | 57 ++ zipit/template_pipeline.py | 652 ++++++++++++++++ zipit/template_runs/tmpl_blog/Dockerfile | 11 + .../tmpl_blog/docker-compose.yml | 5 + zipit/template_runs/tmpl_blog/main.py | 127 ++++ zipit/template_runs/tmpl_blog/models.py | 31 + zipit/template_runs/tmpl_blog/pyproject.toml | 11 + zipit/template_runs/tmpl_blog/report.json | 110 +++ zipit/template_runs/tmpl_blog/schemas.py | 35 + zipit/template_runs/tmpl_blog/spec.json | 90 +++ zipit/template_runs/tmpl_blog/test_main.py | 132 ++++ zipit/template_runs/tmpl_inventory/Dockerfile | 11 + .../tmpl_inventory/docker-compose.yml | 5 + zipit/template_runs/tmpl_inventory/main.py | 127 ++++ zipit/template_runs/tmpl_inventory/models.py | 34 + .../tmpl_inventory/pyproject.toml | 11 + .../template_runs/tmpl_inventory/report.json | 131 ++++ zipit/template_runs/tmpl_inventory/schemas.py | 38 + zipit/template_runs/tmpl_inventory/spec.json | 111 +++ .../template_runs/tmpl_inventory/test_main.py | 132 ++++ zipit/template_runs/tmpl_v1/Dockerfile | 11 + .../template_runs/tmpl_v1/docker-compose.yml | 5 + zipit/template_runs/tmpl_v1/main.py | 51 ++ zipit/template_runs/tmpl_v1/models.py | 18 + zipit/template_runs/tmpl_v1/pyproject.toml | 11 + zipit/template_runs/tmpl_v1/report.json | 65 ++ zipit/template_runs/tmpl_v1/schemas.py | 14 + zipit/template_runs/tmpl_v1/spec.json | 43 ++ zipit/template_runs/tmpl_v1/test_main.py | 59 ++ zipit/template_runs/tmpl_v2/Dockerfile | 11 + .../template_runs/tmpl_v2/docker-compose.yml | 5 + zipit/template_runs/tmpl_v2/main.py | 51 ++ zipit/template_runs/tmpl_v2/models.py | 18 + zipit/template_runs/tmpl_v2/pyproject.toml | 11 + zipit/template_runs/tmpl_v2/report.json | 63 ++ zipit/template_runs/tmpl_v2/schemas.py | 14 + zipit/template_runs/tmpl_v2/spec.json | 43 ++ zipit/template_runs/tmpl_v2/test_main.py | 58 ++ zipit/test_loop.py | 717 ++++++++++++++++++ zipit/todo-sovellus-fastapi-.zip | Bin 0 -> 101625 bytes zipit/todo_new/Dockerfile | 13 + zipit/todo_new/README.md | 63 ++ zipit/todo_new/agents.yaml | 160 ++++ zipit/todo_new/crew.py | 85 +++ zipit/todo_new/main.py | 56 ++ zipit/todo_new/models.py | 19 + .../todo_new/prompts/0_client_requirements.md | 66 ++ zipit/todo_new/prompts/1_data_models.py.md | 141 ++++ zipit/todo_new/prompts/2_coder_schemas.py.md | 150 ++++ zipit/todo_new/prompts/3_coder_main.py.md | 252 ++++++ .../prompts/4_coder_pyproject.toml.md | 220 ++++++ zipit/todo_new/prompts/5_qa_review.md | 182 +++++ zipit/todo_new/prompts/6_qa_test_main.py.md | 277 +++++++ zipit/todo_new/prompts/7_tester_dockerfile.md | 72 ++ .../todo_new/prompts/8_observer_readme.md.md | 380 ++++++++++ zipit/todo_new/pyproject.toml | 12 + zipit/todo_new/schemas.py | 12 + zipit/todo_new/tasks.yaml | 440 +++++++++++ zipit/todo_new/test_main.py | 94 +++ 175 files changed, 13311 insertions(+), 237 deletions(-) create mode 100644 zipit/loop_runs/baseline_v1/Dockerfile create mode 100644 zipit/loop_runs/baseline_v1/main.py create mode 100644 zipit/loop_runs/baseline_v1/models.py create mode 100644 zipit/loop_runs/baseline_v1/pyproject.toml create mode 100644 zipit/loop_runs/baseline_v1/report.json create mode 100644 zipit/loop_runs/baseline_v1/requirements create mode 100644 zipit/loop_runs/baseline_v1/schemas.py create mode 100644 zipit/loop_runs/baseline_v1/test_main.py create mode 100644 zipit/loop_runs/v2_strict/Dockerfile create mode 100644 zipit/loop_runs/v2_strict/main.py create mode 100644 zipit/loop_runs/v2_strict/models.py create mode 100644 zipit/loop_runs/v2_strict/pyproject.toml create mode 100644 zipit/loop_runs/v2_strict/report.json create mode 100644 zipit/loop_runs/v2_strict/requirements create mode 100644 zipit/loop_runs/v2_strict/schemas.py create mode 100644 zipit/loop_runs/v2_strict/test_main.py create mode 100644 zipit/loop_runs/v3_docker/Dockerfile create mode 100644 zipit/loop_runs/v3_docker/docker-compose.yml create mode 100644 zipit/loop_runs/v3_docker/main.py create mode 100644 zipit/loop_runs/v3_docker/models.py create mode 100644 zipit/loop_runs/v3_docker/pyproject.toml create mode 100644 zipit/loop_runs/v3_docker/report.json create mode 100644 zipit/loop_runs/v3_docker/requirements create mode 100644 zipit/loop_runs/v3_docker/schemas.py create mode 100644 zipit/loop_runs/v3_docker/test_main.py create mode 100644 zipit/loop_runs/v4_docker/Dockerfile create mode 100644 zipit/loop_runs/v4_docker/main.py create mode 100644 zipit/loop_runs/v4_docker/models.py create mode 100644 zipit/loop_runs/v4_docker/pyproject.toml create mode 100644 zipit/loop_runs/v4_docker/report.json create mode 100644 zipit/loop_runs/v4_docker/requirements create mode 100644 zipit/loop_runs/v4_docker/schemas.py create mode 100644 zipit/loop_runs/v4_docker/test_main.py create mode 100644 zipit/loop_runs/v5_feedback/Dockerfile create mode 100644 zipit/loop_runs/v5_feedback/main.py create mode 100644 zipit/loop_runs/v5_feedback/models.py create mode 100644 zipit/loop_runs/v5_feedback/pyproject.toml create mode 100644 zipit/loop_runs/v5_feedback/report.json create mode 100644 zipit/loop_runs/v5_feedback/requirements create mode 100644 zipit/loop_runs/v5_feedback/schemas.py create mode 100644 zipit/loop_runs/v5_feedback/test_main.py create mode 100644 zipit/loop_runs/v6_stable/Dockerfile create mode 100644 zipit/loop_runs/v6_stable/main.py create mode 100644 zipit/loop_runs/v6_stable/models.py create mode 100644 zipit/loop_runs/v6_stable/pyproject.toml create mode 100644 zipit/loop_runs/v6_stable/report.json create mode 100644 zipit/loop_runs/v6_stable/requirements create mode 100644 zipit/loop_runs/v6_stable/schemas.py create mode 100644 zipit/loop_runs/v6_stable/test_main.py create mode 100644 zipit/loop_runs/v7_enum_fix/Dockerfile create mode 100644 zipit/loop_runs/v7_enum_fix/docker-compose.yml create mode 100644 zipit/loop_runs/v7_enum_fix/main.py create mode 100644 zipit/loop_runs/v7_enum_fix/models.py create mode 100644 zipit/loop_runs/v7_enum_fix/pyproject.toml create mode 100644 zipit/loop_runs/v7_enum_fix/report.json create mode 100644 zipit/loop_runs/v7_enum_fix/requirements create mode 100644 zipit/loop_runs/v7_enum_fix/schemas.py create mode 100644 zipit/loop_runs/v7_enum_fix/test_main.py create mode 100644 zipit/loop_runs/v8_cache_fix/Dockerfile create mode 100644 zipit/loop_runs/v8_cache_fix/docker-compose.yml create mode 100644 zipit/loop_runs/v8_cache_fix/main.py create mode 100644 zipit/loop_runs/v8_cache_fix/models.py create mode 100644 zipit/loop_runs/v8_cache_fix/pyproject.toml create mode 100644 zipit/loop_runs/v8_cache_fix/report.json create mode 100644 zipit/loop_runs/v8_cache_fix/requirements create mode 100644 zipit/loop_runs/v8_cache_fix/schemas.py create mode 100644 zipit/loop_runs/v8_cache_fix/test_main.py create mode 100644 zipit/projekti.zip create mode 100644 zipit/projekti_clean/Dockerfile create mode 100644 zipit/projekti_clean/README.md create mode 100644 zipit/projekti_clean/agents.yaml create mode 100644 zipit/projekti_clean/crew.py create mode 100644 zipit/projekti_clean/main.py create mode 100644 zipit/projekti_clean/models.py create mode 100644 zipit/projekti_clean/prompts/0_client_requirements.md create mode 100644 zipit/projekti_clean/prompts/1_data_models.py.md create mode 100644 zipit/projekti_clean/prompts/2_coder_schemas.py.md create mode 100644 zipit/projekti_clean/prompts/3_coder_main.py.md create mode 100644 zipit/projekti_clean/prompts/4_coder_pyproject.toml.md create mode 100644 zipit/projekti_clean/prompts/5_qa_review.md create mode 100644 zipit/projekti_clean/prompts/6_qa_test_main.py.md create mode 100644 zipit/projekti_clean/prompts/7_tester_dockerfile.md create mode 100644 zipit/projekti_clean/prompts/8_observer_readme.md.md create mode 100644 zipit/projekti_clean/pyproject.toml create mode 100644 zipit/projekti_clean/schemas.py create mode 100644 zipit/projekti_clean/tasks.yaml create mode 100644 zipit/projekti_clean/test_main.py create mode 100644 zipit/rest-api-kyttjhallinnalle.zip create mode 100644 zipit/rest_api_check/Dockerfile create mode 100644 zipit/rest_api_check/README.md create mode 100644 zipit/rest_api_check/agents.yaml create mode 100644 zipit/rest_api_check/crew.py create mode 100644 zipit/rest_api_check/docker-compose.yml create mode 100644 zipit/rest_api_check/main.py create mode 100644 zipit/rest_api_check/models.py create mode 100644 zipit/rest_api_check/prompts/0_client_requirements.md create mode 100644 zipit/rest_api_check/prompts/1_manager_json-speksi.md create mode 100644 zipit/rest_api_check/prompts/2_data_models.py.md create mode 100644 zipit/rest_api_check/prompts/3_coder_schemas.py.md create mode 100644 zipit/rest_api_check/prompts/4_coder_main.py.md create mode 100644 zipit/rest_api_check/prompts/5_qa_test_main.py.md create mode 100644 zipit/rest_api_check/prompts/6_coder_pyproject.toml.md create mode 100644 zipit/rest_api_check/prompts/7_tester_dockerfile.md create mode 100644 zipit/rest_api_check/prompts/8_qa_validointi.md create mode 100644 zipit/rest_api_check/prompts/9_observer_readme.md.md create mode 100644 zipit/rest_api_check/pyproject.toml create mode 100644 zipit/rest_api_check/schemas.py create mode 100644 zipit/rest_api_check/tasks.yaml create mode 100644 zipit/rest_api_check/test_main.py create mode 100644 zipit/template_pipeline.py create mode 100644 zipit/template_runs/tmpl_blog/Dockerfile create mode 100644 zipit/template_runs/tmpl_blog/docker-compose.yml create mode 100644 zipit/template_runs/tmpl_blog/main.py create mode 100644 zipit/template_runs/tmpl_blog/models.py create mode 100644 zipit/template_runs/tmpl_blog/pyproject.toml create mode 100644 zipit/template_runs/tmpl_blog/report.json create mode 100644 zipit/template_runs/tmpl_blog/schemas.py create mode 100644 zipit/template_runs/tmpl_blog/spec.json create mode 100644 zipit/template_runs/tmpl_blog/test_main.py create mode 100644 zipit/template_runs/tmpl_inventory/Dockerfile create mode 100644 zipit/template_runs/tmpl_inventory/docker-compose.yml create mode 100644 zipit/template_runs/tmpl_inventory/main.py create mode 100644 zipit/template_runs/tmpl_inventory/models.py create mode 100644 zipit/template_runs/tmpl_inventory/pyproject.toml create mode 100644 zipit/template_runs/tmpl_inventory/report.json create mode 100644 zipit/template_runs/tmpl_inventory/schemas.py create mode 100644 zipit/template_runs/tmpl_inventory/spec.json create mode 100644 zipit/template_runs/tmpl_inventory/test_main.py create mode 100644 zipit/template_runs/tmpl_v1/Dockerfile create mode 100644 zipit/template_runs/tmpl_v1/docker-compose.yml create mode 100644 zipit/template_runs/tmpl_v1/main.py create mode 100644 zipit/template_runs/tmpl_v1/models.py create mode 100644 zipit/template_runs/tmpl_v1/pyproject.toml create mode 100644 zipit/template_runs/tmpl_v1/report.json create mode 100644 zipit/template_runs/tmpl_v1/schemas.py create mode 100644 zipit/template_runs/tmpl_v1/spec.json create mode 100644 zipit/template_runs/tmpl_v1/test_main.py create mode 100644 zipit/template_runs/tmpl_v2/Dockerfile create mode 100644 zipit/template_runs/tmpl_v2/docker-compose.yml create mode 100644 zipit/template_runs/tmpl_v2/main.py create mode 100644 zipit/template_runs/tmpl_v2/models.py create mode 100644 zipit/template_runs/tmpl_v2/pyproject.toml create mode 100644 zipit/template_runs/tmpl_v2/report.json create mode 100644 zipit/template_runs/tmpl_v2/schemas.py create mode 100644 zipit/template_runs/tmpl_v2/spec.json create mode 100644 zipit/template_runs/tmpl_v2/test_main.py create mode 100644 zipit/test_loop.py create mode 100644 zipit/todo-sovellus-fastapi-.zip create mode 100644 zipit/todo_new/Dockerfile create mode 100644 zipit/todo_new/README.md create mode 100644 zipit/todo_new/agents.yaml create mode 100644 zipit/todo_new/crew.py create mode 100644 zipit/todo_new/main.py create mode 100644 zipit/todo_new/models.py create mode 100644 zipit/todo_new/prompts/0_client_requirements.md create mode 100644 zipit/todo_new/prompts/1_data_models.py.md create mode 100644 zipit/todo_new/prompts/2_coder_schemas.py.md create mode 100644 zipit/todo_new/prompts/3_coder_main.py.md create mode 100644 zipit/todo_new/prompts/4_coder_pyproject.toml.md create mode 100644 zipit/todo_new/prompts/5_qa_review.md create mode 100644 zipit/todo_new/prompts/6_qa_test_main.py.md create mode 100644 zipit/todo_new/prompts/7_tester_dockerfile.md create mode 100644 zipit/todo_new/prompts/8_observer_readme.md.md create mode 100644 zipit/todo_new/pyproject.toml create mode 100644 zipit/todo_new/schemas.py create mode 100644 zipit/todo_new/tasks.yaml create mode 100644 zipit/todo_new/test_main.py diff --git a/network-poc/frontend/public/GUIDE.md b/network-poc/frontend/public/GUIDE.md index 6ae8c96..078fe9a 100644 --- a/network-poc/frontend/public/GUIDE.md +++ b/network-poc/frontend/public/GUIDE.md @@ -230,6 +230,144 @@ mitä luokkia importata. --- +## Rakennuspalaset vs. vapaa generointi + +Kielimalli voi generoida koodia kahdella perustavanlaatuisesti eri tavalla. +Ymmärtäminen milloin kumpikin toimii on avain luotettavaan koodigenerointi-pipelineen. + +### Tapa 1: Vapaa generointi (naivi) + +LLM generoi jokaisen tiedoston tyhjästä. Prompti kuvaa mitä halutaan, +malli tuottaa koko tiedoston — importeista lähtien. + +```mermaid +flowchart LR + P["Prompti"] --> LLM1["LLM: models.py"] + LLM1 --> V1{"Validointi"} + V1 -->|virhe| LLM1 + V1 -->|ok| LLM2["LLM: schemas.py"] + LLM2 --> V2{"Validointi"} + V2 -->|virhe| LLM2 + V2 -->|ok| LLM3["LLM: main.py"] + LLM3 --> V3{"..."} + + style V1 fill:#1a1e2e,stroke:#f85149,color:#c9d1d9 + style V2 fill:#1a1e2e,stroke:#f85149,color:#c9d1d9 + style V3 fill:#1a1e2e,stroke:#f85149,color:#c9d1d9 +``` + +**Ongelma:** Pieni malli (0.5B–7B) tekee toistuvia rakenteellisia virheitä: + +| Virhe | Esiintymistiheys | Selitys | +|-------|:---:|------| +| Puuttuva import | ~60% | `from datetime import date` unohtuu | +| SQLite `connect_args` | ~80% | Malli ei muista SQLite-erityisyyttä | +| Väärä Enum-käyttö | ~50% | Sekoittaa `sqlalchemy.Enum` ja `enum.Enum` | +| Poetry pyproject.toml:ssa | ~40% | Malli suosii Poetryä vaikka ohje sanoo uv | +| Testit kopioivat koko appin | ~70% | Malli ei osaa importata, luo uudet reitit | + +Retry-loopilla (virhe → uusi yritys virheviestin kanssa) osa korjautuu, +mutta **sama malli toistaa samoja virheitä** koska ne johtuvat harjoitusdatasta. +7 tiedoston projekti vaatii 7–14 LLM-kutsua ja 80–120 sekuntia. + +### Tapa 2: Rakennuspalaset (template pipeline) + +LLM:ltä pyydetään **vain JSON-speksi** — entiteetit, kentät ja tyypit. +Koodi kootaan mekaanisesti valmiista pohjista joiden rakenne on todistettavasti +oikein. + +```mermaid +flowchart LR + P["Projektin kuvaus"] --> LLM["LLM: JSON-speksi"] + LLM --> S["{ entities: [...] }"] + S --> T1["Template: models.py"] + S --> T2["Template: schemas.py"] + S --> T3["Template: main.py"] + S --> T4["Template: test_main.py"] + S --> T5["Template: Dockerfile"] + T1 & T2 & T3 & T4 & T5 --> D["Docker build + pytest"] + + style LLM fill:#1a1e2e,stroke:#d29922,color:#c9d1d9 + style S fill:#1a1e2e,stroke:#3fb950,color:#c9d1d9 + style D fill:#1a1e2e,stroke:#58a6ff,color:#c9d1d9 +``` + +**Idea:** Malli on hyvä päättämään *mitä* (entiteetit, kentät), mutta huono +muistamaan *miten* (importit, engine setup, testikonfiguraatio). Annetaan +mallin tehdä se missä se on hyvä, ja hoidetaan loput mekaanisesti. + +### LLM:n ainoa tehtävä + +Malli tuottaa JSON-rakenteen kuten: + +```json +{ + "project_name": "todo-app", + "entities": [ + { + "name": "Todo", + "table_name": "todos", + "fields": [ + {"name": "title", "sa_type": "String(255)", "py_type": "str", "nullable": false}, + {"name": "due_date", "sa_type": "Date", "py_type": "date | None", "nullable": true}, + {"name": "status", "sa_type": "String(20)", "py_type": "str", "default": "pending"} + ] + } + ], + "extra_imports": ["from datetime import date"] +} +``` + +Tämä on yksinkertainen tehtävä jossa pienikin malli onnistuu luotettavasti: +entiteettien tunnistus projektin kuvauksesta ja kenttätyyppien valinta. + +### Template täyttää loput + +Jokainen template on kuin madlib — aukot täytetään speksin datalla: + +**models.py template (yksinkertaistettu):** +```python +from sqlalchemy import create_engine, Column, Integer, {sa_types} +# ... aina samat importit, engine setup, SessionLocal ... + +class {entity.name}(Base): + __tablename__ = "{entity.table_name}" + id = Column(Integer, primary_key=True, index=True) + {field.name} = Column({field.sa_type}, nullable={field.nullable}) + # ... jokainen kenttä speksistä ... +``` + +Tulos: importit ovat aina oikein, `connect_args` on aina mukana, +testit importoivat aina `main.py`:stä eivätkä kopioi sitä. + +### Vertailu: mittaustulokset + +| | Vapaa generointi | Rakennuspalaset | +|---|:---:|:---:| +| LLM-kutsuja | 7–14 | **1** | +| Aika | 80–120s | **~20s** | +| Syntaksi OK | ~70% | **100%** | +| Docker build | vaihteleva | **100%** | +| Pytest läpi | 0% | **100%** | +| API toimii | ~30% | **100%** | + +### Milloin kumpikin toimii + +**Rakennuspalaset** kun: +- Projektin rakenne on tunnettu (FastAPI + SQLAlchemy CRUD) +- Laatu ja luotettavuus ovat tärkeitä +- Malli on pieni (0.5B–7B) + +**Vapaa generointi** kun: +- Projektin rakenne on epätavallinen +- Tarvitaan custom-logiikkaa jota template ei kata +- Malli on riittävän iso (>70B tai pilvi-API) + +Paras lopputulos syntyy yhdistelmällä: **rakennuspalaset perusrakenteelle, +vapaa generointi business-logiikalle**. + +--- + ## Laadun parantaminen ### 1. Isompi malli (suurin vaikutus) diff --git a/network-poc/frontend/src/components/AgentBar.astro b/network-poc/frontend/src/components/AgentBar.astro index 39c39fe..599592d 100644 --- a/network-poc/frontend/src/components/AgentBar.astro +++ b/network-poc/frontend/src/components/AgentBar.astro @@ -1,37 +1,37 @@ - +
- -
+ +
+
- Lisää + Add
- +