Templates are now stack-shaped folders (compose.yaml + .env.example +
template.json) instead of DB rows + manifest.json + {{VAR}} rendering.
Pull copies the folder into a new stack; custom templates persist under
DATA_DIR/templates. Adds POST /api/templates/from-stack and a one-time
startup migration for pre-0.31 DB templates (drops the template table).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from sqlmodel import SQLModel
|
|
|
|
# Templates are stored as stack-shaped folders on disk (see
|
|
# services/template_service.py), not in the database. These are API schemas only.
|
|
|
|
|
|
class TemplateSummary(SQLModel):
|
|
id: str
|
|
name: str
|
|
description: Optional[str] = None
|
|
tags: list[str] = []
|
|
gpu: Optional[str] = None
|
|
source: str = "bundled" # "bundled" | "custom"
|
|
|
|
|
|
class TemplateDetail(TemplateSummary):
|
|
compose: str = ""
|
|
env: str = ""
|
|
files: list[str] = [] # relative paths the template ships
|
|
|
|
|
|
class TemplateSaveRequest(SQLModel):
|
|
name: str
|
|
description: Optional[str] = None
|
|
tags: list[str] = []
|
|
gpu: Optional[str] = None
|
|
compose: str
|
|
env: str = ""
|
|
|
|
|
|
class TemplateFromStackRequest(SQLModel):
|
|
stack_id: str
|
|
name: str
|
|
description: Optional[str] = None
|
|
|
|
|
|
class TemplateInstantiateRequest(SQLModel):
|
|
name: str # new stack name
|
|
agent_id: int | None = None # None = local host; otherwise deploy to a remote agent
|