57 lines
2.4 KiB
Python
57 lines
2.4 KiB
Python
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.pool import StaticPool
|
|
|
|
from modelforge_api.domain.projects import ProjectCreate, ProjectRequirementCreate
|
|
from modelforge_api.persistence.models import ArtifactSet, Base, Model, ModelRevision
|
|
from modelforge_api.services.projects import ProjectService
|
|
from tests.test_serving import approve_and_promote, setup_m5
|
|
|
|
|
|
def test_project_workspace_resolves_exact_model_behind_stable_capability() -> None:
|
|
engine = create_engine(
|
|
"sqlite://",
|
|
connect_args={"check_same_thread": False},
|
|
poolclass=StaticPool,
|
|
)
|
|
Base.metadata.create_all(engine)
|
|
try:
|
|
with Session(engine) as session:
|
|
serving, candidate, _node = setup_m5(session)
|
|
_approval, deployment = approve_and_promote(serving, candidate.id)
|
|
projects = ProjectService(serving)
|
|
projects.create(ProjectCreate(
|
|
key="managed-model-app",
|
|
name="Managed model app",
|
|
description="Model management contract",
|
|
owner="Operator",
|
|
))
|
|
workspace = projects.bind(
|
|
"managed-model-app",
|
|
ProjectRequirementCreate(
|
|
capability="rag.embedding@1",
|
|
migration_support="reindex",
|
|
),
|
|
)
|
|
|
|
requirement = workspace.requirements[0]
|
|
assert requirement.deployment_id == deployment.id
|
|
assert requirement.serving_model is not None
|
|
|
|
artifact_set = session.get(ArtifactSet, deployment.artifact_set_id)
|
|
assert artifact_set is not None
|
|
revision = session.get(ModelRevision, artifact_set.revision_id)
|
|
assert revision is not None
|
|
model = session.get(Model, revision.model_id)
|
|
assert model is not None
|
|
|
|
assert requirement.serving_model.model_id == model.id
|
|
assert requirement.serving_model.display_name == model.display_name
|
|
assert requirement.serving_model.revision_id == revision.id
|
|
assert requirement.serving_model.resolved_commit_sha == revision.resolved_commit_sha
|
|
assert requirement.serving_model.artifact_set_id == artifact_set.id
|
|
assert requirement.serving_model.runtime_profile_id == deployment.runtime_profile_id
|
|
assert requirement.serving_model.compute_node_id == deployment.compute_node_id
|
|
finally:
|
|
engine.dispose()
|