diff --git a/artifacts/iqpilot_hephaestusd_private/manifest.json b/artifacts/iqpilot_hephaestusd_private/manifest.json index 3543cbcf..80d39879 100644 --- a/artifacts/iqpilot_hephaestusd_private/manifest.json +++ b/artifacts/iqpilot_hephaestusd_private/manifest.json @@ -1,8 +1,8 @@ { "python/_iqclosure/_vendored.json": { "mode": 420, - "sha256": "4971aeda24749e9b8554757d9655115369b1764789afc80d8b4639dba812cba6", - "size": 1950 + "sha256": "5f2ed2b7705f64acb637ab4f4b0c61a4c0267dcb9bba478a22b8059a529dffaf", + "size": 1911 }, "python/_iqclosure/iqpilot/__init__.py": { "mode": 420, @@ -156,8 +156,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py": { "mode": 420, - "sha256": "0b8f118dc45ad0c3809855800960b47c893ee121ea75d94e8569dcce46d58ce5", - "size": 7312 + "sha256": "07b3ace231d9912f1926ffe7cef0f2a5d9649f75b7ebac2b9f296957d98be166", + "size": 7681 }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_model.py": { "mode": 420, @@ -171,8 +171,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py": { "mode": 420, - "sha256": "5865243a95ca4557d2a960302124a9898545cc3a8387e88ef569308e3d0f7077", - "size": 119 + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/fetcher.py": { "mode": 420, @@ -181,8 +181,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py": { "mode": 420, - "sha256": "e4f524c7595754fd9db86724a7bd9b67524c630275ac78599ab6838d1aa7d809", - "size": 11037 + "sha256": "da08ff891f57bc808d78104e21bb788553973f9e775d26ab4024f24969835e34", + "size": 11793 }, "python/_iqclosure/iqpilot/selfdrive/locationd/__init__.py": { "mode": 420, @@ -291,8 +291,8 @@ }, "python/_iqclosure/iqpilot/system/hardware/usb.py": { "mode": 420, - "sha256": "7c2cd7c6d5a859fb8454059da1b36e3b5ce4639aca6fea296b4f91096b46c1ba", - "size": 7257 + "sha256": "8c5b26f3967100ce0e5af7043a47a852fb5e8311f00ac95e7a263934c38e4ec0", + "size": 8069 }, "python/_iqclosure/iqpilot/system/loggerd/__init__.py": { "mode": 420, @@ -311,13 +311,13 @@ }, "python/_iqclosure/iqpilot/system/manager/process.py": { "mode": 420, - "sha256": "d036d82e2163a249186238375fb82f8dca250fae2272428ea47a46e4d6a8649d", - "size": 11519 + "sha256": "de8956b214d5856547f8ce37eb37b76f53aff515b7f63ebccb7aa60ea5bb1dd0", + "size": 11515 }, "python/_iqclosure/iqpilot/system/manager/process_config.py": { "mode": 420, - "sha256": "8b8de3f4d266213530dbc37248cf86c6a36241ec9b2f04afe0389e126fd2282f", - "size": 13597 + "sha256": "85f02ace1b82abaec47c3e0979040b47995fd61a7aa7f41f336fff58d555cad5", + "size": 13919 }, "python/_iqclosure/iqpilot/system/micd.py": { "mode": 420, @@ -376,28 +376,28 @@ }, "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "8d8808534c26b97369f5a69da3afbb2f6bdb2e2708c2479ff55a07574eab3cbd", - "size": 135552 + "sha256": "08cfd2deac71129329be99bdec41e95fe410cf4c7a267d41d887ce0513101ac9", + "size": 135480 }, "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "5ec7c8dc4e4d21f47b9e949a8960baacb470ab267752681ae840ea537646d29a", - "size": 67664 + "sha256": "1be18fb3404dac99d098e817a70282403660d27647ca3a0614e7161f38b439b1", + "size": 67680 }, "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "91e0fab17809c6a7231a956ef082033c906a8e5e44972a10bd32f9b653d634ea", - "size": 204640 + "sha256": "4c2f37d82ff5e3c18db3139195ea682784f441639b4eb89e3caec876cc52b819", + "size": 204616 }, "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "d7356d8cb1ef60ac025ec806f6fe1c1c734c234f5fe5256f17c1bfd3ff36052f", - "size": 69768 + "sha256": "7428c579a0c1ae1f3897ed99d3fe5313f90653b4756b78706d8f84914e391e01", + "size": 69752 }, "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "58c1601759b2f61b942d18bf7a07d16050c53424337882e040afb6d083dbd4a4", - "size": 203088 + "sha256": "12d27312a6aecdfdaec3315443b1102b811f86048de60d6d1e4e82aa29f8dafb", + "size": 203064 }, "python/iqpilot_private/konn3kt/flockd/__init__.py": { "mode": 420, @@ -406,13 +406,13 @@ }, "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3dea6e1a02a92a5cbebda37b768bcb4ba65224b4920307cded9247f738e6bdfe", - "size": 202184 + "sha256": "2e3a6754f46fc68dec0e08f771f7a2eb4744c11cb340b25e5686bf450c5c2ac8", + "size": 202128 }, "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "34a58774d1243add0c0dc5cc95d78e0b17b13ede3bbfb8f0de63dd47a4c6a39f", - "size": 68080 + "sha256": "0d6abae6ca2e0b62faf4261de60e45aeff23bc940707e2c6c3f39a6fa89f25b3", + "size": 68104 }, "python/iqpilot_private/konn3kt/hephaestus/__init__.py": { "mode": 420, @@ -421,68 +421,68 @@ }, "python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip": { "mode": 420, - "sha256": "60ce72178566082562ceeeeb84693f04640a2436d5d6c88657ee10fbf570adaa", + "sha256": "b0edbfc70a08e87a2be5b5d7be447eb5b566a25383122b48acb1cd25042d3cd4", "size": 1379342 }, "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "c83f7947d210eee887750ca5e494e859cd6a099371eede6740282ee5f95fc725", - "size": 268080 + "sha256": "aac079fe0de7cf33ab7a1f136d19b02c63a5809c3b3e45ffb685028000b2abd7", + "size": 268024 }, "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f7e0c6471e5ae85e4bdb7225d60cdd67e2a54bd7e9386436e6f9eef7249354b3", - "size": 406176 + "sha256": "91f673f51b7761e353d84eb7039b4cc14aa3bd170800727062e7d500e8c700b2", + "size": 406144 }, "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "83e7f6f18984c947811e2a17707def76fc2e563aea9eb37e9f37f5e09e377548", - "size": 68048 + "sha256": "05f12cf01d326d61f4ba2398ef935f03cd08062bf20232d744e2f669331eda5f", + "size": 68064 }, "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "20f4505b5c0a320c2bab7f5026f55a0a405d85840b40f89a624b417f764f8a07", - "size": 335848 + "sha256": "bf098ea52b1e6b4fad5cd103cdfcf688e52545ad12f13566fd25b90ef8c74aa6", + "size": 401368 }, "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "b1a14c8534fc8b20bef3661b9390db53a3f39086337d241f931af72a368f7da2", - "size": 272112 + "sha256": "2f8e0ba2693d72f454827a1fbe8db83cca04156ea2f971d0307452ec44b66bba", + "size": 337616 }, "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "cf3c6b74668adb6f8830e52c25aa17f4211c5fe4cbea88e50dbd3c077e92bd84", - "size": 134408 + "sha256": "ce5fb5f9def24c2f99001973ed8b0a3fff7c00a090e1b4ddcbf86af300a2f088", + "size": 134424 }, "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "2f30fe07926a2b6d51c6ec88ee4d57d0895d841e080bd3866a8750b5f9608aa1", - "size": 3915272 + "sha256": "0fbcd4812d5ea2ac7285b759fa7ba7ec692714405966d2a5a31b3e2e243c27d0", + "size": 4177424 }, "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "823b330d38eac09dbc22a01d1abe00d110f9d2cf8c5dc489ce58b05050db3dbe", - "size": 136472 + "sha256": "dd266157fe507279f572e72fccbeafab32e7c49fcac45ae184084bf0133a0b47", + "size": 136384 }, "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "02b76b8792b8f62ec4278dad6e63e5c8574479b8e714538c2cc73ebc216872eb", - "size": 68208 + "sha256": "a8de0bb91395a4ea8f10b576bc7f2eca979c11785207203f134d5747835d4d6f", + "size": 133752 }, "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "46197da34eed0bf10c17baf32081b6a9871ddc9f3807f5de376e41699286e38c", - "size": 67840 + "sha256": "e67cbd9a0b46d4b4c431644f30f6db4b89ed40382ce2691a1011b8d24d27314f", + "size": 67872 }, "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "144af2138c5e8f90c8432d9b90a8acafe995c1a030eb864aeb4e1b210b53b871", - "size": 135664 + "sha256": "32d3179e4fb31c10dced19f6a4dc8f3b40cc68faeddba8b7a28a95973b600cba", + "size": 135584 }, "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "3918430ba6f7dd7b654c73222bb7444afa2ef78be7bf595092b0813cebd61606", - "size": 269600 + "sha256": "146d4f34cd6f4ef296582c6f33e057895f9a8775539114a26377c5fc748ab7ad", + "size": 269536 }, "python/iqpilot_private/konn3kt/uploaderd/__init__.py": { "mode": 420, @@ -491,8 +491,8 @@ }, "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "77a0da7cf61eaa05df08c448460cb2e563929ee7c41257d9b5f0814d6d32016f", - "size": 336280 + "sha256": "dbd6a531b202f51124cf206e0e799452ab225947ca55e283fe8ffee70fce5bf0", + "size": 336264 }, "runtime": { "entries": { @@ -535,25 +535,25 @@ } }, "signatures": { - "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "lRrLXy0fYvSR0U/mJbw1BXUacNm7Jc6YRknVHM8DuT0gGsLp0y0xrYXSlarISHznZvV0JbPsNf3wgbQA5NZ3CA==", - "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "H0GqhuuUrSJYyT4UXbf7GujRXxGx/zgIn+ZDaiyjPghcYdy64bGH2fVWwEm69OC409ZtVB0sI69GlqGPMKF/Dg==", - "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "sF93qmp1nxbSBfqq0FBr/jI8QK1jP3wQgEYoys3McYNfC3IOk6V7eqL1AZz8Rj20j7Iu1TOpWsGsSVxo+G0xAg==", - "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "FcuWnfFQt7EWTRH5Lev1PhNpQposz/8d6p8DK6Jg7Zi+Rf93GUDgg3/t74IjHTq+aPSvR1J1ArKAUGRstGmpDw==", - "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "UkRfnbDSg3UPzTL6BgLM3pXTOKUqo/QA/DP1qCUVYWm7hTGX5balWH3inYKaxQTP6WkbIm0dGusMT2pldW7JAg==", - "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "VLvLBhbqm6+V8udYUKpv7hXQygiu3scB6FXmfjyRVKLvGcCsVUA2LKLNtH8Ff+TPsdEXRp7wCBMrVBVUslCiBA==", - "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "b9jhc7aE//J2/bE8fyglw3hO+KKSOEjnzDzKSPmfL+bVmVUvtdN/F/1lpvdYrb2RalkBvl7ktFOgymZKn0vrBA==", - "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "IovyDAeYBOAC8yv67H+UqiicwOd210iwDXMvNuTXbU4lbq0xuqa1uy7t/oCClt4P0BhZLgvJQ0KI/jqMRsbxBA==", - "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "xmIlShogvGuAh7RJOaOJSV/oB7EhvUpjPFiPHah97yvwg+pmrDYy2avmjWM8wCE3kKrKCFgEVW6ye6u4Eo0wCA==", - "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "Zbj2hW+Z5TMeXrXOVd7htJ1KAOkEOX7W4jqj1hulsO/hsUEzcIBFEYkCTGzEJ7jkU7QO1LzUjT04WyqlRAgOAA==", - "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "L+gCCPfiImd9gqtJ0jnSKzRWYnJjqB8f1ixz7WFJGDipbjMF1NDj24nwYLE21oUAqTdDSVnb3bQG9gtLkNbeBg==", - "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "Tu14xhw8hc5vgg0oJ4vYZSwuml+k80ZrWjf8VgTefxvG8JGvm4ZwZ34lVdesUfvZCAVCszkEUustAXVhTLu0Cw==", - "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "VvPIQ0Ffu2K0T806hzzK5sLdAtL6I0ORgLVW6Hl4VNgzwJucMPSHQChFn3q94G7KhD20F1g0UvBF+0NrgRVCDg==", - "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "qMi6U7oxlcOf9s3O+o2mFRorOYNxjK/MPrw0JxRJ2cVgG64hbzXou1yw/LZTVTAjun/EGCJgfXC313G/nGP9Cg==", - "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "/kjgZ33Ev8UgrJtqsyGWCMp5IIeqk6Kb9UGpwzZE5jrJiym15HjVQZnfWIqAECUOxBnJsIKrun5tcKKndfgsAQ==", - "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "/eUDZy8k0jVHALTMabHt3f9Va3xGc2FnXUX0ly7oSqaWPsoB/CivrxP+jlc5NcKNsigwqox97lDye291B1LOBg==", - "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "C+ObT5E4w707z7kVKW89SUsEzVb7ZExmDLKXnTh1a2oa92hzRusH60iIEMF8ofL0eZBORRmbNVsewVEEGQ6ZDQ==", - "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "2vqBy+02ldRHcVMlKUT+Vk6Hz7diGSxVct+FK/LcMCpXg5N51YqhvX5YdBgtZWnQpbvIPi1wyr9Zqs3oIT5hAw==", - "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "uHyniVaxBLNTVLx/40UH6pifUZF/xwwo9Jd8slS+0lyhAXMuZnmoQoHnaJRN4adTuEGOyKKyi/wisjFASuwqCA==", - "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "No8Xim23VntTR9aceGofLd/vNC3jVQSZ9PmB3qwS5osNqdUrEh/5Y5RpXWKU2/azhsOMqnlbT0ppARqNGVDKCQ==" + "python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so": "y6NAdtid8XIXYz19YyYB0ZqOcd/9FIaxGYVjVZrs+Yalzm/P6lIpgZOZieRlviu0K0YDOrz/2uygyxv4h0OQAg==", + "python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so": "DUhrNXdMydpJMxMbwk85ryVeNrkBs+JGJn5XqtrtzACo4lRjVWzOAE1gWq5UKu5Z5DuJMt6BW+MQIoEmq2KbDQ==", + "python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so": "7E8GaN5p2akJ82aeVR0aUmurEbL1J8N9YW0pKApvruDbj3ATtPnRDmdIyS3ZixPzmETxVoLa5Rk6XmKCnc5HBw==", + "python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so": "jeH1BFTZ3VWdQiyQoMiyGTJUprgFsAUdg+m8AhEo5kughfk9vTQ2piRopyyHulpJnHeCzoJDxifLSdQzr3SMAA==", + "python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so": "OQ2qXMzMut3gpoGMoo2dwdre7D3bL4LoPZq5QbCrJRUJbqYh7Ij4MEjxXHrt2ntENlIhkS7v+Zxqxq6D7JokDg==", + "python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so": "VPZFE07FZXF6iO0avqEzUqsbsmkz6plCKsKjKuHQeqHtaftnuzBIPo4qwFsWAWEKhtAktxis5Znd6V6SOELgCQ==", + "python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so": "CFosySDGDob1lFFPUViC/JN3cdrHEhm+XVTZ/X7273xAWtlraudLVBk+0hfZM4F8ttHf5Z/ZhyaqZhObzh4QDw==", + "python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so": "94SKt2vBgc81LpyLyWv/U2iiLTLHoDUBQk34Gnpo2CcW+v2Pj528rcAWfgnSkDYiBcCQsqmt0jJZ+5iIwqLvDA==", + "python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so": "/jtkUnNzMotTZ56+9qn77D+1zp24cq8zRAzJZFfWQDKjoQQsOIinLmnnShIssu8F6duQHJR75VN9PTz69A4FBQ==", + "python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so": "znyD7IW4vmmChAQkJOt5+p2tJkR2IHh6l72XjCO6pr1M++hhG37jocFMCol0xQn8qiLUJNo8ghavl0AT1n3EDg==", + "python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so": "nZxtx830u7TqiYF4UOYwIw2UhZ9jqWd/Ru2Yj9J752YRdN2kNxzT5oomCofID+hZrQJSTGqgmm6FsSDgXs7nAw==", + "python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so": "u8ekcMetg7aIfZ+dfcvubabAzoISmiKkFHESRIJ/58xcQId6dCiKMbUQq7uq+yjqTJsSlnb6PvMYfKDbbQa1AA==", + "python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so": "9Def0TAfWPk5us2l/mZlT6nYodkSuh5t4r4yDfNDdMtnvid5ZvnhciorDY1EjpN+LMEkatSrDNuIQRMA4AKOCg==", + "python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so": "kEzv4qu4BDyAhv0trjxPFN5Y/DYTVh8eRY4XR+XCg42Wl76WGJKk6/0tfM7t7ReV3ucwFJC71uLswvcynOxRDg==", + "python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so": "CWAClei3CTMzJWBGrh64nshzRplFU0r8LIIGlQOK+hOTLwQSc3/ULzhnp/sog8SFhfznU6aytN2td+WxImJdAQ==", + "python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so": "rZsFrQp4hpAt+iZY9NO3O+HX/A5QF67qJf1XJms5UKJhlbNlBokD3UGn5fDzgeH1KfA600BqnnZ6CwmRTUkSAQ==", + "python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so": "cim1skYYn7MiEaBFLdroUrNHE+AVoCbWhgoSeIhBZTJDoms9KiQznZPOhb1KRizepLxoazKGpaEdfOfm0lYCAA==", + "python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so": "C5VaMh5+7/cO6lMoxfaBb35iExodnfGr2t7MT63F87fRMFFcCYLgCvOtAutdBVcIzxhmqzkDPKngqkW3peaqAw==", + "python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so": "iN/aUvUyIC7JbB0hsoF3t3XdcIIkB0t+XlJA37SkVX2Af2MrI1h32ef1oHUX/LQCfUmEkpX876CE+/l3HrMEAg==", + "python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so": "wLjiYrvkAbwNEYKQOCbowpx8Aa1KszadC8Gz/5PuvPvwub9n+VspqxACFDc1ntGLjjzFzy2tL/F4aTgCbldnCw==" } } diff --git a/artifacts/iqpilot_hephaestusd_private/manifest.json.sig b/artifacts/iqpilot_hephaestusd_private/manifest.json.sig index 5108cec6..df6809a2 100644 --- a/artifacts/iqpilot_hephaestusd_private/manifest.json.sig +++ b/artifacts/iqpilot_hephaestusd_private/manifest.json.sig @@ -1 +1 @@ -Li23uJ7UFsHmYsNYtk8ZvF7oFHZoV8tl9yuzsFSkEzPBnX5MQJwpihQtEwVC1mn1EAHwyjj7nJ/uaZww1o9wCg== +ELqO/Kj66aU/CxO4q45RX59wSIVRVBgUtHng23ivUUi1Vivm77ZeOBE4lqc9n6ibjM0lNiye30lDYN5hnt/jAA== diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json index ff65a9a0..9ab71511 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/_vendored.json @@ -25,7 +25,6 @@ "iqpilot.selfdrive.iqmodeld.egpu_helpers", "iqpilot.selfdrive.iqmodeld.egpu_model", "iqpilot.selfdrive.iqmodeld.model_bundle_downloader", - "iqpilot.selfdrive.iqmodeld.models", "iqpilot.selfdrive.iqmodeld.models.fetcher", "iqpilot.selfdrive.iqmodeld.models.helpers", "iqpilot.selfdrive.locationd.calibrationd", diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py index 1317d78b..652fe37d 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/egpu_helpers.py @@ -71,6 +71,11 @@ def egpu_oob_pkl_path(meta: dict) -> str: return os.path.join(Paths.model_root(), f"egpu_{meta['key']}_{meta['sha256'][:8]}_amd_policy_oob.pkl") +def egpu_model_oob_pkl_path(meta: dict) -> str: + from iqpilot.system.hardware.hw import Paths + return os.path.join(Paths.model_root(), f"egpu_{meta['key']}_{meta['sha256'][:8]}_amd_model_oob.pkl") + + def onnx_cache_path(meta: dict) -> str: from iqpilot.system.hardware.hw import Paths return os.path.join(Paths.model_root(), f"{meta['model_name']}_{meta['sha256'][:8]}.onnx") @@ -156,13 +161,21 @@ def download_onnx(meta: dict, progress_cb=None) -> str: return path -def download_precompiled(meta: dict, progress_cb=None, policy: bool = False, oob: bool = False) -> str | None: - field = "egpu_oob_artifact" if oob else "egpu_policy_artifact" if policy else "egpu_artifact" +ARTIFACT_PATHS = { + "egpu_model_oob_artifact": egpu_model_oob_pkl_path, + "egpu_oob_artifact": egpu_oob_pkl_path, + "egpu_policy_artifact": egpu_policy_pkl_path, + "egpu_artifact": egpu_pkl_path, +} + + +def download_precompiled(meta: dict, progress_cb=None, policy: bool = False, oob: bool = False, field: str | None = None) -> str | None: + field = field or ("egpu_oob_artifact" if oob else "egpu_policy_artifact" if policy else "egpu_artifact") art = meta.get(field) if not art or not (art.get("objects") or art.get("hf_path")): return None from iqpilot.selfdrive.iqmodeld.model_bundle_downloader import download_hf_file, download_lfs_bundle - dest = egpu_oob_pkl_path(meta) if oob else egpu_policy_pkl_path(meta) if policy else egpu_pkl_path(meta) + dest = ARTIFACT_PATHS[field](meta) if art.get("hf_path"): try: return download_hf_file(art["hf_path"], dest, art["sha256"], int(art.get("size", 0)), progress_cb=progress_cb) diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py index 5ece1c07..e69de29b 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/ -""" diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py index 4b9a2f4d..8f89db33 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py @@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False): params.put(_RUNNER_CACHE_KEY, int(runner_type)) return runner_type + + +def get_selected_model_name(params: Params = None) -> str: + params = Params() if params is None else params + try: + stored = params.get(_ACTIVE_BUNDLE_KEY) + if not stored: + return "Default (CD210)" + if not isinstance(stored, dict) or not stored.get("ref"): + return "Model unavailable" + if stored["ref"] == _DEFAULT_BUNDLE_REF: + return stored.get("displayName") or "Default (CD210)" + return stored.get("internalName") or stored.get("displayName") or "Model unavailable" + except Exception: + return "Model unavailable" + + +def get_cached_model_bundles(params: Params = None) -> list: + params = Params() if params is None else params + try: + return _load_cached_manifest_bundles(params) + except Exception: + return [] diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/hardware/usb.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/hardware/usb.py index 15be6f29..8c8a2d7e 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/hardware/usb.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/hardware/usb.py @@ -13,6 +13,7 @@ The USB eGPU dock is identified by VID/PID only. comma's internal codename for it is deliberately not used here: IQ.Pilot runs these models on several backends (eGPU dock, eMac), so the naming stays about the role, not the vendor. """ +import subprocess from pathlib import Path # comma's USB eGPU dock, both shipped USB IDs. The ROM ids are the same board @@ -124,6 +125,26 @@ def get_link_error_count(soc: Path = SOC_PLATFORM_PATH) -> int: return sum(link_errors(c) for c in usb_controllers(soc)) +def host_role_controller(soc: Path = SOC_PLATFORM_PATH, udc_root: Path = UDC_PATH) -> Path | None: + ctrl = link_controller(udc_root) + return (soc / ctrl / "mode") if ctrl else None + + +def ensure_host_role(mode_path: Path | None = None) -> bool: + """A usbpd blip mid-drive can leave the Type-C controller in 'none'/'peripheral', and the + dock can never re-enumerate until something puts the port back into host mode.""" + path = mode_path if mode_path is not None else host_role_controller() + if path is None: + return False + current = read(path) + if current == "host": + return True + if current is None: + return False + rc = subprocess.run(["sudo", "-n", "sh", "-c", f"echo host > {path}"], check=False, capture_output=True) + return rc.returncode == 0 and read(path) == "host" + + def egpu_dock_present(root: Path = USB_DEVICES_PATH) -> bool: """A dock in ROM/bootloader state is deliberately NOT counted as present: it enumerates but cannot serve a GPU until vendor firmware is flashed.""" diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process.py index c0fe7caa..36ec524a 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process.py @@ -221,7 +221,6 @@ class BundleProcess(NativeProcess): def __init__(self, name, bundle, entry, should_run, enabled=True, sigkill=False, restart_if_crash=False): self.bundle = bundle self.entry = entry - self.restart_if_crash = restart_if_crash runner_path = preferred_runner_path() runner_cmd = str(runner_path) if runner_path.is_absolute() else "./iqpilot_bundle_runner" runner_cwd = ".iqpilot/runtime_root" if runner_path.is_absolute() else "system/proprietary_runtime" @@ -238,6 +237,7 @@ class BundleProcess(NativeProcess): should_run=should_run, enabled=enabled, sigkill=sigkill, + restart_if_crash=restart_if_crash, ) def start(self) -> None: diff --git a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process_config.py b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process_config.py index 2b1de9ae..d7586967 100644 --- a/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process_config.py +++ b/artifacts/iqpilot_hephaestusd_private/python/_iqclosure/iqpilot/system/manager/process_config.py @@ -67,6 +67,9 @@ def qcomgps(started: bool, params: Params, CP: car.CarParams) -> bool: def always_run(started: bool, params: Params, CP: car.CarParams) -> bool: return True +def nav_assist(started: bool, params: Params, CP: car.CarParams) -> bool: + return params.get_bool("IQNavAssistDev") and params.get_bool("IQAndroidNav") + def only_onroad(started: bool, params: Params, CP: car.CarParams) -> bool: return started @@ -176,6 +179,7 @@ procs = [ PythonProcess("journald", "iqpilot.system.journald", only_onroad, platform.system() != "Darwin"), PythonProcess("micd", "iqpilot.system.micd", or_(iscar, livestream)), PythonProcess("timed", "iqpilot.system.timed", always_run, enabled=not PC), + BundleProcess("navassistd", "iqpilot_navassist_private", "iqpilot_private.navassist.daemon", nav_assist, enabled=TICI, restart_if_crash=True), PythonProcess("dmonitoringmodeld", "iqpilot.selfdrive.dmonitoringmodeld.dmonitoringmodeld", driver_monitoring, enabled=not PC), @@ -248,7 +252,7 @@ procs += [ PythonProcess("mapd_manager", "iqpilot.iq_maps.orchestrator", and_(only_offroad, not_low_power)), # locationd - NativeProcess("iqlocd", "iqpilot/selfdrive/iqlocd", ["./iqlocd"], only_onroad), + NativeProcess("iqlocd", "iqpilot/selfdrive/iqlocd", ["./iqlocd"], only_onroad, restart_if_crash=True), ] managed_processes = {p.name: p for p in procs} diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so index ee064e96..59572800 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/archive_codec.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so index ec61f484..7c380eef 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_keys.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so index 8c8fa030..70ca833f 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/backup_orchestrator.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so index e3018c11..52c98b89 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/cbc_vault.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so index 4a65717a..c7fd9064 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/backups/imahelper.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so index 339bbb68..36a08b85 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/flockd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so index 23bfc0c9..68d34e96 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/flockd/signatures.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip index bdc47cf5..3f258af5 100644 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/_vendor/localapi_runtime.zip differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so index 5aa4c0ed..c1c402b4 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_auth.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so index 0991bdfd..b650fcd8 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_gatt.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so index d007bfb0..d338bb02 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_rpc_dispatch.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so index 0d96d04b..272fcb8f 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/ble_transportd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so index acab6792..12d0d1ff 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/bt_gamepad.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so index 92f7eb82..dd4b819b 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/cloud_routes.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so index 46776913..df85ace6 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/hephaestusd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so index 07d14318..f93af2e0 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/kwp2000.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so index 9b72d3ab..a6d665c5 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/manage_hephaestusd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so index ba238e27..9dba9de7 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/motd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so index ed10ab96..4d73833b 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/tp20.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so index 0a97a439..8845e89d 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/hephaestus/vw_pq_flasher.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so index b9b87c5f..5d744433 100755 Binary files a/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_hephaestusd_private/python/iqpilot_private/konn3kt/uploaderd/iquploaderd.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/manifest.json b/artifacts/iqpilot_model_selector_private/manifest.json index 14dcd5d9..2a6966e4 100644 --- a/artifacts/iqpilot_model_selector_private/manifest.json +++ b/artifacts/iqpilot_model_selector_private/manifest.json @@ -1,8 +1,8 @@ { "python/_iqclosure/_vendored.json": { "mode": 420, - "sha256": "870f5bc6aa5d8b528dc8e54bbaf03088193a5e764da6d7eb59706e1535dfd766", - "size": 868 + "sha256": "4028da084b0134130e996cf62c37b9f18b04a45f0fb79e68d50cfff5274a9a03", + "size": 829 }, "python/_iqclosure/iqpilot/__init__.py": { "mode": 420, @@ -91,8 +91,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py": { "mode": 420, - "sha256": "5865243a95ca4557d2a960302124a9898545cc3a8387e88ef569308e3d0f7077", - "size": 119 + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "size": 0 }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/fetcher.py": { "mode": 420, @@ -101,8 +101,8 @@ }, "python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py": { "mode": 420, - "sha256": "e4f524c7595754fd9db86724a7bd9b67524c630275ac78599ab6838d1aa7d809", - "size": 11037 + "sha256": "da08ff891f57bc808d78104e21bb788553973f9e775d26ab4024f24969835e34", + "size": 11793 }, "python/_iqclosure/iqpilot/system/__init__.py": { "mode": 420, @@ -176,7 +176,7 @@ }, "python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "6a43103927cc37690f78758c36db0fcc3bf97ce05f94acd3f5a84ebf914d2a50", + "sha256": "c3278b4461b846f8e126a7683f0167ad45c83a10fabbafcbe47fe63e1afb0438", "size": 67640 }, "python/iqpilot_private/models/__init__.py": { @@ -186,38 +186,38 @@ }, "python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f3e34dd9c64d25bd2f5b729ae94e9bedd63f9b585f772f35d94f382bef4f864c", + "sha256": "ab6e34a85b4af3002f69115f3cded0e3340f29a3af37c43b7322dd76d0305d77", "size": 133864 }, "python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "469cb16c85db9ec1f66d614039706e8243612abdb44e578fbc964009fb598608", + "sha256": "5de802e8a3f7b1ea0e89c100c87d692731e25e428f6ff49466f6c6311f88fd36", "size": 68144 }, "python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "8c977c4fa77753b7ab325f3988ed8535a11a0f269c1f3a8d74b4ebf3fa951d33", + "sha256": "b2d02947f269bb1b13ceab9c822d350f6335e34c1111460acd8b4821fadaa7f9", "size": 134056 }, "python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "f499359e1c4f0e7ca0b495991267d3ec96813862bc098e7cbb62afc59bb8a306", - "size": 136128 + "sha256": "fa6acc2bbfaf099dc0d0676aa59ccb37c0788c07ca99ae8d12ef8c24c11102ea", + "size": 201712 }, "python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "92e357d4c38827dd85373fe231e33f67a6a139ceae13f1031696ccb82dd0e872", + "sha256": "fc15899a920fa29e26e3a6992b33ae73d7795e4758634301494c3671933e28a1", "size": 68080 }, "python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "a5c874def693b474f2f834efb7c35041bc5b9ae94c95d8eed70119591dfebcb2", + "sha256": "e7232d83a28707b604c8f602414ea3f450b1f4d1a81ef536eddb318553198c8c", "size": 203576 }, "python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": { "mode": 493, - "sha256": "8cd40e577d35d9f6d263b82cd3538de9cbec1cfefb937eee62d8610fab1a55d8", - "size": 340016 + "sha256": "4ea2460b166a57f4b85c13a2875abbfd16166ddf23fffb267f5962c30ec0120b", + "size": 339984 }, "runtime": { "entries": { @@ -228,13 +228,13 @@ } }, "signatures": { - "python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": "gLnDq3G09ay0HyWUBNAUwdsG5UBZoVZB9WGa37xLga9AJa3Z36XI9orNi5/gdKFArIkjZXNk8RkRHfXauLQeBw==", - "python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": "45g/h58OcdFMdfN2qL3qEgAjHDlCpgl6asqg5iC7uudqQ+hkhd5snuNG7k0mCrQJZGQQ8RoRITMUUxqi+P50CQ==", - "python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": "2l6hQ1qK+k/rYrcnci9NwsZMXzhb+tdWkSrc8cIDgs0cvfPpzOmzTCDW9W2oKZpjmvV6fvKtIvc1mOutqc/NCA==", - "python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": "ui3uSKS2m9PyKJOeFE5W8K6Qgzrl94JAig4eBGGJJjFcJ74r0fkdwj7Xft7g/DOjfNq0/1K5eynO41sRXGOWDw==", - "python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": "tcwYHuntp8+uT3+T6Yt6JcPNehom6gHoYHFs8vNtiXZ+ihYTUSCPx20apn+WdGKjwj7xZIsEgBzfpSBQgiKCAA==", - "python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": "RjXxVhDtSo/sqt3J5Ab6JZOqsYZUce9MltRBQ6VSEEnHXcJS/NhIrEOfodXJminO1EQxTw7nW/afbMUGM3FFBw==", - "python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": "73KWi0yqKZPYwNMztjWYUY5GbD3B+flzrlmxrCo8NgDNA4q/flsjG4lhEdq6y0Q2UBSl0u3hRSsF/aSLKZeeBA==", - "python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": "k4ZfRTRE1kiKmwVclS2wa3ylNzt1XVuWkZS9AKuajtHkQc/08tQaIDcjAsVfKYJk5diHZICkMp5lX1fyOqdPCQ==" + "python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so": "zg9OPSoUt3mdQw41+dWL8IIYA/SRdGTgnB3iSbyoPXnbMGTv3PWFyugPQUilRiWKEeAgfkpSeDccm1LzWnLZAA==", + "python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so": "ykk9ja8+jHrbO7Pq7LbNAXYQ1Ij5XnICV6v45QO9I7YMPwqxrSkxC7JNUNR1g/YxKhzrSiit/7ReJ42HQGIsBw==", + "python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so": "Z3w0t85Glo48qHbqmq0KjTVNuX+/7dwPRTVQd/zQEkWf6jVkORxbIJS97lFaEb/QiBrpis9LG8qRS0EXCSAGAg==", + "python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so": "8u38cdxd9SIORVaUuil48bxaqTlwlBb3YV3NVYX7QNjyaBK+LrAVhQvv+2VqpX49Vs0AMXgtbfBo8hKlFLukDA==", + "python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so": "ll6Y2W7YFaJFucFcS9i5aDv4HAlUdnqEGT0CpjRTcri5Euyq+8hf2j2GHBJ17ag2T2Z+SwwnN9U4BCLy9oJoAQ==", + "python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so": "pNuaWCTWnXjksG6wmu6BjHFvu+I5QOzXAnfAb24BThtEGQIHGGU/FRf1Kekf5Exi73SfLnaB4wxEOuGPH0zKAA==", + "python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so": "S5UzFxouWi78V0ppT1BzLc/iWObNPme+kgN9mB1yuPSOnldI6QIAf3yc8T5p0hk3CqHxR1CUYJJqJ4qCiceHBQ==", + "python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so": "ELzpErId/IAkfiVr31UJyjFHxWWfNy3DUrtqGCfngpGoOUbBRatGtXtA8ZosG/cAZGXXnScZnrpKDVLImZCVBQ==" } } diff --git a/artifacts/iqpilot_model_selector_private/manifest.json.sig b/artifacts/iqpilot_model_selector_private/manifest.json.sig index d1d10bfc..d4979477 100644 --- a/artifacts/iqpilot_model_selector_private/manifest.json.sig +++ b/artifacts/iqpilot_model_selector_private/manifest.json.sig @@ -1 +1 @@ -VKaSq35mXT1Nv9JNxFhrAse02ZheQGYFKtULc85QsP/MMkDHngMcXXA3NCtPaQ6D+jnrHIzHNdQpgz88UHfRCg== +uX7Iom4jkeTc0G6lDWiznX0NTnUk98IpYuqOrYMALAhujzS/cXqquWEWOMlIPjcONh0g2ACV/ltYFidA9E+OBQ== diff --git a/artifacts/iqpilot_model_selector_private/python/_iqclosure/_vendored.json b/artifacts/iqpilot_model_selector_private/python/_iqclosure/_vendored.json index 5966d743..e3491247 100644 --- a/artifacts/iqpilot_model_selector_private/python/_iqclosure/_vendored.json +++ b/artifacts/iqpilot_model_selector_private/python/_iqclosure/_vendored.json @@ -10,7 +10,6 @@ "iqpilot.common.utils", "iqpilot.konn3kt.cloud_client", "iqpilot.selfdrive.iqmodeld.config", - "iqpilot.selfdrive.iqmodeld.models", "iqpilot.selfdrive.iqmodeld.models.fetcher", "iqpilot.selfdrive.iqmodeld.models.helpers", "iqpilot.system.hardware", diff --git a/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py b/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py index 5ece1c07..e69de29b 100644 --- a/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py +++ b/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/__init__.py @@ -1,3 +0,0 @@ -""" -Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos/ -""" diff --git a/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py b/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py index 4b9a2f4d..8f89db33 100644 --- a/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py +++ b/artifacts/iqpilot_model_selector_private/python/_iqclosure/iqpilot/selfdrive/iqmodeld/models/helpers.py @@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False): params.put(_RUNNER_CACHE_KEY, int(runner_type)) return runner_type + + +def get_selected_model_name(params: Params = None) -> str: + params = Params() if params is None else params + try: + stored = params.get(_ACTIVE_BUNDLE_KEY) + if not stored: + return "Default (CD210)" + if not isinstance(stored, dict) or not stored.get("ref"): + return "Model unavailable" + if stored["ref"] == _DEFAULT_BUNDLE_REF: + return stored.get("displayName") or "Default (CD210)" + return stored.get("internalName") or stored.get("displayName") or "Model unavailable" + except Exception: + return "Model unavailable" + + +def get_cached_model_bundles(params: Params = None) -> list: + params = Params() if params is None else params + try: + return _load_cached_manifest_bundles(params) + except Exception: + return [] diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so index 2480d458..d5735a1c 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/__init__.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so index 4f915d44..4c0e9e33 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/big_catalog.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so index 899456c8..1f5b3578 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/egpu_model.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so index 3ce3cebe..e232716b 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/emac_model_meta.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so index 9e3b90c0..51ace606 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/fetcher.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so index c4d20492..c4bfb496 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/git_auth.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so index ddca3220..ed121c88 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/helpers.cpython-312-aarch64-linux-gnu.so differ diff --git a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so index 728584ca..e74e0cbf 100755 Binary files a/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so and b/artifacts/iqpilot_model_selector_private/python/iqpilot_private/models/manager.cpython-312-aarch64-linux-gnu.so differ diff --git a/iqpilot/selfdrive/iqmodeld/models/helpers.py b/iqpilot/selfdrive/iqmodeld/models/helpers.py index 4b9a2f4d..8f89db33 100644 --- a/iqpilot/selfdrive/iqmodeld/models/helpers.py +++ b/iqpilot/selfdrive/iqmodeld/models/helpers.py @@ -311,3 +311,26 @@ def get_active_model_runner(params: Params = None, force_check=False): params.put(_RUNNER_CACHE_KEY, int(runner_type)) return runner_type + + +def get_selected_model_name(params: Params = None) -> str: + params = Params() if params is None else params + try: + stored = params.get(_ACTIVE_BUNDLE_KEY) + if not stored: + return "Default (CD210)" + if not isinstance(stored, dict) or not stored.get("ref"): + return "Model unavailable" + if stored["ref"] == _DEFAULT_BUNDLE_REF: + return stored.get("displayName") or "Default (CD210)" + return stored.get("internalName") or stored.get("displayName") or "Model unavailable" + except Exception: + return "Model unavailable" + + +def get_cached_model_bundles(params: Params = None) -> list: + params = Params() if params is None else params + try: + return _load_cached_manifest_bundles(params) + except Exception: + return [] diff --git a/iqpilot/selfdrive/ui/mici/layouts/settings/models.py b/iqpilot/selfdrive/ui/mici/layouts/settings/models.py index f8c3623b..a2d414c6 100644 --- a/iqpilot/selfdrive/ui/mici/layouts/settings/models.py +++ b/iqpilot/selfdrive/ui/mici/layouts/settings/models.py @@ -20,7 +20,7 @@ from iqpilot.selfdrive.ui.mici.widgets.stock_button import BigButton, BigParamCo from iqpilot.selfdrive.ui.mici.widgets.stock_dialog import BigConfirmationDialog from iqpilot.selfdrive.ui.mici.layouts.settings.iq_widgets import MappedParamToggle -from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle +from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle, get_selected_model_name, get_cached_model_bundles from iqpilot.selfdrive.iqmodeld.models.runners.model_runner import CUSTOM_MODEL_PATH from iqpilot.system.ui.lib.multilang import tr @@ -328,7 +328,7 @@ class ModelsLayoutMici(NavScroller): gui_app.push_widget(BigConfirmationDialog(tr("slide to\nredownload"), self._redownload_icon, _redownload, red=True)) def _show_folders(self): - bundles = list(self.model_manager.availableBundles) + bundles = list(self.model_manager.availableBundles) or get_cached_model_bundles(ui_state.params) favorites = self._read_favorites() btns = [] @@ -567,18 +567,7 @@ class ModelsLayoutMici(NavScroller): self._steer_delay.set_value(f"+{sw:.2f} s offset") def _active_model_name(self) -> str: - if not self._has_active_bundle_param(): - return "Default (CD210)" - - try: - active = self.model_manager.activeBundle - if is_default_bundle(active): - return active.displayName or "Default (CD210)" - if active and active.ref: - return _display_model_name(active) - except Exception: - pass - return "Default (CD210)" + return tr(get_selected_model_name(ui_state.params)) def _download_progress_text(self, bundle=None) -> str: bundle = bundle or getattr(self.model_manager, "selectedBundle", None) diff --git a/iqpilot/selfdrive/ui/tests/test_offline_model_selection.py b/iqpilot/selfdrive/ui/tests/test_offline_model_selection.py new file mode 100644 index 00000000..756abbe8 --- /dev/null +++ b/iqpilot/selfdrive/ui/tests/test_offline_model_selection.py @@ -0,0 +1,67 @@ +""" +Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos +""" +import ast +import copy +from pathlib import Path +from types import SimpleNamespace + +import pytest + +from iqpilot.selfdrive.iqmodeld.models import helpers + + +class Params: + def __init__(self, values=None): + self.values = values or {} + + def get(self, key): + return self.values.get(key) + + def put(self, key, value): + self.values[key] = value + + def remove(self, key): + self.values.pop(key, None) + + def get_bool(self, key): + return bool(self.get(key)) + + +@pytest.fixture +def saved(): + bundle = helpers._load_default_bundle_dict() + bundle.update(ref="custom", internalName="Saved custom", displayName="Saved Custom Model") + return Params({"ModelManager_ActiveBundle": bundle}) + + +def test_both_ui_names_without_manager(saved): + before = copy.deepcopy(saved.values) + for relative, cls, method in [ + ("ui/layouts/settings/iq_panels.py", "ModelsLayout", "_update_state"), + ("selfdrive/ui/mici/layouts/settings/models.py", "ModelsLayoutMici", "_active_model_name"), + ]: + path = Path(__file__).resolve().parents[3] / relative + tree = ast.parse(path.read_text()) + node = next(n for c in tree.body if isinstance(c, ast.ClassDef) and c.name == cls + for n in c.body if isinstance(n, ast.FunctionDef) and n.name == method) + env = {"tr": lambda text: text, "get_selected_model_name": helpers.get_selected_model_name, + "ui_state": SimpleNamespace(params=saved, sm={"iqModelManager": None}, is_offroad=lambda: True)} + exec(compile(ast.Module(body=[node], type_ignores=[]), str(path), "exec"), env) + values = [] + item = SimpleNamespace(set_value=values.append, set_enabled=lambda value: None) + ui = SimpleNamespace(_update_refresh_state=lambda: None, _handle_bundle_download_progress=lambda: None, + current_model_item=SimpleNamespace(action_item=item, set_description=lambda value: None), + redownload_item=SimpleNamespace(action_item=item), _can_redownload=lambda: False, + _redownload_target_bundle=lambda: None) + result = env[method](ui) + assert (result if method == "_active_model_name" else values[0]) == "Saved custom" + assert saved.values == before + + +@pytest.mark.parametrize("stored,expected", [(None, "Default (CD210)"), ({"ref": "default"}, "Default (CD210)"), + ({"internalName": "Broken"}, "Model unavailable"), ("bad", "Model unavailable")]) +def test_saved_name_states(stored, expected): + assert helpers.get_selected_model_name(Params({"ModelManager_ActiveBundle": stored})) == expected + + diff --git a/iqpilot/ui/layouts/settings/iq_panels.py b/iqpilot/ui/layouts/settings/iq_panels.py index e7bb6535..02e0d4de 100644 --- a/iqpilot/ui/layouts/settings/iq_panels.py +++ b/iqpilot/ui/layouts/settings/iq_panels.py @@ -55,7 +55,7 @@ import time from iqpilot.cereal import custom from dataclasses import dataclass from iqpilot.selfdrive.car.vehicle_catalog import load_catalog -from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle +from iqpilot.selfdrive.iqmodeld.models.helpers import select_default_model, is_default_bundle, get_selected_model_name, get_cached_model_bundles from iqpilot.selfdrive.iqmodeld.models.runners.model_runner import CUSTOM_MODEL_PATH from iqpilot.selfdrive.ui.layouts.settings import settings as OP from iqpilot.selfdrive.ui.layouts.settings.toggles import TogglesLayout @@ -1908,7 +1908,7 @@ class ModelsLayout(Widget): return PickerItem(bundle.ref, {'display_name': bundle.displayName, 'short_name': bundle.internalName}) def _get_folders(self, favorites): - bundles = self.model_manager.availableBundles + bundles = self.model_manager.availableBundles or get_cached_model_bundles(ui_state.params) folders = {} for bundle in bundles: folders.setdefault(next((ov_ride.value for ov_ride in bundle.overrides if ov_ride.key == "folder"), ""), []).append(bundle) @@ -2000,14 +2000,7 @@ class ModelsLayout(Widget): self._update_refresh_state() self.model_manager = ui_state.sm["iqModelManager"] self._handle_bundle_download_progress() - active = self.model_manager.activeBundle if self.model_manager else None - if is_default_bundle(active): - active_name = active.displayName or tr("Default (CD210)") - elif self._has_active_bundle_param() and active and active.ref: - active_name = active.internalName - else: - active_name = tr("Default (CD210)") - self.current_model_item.action_item.set_value(active_name) + self.current_model_item.action_item.set_value(tr(get_selected_model_name(ui_state.params))) self.redownload_item.action_item.set_enabled(self._can_redownload()) target = self._redownload_target_bundle() self.redownload_item.action_item.set_value(target.internalName if target else "")