apiVersion: catalyst.openova.io/v1alpha1
kind: Blueprint
metadata:
  name: bp-kserve
  labels:
    catalyst.openova.io/section: pts-4-6-ai-ml
spec:
  version: 1.0.0
  card:
    title: KServe
    summary: |
      Kubernetes-native model serving — InferenceService CRD, multi-
      framework predictors (vLLM, TorchServe, Triton, SKLearn), inference
      graphs. Wraps the upstream `kserve/kserve` chart and ships a
      Catalyst-curated `RawDeployment` mode (no per-InferenceService
      Knative Service hop by default — KServe writes Deployments
      directly), with **Knative still installed** (via bp-knative) for
      Application-tier Blueprints that opt in to scale-to-zero on a per-
      InferenceService basis. Used by bp-cortex (composite AI Hub
      Blueprint).
    icon: kserve.svg
    category: ai-ml
  visibility: unlisted              # bootstrap-kit infrastructure component
  configSchema:
    type: object
    properties:
      deploymentMode:
        type: string
        enum: [RawDeployment, Serverless]
        default: RawDeployment
        description: |
          KServe deployment mode. RawDeployment writes plain
          Deployment+Service+HPA per InferenceService (no Knative hop).
          Serverless writes a Knative Service per InferenceService
          (scale-to-zero). Catalyst defaults to RawDeployment but bp-
          knative is still installed so per-InferenceService overrides
          via annotation can opt in to Serverless without infra changes.
      ingressClass:
        type: string
        default: cilium
        description: |
          KServe ingress class — Catalyst defaults to Cilium native
          Gateway-API (istio-less).
      controllerReplicas:
        type: integer
        default: 1
        minimum: 1
        maximum: 5
        description: |
          KServe controller-manager replicas. Solo Sovereign = 1;
          multi-AZ overlays bump for HA.
      crds:
        type: object
        properties:
          create:
            type: boolean
            default: true
            description: |
              Install serving.kserve.io CRDs as part of this chart.
              CRDs ship with the upstream chart; consumers gated via
              Flux dependsOn.
  placementSchema:
    modes: [single-region, active-active]
    default: single-region
    minRegions: 1
    maxRegions: 5
  manifests:
    chart: ./chart
  depends:
    - blueprint: bp-cilium            # Cilium native Gateway-API ingress
      version: ^1
    - blueprint: bp-cert-manager      # KServe webhook TLS
      version: ^1
    - blueprint: bp-knative           # Knative still installed for per-IS Serverless opt-in
      version: ^1
  upgrades:
    from: ["0.x"]
