projectdavid-common 0.21.4__tar.gz → 0.21.6__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 (41) hide show
  1. {projectdavid_common-0.21.4/src/projectdavid_common.egg-info → projectdavid_common-0.21.6}/PKG-INFO +1 -1
  2. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/pyproject.toml +1 -1
  3. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/ai_model_map.py +8 -0
  4. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/runs_schema.py +0 -4
  5. projectdavid_common-0.21.6/src/projectdavid_common/schemas/stream_schema.py +37 -0
  6. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/validation.py +0 -14
  7. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6/src/projectdavid_common.egg-info}/PKG-INFO +1 -1
  8. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common.egg-info/SOURCES.txt +0 -1
  9. projectdavid_common-0.21.4/src/projectdavid_common/schemas/stream_schema.py +0 -26
  10. projectdavid_common-0.21.4/src/projectdavid_common/schemas/tools_schema.py +0 -65
  11. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/MANIFEST.in +0 -0
  12. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/README.md +0 -0
  13. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/setup.cfg +0 -0
  14. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/__init__.py +0 -0
  15. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/__init__.py +0 -0
  16. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/assistant_map.py +0 -0
  17. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/mime_types.py +0 -0
  18. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/platform.py +0 -0
  19. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/timeouts.py +0 -0
  20. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/constants/tools.py +0 -0
  21. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/__init__.py +0 -0
  22. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/actions_schema.py +0 -0
  23. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/api_key_schemas.py +0 -0
  24. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/assistants_schema.py +0 -0
  25. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/enums.py +0 -0
  26. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/files_schema.py +0 -0
  27. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/inference_schema.py +0 -0
  28. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/messages_schema.py +0 -0
  29. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/threads_schema.py +0 -0
  30. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/users_schema.py +0 -0
  31. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/vector_search_envelope.py +0 -0
  32. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/schemas/vectors_schema.py +0 -0
  33. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/utilities/__init__.py +0 -0
  34. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/utilities/identifier_service.py +0 -0
  35. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/utilities/logging_service.py +0 -0
  36. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common/utils.py +0 -0
  37. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common.egg-info/dependency_links.txt +0 -0
  38. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common.egg-info/entry_points.txt +0 -0
  39. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common.egg-info/requires.txt +0 -0
  40. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/src/projectdavid_common.egg-info/top_level.txt +0 -0
  41. {projectdavid_common-0.21.4 → projectdavid_common-0.21.6}/tests/test_vector_store_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid_common
3
- Version: 0.21.4
3
+ Version: 0.21.6
4
4
  Summary: Common shared custom packages
5
5
  Author-email: "Francis N." <francis.neequaye@projectdavid.co.uk>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "projectdavid_common"
7
- version = "0.21.4"
7
+ version = "0.21.6"
8
8
  description = "Common shared custom packages"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -67,12 +67,17 @@ TOGETHER_AI_MODELS = {
67
67
  # Misc
68
68
  "together-ai/Qwen/Qwen-Image": "Qwen/Qwen-Image",
69
69
  "together-ai/Qwen/Qwen2-7B": "Qwen/Qwen2-7B",
70
+ # OpenAI
71
+ "together-ai/openai/gpt-oss-120b": "openai/gpt-oss-120b",
72
+ "together-ai/openai/gpt-oss-20b": "openai/gpt-oss-20b",
70
73
  }
71
74
 
72
75
 
