feat: add AirShelf core implementation

This commit is contained in:
zyc
2026-06-05 10:21:40 +08:00
parent 2ba1058329
commit cfdcd84a30
252 changed files with 70828 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
+23
View File
@@ -0,0 +1,23 @@
from rest_framework.exceptions import PermissionDenied
def get_current_team(user):
membership = user.team_memberships.filter(status="active").select_related("team").first()
if not membership:
raise PermissionDenied("current user has no active team")
return membership.team
class TeamScopedViewSetMixin:
team_field = "team"
def get_team(self):
return get_current_team(self.request.user)
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(**{self.team_field: self.get_team()})
def perform_create(self, serializer):
serializer.save(team=self.get_team(), created_by=self.request.user)
+7
View File
@@ -0,0 +1,7 @@
from django.apps import AppConfig
class CommonConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "apps.common"
@@ -0,0 +1 @@
@@ -0,0 +1 @@
@@ -0,0 +1,36 @@
from django.core.management.base import BaseCommand
from apps.ai.catalog import VOLCANO_MODELS, VOLCANO_PROVIDER
from apps.ai.models import ModelConfig, ModelProvider
class Command(BaseCommand):
help = "Create or update default Volcano model provider and model configs."
def handle(self, *args, **options):
provider, _ = ModelProvider.objects.update_or_create(
name=VOLCANO_PROVIDER["name"],
defaults={
"display_name": VOLCANO_PROVIDER["display_name"],
"base_url": VOLCANO_PROVIDER["base_url"],
"status": ModelProvider.Status.ACTIVE,
},
)
count = 0
for item in VOLCANO_MODELS:
ModelConfig.objects.update_or_create(
provider=provider,
name=item["name"],
capability=item["capability"],
defaults={
"display_name": item["display_name"],
"endpoint": item["endpoint"],
"status": ModelConfig.Status.ACTIVE,
"metadata": item["metadata"],
},
)
count += 1
self.stdout.write(self.style.SUCCESS(f"Bootstrapped {count} Volcano model configs."))
@@ -0,0 +1 @@
+33
View File
@@ -0,0 +1,33 @@
import uuid
from django.db import models
class UUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
class Meta:
abstract = True
class TimeStampedModel(UUIDModel):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class TeamOwnedModel(TimeStampedModel):
team = models.ForeignKey("accounts.Team", on_delete=models.CASCADE, related_name="%(class)s_set")
created_by = models.ForeignKey(
"accounts.User",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="created_%(class)s_set",
)
class Meta:
abstract = True
+6
View File
@@ -0,0 +1,6 @@
from django.http import JsonResponse
def health_check(request):
return JsonResponse({"status": "ok", "service": "airshelf-backend"})