From 4e331eb7ffc773c3e030c8e6e7d7a5b4a0069bbe Mon Sep 17 00:00:00 2001 From: SolitaryThinker Date: Thu, 18 Jun 2026 09:28:52 +0000 Subject: [PATCH] [refactor] v2: use absolute imports (v2.*) everywhere instead of relative MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mechanical conversion of every relative import under v2/ to an absolute v2.* path (from .x / ..x / ...x -> from v2..x) so imports are unambiguous, grep-able, and stable when code is copied/moved between entrypoints (VideoGenerator, CLI, server). Surgical prefix-only rewrite: only the 'from ' prefix changed — import names, parentheses, multi-line formatting, comments, and ordering are byte-for-byte preserved (no collapsing, no reorder, no unrelated reformatting). - 471 imports across 125 files; v2/tests/ was already absolute (untouched). - Validated: all 125 files compile, every 'from v2.* import' target resolves to a real module/package, zero relative imports remain (full sweep), CPU mini suite green (202 passed, 2 skipped). --- v2/__init__.py | 12 +++--- v2/cache/__init__.py | 6 +-- v2/cache/classes.py | 2 +- v2/cache/manager.py | 4 +- v2/card/__init__.py | 6 +-- v2/card/instance.py | 4 +- v2/card/specs.py | 4 +- v2/deploy/__init__.py | 6 +-- v2/deploy/card.py | 4 +- v2/deploy/dynamo.py | 4 +- v2/deploy/fleet.py | 4 +- v2/examples.py | 18 ++++----- v2/extend/__init__.py | 8 ++-- v2/extend/registry.py | 2 +- v2/loop/__init__.py | 8 ++-- v2/loop/contracts.py | 6 +-- v2/loop/driver.py | 2 +- v2/loop/policies/__init__.py | 4 +- v2/loop/policies/base.py | 4 +- v2/loop/policies/cfg.py | 2 +- v2/memory/__init__.py | 2 +- v2/models/__init__.py | 56 +++++++++++++------------- v2/models/adapters/__init__.py | 6 +-- v2/models/adapters/card.py | 12 +++--- v2/models/adapters/loop.py | 6 +-- v2/models/adapters/program.py | 4 +- v2/models/adaptive/__init__.py | 4 +- v2/models/adaptive/card.py | 12 +++--- v2/models/adaptive/loop.py | 6 +-- v2/models/bagel/__init__.py | 4 +- v2/models/bagel/card.py | 14 +++---- v2/models/bagel/program.py | 4 +- v2/models/common.py | 2 +- v2/models/cosmos3/__init__.py | 4 +- v2/models/cosmos3/card.py | 14 +++---- v2/models/cosmos3/program.py | 4 +- v2/models/image_video/__init__.py | 4 +- v2/models/image_video/card.py | 12 +++--- v2/models/image_video/program.py | 8 ++-- v2/models/ltx2/__init__.py | 6 +-- v2/models/ltx2/card.py | 10 ++--- v2/models/ltx2/loop.py | 8 ++-- v2/models/ltx2/program.py | 6 +-- v2/models/multi_expert/__init__.py | 2 +- v2/models/multi_expert/card.py | 14 +++---- v2/models/omni/__init__.py | 6 +-- v2/models/omni/ar_loop.py | 6 +-- v2/models/omni/pack.py | 2 +- v2/models/omni/vocoder_loop.py | 6 +-- v2/models/qwen_omni/__init__.py | 4 +- v2/models/qwen_omni/card.py | 10 ++--- v2/models/qwen_omni/program.py | 4 +- v2/models/reward/__init__.py | 4 +- v2/models/reward/card.py | 10 ++--- v2/models/reward/loop.py | 4 +- v2/models/speculative/__init__.py | 6 +-- v2/models/speculative/card.py | 10 ++--- v2/models/speculative/loop.py | 6 +-- v2/models/speculative/program.py | 4 +- v2/models/tiled/__init__.py | 6 +-- v2/models/tiled/card.py | 14 +++---- v2/models/tiled/loop.py | 4 +- v2/models/tiled/program.py | 4 +- v2/models/unified/__init__.py | 4 +- v2/models/unified/card.py | 14 +++---- v2/models/unified/program.py | 8 ++-- v2/models/wan21/__init__.py | 6 +-- v2/models/wan21/card.py | 12 +++--- v2/models/wan21/loop.py | 10 ++--- v2/models/wan21/program.py | 4 +- v2/models/wan_causal/__init__.py | 6 +-- v2/models/wan_causal/card.py | 12 +++--- v2/models/wan_causal/loop.py | 12 +++--- v2/models/wan_causal/program.py | 4 +- v2/parallel/__init__.py | 6 +-- v2/parallel/mesh.py | 4 +- v2/parallel/validation.py | 4 +- v2/parity/__init__.py | 8 ++-- v2/parity/aligner.py | 2 +- v2/parity/interleave_gate.py | 4 +- v2/parity/ladder.py | 2 +- v2/platform/__init__.py | 4 +- v2/platform/backends/accel.py | 6 +-- v2/platform/backends/cpu.py | 4 +- v2/platform/backends/torch_adapters.py | 12 +++--- v2/platform/backends/torch_cuda.py | 18 ++++----- v2/platform/backends/torch_ltx2.py | 2 +- v2/platform/platform.py | 4 +- v2/program/__init__.py | 4 +- v2/program/specs.py | 2 +- v2/program/workflow.py | 2 +- v2/registry.py | 12 +++--- v2/request/__init__.py | 14 +++---- v2/request/artifacts.py | 4 +- v2/request/modalpart.py | 2 +- v2/request/requests.py | 10 ++--- v2/request/streams.py | 2 +- v2/runtime/__init__.py | 14 +++---- v2/runtime/async_engine.py | 10 ++--- v2/runtime/context.py | 8 ++-- v2/runtime/disaggregated.py | 18 ++++----- v2/runtime/engine.py | 20 ++++----- v2/runtime/pools.py | 6 +-- v2/runtime/scheduler.py | 4 +- v2/runtime/session.py | 14 +++---- v2/serving/__init__.py | 6 +-- v2/serving/protocol.py | 2 +- v2/serving/server.py | 8 ++-- v2/training/__init__.py | 12 +++--- v2/training/behavior.py | 2 +- v2/training/flywheel.py | 2 +- v2/training/methods/__init__.py | 16 ++++---- v2/training/methods/base.py | 10 ++--- v2/training/methods/diffusion_nft.py | 14 +++---- v2/training/methods/dmd2.py | 8 ++-- v2/training/methods/finetune.py | 8 ++-- v2/training/methods/joint_multi_rl.py | 16 ++++---- v2/training/methods/self_forcing.py | 8 ++-- v2/training/methods/unified_rl.py | 16 ++++---- v2/training/methods/workflow_rl.py | 16 ++++---- v2/training/rewards.py | 8 ++-- v2/training/rollout.py | 8 ++-- v2/transport/__init__.py | 4 +- v2/transport/connector.py | 2 +- v2/video_generator.py | 14 +++---- 125 files changed, 471 insertions(+), 471 deletions(-) diff --git a/v2/__init__.py b/v2/__init__.py index c037530c4..8af86e88c 100644 --- a/v2/__init__.py +++ b/v2/__init__.py @@ -16,14 +16,14 @@ adapters (see ``v2/models/*/components.py``) that are off the test path. """ from __future__ import annotations -from ._enums import ( +from v2._enums import ( Capability, ConsistencyLevel, ExecutionProfile, LoopKind, WorkUnitKind, ) -from .card import ( +from v2.card import ( CapabilityMatrix, ComponentSpec, CostModel, @@ -34,8 +34,8 @@ from .card import ( RecipeSpec, load_card, ) -from .program import ComponentNode, ModelLoopNode, Program, ProgramKind, when_opt, when_task -from .request import ( +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind, when_opt, when_task +from v2.request import ( DiffusionParams, Output, Request, @@ -44,7 +44,7 @@ from .request import ( TaskType, make_request, ) -from .runtime import AsyncEngine, Engine +from v2.runtime import AsyncEngine, Engine __version__ = "0.2.0" @@ -63,6 +63,6 @@ def __getattr__(name: str): # Lazy: the GPU entrypoint imports torch / fastvideo, so resolve it only on access — plain # ``import v2`` (and the CPU-only mini) stay torch-free. if name == "VideoGenerator": - from .video_generator import VideoGenerator + from v2.video_generator import VideoGenerator return VideoGenerator raise AttributeError(f"module {__name__!r} has no attribute {name!r}") diff --git a/v2/cache/__init__.py b/v2/cache/__init__.py index 1df3e5ab1..c83f13db8 100644 --- a/v2/cache/__init__.py +++ b/v2/cache/__init__.py @@ -1,9 +1,9 @@ """Cache plane — correct by key, per-class pools (design_v3 §7).""" from __future__ import annotations -from .classes import FeatureCache, PagedKVCache, ResidualCache, Slab, SlabKVCache, make_pool -from .keys import CacheKey, CachePolicy, content_hash -from .manager import CacheManager +from v2.cache.classes import FeatureCache, PagedKVCache, ResidualCache, Slab, SlabKVCache, make_pool +from v2.cache.keys import CacheKey, CachePolicy, content_hash +from v2.cache.manager import CacheManager __all__ = ["CacheKey", "CachePolicy", "content_hash", "CacheManager", "FeatureCache", "ResidualCache", "SlabKVCache", "PagedKVCache", "Slab", "make_pool"] diff --git a/v2/cache/classes.py b/v2/cache/classes.py index 4be7521be..c4bbaae32 100644 --- a/v2/cache/classes.py +++ b/v2/cache/classes.py @@ -18,7 +18,7 @@ from collections import OrderedDict from dataclasses import dataclass, field from typing import Any -from .keys import CacheKey, CachePolicy +from v2.cache.keys import CacheKey, CachePolicy def _nbytes(value: Any) -> int: diff --git a/v2/cache/manager.py b/v2/cache/manager.py index ac371a4ae..783334cf7 100644 --- a/v2/cache/manager.py +++ b/v2/cache/manager.py @@ -8,8 +8,8 @@ from __future__ import annotations from typing import Any -from .classes import _Pool, make_pool -from .keys import CachePolicy +from v2.cache.classes import _Pool, make_pool +from v2.cache.keys import CachePolicy class CacheManager: diff --git a/v2/card/__init__.py b/v2/card/__init__.py index 1c2c968d2..ea1cf652d 100644 --- a/v2/card/__init__.py +++ b/v2/card/__init__.py @@ -1,9 +1,9 @@ """Model Plane — the center (design_v3 §4). The (recipe, runtime) pair as a typed card.""" from __future__ import annotations -from .._enums import Capability, ConsistencyLevel, ExecutionProfile, LoopKind, WorkUnitKind -from .instance import ModelInstance, load_card -from .specs import ( +from v2._enums import Capability, ConsistencyLevel, ExecutionProfile, LoopKind, WorkUnitKind +from v2.card.instance import ModelInstance, load_card +from v2.card.specs import ( CacheContract, CapabilityMatrix, CardValidationError, diff --git a/v2/card/instance.py b/v2/card/instance.py index a8c10673f..afec31da3 100644 --- a/v2/card/instance.py +++ b/v2/card/instance.py @@ -13,8 +13,8 @@ from __future__ import annotations from typing import Any -from ..platform import Platform -from .specs import ModelCard +from v2.platform import Platform +from v2.card.specs import ModelCard class ModelInstance: diff --git a/v2/card/specs.py b/v2/card/specs.py index 18211ca69..475d57fad 100644 --- a/v2/card/specs.py +++ b/v2/card/specs.py @@ -15,10 +15,10 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import TYPE_CHECKING, Any, Callable -from .._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind if TYPE_CHECKING: # avoid runtime card -> parallel coupling - from ..parallel.plan import ParallelPlan + from v2.parallel.plan import ParallelPlan # --------------------------------------------------------------------------- # diff --git a/v2/deploy/__init__.py b/v2/deploy/__init__.py index 976a1cf7b..39d150edd 100644 --- a/v2/deploy/__init__.py +++ b/v2/deploy/__init__.py @@ -6,9 +6,9 @@ consumers. """ from __future__ import annotations -from .card import DeploymentCard, HealthSchema, SLOSchema, build_deployment_card -from .dynamo import DynamoWorkerAdapter, FakeDynamoRuntime -from .fleet import LocalFleet, NoWorkerAvailable, Worker +from v2.deploy.card import DeploymentCard, HealthSchema, SLOSchema, build_deployment_card +from v2.deploy.dynamo import DynamoWorkerAdapter, FakeDynamoRuntime +from v2.deploy.fleet import LocalFleet, NoWorkerAvailable, Worker __all__ = ["DeploymentCard", "HealthSchema", "SLOSchema", "build_deployment_card", "LocalFleet", "Worker", "NoWorkerAvailable", diff --git a/v2/deploy/card.py b/v2/deploy/card.py index 373fba43a..985676f05 100644 --- a/v2/deploy/card.py +++ b/v2/deploy/card.py @@ -12,8 +12,8 @@ import dataclasses from dataclasses import dataclass, field from typing import Any -from .._enums import Capability -from ..card import CostModel +from v2._enums import Capability +from v2.card import CostModel @dataclass diff --git a/v2/deploy/dynamo.py b/v2/deploy/dynamo.py index 8170cb5bd..7380ab039 100644 --- a/v2/deploy/dynamo.py +++ b/v2/deploy/dynamo.py @@ -12,8 +12,8 @@ from __future__ import annotations from typing import Any -from ..request.artifacts import Output -from .card import DeploymentCard +from v2.request.artifacts import Output +from v2.deploy.card import DeploymentCard class DynamoWorkerAdapter: diff --git a/v2/deploy/fleet.py b/v2/deploy/fleet.py index b399f4fcf..72636fa58 100644 --- a/v2/deploy/fleet.py +++ b/v2/deploy/fleet.py @@ -11,8 +11,8 @@ from __future__ import annotations from typing import Any, AsyncIterator -from ..request.artifacts import Output -from .card import DeploymentCard, HealthSchema +from v2.request.artifacts import Output +from v2.deploy.card import DeploymentCard, HealthSchema class NoWorkerAvailable(RuntimeError): diff --git a/v2/examples.py b/v2/examples.py index 445b09403..4bb908603 100644 --- a/v2/examples.py +++ b/v2/examples.py @@ -8,11 +8,11 @@ from __future__ import annotations import numpy as np -from .models import build_default_engine, build_omni_engine -from .models.wan21 import build_wan21_card -from .parity import assert_interleave_parity -from .request import DiffusionParams, OutputSpec, SamplingParams, TaskType, make_request -from .training import build_diffusion_nft +from v2.models import build_default_engine, build_omni_engine +from v2.models.wan21 import build_wan21_card +from v2.parity import assert_interleave_parity +from v2.request import DiffusionParams, OutputSpec, SamplingParams, TaskType, make_request +from v2.training import build_diffusion_nft def _t2v(mid, prompt, seed, steps=4, **kw): @@ -80,10 +80,10 @@ def example_g_omni_mot() -> None: async def _serving_demo() -> None: import asyncio - from .deploy import DynamoWorkerAdapter, FakeDynamoRuntime, LocalFleet, build_deployment_card - from .models.wan21 import build_wan21_card, build_wan_t2v_program - from .runtime import AsyncEngine, PoolSet, wan_t2v_disaggregated - from .serving import OmniOpenAIServer + from v2.deploy import DynamoWorkerAdapter, FakeDynamoRuntime, LocalFleet, build_deployment_card + from v2.models.wan21 import build_wan21_card, build_wan_t2v_program + from v2.runtime import AsyncEngine, PoolSet, wan_t2v_disaggregated + from v2.serving import OmniOpenAIServer eng = build_default_engine() build_omni_engine(eng) diff --git a/v2/extend/__init__.py b/v2/extend/__init__.py index 7bb8a76af..c70f2e444 100644 --- a/v2/extend/__init__.py +++ b/v2/extend/__init__.py @@ -1,10 +1,10 @@ """Extension plane — observers (read-only) and interceptors (compute-altering) (design_v3 §11).""" from __future__ import annotations -from .base import Interceptor, InterceptorChain, InterceptorConflict, Observer, ObserverBus -from .interceptors import ResidualSkipInterceptor -from .observers import NaNWatch, Profiler -from .registry import PluginRegistry +from v2.extend.base import Interceptor, InterceptorChain, InterceptorConflict, Observer, ObserverBus +from v2.extend.interceptors import ResidualSkipInterceptor +from v2.extend.observers import NaNWatch, Profiler +from v2.extend.registry import PluginRegistry __all__ = ["Observer", "Interceptor", "ObserverBus", "InterceptorChain", "InterceptorConflict", "Profiler", "NaNWatch", "ResidualSkipInterceptor", "PluginRegistry"] diff --git a/v2/extend/registry.py b/v2/extend/registry.py index a282dd1ac..9f8f680bf 100644 --- a/v2/extend/registry.py +++ b/v2/extend/registry.py @@ -8,7 +8,7 @@ from __future__ import annotations from typing import Any, Callable -from .base import InterceptorChain, Observer +from v2.extend.base import InterceptorChain, Observer class PluginRegistry: diff --git a/v2/loop/__init__.py b/v2/loop/__init__.py index 009a6d5a6..8bd50b2d7 100644 --- a/v2/loop/__init__.py +++ b/v2/loop/__init__.py @@ -1,8 +1,8 @@ """Loop plane — driven loops + policies (design_v3 §5).""" from __future__ import annotations -from .._enums import LoopKind, WorkUnitKind -from .contracts import ( +from v2._enums import LoopKind, WorkUnitKind +from v2.loop.contracts import ( CacheOp, CachePlan, Done, @@ -17,8 +17,8 @@ from .contracts import ( StepResult, WorkPlan, ) -from .driver import LoopRunner -from .sampler import add_noise, build_flow_sigmas, flow_match_euler_step, x0_from_velocity +from v2.loop.driver import LoopRunner +from v2.loop.sampler import add_noise, build_flow_sigmas, flow_match_euler_step, x0_from_velocity __all__ = [ "Loop", "LoopContext", "LoopState", "LoopResult", "WorkPlan", "Done", "StepResult", diff --git a/v2/loop/contracts.py b/v2/loop/contracts.py index 40b8544c6..8456883e8 100644 --- a/v2/loop/contracts.py +++ b/v2/loop/contracts.py @@ -26,9 +26,9 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Protocol, runtime_checkable -from .._enums import ExecutionProfile, WorkUnitKind -from .._types import TensorLike -from ..request.streams import StreamChunk +from v2._enums import ExecutionProfile, WorkUnitKind +from v2._types import TensorLike +from v2.request.streams import StreamChunk # --------------------------------------------------------------------------- # diff --git a/v2/loop/driver.py b/v2/loop/driver.py index 5a1ebbdfd..1486839b8 100644 --- a/v2/loop/driver.py +++ b/v2/loop/driver.py @@ -10,7 +10,7 @@ from __future__ import annotations from typing import Any -from .contracts import Done, LoopContext, LoopResult, LoopState, WorkPlan +from v2.loop.contracts import Done, LoopContext, LoopResult, LoopState, WorkPlan class LoopRunner: diff --git a/v2/loop/policies/__init__.py b/v2/loop/policies/__init__.py index 1749340d0..7f2d9e4ab 100644 --- a/v2/loop/policies/__init__.py +++ b/v2/loop/policies/__init__.py @@ -1,7 +1,7 @@ """Policies — the default step decomposition (design_v3 §5.1, §6.2.3).""" from __future__ import annotations -from .base import ( +from v2.loop.policies.base import ( BoundaryTimestepRouting, ConditioningInjector, ExpertRouting, @@ -10,7 +10,7 @@ from .base import ( PassthroughConditioning, PrecisionPolicy, ) -from .cfg import ( +from v2.loop.policies.cfg import ( AdaptiveGateCFG, BatchedCFG, CFGPolicy, diff --git a/v2/loop/policies/base.py b/v2/loop/policies/base.py index eae7139cf..378e01389 100644 --- a/v2/loop/policies/base.py +++ b/v2/loop/policies/base.py @@ -15,8 +15,8 @@ from typing import Any import numpy as np -from ..contracts import StepContext -from ..sampler import build_flow_sigmas +from v2.loop.contracts import StepContext +from v2.loop.sampler import build_flow_sigmas # --------------------------------------------------------------------------- # diff --git a/v2/loop/policies/cfg.py b/v2/loop/policies/cfg.py index c907413c7..60df4e258 100644 --- a/v2/loop/policies/cfg.py +++ b/v2/loop/policies/cfg.py @@ -17,7 +17,7 @@ from typing import Any import numpy as np -from ..contracts import StepContext +from v2.loop.contracts import StepContext class CFGPolicy(ABC): diff --git a/v2/memory/__init__.py b/v2/memory/__init__.py index 23d74bce9..4aad30e07 100644 --- a/v2/memory/__init__.py +++ b/v2/memory/__init__.py @@ -1,6 +1,6 @@ """Memory plane — reservation before admission, sleep/wake by tag (design_v3 §7.3).""" from __future__ import annotations -from .allocator import MemoryManager, OutOfMemory, Reservation +from v2.memory.allocator import MemoryManager, OutOfMemory, Reservation __all__ = ["MemoryManager", "OutOfMemory", "Reservation"] diff --git a/v2/models/__init__.py b/v2/models/__init__.py index 5fac000b2..027c2658a 100644 --- a/v2/models/__init__.py +++ b/v2/models/__init__.py @@ -7,11 +7,11 @@ from __future__ import annotations from typing import Any -from .adaptive import build_adaptive_card -from .adapters import build_adapter_card, build_adapter_program -from .bagel import build_bagel_card, build_bagel_program -from .cosmos3 import build_cosmos3_card, build_cosmos3_program -from .image_video import ( +from v2.models.adaptive import build_adaptive_card +from v2.models.adapters import build_adapter_card, build_adapter_program +from v2.models.bagel import build_bagel_card, build_bagel_program +from v2.models.cosmos3 import build_cosmos3_card, build_cosmos3_program +from v2.models.image_video import ( build_flux_t2i_card, build_flux_t2i_program, build_t2i_i2v_extend_workflow, @@ -19,14 +19,14 @@ from .image_video import ( build_wan_i2v_card, build_wan_i2v_program, ) -from .ltx2 import build_ltx2_av_program, build_ltx2_card, build_ltx2_program -from .qwen_omni import build_qwen_omni_card, build_qwen_omni_program -from .reward import build_reward_card -from .speculative import build_speculative_card, build_speculative_program -from .tiled import build_tiled_card, build_tiled_program -from .unified import build_unified_card, build_unified_program -from .wan21 import build_wan21_card, build_wan_t2v_program -from .wan_causal import build_wan_causal_card, build_wan_causal_program +from v2.models.ltx2 import build_ltx2_av_program, build_ltx2_card, build_ltx2_program +from v2.models.qwen_omni import build_qwen_omni_card, build_qwen_omni_program +from v2.models.reward import build_reward_card +from v2.models.speculative import build_speculative_card, build_speculative_program +from v2.models.tiled import build_tiled_card, build_tiled_program +from v2.models.unified import build_unified_card, build_unified_program +from v2.models.wan21 import build_wan21_card, build_wan_t2v_program +from v2.models.wan_causal import build_wan_causal_card, build_wan_causal_program __all__ = [ "build_wan21_card", "build_wan_t2v_program", @@ -63,9 +63,9 @@ _OMNI_BUILDERS = [ def build_default_engine(engine: Any = None) -> Any: """Register Wan2.1, LTX2.3, and Wan-causal onto one engine (one resident instance each).""" - from ..cache import CacheManager - from ..card import load_card - from ..runtime import Engine + from v2.cache import CacheManager + from v2.card import load_card + from v2.runtime import Engine eng = engine if engine is not None else Engine() for build_card, build_program in _BUILDERS: card = build_card() @@ -80,9 +80,9 @@ def build_omni_engine(engine: Any = None) -> Any: Each is ONE resident MoT instance whose ``transformer`` runs BOTH an ar_decode loop and a diffusion_denoise loop (shared weights) — the §16 'true omni/MoT serving' claim made native. """ - from ..cache import CacheManager - from ..card import load_card - from ..runtime import Engine + from v2.cache import CacheManager + from v2.card import load_card + from v2.runtime import Engine eng = engine if engine is not None else Engine() for build_card, build_program in _OMNI_BUILDERS: card = build_card() @@ -104,8 +104,8 @@ _WORKFLOWS: dict[str, tuple] = { def register_workflows(engine: Any, *, only: list[str] | None = None) -> Any: """Register catalog workflows (and the cards they require) onto ``engine``. ``only`` selects a subset by workflow_id; default registers all whose cards aren't yet present.""" - from ..cache import CacheManager - from ..card import load_card + from v2.cache import CacheManager + from v2.card import load_card names = only if only is not None else list(_WORKFLOWS) for wf_id in names: build_workflow, card_builders = _WORKFLOWS[wf_id] @@ -122,7 +122,7 @@ def build_image_video_engine(engine: Any = None) -> Any: """Register the T2I (``flux-t2i``) and I2V (``wan-i2v``) cards plus the ``image_video.t2i_i2v`` workflow on one engine — two *separate* models chained by a cross-model workflow, addressable by its workflow_id like any servable (design_v3 §13).""" - from ..runtime import Engine + from v2.runtime import Engine eng = engine if engine is not None else Engine() return register_workflows(eng, only=["image_video.t2i_i2v"]) @@ -131,9 +131,9 @@ def build_tiled_engine(engine: Any = None) -> Any: """Register the tiled-decode card (``wan-tiled``, whose VAE decode emits ``VAE_TILE`` work units) alongside plain Wan2.1 — so an interleaved batch mixes ``VAE_TILE`` and ``DIFFUSION_STEP`` units through one admission/scheduler budget (the §17 heterogeneous-co-scheduling probe).""" - from ..cache import CacheManager - from ..card import load_card - from ..runtime import Engine + from v2.cache import CacheManager + from v2.card import load_card + from v2.runtime import Engine eng = engine if engine is not None else Engine() for build_card, build_program in [(build_tiled_card, build_tiled_program), (build_wan21_card, build_wan_t2v_program)]: @@ -147,9 +147,9 @@ def build_unified_engine(engine: Any = None) -> Any: """Register the unified LM+generator card (UniRL/PromptRL): a prompt-refiner ``llm`` expert + a flow ``transformer`` expert on the SAME engine, each driving its own loop. Two separate experts, one request, both trainable under one RL reward (the §10 joint-RL stress test).""" - from ..cache import CacheManager - from ..card import load_card - from ..runtime import Engine + from v2.cache import CacheManager + from v2.card import load_card + from v2.runtime import Engine eng = engine if engine is not None else Engine() card = build_unified_card() inst = load_card(card, cache_manager=CacheManager.from_card(card)) diff --git a/v2/models/adapters/__init__.py b/v2/models/adapters/__init__.py index 021f503ee..990095a86 100644 --- a/v2/models/adapters/__init__.py +++ b/v2/models/adapters/__init__.py @@ -1,8 +1,8 @@ """Adapter plane: one base + swappable LoRA/ControlNet adapters, selected per request (design_v3 §9.19).""" from __future__ import annotations -from .card import ADAPTERS, build_adapter_card -from .loop import AdapterDenoiseLoop -from .program import build_adapter_program +from v2.models.adapters.card import ADAPTERS, build_adapter_card +from v2.models.adapters.loop import AdapterDenoiseLoop +from v2.models.adapters.program import build_adapter_program __all__ = ["build_adapter_card", "build_adapter_program", "AdapterDenoiseLoop", "ADAPTERS"] diff --git a/v2/models/adapters/card.py b/v2/models/adapters/card.py index e850f945f..5729406b6 100644 --- a/v2/models/adapters/card.py +++ b/v2/models/adapters/card.py @@ -6,8 +6,8 @@ apply (``DiffusionParams.adapters``). Adapters are versioned independently (the """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -19,10 +19,10 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyControlNet, ToyDiT, ToyLoRA, ToyTextEncoder, ToyVAE, _seed_from -from .loop import AdapterDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyControlNet, ToyDiT, ToyLoRA, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.adapters.loop import AdapterDenoiseLoop ADAPTERS = ("lora_anime", "lora_realistic", "control_pose") # the served adapter library diff --git a/v2/models/adapters/loop.py b/v2/models/adapters/loop.py index 6f2c8e22c..8b14ad305 100644 --- a/v2/models/adapters/loop.py +++ b/v2/models/adapters/loop.py @@ -10,9 +10,9 @@ from __future__ import annotations import numpy as np -from ...loop.contracts import Done -from ...platform import FLOW_MATCH_STEP -from ..wan21.loop import WanDenoiseLoop +from v2.loop.contracts import Done +from v2.platform import FLOW_MATCH_STEP +from v2.models.wan21.loop import WanDenoiseLoop class AdapterDenoiseLoop(WanDenoiseLoop): diff --git a/v2/models/adapters/program.py b/v2/models/adapters/program.py index 1b946052f..f6597d1ff 100644 --- a/v2/models/adapters/program.py +++ b/v2/models/adapters/program.py @@ -3,8 +3,8 @@ from __future__ import annotations import numpy as np -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn as _text_encode +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn as _text_encode def _control_signal(instance, slots, request, ctx) -> None: diff --git a/v2/models/adaptive/__init__.py b/v2/models/adaptive/__init__.py index 52358c967..7a8a8efad 100644 --- a/v2/models/adaptive/__init__.py +++ b/v2/models/adaptive/__init__.py @@ -1,7 +1,7 @@ """Adaptive-compute denoise: the loop owns cache-dit skip + early-exit (design_v3 §2.2, §9.12).""" from __future__ import annotations -from .card import build_adaptive_card -from .loop import CacheDiTDenoiseLoop +from v2.models.adaptive.card import build_adaptive_card +from v2.models.adaptive.loop import CacheDiTDenoiseLoop __all__ = ["build_adaptive_card", "CacheDiTDenoiseLoop"] diff --git a/v2/models/adaptive/card.py b/v2/models/adaptive/card.py index 3b0b3a87b..688551277 100644 --- a/v2/models/adaptive/card.py +++ b/v2/models/adaptive/card.py @@ -3,8 +3,8 @@ ``diffusion_denoise``); only the loop differs.""" from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -16,10 +16,10 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from -from .loop import CacheDiTDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.adaptive.loop import CacheDiTDenoiseLoop def build_adaptive_card(model_id: str = "wan-adaptive", *, cache_threshold: float = 0.02, diff --git a/v2/models/adaptive/loop.py b/v2/models/adaptive/loop.py index 9086dd9a0..4387bf0fd 100644 --- a/v2/models/adaptive/loop.py +++ b/v2/models/adaptive/loop.py @@ -16,9 +16,9 @@ from __future__ import annotations import numpy as np -from ...loop.contracts import Done, StepResult -from ...platform import FLOW_MATCH_STEP -from ..wan21.loop import WanDenoiseLoop +from v2.loop.contracts import Done, StepResult +from v2.platform import FLOW_MATCH_STEP +from v2.models.wan21.loop import WanDenoiseLoop class CacheDiTDenoiseLoop(WanDenoiseLoop): diff --git a/v2/models/bagel/__init__.py b/v2/models/bagel/__init__.py index 95fe87387..c7aacc340 100644 --- a/v2/models/bagel/__init__.py +++ b/v2/models/bagel/__init__.py @@ -1,7 +1,7 @@ """BAGEL/lance — canonical vllm-omni MoT (AR generate_text + diffusion generate_image). Phase 2.""" from __future__ import annotations -from .card import build_bagel_card -from .program import build_bagel_program +from v2.models.bagel.card import build_bagel_card +from v2.models.bagel.program import build_bagel_program __all__ = ["build_bagel_card", "build_bagel_program"] diff --git a/v2/models/bagel/card.py b/v2/models/bagel/card.py index a752ff461..20fab370d 100644 --- a/v2/models/bagel/card.py +++ b/v2/models/bagel/card.py @@ -11,8 +11,8 @@ differentiation the §1 thesis names. """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -24,11 +24,11 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyMoTDiT, ToyTokenizer, ToyVAE, _seed_from -from ..omni import ARDecodeLoop -from ..wan21.loop import WanDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyMoTDiT, ToyTokenizer, ToyVAE, _seed_from +from v2.models.omni import ARDecodeLoop +from v2.models.wan21.loop import WanDenoiseLoop def build_bagel_card(model_id: str = "bagel-mot") -> ModelCard: diff --git a/v2/models/bagel/program.py b/v2/models/bagel/program.py index f3ba83cc7..1839c37de 100644 --- a/v2/models/bagel/program.py +++ b/v2/models/bagel/program.py @@ -7,8 +7,8 @@ scheduler interleaves — the shared-weight MoT made native, not a monolith bypa """ from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..omni import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.omni import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node def build_bagel_program() -> Program: diff --git a/v2/models/common.py b/v2/models/common.py index c2515a1f8..8a29b0c22 100644 --- a/v2/models/common.py +++ b/v2/models/common.py @@ -7,7 +7,7 @@ from __future__ import annotations from typing import Any -from ..cache.keys import CacheKey, content_hash +from v2.cache.keys import CacheKey, content_hash def cached_text_encode(instance: Any, text: str) -> Any: diff --git a/v2/models/cosmos3/__init__.py b/v2/models/cosmos3/__init__.py index ad4695ddb..76e78d714 100644 --- a/v2/models/cosmos3/__init__.py +++ b/v2/models/cosmos3/__init__.py @@ -1,7 +1,7 @@ """Cosmos3 — omni MoT (reasoner + joint denoise on one resident instance). Phase 2.""" from __future__ import annotations -from .card import build_cosmos3_card -from .program import build_cosmos3_program +from v2.models.cosmos3.card import build_cosmos3_card +from v2.models.cosmos3.program import build_cosmos3_program __all__ = ["build_cosmos3_card", "build_cosmos3_program"] diff --git a/v2/models/cosmos3/card.py b/v2/models/cosmos3/card.py index cf5316756..bdb978960 100644 --- a/v2/models/cosmos3/card.py +++ b/v2/models/cosmos3/card.py @@ -10,8 +10,8 @@ MoT module. ``sound_vae`` is declared ``optional_for`` non-t2vs tasks (the lazy- """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -23,11 +23,11 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyMoTDiT, ToyTokenizer, ToyVAE, _seed_from -from ..omni import ARDecodeLoop -from ..wan21.loop import WanDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyMoTDiT, ToyTokenizer, ToyVAE, _seed_from +from v2.models.omni import ARDecodeLoop +from v2.models.wan21.loop import WanDenoiseLoop def build_cosmos3_card(model_id: str = "cosmos3-vfm") -> ModelCard: diff --git a/v2/models/cosmos3/program.py b/v2/models/cosmos3/program.py index b79d59215..7ba573002 100644 --- a/v2/models/cosmos3/program.py +++ b/v2/models/cosmos3/program.py @@ -8,8 +8,8 @@ and severs the shared state). """ from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..omni import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.omni import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node def build_cosmos3_program() -> Program: diff --git a/v2/models/image_video/__init__.py b/v2/models/image_video/__init__.py index 27b00f30d..08a4d4c3a 100644 --- a/v2/models/image_video/__init__.py +++ b/v2/models/image_video/__init__.py @@ -3,8 +3,8 @@ the design composes across model *instances*, not just loops within one (which LTX-2 already covers).""" from __future__ import annotations -from .card import build_flux_t2i_card, build_wan_i2v_card -from .program import ( +from v2.models.image_video.card import build_flux_t2i_card, build_wan_i2v_card +from v2.models.image_video.program import ( build_flux_t2i_program, build_t2i_i2v_extend_workflow, build_t2i_then_i2v_workflow, diff --git a/v2/models/image_video/card.py b/v2/models/image_video/card.py index 9321c3393..f5b54405a 100644 --- a/v2/models/image_video/card.py +++ b/v2/models/image_video/card.py @@ -11,8 +11,8 @@ is the point: a new pipeline is cards + a program + a workflow, never a new loop """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -24,10 +24,10 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from -from ..wan21.loop import WanDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.wan21.loop import WanDenoiseLoop def _diffusion_card(model_id, family, loop_id, caps, tasks, *, shift): diff --git a/v2/models/image_video/program.py b/v2/models/image_video/program.py index 4c795f707..a978f9df1 100644 --- a/v2/models/image_video/program.py +++ b/v2/models/image_video/program.py @@ -15,10 +15,10 @@ from __future__ import annotations import numpy as np -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind, Workflow, WorkflowStage -from ...request import DiffusionParams, TaskType, make_request -from ...request.modalpart import ImagePart, TextPart -from ..common import text_encode_node_fn as _text_encode +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind, Workflow, WorkflowStage +from v2.request import DiffusionParams, TaskType, make_request +from v2.request.modalpart import ImagePart, TextPart +from v2.models.common import text_encode_node_fn as _text_encode # --- stage 1: text → image -------------------------------------------------------- # diff --git a/v2/models/ltx2/__init__.py b/v2/models/ltx2/__init__.py index c78b5b0e8..7379273b8 100644 --- a/v2/models/ltx2/__init__.py +++ b/v2/models/ltx2/__init__.py @@ -1,9 +1,9 @@ """LTX2.3 — two-stage distilled video diffusion (base → upsample → refine).""" from __future__ import annotations -from .card import build_ltx2_3_card, build_ltx2_base_card, build_ltx2_card -from .loop import BASE_SIGMAS, REFINE_SIGMAS, LTX2DenoiseLoop, LTX23DenoiseLoop -from .program import ( +from v2.models.ltx2.card import build_ltx2_3_card, build_ltx2_base_card, build_ltx2_card +from v2.models.ltx2.loop import BASE_SIGMAS, REFINE_SIGMAS, LTX2DenoiseLoop, LTX23DenoiseLoop +from v2.models.ltx2.program import ( build_ltx2_3_program, build_ltx2_av_program, build_ltx2_base_program, diff --git a/v2/models/ltx2/card.py b/v2/models/ltx2/card.py index 8b327a29b..adeaec4ee 100644 --- a/v2/models/ltx2/card.py +++ b/v2/models/ltx2/card.py @@ -14,8 +14,8 @@ Real wiring: DiT ``ltx2:LTX2Transformer3DModel``, causal VAE ``ltx2vae``, Gemma """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -27,9 +27,9 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...parallel import ParallelPlan -from ..backend import ToyAudioVAE, ToyDiT, ToyTextEncoder, ToyUpsampler, ToyVAE, ToyVocoder, _seed_from -from .loop import BASE_SIGMAS, REFINE_SIGMAS, LTX2DenoiseLoop, LTX23DenoiseLoop +from v2.parallel import ParallelPlan +from v2.models.backend import ToyAudioVAE, ToyDiT, ToyTextEncoder, ToyUpsampler, ToyVAE, ToyVocoder, _seed_from +from v2.models.ltx2.loop import BASE_SIGMAS, REFINE_SIGMAS, LTX2DenoiseLoop, LTX23DenoiseLoop def build_ltx2_card(model_id: str = "ltx2-2stage-distilled") -> ModelCard: diff --git a/v2/models/ltx2/loop.py b/v2/models/ltx2/loop.py index c3d23e4b2..c96a54591 100644 --- a/v2/models/ltx2/loop.py +++ b/v2/models/ltx2/loop.py @@ -18,8 +18,8 @@ from __future__ import annotations import numpy as np -from ..._enums import ExecutionProfile, WorkUnitKind -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -28,8 +28,8 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...platform import FLOW_MATCH_STEP -from ..backend import LATENT_CHANNELS +from v2.platform import FLOW_MATCH_STEP +from v2.models.backend import LATENT_CHANNELS BASE_SIGMAS = [1.0, 0.99375, 0.9875, 0.98125, 0.975, 0.909375, 0.725, 0.421875, 0.0] REFINE_SIGMAS = [0.909375, 0.725, 0.421875, 0.0] diff --git a/v2/models/ltx2/program.py b/v2/models/ltx2/program.py index 670684569..4a20be22a 100644 --- a/v2/models/ltx2/program.py +++ b/v2/models/ltx2/program.py @@ -9,9 +9,9 @@ from __future__ import annotations import numpy as np -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn as _text_encode -from .loop import REFINE_SIGMAS +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn as _text_encode +from v2.models.ltx2.loop import REFINE_SIGMAS def _upsample(instance, slots, request, ctx) -> None: diff --git a/v2/models/multi_expert/__init__.py b/v2/models/multi_expert/__init__.py index e74e8e8d1..f32f3c0dc 100644 --- a/v2/models/multi_expert/__init__.py +++ b/v2/models/multi_expert/__init__.py @@ -2,6 +2,6 @@ substrate for N-way joint RL (design_v3 §4, §10). Generalizes the two-expert ``unified`` card.""" from __future__ import annotations -from .card import N_REFINE_ACTIONS, build_multi_expert_card, refiner_ids +from v2.models.multi_expert.card import N_REFINE_ACTIONS, build_multi_expert_card, refiner_ids __all__ = ["build_multi_expert_card", "refiner_ids", "N_REFINE_ACTIONS"] diff --git a/v2/models/multi_expert/card.py b/v2/models/multi_expert/card.py index 34e5f7af8..8cfa5b043 100644 --- a/v2/models/multi_expert/card.py +++ b/v2/models/multi_expert/card.py @@ -13,8 +13,8 @@ offset), so the generator's output depends on every refiner — and one reward t """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -26,11 +26,11 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyPromptRefiner, ToyTextEncoder, ToyVAE, _seed_from -from ..omni import ARDecodeLoop -from ..wan21.loop import WanDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyPromptRefiner, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.omni import ARDecodeLoop +from v2.models.wan21.loop import WanDenoiseLoop N_REFINE_ACTIONS = 6 diff --git a/v2/models/omni/__init__.py b/v2/models/omni/__init__.py index c1973e80d..7f2d2bdf9 100644 --- a/v2/models/omni/__init__.py +++ b/v2/models/omni/__init__.py @@ -1,9 +1,9 @@ """Shared omni building blocks (design_v3 §4): the AR decode loop + pack/emit program nodes.""" from __future__ import annotations -from .ar_loop import ARDecodeLoop -from .pack import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node -from .vocoder_loop import VocoderLoop +from v2.models.omni.ar_loop import ARDecodeLoop +from v2.models.omni.pack import emit_text_node, pack_cond_from_tokens, tokenize_node, vae_decode_node +from v2.models.omni.vocoder_loop import VocoderLoop __all__ = ["ARDecodeLoop", "VocoderLoop", "tokenize_node", "pack_cond_from_tokens", "emit_text_node", "vae_decode_node"] diff --git a/v2/models/omni/ar_loop.py b/v2/models/omni/ar_loop.py index 0572b5ce0..a01ab2e99 100644 --- a/v2/models/omni/ar_loop.py +++ b/v2/models/omni/ar_loop.py @@ -8,8 +8,8 @@ claim). All per-request state (the token list, paged-KV namespace) lives in ``Lo """ from __future__ import annotations -from ..._enums import ExecutionProfile, WorkUnitKind -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -18,7 +18,7 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...request.streams import StreamChunk +from v2.request.streams import StreamChunk class ARDecodeLoop: diff --git a/v2/models/omni/pack.py b/v2/models/omni/pack.py index a2863052f..564dd36f4 100644 --- a/v2/models/omni/pack.py +++ b/v2/models/omni/pack.py @@ -7,7 +7,7 @@ module, so this is weight-sharing, not a hand-off between two engines. """ from __future__ import annotations -from ..backend import ToyTokenizer +from v2.models.backend import ToyTokenizer def tokenize_node(instance, slots, request, ctx) -> None: diff --git a/v2/models/omni/vocoder_loop.py b/v2/models/omni/vocoder_loop.py index 34c31a1cb..0b266e9d3 100644 --- a/v2/models/omni/vocoder_loop.py +++ b/v2/models/omni/vocoder_loop.py @@ -11,8 +11,8 @@ from __future__ import annotations import numpy as np -from ..._enums import ExecutionProfile, WorkUnitKind -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -21,7 +21,7 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...request.streams import StreamChunk +from v2.request.streams import StreamChunk class VocoderLoop: diff --git a/v2/models/qwen_omni/__init__.py b/v2/models/qwen_omni/__init__.py index 3da4d3072..86f70830a 100644 --- a/v2/models/qwen_omni/__init__.py +++ b/v2/models/qwen_omni/__init__.py @@ -3,7 +3,7 @@ loops (ar_decode → ar_decode → audio_decode), cascaded conditioning + stream third weight-sharing topology proving the Card/Loop/Program vocabulary holds (design_v3 §4).""" from __future__ import annotations -from .card import build_qwen_omni_card -from .program import build_qwen_omni_program +from v2.models.qwen_omni.card import build_qwen_omni_card +from v2.models.qwen_omni.program import build_qwen_omni_program __all__ = ["build_qwen_omni_card", "build_qwen_omni_program"] diff --git a/v2/models/qwen_omni/card.py b/v2/models/qwen_omni/card.py index 5170ff05f..fbf2d6b19 100644 --- a/v2/models/qwen_omni/card.py +++ b/v2/models/qwen_omni/card.py @@ -19,8 +19,8 @@ two language stages, ``LoopKind.AUDIO_DECODE`` for the vocoder — no new primit """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -32,9 +32,9 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...parallel import ParallelPlan -from ..backend import ToyMoTDiT, ToyTalker, ToyTokenizer, ToyVocoder, _seed_from -from ..omni import ARDecodeLoop, VocoderLoop +from v2.parallel import ParallelPlan +from v2.models.backend import ToyMoTDiT, ToyTalker, ToyTokenizer, ToyVocoder, _seed_from +from v2.models.omni import ARDecodeLoop, VocoderLoop def build_qwen_omni_card(model_id: str = "qwen-omni-tts") -> ModelCard: diff --git a/v2/models/qwen_omni/program.py b/v2/models/qwen_omni/program.py index a2da58632..dad88ccf4 100644 --- a/v2/models/qwen_omni/program.py +++ b/v2/models/qwen_omni/program.py @@ -17,8 +17,8 @@ from __future__ import annotations import numpy as np -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..omni import emit_text_node, tokenize_node +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.omni import emit_text_node, tokenize_node def thinker_to_talker_node(instance, slots, request, ctx) -> None: diff --git a/v2/models/reward/__init__.py b/v2/models/reward/__init__.py index d1526e3ab..10b059ef6 100644 --- a/v2/models/reward/__init__.py +++ b/v2/models/reward/__init__.py @@ -1,7 +1,7 @@ """Reward-model card: a served scorer/verifier emitting REWARD_BATCH work units (design_v3 §10).""" from __future__ import annotations -from .card import build_reward_card -from .loop import RewardLoop +from v2.models.reward.card import build_reward_card +from v2.models.reward.loop import RewardLoop __all__ = ["build_reward_card", "RewardLoop"] diff --git a/v2/models/reward/card.py b/v2/models/reward/card.py index 7e185ab4e..0a8eef2e9 100644 --- a/v2/models/reward/card.py +++ b/v2/models/reward/card.py @@ -7,8 +7,8 @@ run on its own role-pool (reward disaggregation). """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CapabilityMatrix, ComponentSpec, CostModel, @@ -19,9 +19,9 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...parallel import ParallelPlan -from ..backend import ToyRewardModel, _seed_from -from .loop import RewardLoop +from v2.parallel import ParallelPlan +from v2.models.backend import ToyRewardModel, _seed_from +from v2.models.reward.loop import RewardLoop def build_reward_card(model_id: str = "pickscore-reward", *, batch: int = 4) -> ModelCard: diff --git a/v2/models/reward/loop.py b/v2/models/reward/loop.py index 7b5d3be6a..3777652b5 100644 --- a/v2/models/reward/loop.py +++ b/v2/models/reward/loop.py @@ -8,8 +8,8 @@ one (or a few) batched units — the homogeneous-batch win the scheduler likes. """ from __future__ import annotations -from ..._enums import WorkUnitKind -from ...loop.contracts import ( +from v2._enums import WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, diff --git a/v2/models/speculative/__init__.py b/v2/models/speculative/__init__.py index ba41d390a..99f225b0f 100644 --- a/v2/models/speculative/__init__.py +++ b/v2/models/speculative/__init__.py @@ -1,8 +1,8 @@ """Speculative (draft-verify) decoding: a draft + target AR pair, exact + lower-latency (design_v3 §9.16).""" from __future__ import annotations -from .card import build_speculative_card -from .loop import SpeculativeARLoop -from .program import build_speculative_program +from v2.models.speculative.card import build_speculative_card +from v2.models.speculative.loop import SpeculativeARLoop +from v2.models.speculative.program import build_speculative_program __all__ = ["build_speculative_card", "build_speculative_program", "SpeculativeARLoop"] diff --git a/v2/models/speculative/card.py b/v2/models/speculative/card.py index c9bf7472b..b877a1679 100644 --- a/v2/models/speculative/card.py +++ b/v2/models/speculative/card.py @@ -1,8 +1,8 @@ """Speculative-decoding card — a draft + target AR pair on one instance (design_v3 §2.2, §9.16).""" from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -14,9 +14,9 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...parallel import ParallelPlan -from ..backend import ToyDraftModel, ToyTargetModel, ToyTokenizer, _seed_from -from .loop import SpeculativeARLoop +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDraftModel, ToyTargetModel, ToyTokenizer, _seed_from +from v2.models.speculative.loop import SpeculativeARLoop def build_speculative_card(model_id: str = "spec-decode", *, spec_len: int = 4, diff --git a/v2/models/speculative/loop.py b/v2/models/speculative/loop.py index a6fc15d95..41726f03d 100644 --- a/v2/models/speculative/loop.py +++ b/v2/models/speculative/loop.py @@ -16,8 +16,8 @@ one request — and every round is an ``AR_TOKEN`` WorkUnit. """ from __future__ import annotations -from ..._enums import ExecutionProfile, WorkUnitKind -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -26,7 +26,7 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...request.streams import StreamChunk +from v2.request.streams import StreamChunk class SpeculativeARLoop: diff --git a/v2/models/speculative/program.py b/v2/models/speculative/program.py index 9035e61a2..6460eec13 100644 --- a/v2/models/speculative/program.py +++ b/v2/models/speculative/program.py @@ -1,8 +1,8 @@ """Speculative-decoding program: tokenize → spec_decode (draft+verify) → emit_text (design_v3 §9.16).""" from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..omni import emit_text_node, tokenize_node +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.omni import emit_text_node, tokenize_node def build_speculative_program() -> Program: diff --git a/v2/models/tiled/__init__.py b/v2/models/tiled/__init__.py index 0678e7e98..0cb7ec2b0 100644 --- a/v2/models/tiled/__init__.py +++ b/v2/models/tiled/__init__.py @@ -1,8 +1,8 @@ """Tiled VAE decode: the VAE_TILE WorkUnit kind co-scheduled with denoise steps (design_v3 §4, §17).""" from __future__ import annotations -from .card import build_tiled_card -from .loop import VAETileLoop -from .program import build_tiled_program +from v2.models.tiled.card import build_tiled_card +from v2.models.tiled.loop import VAETileLoop +from v2.models.tiled.program import build_tiled_program __all__ = ["build_tiled_card", "build_tiled_program", "VAETileLoop"] diff --git a/v2/models/tiled/card.py b/v2/models/tiled/card.py index aa02e8f32..816f95f14 100644 --- a/v2/models/tiled/card.py +++ b/v2/models/tiled/card.py @@ -2,8 +2,8 @@ ``vae_tile`` loop, so its tiles co-schedule with denoise steps under the one WorkUnit budget.""" from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -15,11 +15,11 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from -from ..wan21.loop import WanDenoiseLoop -from .loop import VAETileLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.wan21.loop import WanDenoiseLoop +from v2.models.tiled.loop import VAETileLoop def build_tiled_card(model_id: str = "wan-tiled", *, tile_rows: int = 1) -> ModelCard: diff --git a/v2/models/tiled/loop.py b/v2/models/tiled/loop.py index f15c453d6..8af204717 100644 --- a/v2/models/tiled/loop.py +++ b/v2/models/tiled/loop.py @@ -14,8 +14,8 @@ from __future__ import annotations import numpy as np -from ..._enums import WorkUnitKind -from ...loop.contracts import ( +from v2._enums import WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, diff --git a/v2/models/tiled/program.py b/v2/models/tiled/program.py index 7e60b4a36..3f6d23b57 100644 --- a/v2/models/tiled/program.py +++ b/v2/models/tiled/program.py @@ -6,8 +6,8 @@ units. (Contrast the plain Wan program, where decode is a single in-tick node.) """ from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn as _text_encode +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn as _text_encode def build_tiled_program() -> Program: diff --git a/v2/models/unified/__init__.py b/v2/models/unified/__init__.py index ef37666fa..2e55afdde 100644 --- a/v2/models/unified/__init__.py +++ b/v2/models/unified/__init__.py @@ -3,7 +3,7 @@ both trainable under one RL reward. The stress test that the Card/Loop/Program s joint multi-expert RL (design_v3 §4, §10).""" from __future__ import annotations -from .card import N_REFINE_ACTIONS, build_unified_card -from .program import apply_refinement_node, build_unified_program +from v2.models.unified.card import N_REFINE_ACTIONS, build_unified_card +from v2.models.unified.program import apply_refinement_node, build_unified_program __all__ = ["build_unified_card", "build_unified_program", "apply_refinement_node", "N_REFINE_ACTIONS"] diff --git a/v2/models/unified/card.py b/v2/models/unified/card.py index e9e30fded..31620fac8 100644 --- a/v2/models/unified/card.py +++ b/v2/models/unified/card.py @@ -16,8 +16,8 @@ capture, and serve path are unchanged. """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -29,11 +29,11 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyPromptRefiner, ToyTextEncoder, ToyVAE, _seed_from -from ..omni import ARDecodeLoop -from ..wan21.loop import WanDenoiseLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyPromptRefiner, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.omni import ARDecodeLoop +from v2.models.wan21.loop import WanDenoiseLoop N_REFINE_ACTIONS = 8 diff --git a/v2/models/unified/program.py b/v2/models/unified/program.py index 81b5d734c..6af647209 100644 --- a/v2/models/unified/program.py +++ b/v2/models/unified/program.py @@ -10,10 +10,10 @@ profiles — the §10 "train ≡ serve through one loop" invariant, now spanning """ from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn -from ..omni import vae_decode_node -from .card import N_REFINE_ACTIONS +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn +from v2.models.omni import vae_decode_node +from v2.models.unified.card import N_REFINE_ACTIONS def apply_refinement_node(refine_slot: str, n_actions: int = N_REFINE_ACTIONS): diff --git a/v2/models/wan21/__init__.py b/v2/models/wan21/__init__.py index cc8abca61..35b331dfc 100644 --- a/v2/models/wan21/__init__.py +++ b/v2/models/wan21/__init__.py @@ -1,14 +1,14 @@ """Wan2.1-1.3B — bidirectional video diffusion (T2V).""" from __future__ import annotations -from .card import ( +from v2.models.wan21.card import ( build_wan21_card, build_wan22_a14b_card, build_wan22_ti2v_card, stamp_wan21_checkpoints, ) -from .loop import WanDenoiseLoop, latent_shape -from .program import build_wan_t2v_program +from v2.models.wan21.loop import WanDenoiseLoop, latent_shape +from v2.models.wan21.program import build_wan_t2v_program __all__ = ["build_wan21_card", "build_wan22_ti2v_card", "build_wan22_a14b_card", "stamp_wan21_checkpoints", "build_wan_t2v_program", "WanDenoiseLoop", "latent_shape"] diff --git a/v2/models/wan21/card.py b/v2/models/wan21/card.py index ce03fbfed..b8406357c 100644 --- a/v2/models/wan21/card.py +++ b/v2/models/wan21/card.py @@ -9,8 +9,8 @@ Mirrors the real Wan2.1-1.3B wiring discovered in the repo: """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -23,16 +23,16 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ( +from v2.loop.policies import ( BoundaryTimestepRouting, ClassicCFG, FlowShiftPolicy, NoRouting, PrecisionPolicy, ) -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from -from .loop import WanDenoiseLoop +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.wan21.loop import WanDenoiseLoop def build_wan21_card(model_id: str = "wan2.1-1.3b", *, cfg_policy=None, flow_shift: float = 3.0, diff --git a/v2/models/wan21/loop.py b/v2/models/wan21/loop.py index f48f1613c..1f1ce308f 100644 --- a/v2/models/wan21/loop.py +++ b/v2/models/wan21/loop.py @@ -10,8 +10,8 @@ from __future__ import annotations import numpy as np -from ..._enums import ExecutionProfile, WorkUnitKind -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -21,9 +21,9 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...platform import FLOW_MATCH_STEP, FLOW_SDE_STEP -from ...request.streams import StreamChunk -from ..backend import LATENT_CHANNELS +from v2.platform import FLOW_MATCH_STEP, FLOW_SDE_STEP +from v2.request.streams import StreamChunk +from v2.models.backend import LATENT_CHANNELS # Real Wan2.1 VAE (AutoencoderKLWan) compression: z_dim=16, 4x temporal, 8x spatial. diff --git a/v2/models/wan21/program.py b/v2/models/wan21/program.py index f68cb91ec..aaee45bd9 100644 --- a/v2/models/wan21/program.py +++ b/v2/models/wan21/program.py @@ -6,8 +6,8 @@ reduction the vendored RL sampler cannot express. """ from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn as _text_encode +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn as _text_encode def _vae_decode(instance, slots, request, ctx) -> None: diff --git a/v2/models/wan_causal/__init__.py b/v2/models/wan_causal/__init__.py index 71649f8d5..a13fa7630 100644 --- a/v2/models/wan_causal/__init__.py +++ b/v2/models/wan_causal/__init__.py @@ -1,8 +1,8 @@ """Wan-causal — causal/streaming video (chunk rollout + slab-KV), the self-forcing student.""" from __future__ import annotations -from .card import build_wan_causal_card -from .loop import ChunkRolloutLoop -from .program import build_wan_causal_program +from v2.models.wan_causal.card import build_wan_causal_card +from v2.models.wan_causal.loop import ChunkRolloutLoop +from v2.models.wan_causal.program import build_wan_causal_program __all__ = ["build_wan_causal_card", "build_wan_causal_program", "ChunkRolloutLoop"] diff --git a/v2/models/wan_causal/card.py b/v2/models/wan_causal/card.py index 1c7328b7f..14259528a 100644 --- a/v2/models/wan_causal/card.py +++ b/v2/models/wan_causal/card.py @@ -7,8 +7,8 @@ this card by the validator (stale KV breaks causality). """ from __future__ import annotations -from ..._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind -from ...card import ( +from v2._enums import Capability, ConsistencyLevel, LoopKind, WorkUnitKind +from v2.card import ( CacheContract, CapabilityMatrix, ComponentSpec, @@ -20,10 +20,10 @@ from ...card import ( PrecisionContract, RecipeSpec, ) -from ...loop.policies import ClassicCFG, FlowShiftPolicy, PrecisionPolicy -from ...parallel import ParallelPlan -from ..backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from -from .loop import ChunkRolloutLoop +from v2.loop.policies import ClassicCFG, FlowShiftPolicy, PrecisionPolicy +from v2.parallel import ParallelPlan +from v2.models.backend import ToyDiT, ToyTextEncoder, ToyVAE, _seed_from +from v2.models.wan_causal.loop import ChunkRolloutLoop def build_wan_causal_card(model_id: str = "wan-causal-sf-1.3b", *, diff --git a/v2/models/wan_causal/loop.py b/v2/models/wan_causal/loop.py index 08151540b..28e5cf13a 100644 --- a/v2/models/wan_causal/loop.py +++ b/v2/models/wan_causal/loop.py @@ -12,9 +12,9 @@ from __future__ import annotations import numpy as np -from ..._enums import ExecutionProfile, WorkUnitKind -from ...cache.classes import Slab -from ...loop.contracts import ( +from v2._enums import ExecutionProfile, WorkUnitKind +from v2.cache.classes import Slab +from v2.loop.contracts import ( Done, LoopResult, LoopState, @@ -24,9 +24,9 @@ from ...loop.contracts import ( StepResult, WorkPlan, ) -from ...platform import FLOW_MATCH_STEP -from ...request.streams import StreamChunk -from ..backend import LATENT_CHANNELS +from v2.platform import FLOW_MATCH_STEP +from v2.request.streams import StreamChunk +from v2.models.backend import LATENT_CHANNELS class ChunkRolloutLoop: diff --git a/v2/models/wan_causal/program.py b/v2/models/wan_causal/program.py index 1ca3d90fe..8b36354b2 100644 --- a/v2/models/wan_causal/program.py +++ b/v2/models/wan_causal/program.py @@ -1,8 +1,8 @@ """Wan-causal streaming program: text_encode → chunk_rollout → vae_decode (design_v3 §4, §15e).""" from __future__ import annotations -from ...program import ComponentNode, ModelLoopNode, Program, ProgramKind -from ..common import text_encode_node_fn as _text_encode +from v2.program import ComponentNode, ModelLoopNode, Program, ProgramKind +from v2.models.common import text_encode_node_fn as _text_encode def _vae_decode(instance, slots, request, ctx) -> None: diff --git a/v2/parallel/__init__.py b/v2/parallel/__init__.py index c49e3b7b9..9e30c6f23 100644 --- a/v2/parallel/__init__.py +++ b/v2/parallel/__init__.py @@ -1,9 +1,9 @@ """Parallelism plane (design_v3 §8) — named axes → validated mesh, part of the cache key.""" from __future__ import annotations -from .mesh import FakeDeviceMesh, build_mesh -from .plan import AXIS_NAMES, ParallelPlan -from .validation import ParallelValidationError, validate_plan +from v2.parallel.mesh import FakeDeviceMesh, build_mesh +from v2.parallel.plan import AXIS_NAMES, ParallelPlan +from v2.parallel.validation import ParallelValidationError, validate_plan __all__ = ["ParallelPlan", "AXIS_NAMES", "FakeDeviceMesh", "build_mesh", "validate_plan", "ParallelValidationError"] diff --git a/v2/parallel/mesh.py b/v2/parallel/mesh.py index 8d351944c..d41df249d 100644 --- a/v2/parallel/mesh.py +++ b/v2/parallel/mesh.py @@ -11,8 +11,8 @@ from __future__ import annotations from itertools import product -from .plan import ParallelPlan -from .validation import validate_plan +from v2.parallel.plan import ParallelPlan +from v2.parallel.validation import validate_plan class FakeDeviceMesh: diff --git a/v2/parallel/validation.py b/v2/parallel/validation.py index be0028907..083435943 100644 --- a/v2/parallel/validation.py +++ b/v2/parallel/validation.py @@ -7,8 +7,8 @@ All checks are CPU-testable on a fake mesh (design.md §6.3.4: CPU-testability). """ from __future__ import annotations -from .._enums import LoopKind -from .plan import AXIS_NAMES, ParallelPlan +from v2._enums import LoopKind +from v2.parallel.plan import AXIS_NAMES, ParallelPlan class ParallelValidationError(ValueError): diff --git a/v2/parity/__init__.py b/v2/parity/__init__.py index 3787e1228..284fd4057 100644 --- a/v2/parity/__init__.py +++ b/v2/parity/__init__.py @@ -5,10 +5,10 @@ the consistency ladder is typed, and the interleave gate is non-negotiable. """ from __future__ import annotations -from .._enums import ConsistencyLevel, ExecutionProfile -from .aligner import ParityAligner -from .interleave_gate import assert_interleave_parity, compare_outputs -from .ladder import Divergence, array_diff, bit_identical, within +from v2._enums import ConsistencyLevel, ExecutionProfile +from v2.parity.aligner import ParityAligner +from v2.parity.interleave_gate import assert_interleave_parity, compare_outputs +from v2.parity.ladder import Divergence, array_diff, bit_identical, within __all__ = ["ConsistencyLevel", "ExecutionProfile", "ParityAligner", "Divergence", "array_diff", "bit_identical", "within", "assert_interleave_parity", "compare_outputs"] diff --git a/v2/parity/aligner.py b/v2/parity/aligner.py index f9863aeeb..28d9cd4d6 100644 --- a/v2/parity/aligner.py +++ b/v2/parity/aligner.py @@ -10,7 +10,7 @@ from __future__ import annotations from typing import Any -from .ladder import ConsistencyLevel, Divergence, array_diff +from v2.parity.ladder import ConsistencyLevel, Divergence, array_diff class ParityAligner: diff --git a/v2/parity/interleave_gate.py b/v2/parity/interleave_gate.py index 7eba9f3b0..dd66cfdf5 100644 --- a/v2/parity/interleave_gate.py +++ b/v2/parity/interleave_gate.py @@ -12,7 +12,7 @@ from __future__ import annotations from typing import Any -from ..request.artifacts import ( +from v2.request.artifacts import ( AudioArtifact, LatentArtifact, Output, @@ -20,7 +20,7 @@ from ..request.artifacts import ( TextArtifact, VideoArtifact, ) -from .ladder import ConsistencyLevel, Divergence, bit_identical +from v2.parity.ladder import ConsistencyLevel, Divergence, bit_identical def _artifact_payload(art: Any) -> Any: diff --git a/v2/parity/ladder.py b/v2/parity/ladder.py index eb96f5239..b82ef3a20 100644 --- a/v2/parity/ladder.py +++ b/v2/parity/ladder.py @@ -13,7 +13,7 @@ from typing import Any import numpy as np -from .._enums import ConsistencyLevel # re-exported for the package +from v2._enums import ConsistencyLevel # re-exported for the package @dataclass diff --git a/v2/platform/__init__.py b/v2/platform/__init__.py index 2dc780bb8..18adfa90a 100644 --- a/v2/platform/__init__.py +++ b/v2/platform/__init__.py @@ -11,14 +11,14 @@ backend registrations in ``backends/`` are imported lazily on first ``Platform`` """ from __future__ import annotations -from .platform import ( +from v2.platform.platform import ( KernelTable, Platform, component_matrix, ensure_backends_loaded, kernel_matrix, ) -from .registry import ( +from v2.platform.registry import ( COMPONENTS, FLOW_MATCH_STEP, FLOW_SDE_STEP, diff --git a/v2/platform/backends/accel.py b/v2/platform/backends/accel.py index 03e53a859..5b42a21f3 100644 --- a/v2/platform/backends/accel.py +++ b/v2/platform/backends/accel.py @@ -25,8 +25,8 @@ from __future__ import annotations from typing import Any -from ...models.backend import ToyDiT -from ..registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_component, register_kernel +from v2.models.backend import ToyDiT +from v2.platform.registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_component, register_kernel # --------------------------------------------------------------------------- # @@ -100,7 +100,7 @@ register_kernel(FLOW_MATCH_STEP, _accel_flow_match_step, # reuses the numpy reference, so the accel SDE path is the same function as cpu (the SDE parity test # therefore checks dispatch-path equivalence, not an independent impl; the ODE op above is the real # independent oracle). A device that DID specialize SDE would be checked the same way the ODE op is. -from ...loop.sampler import flow_sde_step_with_logprob # noqa: E402 +from v2.loop.sampler import flow_sde_step_with_logprob # noqa: E402 register_kernel(FLOW_SDE_STEP, flow_sde_step_with_logprob, device="accel", arch="sm90", source="accel(stand-in):sde_logprob") diff --git a/v2/platform/backends/cpu.py b/v2/platform/backends/cpu.py index 42f3d974c..9400bed98 100644 --- a/v2/platform/backends/cpu.py +++ b/v2/platform/backends/cpu.py @@ -10,8 +10,8 @@ matches). That keeps every existing card working with zero registration. """ from __future__ import annotations -from ...loop.sampler import flow_match_euler_step, flow_sde_step_with_logprob -from ..registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_kernel +from v2.loop.sampler import flow_match_euler_step, flow_sde_step_with_logprob +from v2.platform.registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_kernel # The numpy solver primitives, registered as the terminal (cpu, numpy) kernels. These are the exact # same functions the loops used to call directly — so dispatching through the registry on a CPU box diff --git a/v2/platform/backends/torch_adapters.py b/v2/platform/backends/torch_adapters.py index 6b050c2ea..1baa045fe 100644 --- a/v2/platform/backends/torch_adapters.py +++ b/v2/platform/backends/torch_adapters.py @@ -308,7 +308,7 @@ def build_torch_dit(spec, instance, platform): module = _load_component("TransformerLoader", ckpt, _fastvideo_args(spec)) device, dtype = _device(platform), _native_dtype(module) if "LTX2" in type(module).__name__: # LTX2Transformer3DModel - from .torch_ltx2 import TorchLTX2DiT + from v2.platform.backends.torch_ltx2 import TorchLTX2DiT return TorchLTX2DiT(module, device=device, dtype=dtype) # Wan2.2 MoE (A14B): >1 DiT expert -> CPU-offload all but the active one (swapped at the boundary) # so the two 14B experts fit one 80GB GPU. A single-expert Wan stays GPU-resident (grp=None). @@ -328,7 +328,7 @@ def build_torch_vae(spec, instance, platform): module = _load_component("VAELoader", ckpt, _fastvideo_args(spec)) device, dtype = _device(platform), _native_dtype(module) if "LTX2" in type(module).__name__: # LTX2CausalVideoAutoencoder - from .torch_ltx2 import TorchLTX2VAE + from v2.platform.backends.torch_ltx2 import TorchLTX2VAE return TorchLTX2VAE(module, device=device, dtype=dtype) return TorchWanVAE(module, device=device, dtype=dtype) @@ -342,7 +342,7 @@ def build_torch_text_encoder(spec, instance, platform): tokenizer = _load_component("TokenizerLoader", os.path.join(_model_root(spec), "tokenizer"), args) device, dtype = _device(platform), _native_dtype(module) if "Gemma" in type(module).__name__: # LTX2GemmaTextEncoderModel - from .torch_ltx2 import TorchGemma + from v2.platform.backends.torch_ltx2 import TorchGemma return TorchGemma(module, tokenizer, device=device, dtype=dtype) return TorchT5Encoder(module, tokenizer, device=device, dtype=dtype) @@ -361,7 +361,7 @@ def build_torch_upsampler(spec, instance, platform): # ``per_channel_statistics`` lives on the AE's decoder/encoder sub-modules, NOT the top-level # LTX2CausalVideoAutoencoder — upsample_video needs an object exposing it (same stats either side). stats_owner = getattr(vae_module, "decoder", None) or getattr(vae_module, "encoder", None) or vae_module - from .torch_ltx2 import TorchLTX2Upsampler + from v2.platform.backends.torch_ltx2 import TorchLTX2Upsampler return TorchLTX2Upsampler(module, stats_owner, device=device, dtype=dtype) @@ -371,7 +371,7 @@ def build_torch_audio_vae(spec, instance, platform): module = _load_component("AudioDecoderLoader", ckpt, _fastvideo_args(spec)) # LTX2AudioDecoder device, dtype = _device(platform), _native_dtype(module) voc = instance.component("vocoder") # build/fetch the vocoder; TorchLTX2AudioVAE chains decoder->vocoder - from .torch_ltx2 import TorchLTX2AudioVAE + from v2.platform.backends.torch_ltx2 import TorchLTX2AudioVAE return TorchLTX2AudioVAE(module, voc, device=device, dtype=dtype) @@ -380,5 +380,5 @@ def build_torch_vocoder(spec, instance, platform): _ensure_fastvideo_runtime() module = _load_component("VocoderLoader", ckpt, _fastvideo_args(spec)) # LTX2Vocoder device, dtype = _device(platform), _native_dtype(module) - from .torch_ltx2 import TorchLTX2Vocoder + from v2.platform.backends.torch_ltx2 import TorchLTX2Vocoder return TorchLTX2Vocoder(module, device=device, dtype=dtype) diff --git a/v2/platform/backends/torch_cuda.py b/v2/platform/backends/torch_cuda.py index 558021a8c..80795ed9d 100644 --- a/v2/platform/backends/torch_cuda.py +++ b/v2/platform/backends/torch_cuda.py @@ -22,7 +22,7 @@ from __future__ import annotations import importlib.util -from ..registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_component, register_kernel +from v2.platform.registry import FLOW_MATCH_STEP, FLOW_SDE_STEP, register_component, register_kernel def _torch_present() -> bool: @@ -41,42 +41,42 @@ def _cuda_available() -> bool: # --- lazy trampolines: import torch only when actually called (on a GPU box) ------------------- # def _build_dit(spec, instance, platform): - from .torch_adapters import build_torch_dit + from v2.platform.backends.torch_adapters import build_torch_dit return build_torch_dit(spec, instance, platform) def _build_vae(spec, instance, platform): - from .torch_adapters import build_torch_vae + from v2.platform.backends.torch_adapters import build_torch_vae return build_torch_vae(spec, instance, platform) def _build_text_encoder(spec, instance, platform): - from .torch_adapters import build_torch_text_encoder + from v2.platform.backends.torch_adapters import build_torch_text_encoder return build_torch_text_encoder(spec, instance, platform) def _build_upsampler(spec, instance, platform): - from .torch_adapters import build_torch_upsampler + from v2.platform.backends.torch_adapters import build_torch_upsampler return build_torch_upsampler(spec, instance, platform) def _build_audio_vae(spec, instance, platform): - from .torch_adapters import build_torch_audio_vae + from v2.platform.backends.torch_adapters import build_torch_audio_vae return build_torch_audio_vae(spec, instance, platform) def _build_vocoder(spec, instance, platform): - from .torch_adapters import build_torch_vocoder + from v2.platform.backends.torch_adapters import build_torch_vocoder return build_torch_vocoder(spec, instance, platform) def _flow_match_cuda(*args, **kwargs): - from .torch_kernels import flow_match_step + from v2.platform.backends.torch_kernels import flow_match_step return flow_match_step(*args, **kwargs) def _flow_sde_cuda(*args, **kwargs): - from .torch_kernels import flow_sde_step + from v2.platform.backends.torch_kernels import flow_sde_step return flow_sde_step(*args, **kwargs) diff --git a/v2/platform/backends/torch_ltx2.py b/v2/platform/backends/torch_ltx2.py index d6e8125e7..e56ae34a1 100644 --- a/v2/platform/backends/torch_ltx2.py +++ b/v2/platform/backends/torch_ltx2.py @@ -15,7 +15,7 @@ from __future__ import annotations import torch -from .torch_adapters import _to_numpy, _to_torch +from v2.platform.backends.torch_adapters import _to_numpy, _to_torch class TorchLTX2DiT: diff --git a/v2/platform/platform.py b/v2/platform/platform.py index c39d74bf2..f574cf574 100644 --- a/v2/platform/platform.py +++ b/v2/platform/platform.py @@ -18,7 +18,7 @@ from __future__ import annotations from typing import Any, Iterator -from .registry import COMPONENTS, KERNELS +from v2.platform.registry import COMPONENTS, KERNELS _BACKENDS_LOADED = False @@ -30,7 +30,7 @@ def ensure_backends_loaded() -> None: return _BACKENDS_LOADED = True # imported for side effects (each module calls register_component/register_kernel at import) - from .backends import accel, cpu, torch_cuda # noqa: F401 + from v2.platform.backends import accel, cpu, torch_cuda # noqa: F401 # Arch fallback chains (newest → oldest → portable terminal). Resolution walks these in order. diff --git a/v2/program/__init__.py b/v2/program/__init__.py index 5530cff1f..dc976567c 100644 --- a/v2/program/__init__.py +++ b/v2/program/__init__.py @@ -1,7 +1,7 @@ """Program plane — compose a card's loops into a task (design_v3 §13).""" from __future__ import annotations -from .specs import ( +from v2.program.specs import ( ComponentNode, Edge, EdgeKind, @@ -13,7 +13,7 @@ from .specs import ( when_opt, when_task, ) -from .workflow import ( +from v2.program.workflow import ( BestOfNWorkflow, ParallelWorkflow, Workflow, diff --git a/v2/program/specs.py b/v2/program/specs.py index befa82911..51c6cd1a3 100644 --- a/v2/program/specs.py +++ b/v2/program/specs.py @@ -13,7 +13,7 @@ from dataclasses import dataclass, field from enum import Enum from typing import Any, Callable -from ..request.tasks import TaskType +from v2.request.tasks import TaskType class ProgramKind(str, Enum): diff --git a/v2/program/workflow.py b/v2/program/workflow.py index b130b76f5..7133ef15b 100644 --- a/v2/program/workflow.py +++ b/v2/program/workflow.py @@ -111,7 +111,7 @@ class ParallelWorkflow(Workflow): def run(self, engine: Any, **initial: Any) -> Any: if not self.stages: raise ValueError(f"workflow {self.workflow_id!r} has no stages") - from ..request.artifacts import Output + from v2.request.artifacts import Output merged: dict[str, Any] = {} metrics: dict[str, float] = {} rid = self.workflow_id diff --git a/v2/registry.py b/v2/registry.py index ce703f4a4..eca209773 100644 --- a/v2/registry.py +++ b/v2/registry.py @@ -35,7 +35,7 @@ class ModelEntry: def _entries() -> list[ModelEntry]: """The explicit registry (PRIMARY). Builders imported lazily to avoid import cycles with the model packages and keep importing this module cheap.""" - from .models.ltx2 import ( + from v2.models.ltx2 import ( build_ltx2_3_card, build_ltx2_3_program, build_ltx2_base_card, @@ -43,8 +43,8 @@ def _entries() -> list[ModelEntry]: build_ltx2_card, build_ltx2_program, ) - from .models.wan_causal import build_wan_causal_card, build_wan_causal_program - from .models.wan21 import ( + from v2.models.wan_causal import build_wan_causal_card, build_wan_causal_program + from v2.models.wan21 import ( build_wan21_card, build_wan22_a14b_card, build_wan22_ti2v_card, @@ -99,7 +99,7 @@ def select_by_architecture(sig: dict): path / renamed repo / new distilled variant of a known arch still resolves with no registry entry.""" tr, pipe = sig.get("transformer_cls"), sig.get("pipeline") if tr == "LTX2Transformer3DModel": - from .models.ltx2 import ( + from v2.models.ltx2 import ( build_ltx2_base_card, build_ltx2_base_program, build_ltx2_card, @@ -109,10 +109,10 @@ def select_by_architecture(sig: dict): return build_ltx2_card, build_ltx2_program # two-stage (base -> upsample -> refine) return build_ltx2_base_card, build_ltx2_base_program # single-stage if tr == "CausalWanTransformer3DModel": - from .models.wan_causal import build_wan_causal_card, build_wan_causal_program + from v2.models.wan_causal import build_wan_causal_card, build_wan_causal_program return build_wan_causal_card, build_wan_causal_program if tr == "WanTransformer3DModel": - from .models.wan21 import ( + from v2.models.wan21 import ( build_wan21_card, build_wan22_a14b_card, build_wan22_ti2v_card, diff --git a/v2/request/__init__.py b/v2/request/__init__.py index a0f926de1..e965642f6 100644 --- a/v2/request/__init__.py +++ b/v2/request/__init__.py @@ -1,7 +1,7 @@ """Request plane — typed runtime objects crossing the product boundary (design_v3 §12).""" from __future__ import annotations -from .artifacts import ( +from v2.request.artifacts import ( Artifact, AudioArtifact, LatentArtifact, @@ -10,8 +10,8 @@ from .artifacts import ( TextArtifact, VideoArtifact, ) -from .cancel import CancelKind, Cancelled, CancelScope -from .modalpart import ( +from v2.request.cancel import CancelKind, Cancelled, CancelScope +from v2.request.modalpart import ( ActionPart, AudioPart, ImagePart, @@ -21,10 +21,10 @@ from .modalpart import ( TextPart, VideoPart, ) -from .params import CaptureMode, DiffusionParams, OutputSpec, SamplingParams -from .requests import Request, Session, make_request, new_request_id -from .streams import OmniEvent, Stream, StreamChunk -from .tasks import TaskType +from v2.request.params import CaptureMode, DiffusionParams, OutputSpec, SamplingParams +from v2.request.requests import Request, Session, make_request, new_request_id +from v2.request.streams import OmniEvent, Stream, StreamChunk +from v2.request.tasks import TaskType __all__ = [ "TaskType", "Modality", "ModalPart", "TextPart", "ImagePart", "VideoPart", diff --git a/v2/request/artifacts.py b/v2/request/artifacts.py index bd9838740..e59656960 100644 --- a/v2/request/artifacts.py +++ b/v2/request/artifacts.py @@ -8,8 +8,8 @@ from __future__ import annotations from dataclasses import dataclass, field -from .._types import TensorLike -from .modalpart import Modality +from v2._types import TensorLike +from v2.request.modalpart import Modality @dataclass diff --git a/v2/request/modalpart.py b/v2/request/modalpart.py index 6b8a73c76..c9d0bc0d5 100644 --- a/v2/request/modalpart.py +++ b/v2/request/modalpart.py @@ -10,7 +10,7 @@ from __future__ import annotations from dataclasses import dataclass from enum import Enum -from .._types import TensorLike +from v2._types import TensorLike class Modality(str, Enum): diff --git a/v2/request/requests.py b/v2/request/requests.py index efbfe1a1f..f92ccc57a 100644 --- a/v2/request/requests.py +++ b/v2/request/requests.py @@ -9,11 +9,11 @@ from __future__ import annotations import itertools from dataclasses import dataclass, field -from .cancel import CancelKind, CancelScope -from .modalpart import ImagePart, ModalPart, TextPart -from .params import DiffusionParams, OutputSpec, SamplingParams -from .streams import Stream -from .tasks import TaskType +from v2.request.cancel import CancelKind, CancelScope +from v2.request.modalpart import ImagePart, ModalPart, TextPart +from v2.request.params import DiffusionParams, OutputSpec, SamplingParams +from v2.request.streams import Stream +from v2.request.tasks import TaskType _counter = itertools.count(1) diff --git a/v2/request/streams.py b/v2/request/streams.py index da622fd7f..d55689c74 100644 --- a/v2/request/streams.py +++ b/v2/request/streams.py @@ -14,7 +14,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from .._types import TensorLike +from v2._types import TensorLike @dataclass(frozen=True) diff --git a/v2/runtime/__init__.py b/v2/runtime/__init__.py index fcc46ce0f..141df4259 100644 --- a/v2/runtime/__init__.py +++ b/v2/runtime/__init__.py @@ -1,13 +1,13 @@ """Execution plane — engine + scheduler (design_v3 §6).""" from __future__ import annotations -from .async_engine import AsyncEngine, RequestState -from .context import RuntimeLoopContext -from .disaggregated import DisaggregatedRunner -from .engine import Engine, ProgramRunner -from .pools import DeployConfig, PoolSet, RolePool, RolePoolSpec, wan_t2v_disaggregated -from .session import WorldModelSession -from .scheduler import ( +from v2.runtime.async_engine import AsyncEngine, RequestState +from v2.runtime.context import RuntimeLoopContext +from v2.runtime.disaggregated import DisaggregatedRunner +from v2.runtime.engine import Engine, ProgramRunner +from v2.runtime.pools import DeployConfig, PoolSet, RolePool, RolePoolSpec, wan_t2v_disaggregated +from v2.runtime.session import WorldModelSession +from v2.runtime.scheduler import ( AdmissionController, AdmissionInfeasible, BatchScheduler, diff --git a/v2/runtime/async_engine.py b/v2/runtime/async_engine.py index 992eb8e1a..06da97360 100644 --- a/v2/runtime/async_engine.py +++ b/v2/runtime/async_engine.py @@ -14,11 +14,11 @@ from __future__ import annotations import asyncio from typing import Any, AsyncIterator -from ..request.artifacts import Output -from ..request.cancel import Cancelled -from ..request.streams import OmniEvent -from .disaggregated import DisaggregatedRunner -from .engine import Engine +from v2.request.artifacts import Output +from v2.request.cancel import Cancelled +from v2.request.streams import OmniEvent +from v2.runtime.disaggregated import DisaggregatedRunner +from v2.runtime.engine import Engine _SENTINEL = object() diff --git a/v2/runtime/context.py b/v2/runtime/context.py index 5cf28e8a0..d825ba980 100644 --- a/v2/runtime/context.py +++ b/v2/runtime/context.py @@ -10,9 +10,9 @@ from __future__ import annotations from time import perf_counter from typing import Any -from .._enums import ExecutionProfile -from ..loop.contracts import StepResult, WorkPlan -from ..request.streams import OmniEvent, Stream, StreamChunk +from v2._enums import ExecutionProfile +from v2.loop.contracts import StepResult, WorkPlan +from v2.request.streams import OmniEvent, Stream, StreamChunk class RuntimeLoopContext: @@ -77,7 +77,7 @@ class RuntimeLoopContext: if getattr(loop, "graph_capture", "eager") != "breakable_cudagraph": return eager(override) if self.instance.graphs is None: - from .cudagraph import GraphCapturer + from v2.runtime.cudagraph import GraphCapturer self.instance.graphs = GraphCapturer() return self.instance.graphs.dispatch(plan, self.instance, override, eager) diff --git a/v2/runtime/disaggregated.py b/v2/runtime/disaggregated.py index af58cca50..ca7df81c0 100644 --- a/v2/runtime/disaggregated.py +++ b/v2/runtime/disaggregated.py @@ -13,15 +13,15 @@ from __future__ import annotations from typing import Any -from .._enums import ExecutionProfile -from ..loop.driver import LoopRunner -from ..program.specs import ComponentNode, ModelLoopNode, Program -from ..request.artifacts import Output -from ..request.cancel import CancelKind, CancelScope -from ..request.streams import Stream -from ..transport import TransferManifest, payload_nbytes -from .context import RuntimeLoopContext -from .engine import _to_artifact +from v2._enums import ExecutionProfile +from v2.loop.driver import LoopRunner +from v2.program.specs import ComponentNode, ModelLoopNode, Program +from v2.request.artifacts import Output +from v2.request.cancel import CancelKind, CancelScope +from v2.request.streams import Stream +from v2.transport import TransferManifest, payload_nbytes +from v2.runtime.context import RuntimeLoopContext +from v2.runtime.engine import _to_artifact class DisaggregatedRunner: diff --git a/v2/runtime/engine.py b/v2/runtime/engine.py index 2021200d2..b184d8d28 100644 --- a/v2/runtime/engine.py +++ b/v2/runtime/engine.py @@ -14,12 +14,12 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import Any -from .._enums import ExecutionProfile -from ..extend.base import InterceptorChain, ObserverBus -from ..loop.driver import LoopRunner -from ..parity.aligner import ParityAligner # noqa: F401 (engine can attach it as an observer) -from ..program.specs import ComponentNode, ModelLoopNode, Program -from ..request.artifacts import ( +from v2._enums import ExecutionProfile +from v2.extend.base import InterceptorChain, ObserverBus +from v2.loop.driver import LoopRunner +from v2.parity.aligner import ParityAligner # noqa: F401 (engine can attach it as an observer) +from v2.program.specs import ComponentNode, ModelLoopNode, Program +from v2.request.artifacts import ( AudioArtifact, LatentArtifact, Output, @@ -27,10 +27,10 @@ from ..request.artifacts import ( TextArtifact, VideoArtifact, ) -from ..request.cancel import CancelKind, CancelScope -from ..request.streams import Stream -from .context import RuntimeLoopContext -from .scheduler import ( +from v2.request.cancel import CancelKind, CancelScope +from v2.request.streams import Stream +from v2.runtime.context import RuntimeLoopContext +from v2.runtime.scheduler import ( AdmissionController, AdmissionInfeasible, BatchScheduler, diff --git a/v2/runtime/pools.py b/v2/runtime/pools.py index ad12cd2a1..f3415e9f7 100644 --- a/v2/runtime/pools.py +++ b/v2/runtime/pools.py @@ -11,9 +11,9 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import Any -from ..cache import CacheManager -from ..card import load_card -from ..transport import Connector, make_connector +from v2.cache import CacheManager +from v2.card import load_card +from v2.transport import Connector, make_connector @dataclass diff --git a/v2/runtime/scheduler.py b/v2/runtime/scheduler.py index de9da7970..8fd0d1df4 100644 --- a/v2/runtime/scheduler.py +++ b/v2/runtime/scheduler.py @@ -15,8 +15,8 @@ from collections import defaultdict from dataclasses import dataclass, field from typing import Any -from ..loop.contracts import WorkPlan -from ..memory.allocator import MemoryManager, Reservation +from v2.loop.contracts import WorkPlan +from v2.memory.allocator import MemoryManager, Reservation class AdmissionInfeasible(RuntimeError): diff --git a/v2/runtime/session.py b/v2/runtime/session.py index 02cdf389d..977e33c7a 100644 --- a/v2/runtime/session.py +++ b/v2/runtime/session.py @@ -15,13 +15,13 @@ from __future__ import annotations from typing import Any, Callable -from .._enums import ExecutionProfile -from ..loop.driver import LoopRunner -from ..models.common import text_encode_node_fn -from ..request import DiffusionParams, TaskType, make_request -from ..request.requests import Session -from ..request.streams import Stream -from .context import RuntimeLoopContext +from v2._enums import ExecutionProfile +from v2.loop.driver import LoopRunner +from v2.models.common import text_encode_node_fn +from v2.request import DiffusionParams, TaskType, make_request +from v2.request.requests import Session +from v2.request.streams import Stream +from v2.runtime.context import RuntimeLoopContext class WorldModelSession: diff --git a/v2/serving/__init__.py b/v2/serving/__init__.py index 04a768f0e..afe6e217f 100644 --- a/v2/serving/__init__.py +++ b/v2/serving/__init__.py @@ -1,9 +1,9 @@ """Serving plane — our own OpenAI-compatible worker server (stdlib asyncio, no framework dep).""" from __future__ import annotations -from .http import HttpServer, Request, Response -from .protocol import ChatCompletionRequest, ImageGenerationRequest, VideoGenerationRequest -from .server import OmniOpenAIServer +from v2.serving.http import HttpServer, Request, Response +from v2.serving.protocol import ChatCompletionRequest, ImageGenerationRequest, VideoGenerationRequest +from v2.serving.server import OmniOpenAIServer __all__ = ["OmniOpenAIServer", "HttpServer", "Request", "Response", "ImageGenerationRequest", "VideoGenerationRequest", "ChatCompletionRequest"] diff --git a/v2/serving/protocol.py b/v2/serving/protocol.py index b5f717420..9cbf0d7c1 100644 --- a/v2/serving/protocol.py +++ b/v2/serving/protocol.py @@ -8,7 +8,7 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import Any -from ..request import DiffusionParams, OutputSpec, SamplingParams, TaskType, make_request +from v2.request import DiffusionParams, OutputSpec, SamplingParams, TaskType, make_request def _wh(size: str, default=(832, 480)) -> tuple[int, int]: diff --git a/v2/serving/server.py b/v2/serving/server.py index 9c6038735..c9fc5727d 100644 --- a/v2/serving/server.py +++ b/v2/serving/server.py @@ -18,9 +18,9 @@ from typing import Any import numpy as np -from ..request.artifacts import Output -from ..request.streams import StreamChunk -from .http import HttpServer, Request, Response +from v2.request.artifacts import Output +from v2.request.streams import StreamChunk +from v2.serving.http import HttpServer, Request, Response def _json_default(o: Any) -> Any: @@ -32,7 +32,7 @@ def _json_default(o: Any) -> Any: if isinstance(o, np.ndarray): return {"shape": list(o.shape), "dtype": str(o.dtype)} return str(o) -from .protocol import ChatCompletionRequest, ImageGenerationRequest, VideoGenerationRequest +from v2.serving.protocol import ChatCompletionRequest, ImageGenerationRequest, VideoGenerationRequest _job_ctr = itertools.count(1) _chat_ctr = itertools.count(1) diff --git a/v2/training/__init__.py b/v2/training/__init__.py index d403d0a1d..8c93fe853 100644 --- a/v2/training/__init__.py +++ b/v2/training/__init__.py @@ -5,9 +5,9 @@ engine never imports ``training``. The rollout forward IS the serve forward plus """ from __future__ import annotations -from .behavior import BehaviorRecord, TrajectoryStatus -from .flywheel import derive_card, run_flywheel -from .methods import ( +from v2.training.behavior import BehaviorRecord, TrajectoryStatus +from v2.training.flywheel import derive_card, run_flywheel +from v2.training.methods import ( DiffusionNFTMethod, DMD2Method, FineTuneMethod, @@ -24,9 +24,9 @@ from .methods import ( build_unified_rl, build_workflow_rl, ) -from .rewards import MultiRewardScorer, ServedRewardScorer, build_multi_reward_scorer -from .rollout import RolloutContext, Trajectory, TrajectoryBuffer, rollout_loop -from .weight_sync import WeightRole, WeightSyncController, WeightSyncPlan +from v2.training.rewards import MultiRewardScorer, ServedRewardScorer, build_multi_reward_scorer +from v2.training.rollout import RolloutContext, Trajectory, TrajectoryBuffer, rollout_loop +from v2.training.weight_sync import WeightRole, WeightSyncController, WeightSyncPlan __all__ = [ "TrainingMethod", "FineTuneMethod", "DMD2Method", "DiffusionNFTMethod", "SelfForcingMethod", diff --git a/v2/training/behavior.py b/v2/training/behavior.py index 6f98da80b..71547a781 100644 --- a/v2/training/behavior.py +++ b/v2/training/behavior.py @@ -11,7 +11,7 @@ from dataclasses import dataclass, field from enum import Enum from typing import Any -from .._enums import ConsistencyLevel +from v2._enums import ConsistencyLevel class TrajectoryStatus(str, Enum): diff --git a/v2/training/flywheel.py b/v2/training/flywheel.py index 77ef4001f..f95f9b84b 100644 --- a/v2/training/flywheel.py +++ b/v2/training/flywheel.py @@ -18,7 +18,7 @@ from __future__ import annotations import dataclasses from typing import Any -from .methods import build_diffusion_nft, build_dmd2 +from v2.training.methods import build_diffusion_nft, build_dmd2 def derive_card(base_card: Any, model_id: str, *, method: str, parents: list[str]) -> Any: diff --git a/v2/training/methods/__init__.py b/v2/training/methods/__init__.py index 157d8fc9d..4c658c85b 100644 --- a/v2/training/methods/__init__.py +++ b/v2/training/methods/__init__.py @@ -1,14 +1,14 @@ """Training methods — all on Wan2.1-1.3B, all over the SHARED loops (design_v3 §10).""" from __future__ import annotations -from .base import TrainingMethod, new_instance, predict_x0 -from .diffusion_nft import DiffusionNFTMethod, build_diffusion_nft -from .dmd2 import DMD2Method, build_dmd2 -from .finetune import FineTuneMethod, build_finetune -from .joint_multi_rl import JointMultiExpertRL, build_joint_multi_rl -from .self_forcing import SelfForcingMethod, build_self_forcing -from .unified_rl import UnifiedRLMethod, build_unified_rl -from .workflow_rl import WorkflowRLMethod, build_workflow_rl +from v2.training.methods.base import TrainingMethod, new_instance, predict_x0 +from v2.training.methods.diffusion_nft import DiffusionNFTMethod, build_diffusion_nft +from v2.training.methods.dmd2 import DMD2Method, build_dmd2 +from v2.training.methods.finetune import FineTuneMethod, build_finetune +from v2.training.methods.joint_multi_rl import JointMultiExpertRL, build_joint_multi_rl +from v2.training.methods.self_forcing import SelfForcingMethod, build_self_forcing +from v2.training.methods.unified_rl import UnifiedRLMethod, build_unified_rl +from v2.training.methods.workflow_rl import WorkflowRLMethod, build_workflow_rl __all__ = [ "TrainingMethod", "new_instance", "predict_x0", diff --git a/v2/training/methods/base.py b/v2/training/methods/base.py index abc537eb8..1c7a70c24 100644 --- a/v2/training/methods/base.py +++ b/v2/training/methods/base.py @@ -12,11 +12,11 @@ from typing import Any import numpy as np -from ..._enums import ConsistencyLevel, ExecutionProfile -from ...cache import CacheManager -from ...card import load_card -from ...models.common import text_encode_node_fn -from ..rollout import rollout_loop +from v2._enums import ConsistencyLevel, ExecutionProfile +from v2.cache import CacheManager +from v2.card import load_card +from v2.models.common import text_encode_node_fn +from v2.training.rollout import rollout_loop def new_instance(card) -> Any: diff --git a/v2/training/methods/diffusion_nft.py b/v2/training/methods/diffusion_nft.py index d994e6696..f3f3d2dcc 100644 --- a/v2/training/methods/diffusion_nft.py +++ b/v2/training/methods/diffusion_nft.py @@ -17,13 +17,13 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel -from ...models.common import cached_text_encode -from ...request import DiffusionParams, TaskType, make_request -from ..rewards import build_multi_reward_scorer -from ..rollout import Trajectory, TrajectoryBuffer -from ..weight_sync import WeightRole, WeightSyncPlan -from .base import TrainingMethod, new_instance +from v2._enums import ConsistencyLevel +from v2.models.common import cached_text_encode +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.rewards import build_multi_reward_scorer +from v2.training.rollout import Trajectory, TrajectoryBuffer +from v2.training.weight_sync import WeightRole, WeightSyncPlan +from v2.training.methods.base import TrainingMethod, new_instance class DiffusionNFTMethod(TrainingMethod): diff --git a/v2/training/methods/dmd2.py b/v2/training/methods/dmd2.py index 21b785e6a..1add5b238 100644 --- a/v2/training/methods/dmd2.py +++ b/v2/training/methods/dmd2.py @@ -14,10 +14,10 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel -from ...models.common import cached_text_encode -from ...request import DiffusionParams, TaskType, make_request -from .base import TrainingMethod, new_instance, predict_x0 +from v2._enums import ConsistencyLevel +from v2.models.common import cached_text_encode +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.methods.base import TrainingMethod, new_instance, predict_x0 class DMD2Method(TrainingMethod): diff --git a/v2/training/methods/finetune.py b/v2/training/methods/finetune.py index cc70569b8..a534777ac 100644 --- a/v2/training/methods/finetune.py +++ b/v2/training/methods/finetune.py @@ -7,10 +7,10 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel -from ...models.backend import LATENT_CHANNELS -from ...models.common import cached_text_encode -from .base import TrainingMethod, new_instance +from v2._enums import ConsistencyLevel +from v2.models.backend import LATENT_CHANNELS +from v2.models.common import cached_text_encode +from v2.training.methods.base import TrainingMethod, new_instance class FineTuneMethod(TrainingMethod): diff --git a/v2/training/methods/joint_multi_rl.py b/v2/training/methods/joint_multi_rl.py index 0140f17ff..0b6ca59f4 100644 --- a/v2/training/methods/joint_multi_rl.py +++ b/v2/training/methods/joint_multi_rl.py @@ -26,14 +26,14 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel, ExecutionProfile -from ...loop.sampler import flow_sde_ml_velocity as _ml_velocity -from ...models.common import cached_text_encode -from ...platform import FLOW_SDE_STEP -from ...request import DiffusionParams, TaskType, make_request -from ..rollout import rollout_loop -from ..weight_sync import WeightRole, WeightSyncPlan -from .base import TrainingMethod, new_instance +from v2._enums import ConsistencyLevel, ExecutionProfile +from v2.loop.sampler import flow_sde_ml_velocity as _ml_velocity +from v2.models.common import cached_text_encode +from v2.platform import FLOW_SDE_STEP +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.rollout import rollout_loop +from v2.training.weight_sync import WeightRole, WeightSyncPlan +from v2.training.methods.base import TrainingMethod, new_instance class JointMultiExpertRL(TrainingMethod): diff --git a/v2/training/methods/self_forcing.py b/v2/training/methods/self_forcing.py index 819fa0ac6..3fbf00517 100644 --- a/v2/training/methods/self_forcing.py +++ b/v2/training/methods/self_forcing.py @@ -13,10 +13,10 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel -from ...request import DiffusionParams, TaskType, make_request -from .base import new_instance -from .dmd2 import DMD2Method +from v2._enums import ConsistencyLevel +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.methods.base import new_instance +from v2.training.methods.dmd2 import DMD2Method class SelfForcingMethod(DMD2Method): diff --git a/v2/training/methods/unified_rl.py b/v2/training/methods/unified_rl.py index 64fa62f22..786f10254 100644 --- a/v2/training/methods/unified_rl.py +++ b/v2/training/methods/unified_rl.py @@ -30,14 +30,14 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel, ExecutionProfile -from ...loop.sampler import flow_sde_ml_velocity as _ml_velocity -from ...models.common import cached_text_encode -from ...platform import FLOW_SDE_STEP -from ...request import DiffusionParams, TaskType, make_request -from ..rollout import rollout_loop -from ..weight_sync import WeightRole, WeightSyncPlan -from .base import TrainingMethod, new_instance +from v2._enums import ConsistencyLevel, ExecutionProfile +from v2.loop.sampler import flow_sde_ml_velocity as _ml_velocity +from v2.models.common import cached_text_encode +from v2.platform import FLOW_SDE_STEP +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.rollout import rollout_loop +from v2.training.weight_sync import WeightRole, WeightSyncPlan +from v2.training.methods.base import TrainingMethod, new_instance class UnifiedRLMethod(TrainingMethod): diff --git a/v2/training/methods/workflow_rl.py b/v2/training/methods/workflow_rl.py index f03dd7158..8e3fc2581 100644 --- a/v2/training/methods/workflow_rl.py +++ b/v2/training/methods/workflow_rl.py @@ -18,14 +18,14 @@ from __future__ import annotations import numpy as np -from ..._enums import ConsistencyLevel, ExecutionProfile -from ...loop.sampler import flow_sde_ml_velocity, flow_sde_step_with_logprob -from ...models.common import cached_text_encode -from ...platform import FLOW_SDE_STEP -from ...request import DiffusionParams, TaskType, make_request -from ..rollout import rollout_loop -from ..weight_sync import WeightRole, WeightSyncPlan -from .base import TrainingMethod, new_instance +from v2._enums import ConsistencyLevel, ExecutionProfile +from v2.loop.sampler import flow_sde_ml_velocity, flow_sde_step_with_logprob +from v2.models.common import cached_text_encode +from v2.platform import FLOW_SDE_STEP +from v2.request import DiffusionParams, TaskType, make_request +from v2.training.rollout import rollout_loop +from v2.training.weight_sync import WeightRole, WeightSyncPlan +from v2.training.methods.base import TrainingMethod, new_instance def _flowgrpo_ppo_step(dit, ref_dit, behavior, emb, advantage, *, lr, ppo_clip, beta, noise_scale, diff --git a/v2/training/rewards.py b/v2/training/rewards.py index 624dbfb92..bab9c8224 100644 --- a/v2/training/rewards.py +++ b/v2/training/rewards.py @@ -12,7 +12,7 @@ from typing import Callable import numpy as np -from ..cache.keys import content_hash +from v2.cache.keys import content_hash # RewardScorer: (list of media arrays, list of prompts) -> per-sample scores RewardScorer = Callable[[list, list], np.ndarray] @@ -67,9 +67,9 @@ class ServedRewardScorer: self.loop_id = loop_id def score(self, media: list, prompts: list | None = None) -> dict[str, np.ndarray]: - from .._enums import ExecutionProfile - from ..request import TaskType, make_request - from .rollout import rollout_loop + from v2._enums import ExecutionProfile + from v2.request import TaskType, make_request + from v2.training.rollout import rollout_loop req = make_request(TaskType.REASON, self.inst.card.model_id, "") # task is cosmetic here res = rollout_loop(self.inst, self.loop_id, req, slots={"media": list(media)}, profile=ExecutionProfile.SERVE) diff --git a/v2/training/rollout.py b/v2/training/rollout.py index 8b7a3ecda..3bd41917d 100644 --- a/v2/training/rollout.py +++ b/v2/training/rollout.py @@ -12,10 +12,10 @@ from __future__ import annotations from dataclasses import dataclass, field from typing import Any, Callable -from .._enums import ExecutionProfile -from ..loop.contracts import StepResult, WorkPlan -from ..loop.driver import LoopRunner -from .behavior import TrajectoryStatus +from v2._enums import ExecutionProfile +from v2.loop.contracts import StepResult, WorkPlan +from v2.loop.driver import LoopRunner +from v2.training.behavior import TrajectoryStatus class _TrainingContext: diff --git a/v2/transport/__init__.py b/v2/transport/__init__.py index e834100e9..f1fe07e28 100644 --- a/v2/transport/__init__.py +++ b/v2/transport/__init__.py @@ -1,7 +1,7 @@ """Transport plane — manifest-based, pluggable connectors with readiness + credit flow-control (§7.3).""" from __future__ import annotations -from .connector import ( +from v2.transport.connector import ( Connector, CreditWindow, InProcConnector, @@ -10,7 +10,7 @@ from .connector import ( ShmFakeConnector, make_connector, ) -from .manifest import TransferManifest, payload_nbytes +from v2.transport.manifest import TransferManifest, payload_nbytes __all__ = ["Connector", "CreditWindow", "InProcConnector", "ShmFakeConnector", "make_connector", "KVConnector", "InProcKVConnector", "TransferManifest", "payload_nbytes"] diff --git a/v2/transport/connector.py b/v2/transport/connector.py index 0974db08c..e249cb163 100644 --- a/v2/transport/connector.py +++ b/v2/transport/connector.py @@ -14,7 +14,7 @@ from __future__ import annotations import copy from typing import Any, Protocol, runtime_checkable -from .manifest import TransferManifest, payload_nbytes +from v2.transport.manifest import TransferManifest, payload_nbytes class CreditWindow: diff --git a/v2/video_generator.py b/v2/video_generator.py index c923e3812..77a0ae4bd 100644 --- a/v2/video_generator.py +++ b/v2/video_generator.py @@ -67,7 +67,7 @@ class VideoGenerator: from huggingface_hub import snapshot_download - from .registry import resolve + from v2.registry import resolve rev = getattr(config, "revision", None) local = os.path.isdir(model_path) # Resolve card+program via the shared registry (v2/registry.py): a registered HF-id resolves with @@ -83,13 +83,13 @@ class VideoGenerator: root = model_path if local else snapshot_download(model_path, revision=rev) # full weights (cached) card, program = build_card(), build_program() - from .models.wan21 import stamp_wan21_checkpoints # transformer/vae/text_encoder subfolder layout + from v2.models.wan21 import stamp_wan21_checkpoints # transformer/vae/text_encoder subfolder layout stamp_wan21_checkpoints(card, root) - from ._enums import Capability - from .card import load_card - from .cache import CacheManager - from .runtime import Engine + from v2._enums import Capability + from v2.card import load_card + from v2.cache import CacheManager + from v2.runtime import Engine inst = load_card(card, cache_manager=CacheManager.from_card(card)) # platform auto-detect -> cuda eng = Engine() eng.register(card.model_id, inst, program) @@ -110,7 +110,7 @@ class VideoGenerator: ``want_audio``: ``None`` (default) auto-enables sound for an A/V model (LTX-2.3 → T2VS, both video+audio in one joint pass); ``True``/``False`` force it on/off. For a video-only model the auto resolves to video-only (T2V), unchanged.""" - from .request import DiffusionParams, OutputSpec, TaskType, make_request + from v2.request import DiffusionParams, OutputSpec, TaskType, make_request s = request.sampling prompts = request.prompt if isinstance(request.prompt, list) else [request.prompt] audio = self._supports_av if want_audio is None else bool(want_audio)