73
76
  HYPERBOLIC_MODELS = {
74
77
  # DeepSeek
75
78
  "hyperbolic/deepseek-ai/DeepSeek-V3-0324": "deepseek-ai/DeepSeek-V3-0324",
79
+ # new
80
+ "hyperbolic/deepseek-ai/DeepSeek-R1-0528": "deepseek-ai/DeepSeek-R1-0528",
76
81
  "hyperbolic/deepseek-ai/DeepSeek-R1": "deepseek-ai/DeepSeek-R1",
77
82
  "hyperbolic/deepseek-ai/DeepSeek-V3": "deepseek-ai/DeepSeek-V3",
78
83
  # llama
@@ -84,6 +89,7 @@ HYPERBOLIC_MODELS = {
84
89
  "hyperbolic/meta-llama/Meta-Llama-3-70B-Instruct": "meta-llama/Meta-Llama-3-70B-Instruct",
85
90
  # Quen
86
91
  "hyperbolic/Qwen/QwQ-32B": "Qwen/QwQ-32B",
92
+ "hyperbolic/Qwen/Qwen2.5-VL-7B-Instruct": "Qwen/Qwen2.5-VL-7B-Instruct",
87
93
  "hyperbolic/Qwen/Qwen2.5-Coder-32B-Instruct": "Qwen/Qwen2.5-Coder-32B-Instruct",
88
94
  "hyperbolic/Qwen/Qwen2.5-72B-Instruct": "Qwen/Qwen2.5-72B-Instruct",
89
95
  "hyperbolic/Qwen/Qwen3-Next-80B-A3B-Thinking": "Qwen/Qwen3-Next-80B-A3B-Thinking",
@@ -93,6 +99,8 @@ HYPERBOLIC_MODELS = {
93
99
  # OpenAI
94
100
  "hyperbolic/openai/gpt-oss-120b": "openai/gpt-oss-120b",
95
101
  "hyperbolic/openai/gpt-oss-20b": "openai/gpt-oss-20b",
102
+ # New
103
+ "hyperbolic/openai/gpt-oss-120b-turbo": "openai/gpt-oss-120b-turbo",
96
104
  }
97
105
 
98
106
 
@@ -9,7 +9,6 @@ from typing import Any, Dict, List, Literal, Optional
9
9
  from pydantic import BaseModel, ConfigDict, Field
10
10
 
11
11
  from projectdavid_common.schemas.actions_schema import ActionRead
12
- from projectdavid_common.schemas.tools_schema import Tool, ToolRead
13
12
 
14
13
 
15
14
  # --------------------------------------------------------------------------- #
@@ -65,7 +64,6 @@ class Run(BaseModel):
65
64
  status: RunStatus
66
65
  thread_id: str
67
66
  tool_choice: str
68
- tools: List[Tool]
69
67
  # Accept 'auto' or None on read
70
68
  truncation_strategy: Optional[TruncationStrategy] = None
71
69
  usage: Optional[Any]
@@ -106,7 +104,6 @@ class RunCreate(BaseModel):
106
104
  status: RunStatus = RunStatus.pending
107
105
  thread_id: str
108
106
  tool_choice: str = "none"
109
- tools: List[Tool] = Field(default_factory=list)
110
107
  # Optional so callers can omit and let DB default 'auto' apply
111
108
  truncation_strategy: Optional[TruncationStrategy] = None
112
109
  usage: Optional[Any] = None
@@ -143,7 +140,6 @@ class RunReadDetailed(BaseModel):
143
140
  status: RunStatus
144
141
  thread_id: str
145
142
  tool_choice: Optional[str] = None
146
- tools: List[ToolRead]
147
143
  # Accept 'auto' or None on read
148
144
  truncation_strategy: Optional[TruncationStrategy] = None
149
145
  usage: Optional[Any] = None
@@ -0,0 +1,37 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import ( # Added ConfigDict and field_validator
4
+ BaseModel,
5
+ ConfigDict,
6
+ field_validator,
7
+ )
8
+
9
+ from projectdavid_common.constants.ai_model_map import MODEL_MAP
10
+
11
+
12
+ class StreamRequest(BaseModel):
13
+ # 1. FIX: Tell Pydantic to allow fields starting with "model_"
14
+ model_config = ConfigDict(protected_namespaces=())
15
+
16
+ provider: str
17
+ model: str
18
+ api_key: Optional[str] = None # Added default None
19
+ thread_id: str
20
+ message_id: str
21
+ run_id: str
22
+ assistant_id: str
23
+ content: Optional[str] = None
24
+
25
+ # 2. UPDATED: Using Pydantic v2 field_validator
26
+ @field_validator("model")
27
+ @classmethod
28
+ def validate_model_key(cls, v: str) -> str:
29
+ if v not in MODEL_MAP:
30
+ # Note: Ensure MODEL_MAP contains "hyperbolic/deepseek-ai/DeepSeek-V3-0324"
31
+ # as seen in your logs, or this will throw a 422 error.
32
+ raise ValueError(f"Invalid model '{v}'. Must be one of: {', '.join(MODEL_MAP.keys())}")
33
+ return v
34
+
35
+ @property
36
+ def mapped_model(self) -> str:
37
+ return MODEL_MAP[self.model]
@@ -53,14 +53,6 @@ from projectdavid_common.schemas.threads_schema import (
53
53
  ThreadReadDetailed,
54
54
  ThreadUpdate,
55
55
  )
56
- from projectdavid_common.schemas.tools_schema import (
57
- Tool,
58
- ToolCreate,
59
- ToolFunction,
60
- ToolList,
61
- ToolRead,
62
- ToolUpdate,
63
- )
64
56
  from projectdavid_common.schemas.users_schema import (
65
57
  UserBase,
66
58
  UserCreate,
@@ -159,12 +151,6 @@ class ValidationInterface:
159
151
  ThreadDeleted = ThreadDeleted
160
152
 
161
153
  # Tools schemas
162
- ToolFunction = ToolFunction
163
- Tool = Tool
164
- ToolCreate = ToolCreate
165
- ToolRead = ToolRead
166
- ToolUpdate = ToolUpdate
167
- ToolList = ToolList
168
154
 
169
155
  # Users schemas
170
156
  UserBase = UserBase
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: projectdavid_common
3
- Version: 0.21.4
3
+ Version: 0.21.6
4
4
  Summary: Common shared custom packages
5
5
  Author-email: "Francis N." <francis.neequaye@projectdavid.co.uk>
6
6
  License: MIT
@@ -28,7 +28,6 @@ src/projectdavid_common/schemas/messages_schema.py
28
28
  src/projectdavid_common/schemas/runs_schema.py
29
29
  src/projectdavid_common/schemas/stream_schema.py
30
30
  src/projectdavid_common/schemas/threads_schema.py
31
- src/projectdavid_common/schemas/tools_schema.py
32
31
  src/projectdavid_common/schemas/users_schema.py
33
32
  src/projectdavid_common/schemas/vector_search_envelope.py
34
33
  src/projectdavid_common/schemas/vectors_schema.py
@@ -1,26 +0,0 @@
1
- from typing import Optional
2
-
3
- from pydantic import BaseModel, validator
4
-
5
- from projectdavid_common.constants.ai_model_map import MODEL_MAP
6
-
7
-
8
- class StreamRequest(BaseModel):
9
- provider: str
10
- model: str
11
- api_key: Optional[str]
12
- thread_id: str
13
- message_id: str
14
- run_id: str
15
- assistant_id: str
16
- content: Optional[str] = None
17
-
18
- @validator("model")
19
- def validate_model_key(cls, v):
20
- if v not in MODEL_MAP:
21
- raise ValueError(f"Invalid model '{v}'. Must be one of: {', '.join(MODEL_MAP.keys())}")
22
- return v
23
-
24
- @property
25
- def mapped_model(self) -> str:
26
- return MODEL_MAP[self.model]
@@ -1,65 +0,0 @@
1
- from typing import List, Optional
2
-
3
- from pydantic import BaseModel, ConfigDict, Field, field_validator
4
-
5
-
6
- class ToolFunction(BaseModel):
7
- function: Optional[dict] = Field(default=None, description="Tool function definition")
8
-
9
- @field_validator("function", mode="before")
10
- @classmethod
11
- def parse_function(cls, v):
12
- if isinstance(v, dict) and "name" in v and "description" in v:
13
- return v
14
- elif isinstance(v, dict) and "function" in v:
15
- return v["function"]
16
- raise ValueError("Invalid function format")
17
-
18
-
19
- class Tool(BaseModel):
20
- id: str
21
- type: str
22
- name: Optional[str] = Field(default=None)
23
- function: Optional[ToolFunction] = Field(default=None)
24
-
25
- model_config = ConfigDict(from_attributes=True)
26
-
27
-
28
- class ToolCreate(BaseModel):
29
- name: str
30
- type: str
31
- function: Optional[ToolFunction] = Field(default=None)
32
-
33
- @field_validator("function", mode="before")
34
- @classmethod
35
- def parse_function(cls, v):
36
- if isinstance(v, ToolFunction):
37
- return v
38
- if isinstance(v, dict) and "function" in v:
39
- return ToolFunction(function=v["function"])
40
- return ToolFunction(**v)
41
-
42
-
43
- class ToolRead(Tool):
44
- @field_validator("function", mode="before")
45
- @classmethod
46
- def parse_function(cls, v):
47
- if isinstance(v, dict):
48
- return ToolFunction(**v)
49
- elif v is None:
50
- return None
51
- raise ValueError("Invalid function format")
52
-
53
- model_config = ConfigDict(from_attributes=True)
54
-
55
-
56
- class ToolUpdate(BaseModel):
57
- type: Optional[str] = Field(default=None)
58
- name: Optional[str] = Field(default=None)
59
- function: Optional[ToolFunction] = Field(default=None)
60
-
61
-
62
- class ToolList(BaseModel):
63
- tools: List[ToolRead]
64
-
65
- model_config = ConfigDict(from_attributes=True)