Skip to content

Commit 4f9fb88

Browse files
committed
Add custom serializer for CreateRequest + tests
1 parent bee1102 commit 4f9fb88

File tree

2 files changed

+68
-4
lines changed

2 files changed

+68
-4
lines changed

ollama/_types.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,9 @@ class PushRequest(BaseStreamableRequest):
401401

402402

403403
class CreateRequest(BaseStreamableRequest):
404-
@model_serializer
405-
def serialize_model(self):
406-
output = {k: v for k, v in self.__dict__.items() if v is not None}
404+
@model_serializer(mode='wrap')
405+
def serialize_model(self, nxt):
406+
output = nxt(self)
407407
if 'from_' in output:
408408
output['from'] = output.pop('from_')
409409
return output

tests/test_type_serialization.py

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33

44
import pytest
5-
from ollama._types import Image
5+
from ollama._types import CreateRequest, Image
66
import tempfile
77

88

@@ -52,3 +52,67 @@ def test_image_serialization_string_path():
5252
with pytest.raises(ValueError):
5353
img = Image(value='not an image')
5454
img.model_dump()
55+
56+
57+
58+
59+
def test_create_request_serialization():
60+
request = CreateRequest(
61+
model="test-model",
62+
from_="base-model",
63+
quantize="q4_0",
64+
files={"file1": "content1"},
65+
adapters={"adapter1": "content1"},
66+
template="test template",
67+
license="MIT",
68+
system="test system",
69+
parameters={"param1": "value1"}
70+
)
71+
72+
serialized = request.model_dump()
73+
assert serialized["from"] == "base-model"
74+
assert "from_" not in serialized
75+
assert serialized["quantize"] == "q4_0"
76+
assert serialized["files"] == {"file1": "content1"}
77+
assert serialized["adapters"] == {"adapter1": "content1"}
78+
assert serialized["template"] == "test template"
79+
assert serialized["license"] == "MIT"
80+
assert serialized["system"] == "test system"
81+
assert serialized["parameters"] == {"param1": "value1"}
82+
83+
84+
85+
def test_create_request_serialization_exclude_none_true():
86+
request = CreateRequest(
87+
model="test-model",
88+
from_=None,
89+
quantize=None
90+
)
91+
serialized = request.model_dump(exclude_none=True)
92+
assert serialized == {"model": "test-model"}
93+
assert "from" not in serialized
94+
assert "from_" not in serialized
95+
assert "quantize" not in serialized
96+
97+
98+
def test_create_request_serialization_exclude_none_false():
99+
request = CreateRequest(
100+
model="test-model",
101+
from_=None,
102+
quantize=None
103+
)
104+
serialized = request.model_dump(exclude_none=False)
105+
assert "from" in serialized
106+
assert "quantize" in serialized
107+
assert "adapters" in serialized
108+
assert "from_" not in serialized
109+
110+
111+
def test_create_request_serialization_license_list():
112+
request = CreateRequest(
113+
model="test-model",
114+
license=["MIT", "Apache-2.0"]
115+
)
116+
serialized = request.model_dump()
117+
assert serialized["license"] == ["MIT", "Apache-2.0"]
118+

0 commit comments

Comments
 (0)