feat: make kernel loading work when offline mode ie enabled.#580
Conversation
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
| get_kernel("kernels-test-untrusted/ci-test-kernel", version=1, trust_remote_code=True) | ||
|
|
||
|
|
||
| def test_install_kernel_offline_with_revision(monkeypatch, local_kernel_path): |
Co-authored-by: Daniël de Kok <me@danieldk.eu>
| # Same local-cache resolution path used by `load_kernel`, which is | ||
| # always offline. Sharing the helper avoids the network dependency | ||
| # that `get_variants` would otherwise introduce. | ||
| return _resolve_local_variant_path( |
There was a problem hiding this comment.
Can't we load_kernel here and keep the body of _resolve_local_variant_path inside load_kernel? It would more clearly express the relation between the functions.
There was a problem hiding this comment.
Thought about it a bit but install_kernel returns Path, whereas load_kernel returns ModuleType. To recover the path from a module return by load_kernel(), we will have to do some kind of parsing.
Then the _import_from_path() utility also needs some changes.
The flow would become get_kernel -> install_kernel > load_kernel -> _import_from_path(repo_info=None) — that caches LoadedKernel(repo_info=None).
Then get_kernel does its own _import_from_path(variant_path, repo_info=RepoInfo(...)), hits the cache, and returns the module while silently discarding the actual repo_info.
As a result, get_loaded_kernels() would report repo_info=None for kernels loaded via get_kernel in offline mode which would be a regression, if not handled in _import_from_path.
I think the shared utility solution is a cleaner approach here.
Co-authored-by: Daniël de Kok <me@danieldk.eu>
|
Really nice! Let's get it merged to have it in the release that we'll do soon. |
Coverage report —
|
| Name | Stmts | Miss | Cover | Missing |
|---|---|---|---|---|
| src/kernels/__init__.py | 9 | 0 | 100% | |
| src/kernels/_system.py | 6 | 1 | 83% | 10 |
| src/kernels/_versions.py | 63 | 7 | 89% | 46, 49, 52-53, 56-57, 100 |
| src/kernels/backends.py | 194 | 55 | 72% | 40, 44, 48-51, 68, 90, 108, 117, 121, 125-127, 148, 170, 181, 188-191, 201, 205-225, 233, 256-276 |
| src/kernels/compat.py | 8 | 1 | 88% | 5 |
| src/kernels/deps.py | 54 | 4 | 93% | 58-59, 79, 95 |
| src/kernels/layer/__init__.py | 6 | 0 | 100% | |
| src/kernels/layer/_interval_tree.py | 103 | 4 | 96% | 23, 52, 147, 150 |
| src/kernels/layer/device.py | 48 | 14 | 71% | 42, 47-49, 91, 96-98, 101, 149, 152, 155-157 |
| src/kernels/layer/func.py | 91 | 7 | 92% | 72, 100, 154, 257, 263, 272, 290 |
| src/kernels/layer/globals.py | 5 | 0 | 100% | |
| src/kernels/layer/kernelize.py | 73 | 8 | 89% | 255, 273, 281-282, 288, 292, 308-310 |
| src/kernels/layer/layer.py | 174 | 15 | 91% | 156, 199, 205, 214, 306-307, 319, 328, 336, 347, 376, 380, 393, 446, 476 |
| src/kernels/layer/mode.py | 14 | 0 | 100% | |
| src/kernels/layer/repos.py | 130 | 34 | 74% | 27, 33, 36-41, 61-62, 68, 71-74, 88, 92, 101-102, 108, 111-114, 121-122, 128, 131-134, 141-142, 148, 151-154, 235 |
| src/kernels/lockfile.py | 69 | 44 | 36% | 37-98, 102-125 |
| src/kernels/status.py | 49 | 2 | 96% | 23, 81 |
| src/kernels/utils.py | 281 | 54 | 81% | 57, 69-73, 79-80, 205, 209, 212, 274, 299-300, 338, 367, 372, 406, 578, 581, 583, 589, 602-603, 624-631, 635-642, 650, 654-664, 668-675, 713, 717, 736, 738 |
| src/kernels/variants.py | 262 | 19 | 93% | 56, 87, 108, 138, 247-248, 289, 291, 371-378, 384-390, 421-427, 439-445, 533-535 |
| TOTAL | 1639 | 269 | 84% |
Updated by the Test kernels workflow on commit e8a97157e4a90c7dedebb83e45fecfb82df6e80e.
Fixes #553