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.
Files changed (26) hide show
  1. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/CHANGELOG.md +14 -0
  2. {projectdavid_orm-1.2.0/src/projectdavid_orm.egg-info → projectdavid_orm-1.4.0}/PKG-INFO +2 -2
  3. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/pyproject.toml +2 -2
  4. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/models.py +28 -14
  5. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0/src/projectdavid_orm.egg-info}/PKG-INFO +2 -2
  6. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/LICENSE +0 -0
  7. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/MANIFEST.in +0 -0
  8. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/README.md +0 -0
  9. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/setup.cfg +0 -0
  10. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/PKG-INFO +0 -0
  11. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/SOURCES.txt +0 -0
  12. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/dependency_links.txt +0 -0
  13. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/entry_points.txt +0 -0
  14. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/requires.txt +0 -0
  15. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_common.egg-info/top_level.txt +0 -0
  16. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/__init__.py +0 -0
  17. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/constants/__init__.py +0 -0
  18. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/ormInterface.py +0 -0
  19. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/__init__.py +0 -0
  20. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/projectdavid_orm/base.py +0 -0
  21. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm/utilities/__init__.py +0 -0
  22. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/SOURCES.txt +0 -0
  23. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/dependency_links.txt +0 -0
  24. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/requires.txt +0 -0
  25. {projectdavid_orm-1.2.0 → projectdavid_orm-1.4.0}/src/projectdavid_orm.egg-info/top_level.txt +0 -0
  26. {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.2.0
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/frankie336/projectdavid-orm
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.2.0"
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/frankie336/projectdavid-orm"
33
+ Homepage = "https://github.com/project-david-ai/projectdavid-orm"
34
34
 
35
35
  [tool.setuptools]
36
36
  package-dir = { "" = "src" }
@@ -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
- # NEW: Link to Cluster
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
- # NEW: Link to Cluster (Last known serving node)
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
- node_id = Column(String(64), ForeignKey("compute_nodes.id"))
932
- internal_hostname = Column(String(128), nullable=True) # ← ADD THIS
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
- node = relationship("ComputeNode", back_populates="deployments")
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.2.0
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/frankie336/projectdavid-orm
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