File size: 3,688 Bytes
6c15786
 
 
 
db913fc
6c15786
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
db913fc
6c15786
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"""SQLAlchemy ORM models."""
import datetime
import uuid

from sqlalchemy import Column, String, Integer, Text, Float, DateTime, JSON

from .database import Base


def _id() -> str:
    return uuid.uuid4().hex


class User(Base):
    __tablename__ = "users"

    id = Column(String, primary_key=True, default=_id)
    username = Column(String, unique=True, index=True, nullable=False)
    email = Column(String, unique=True, index=True, nullable=False)
    hashed_password = Column(String, nullable=False)
    created_at = Column(DateTime, default=datetime.datetime.utcnow)


class ModelRepo(Base):
    __tablename__ = "model_repos"

    id = Column(String, primary_key=True, default=_id)
    name = Column(String, nullable=False)
    owner = Column(String, index=True, nullable=False)
    description = Column(Text, default="")
    pipeline_tag = Column(String, default="text-generation")
    tags = Column(JSON, default=list)
    license = Column(String, default="apache-2.0")
    hf_repo_id = Column(String, nullable=True)
    downloads = Column(Integer, default=0)
    likes = Column(Integer, default=0)
    created_at = Column(DateTime, default=datetime.datetime.utcnow)


class DatasetRepo(Base):
    __tablename__ = "dataset_repos"

    id = Column(String, primary_key=True, default=_id)
    name = Column(String, nullable=False)
    owner = Column(String, index=True, nullable=False)
    description = Column(Text, default="")
    tags = Column(JSON, default=list)
    license = Column(String, default="apache-2.0")
    columns = Column(JSON, default=list)      # schema: list of column names
    num_rows = Column(Integer, default=0)
    size_bytes = Column(Integer, default=0)
    downloads = Column(Integer, default=0)
    created_at = Column(DateTime, default=datetime.datetime.utcnow)


class SpaceRepo(Base):
    __tablename__ = "space_repos"

    id = Column(String, primary_key=True, default=_id)
    name = Column(String, nullable=False)
    owner = Column(String, index=True, nullable=False)
    description = Column(Text, default="")
    sdk = Column(String, default="gradio")
    status = Column(String, default="not-built")  # not-built | building | running | sleeping
    likes = Column(Integer, default=0)
    created_at = Column(DateTime, default=datetime.datetime.utcnow)


class TrainingJob(Base):
    __tablename__ = "training_jobs"

    id = Column(String, primary_key=True, default=_id)
    name = Column(String, nullable=False)
    owner = Column(String, index=True, nullable=False)
    base_model = Column(String, nullable=False)
    dataset = Column(String, nullable=False)
    job_type = Column(String, default="scratch")  # scratch | finetune
    status = Column(String, default="queued")     # queued | running | completed | failed | cancelled
    config = Column(JSON, default=dict)
    metrics = Column(JSON, default=dict)
    total_epochs = Column(Integer, default=0)
    current_epoch = Column(Integer, default=0)
    loss = Column(Float, nullable=True)
    error = Column(Text, nullable=True)
    created_at = Column(DateTime, default=datetime.datetime.utcnow)
    started_at = Column(DateTime, nullable=True)
    finished_at = Column(DateTime, nullable=True)


class StoredFile(Base):
    __tablename__ = "stored_files"

    id = Column(String, primary_key=True, default=_id)
    repo_type = Column(String, index=True, nullable=False)  # model | dataset
    repo_id = Column(String, index=True, nullable=False)    # owning repo id (polymorphic)
    filename = Column(String, nullable=False)
    size_bytes = Column(Integer, default=0)
    sha256 = Column(String, nullable=True)
    uploaded_at = Column(DateTime, default=datetime.datetime.utcnow)