projectdavid-orm 1.2.0__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/CHANGELOG.md +14 -0
- {projectdavid_orm-1.2.0/src/projectdavid_orm.egg-info → projectdavid_orm-1.4.0}/PKG-INFO +2 -2
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/pyproject.toml +2 -2
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/models.py +28 -14
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0/src/projectdavid_orm.egg-info}/PKG-INFO +2 -2
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/LICENSE +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/MANIFEST.in +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/README.md +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/setup.cfg +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/PKG-INFO +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/SOURCES.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/dependency_links.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/entry_points.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/requires.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/top_level.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/__init__.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/constants/__init__.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/ormInterface.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/__init__.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/base.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/utilities/__init__.py +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/SOURCES.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/dependency_links.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/requires.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/top_level.txt +0 -0
- {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/tests/test_clients.py +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.4.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.3.0...v1.4.0) (2026-03-23)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Phase 5a ([7213c69](https://github.com/project-david-ai/projectdavid-orm/commit/7213c698beb56eddb5230bbcf609f250e6b20c5e))
|
|
7
|
+
|
|
8
|
+
# [1.3.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.2.0...v1.3.0) (2026-03-23)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Phase 4 ([235a547](https://github.com/project-david-ai/projectdavid-orm/commit/235a54724dee1555c6e23febc9dec5d85dda5328))
|
|
14
|
+
|
|
1
15
|
# [1.2.0](https://github.com/project-david-ai/projectdavid-orm/compare/v1.1.12...v1.2.0) (2026-03-22)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: projectdavid-orm
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Shared SQLAlchemy ORM models for ProjectDavid services
|
|
5
5
|
Author-email: "Francis N." <francis.neequaye@projectdavid.co.uk>
|
|
6
6
|
License: Polyform
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/project-david-ai/projectdavid-orm
|
|
8
8
|
Keywords: orm,sqlalchemy,models,projectdavid,internal
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "projectdavid-orm"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.4.0"
|
|
8
8
|
description = "Shared SQLAlchemy ORM models for ProjectDavid services"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -30,7 +30,7 @@ dev = [
|
|
|
30
30
|
]
|
|
31
31
|
|
|
32
32
|
[project.urls]
|
|
33
|
-
Homepage = "https://github.com/
|
|
33
|
+
Homepage = "https://github.com/project-david-ai/projectdavid-orm"
|
|
34
34
|
|
|
35
35
|
[tool.setuptools]
|
|
36
36
|
package-dir = { "" = "src" }
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/models.py
RENAMED
|
@@ -762,8 +762,6 @@ class VectorStoreFile(Base):
|
|
|
762
762
|
# ---------------------------------------------------------------------------
|
|
763
763
|
# Training API Models
|
|
764
764
|
# ---------------------------------------------------------------------------
|
|
765
|
-
|
|
766
|
-
|
|
767
765
|
class Dataset(Base):
|
|
768
766
|
__tablename__ = "datasets"
|
|
769
767
|
id = Column(String(64), primary_key=True, index=True)
|
|
@@ -822,7 +820,8 @@ class TrainingJob(Base):
|
|
|
822
820
|
metrics = Column(JSON, nullable=True)
|
|
823
821
|
output_path = Column(String(512), nullable=True)
|
|
824
822
|
|
|
825
|
-
#
|
|
823
|
+
# Phase 4: node_id stores the Ray node ID (hex string) for traceability.
|
|
824
|
+
# FK to compute_nodes retained for legacy compatibility — dropped in Phase 5.
|
|
826
825
|
node_id = Column(String(64), ForeignKey("compute_nodes.id", ondelete="SET NULL"), nullable=True)
|
|
827
826
|
|
|
828
827
|
dataset = relationship("Dataset", back_populates="training_jobs", lazy="select")
|
|
@@ -864,7 +863,8 @@ class FineTunedModel(Base):
|
|
|
864
863
|
)
|
|
865
864
|
deleted_at = Column(Integer, nullable=True, default=None, index=True)
|
|
866
865
|
|
|
867
|
-
#
|
|
866
|
+
# Phase 4: stores Ray node ID for traceability. FK retained for legacy
|
|
867
|
+
# compatibility until Phase 5 drops compute_nodes.
|
|
868
868
|
node_id = Column(String(64), ForeignKey("compute_nodes.id", ondelete="SET NULL"), nullable=True)
|
|
869
869
|
|
|
870
870
|
training_job = relationship("TrainingJob", back_populates="fine_tuned_model", lazy="select")
|
|
@@ -872,30 +872,40 @@ class FineTunedModel(Base):
|
|
|
872
872
|
|
|
873
873
|
|
|
874
874
|
# ---------------------------------------------------------------------------
|
|
875
|
-
# Cluster & Resource Management
|
|
875
|
+
# Cluster & Resource Management (Legacy — Phase 5 will drop these)
|
|
876
876
|
# ---------------------------------------------------------------------------
|
|
877
877
|
|
|
878
878
|
|
|
879
879
|
class ComputeNode(Base):
|
|
880
|
+
"""
|
|
881
|
+
Phase 4 status: LEGACY.
|
|
882
|
+
Node registration and heartbeat are now handled by Ray natively.
|
|
883
|
+
Retained for FK compatibility with TrainingJob and FineTunedModel.
|
|
884
|
+
Will be dropped in Phase 5 cleanup.
|
|
885
|
+
"""
|
|
886
|
+
|
|
880
887
|
__tablename__ = "compute_nodes"
|
|
881
888
|
id = Column(String(64), primary_key=True, index=True)
|
|
882
889
|
hostname = Column(String(128), nullable=False)
|
|
883
890
|
ip_address = Column(String(45), nullable=True)
|
|
884
|
-
|
|
885
891
|
gpu_model = Column(String(128))
|
|
886
892
|
total_vram_gb = Column(Float)
|
|
887
893
|
current_vram_usage_gb = Column(Float, default=0.0)
|
|
888
894
|
status = Column(SAEnum(StatusEnum), default=StatusEnum.active)
|
|
889
895
|
last_heartbeat = Column(BigInteger, default=lambda: int(time.time()))
|
|
890
896
|
|
|
891
|
-
# Enhanced Relationships
|
|
892
897
|
allocations = relationship("GPUAllocation", back_populates="node", cascade="all, delete-orphan")
|
|
893
898
|
training_jobs = relationship("TrainingJob", back_populates="node")
|
|
894
899
|
active_models = relationship("FineTunedModel", back_populates="node")
|
|
895
|
-
deployments = relationship("InferenceDeployment", back_populates="node")
|
|
896
900
|
|
|
897
901
|
|
|
898
902
|
class GPUAllocation(Base):
|
|
903
|
+
"""
|
|
904
|
+
Phase 4 status: LEGACY.
|
|
905
|
+
VRAM reservation is now handled by Ray resource scheduling.
|
|
906
|
+
Retained for schema compatibility. Will be dropped in Phase 5.
|
|
907
|
+
"""
|
|
908
|
+
|
|
899
909
|
__tablename__ = "gpu_allocations"
|
|
900
910
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
901
911
|
node_id = Column(String(64), ForeignKey("compute_nodes.id", ondelete="CASCADE"))
|
|
@@ -903,7 +913,6 @@ class GPUAllocation(Base):
|
|
|
903
913
|
model_id = Column(
|
|
904
914
|
String(64), ForeignKey("fine_tuned_models.id", ondelete="CASCADE"), nullable=True
|
|
905
915
|
)
|
|
906
|
-
|
|
907
916
|
vram_reserved_gb = Column(Float, nullable=False)
|
|
908
917
|
created_at = Column(BigInteger, default=lambda: int(time.time()))
|
|
909
918
|
|
|
@@ -928,8 +937,11 @@ class BaseModel(Base):
|
|
|
928
937
|
class InferenceDeployment(Base):
|
|
929
938
|
__tablename__ = "inference_deployments"
|
|
930
939
|
id = Column(String(64), primary_key=True, index=True)
|
|
931
|
-
|
|
932
|
-
|
|
940
|
+
|
|
941
|
+
# Phase 4: plain string storing the Ray node ID (hex). No FK constraint.
|
|
942
|
+
node_id = Column(String(128), nullable=True)
|
|
943
|
+
|
|
944
|
+
internal_hostname = Column(String(128), nullable=True)
|
|
933
945
|
base_model_id = Column(String(128), ForeignKey("base_models.id"))
|
|
934
946
|
fine_tuned_model_id = Column(String(64), ForeignKey("fine_tuned_models.id"), nullable=True)
|
|
935
947
|
port = Column(Integer, default=8000)
|
|
@@ -937,8 +949,10 @@ class InferenceDeployment(Base):
|
|
|
937
949
|
current_throughput = Column(Float, default=0.0)
|
|
938
950
|
last_seen = Column(BigInteger, default=lambda: int(time.time()))
|
|
939
951
|
|
|
940
|
-
|
|
952
|
+
# Inference sharding: number of GPUs this deployment spans.
|
|
953
|
+
# 1 = single GPU (default, backward compatible).
|
|
954
|
+
# N > 1 = tensor parallel across N GPUs via vLLM --tensor-parallel-size.
|
|
955
|
+
tensor_parallel_size = Column(Integer, nullable=False, default=1)
|
|
956
|
+
|
|
941
957
|
base_model = relationship("BaseModel")
|
|
942
958
|
fine_tuned_model = relationship("FineTunedModel")
|
|
943
|
-
|
|
944
|
-
__table_args__ = (UniqueConstraint("node_id", "port", name="uq_node_port_deployment"),)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: projectdavid-orm
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.0
|
|
4
4
|
Summary: Shared SQLAlchemy ORM models for ProjectDavid services
|
|
5
5
|
Author-email: "Francis N." <francis.neequaye@projectdavid.co.uk>
|
|
6
6
|
License: Polyform
|
|
7
|
-
Project-URL: Homepage, https://github.com/
|
|
7
|
+
Project-URL: Homepage, https://github.com/project-david-ai/projectdavid-orm
|
|
8
8
|
Keywords: orm,sqlalchemy,models,projectdavid,internal
|
|
9
9
|
Requires-Python: >=3.10
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/requires.txt
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/constants/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/__init__.py
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/base.py
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/utilities/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/requires.txt
RENAMED
|
File without changes
|
{projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|