from __future__ import annotations import os from django.core.management.base import BaseCommand from control_plane.resources.models import Resource, ResourceKind class Command(BaseCommand): help = "Seed DGX Spark compute and model resources for Sol and Qwen." def handle(self, *args, **options): spark, _ = Resource.objects.update_or_create( name=os.environ.get("ARTIFEX_SPARK_RESOURCE_NAME", "DGX Spark"), defaults={ "kind": ResourceKind.MODEL_COMPUTE, "provider": "ssh", "config": {"ssh_alias": os.environ.get("ARTIFEX_SPARK_SSH_ALIAS", "spark")}, "roles": [], }, ) Resource.objects.update_or_create( name=os.environ.get("ARTIFEX_SOL_RESOURCE_NAME", "GPT-5.6 Sol"), defaults={ "kind": ResourceKind.MODEL, "provider": "opencode", "compute": spark, "roles": ["PROJECT_BRAIN", "PLANNING", "ARCHAEOLOGY_INTERPRETATION"], "config": { "transport": os.environ.get("ARTIFEX_SOL_TRANSPORT", "local"), "command": os.environ.get("ARTIFEX_SOL_OPENCODE_COMMAND", "/home/daniel/.opencode/bin/opencode run"), "use_pty": os.environ.get("ARTIFEX_SOL_USE_PTY", "1") == "1", "timeout_seconds": int(os.environ.get("ARTIFEX_SOL_TIMEOUT_SECONDS", "120")), }, }, ) Resource.objects.update_or_create( name=os.environ.get("ARTIFEX_QWEN_RESOURCE_NAME", "Qwen"), defaults={ "kind": ResourceKind.MODEL, "provider": "local_inference", "compute": spark, "roles": ["CODING", "REVIEW", "REASONING"], "config": { "endpoint_url": os.environ.get("ARTIFEX_QWEN_ENDPOINT_URL", "http://192.168.1.162:8002/v1/chat/completions"), "health_url": os.environ.get("ARTIFEX_QWEN_HEALTH_URL", "http://192.168.1.162:8002/health"), "model": os.environ.get("ARTIFEX_QWEN_MODEL", "qwen38"), "extra_body": {"chat_template_kwargs": {"enable_thinking": False}}, }, }, ) self.stdout.write(self.style.SUCCESS("Seeded Spark model resources."))