fix: make model_info optional in ShowResponse for cloud model compatibility

Pydantic requires explicit default=None for Optional fields with aliases.
Without it, ShowResponse raises ValidationError when /api/show omits
model_info, which happens with some cloud models.

Fixes #607
This commit is contained in:
Raccoon 2026-04-11 23:49:31 -03:00
parent dbccf192ac
commit b50962d169
2 changed files with 35 additions and 1 deletions

View File

@ -562,6 +562,8 @@ class ShowRequest(BaseRequest):
class ShowResponse(SubscriptableBaseModel):
model_config = ConfigDict(populate_by_name=True)
modified_at: Optional[datetime] = None
template: Optional[str] = None
@ -572,7 +574,7 @@ class ShowResponse(SubscriptableBaseModel):
details: Optional[ModelDetails] = None
modelinfo: Optional[Mapping[str, Any]] = Field(alias='model_info')
modelinfo: Optional[Mapping[str, Any]] = Field(default=None, alias='model_info')
parameters: Optional[str] = None

View File

@ -92,3 +92,35 @@ def test_create_request_serialization_license_list():
request = CreateRequest(model='test-model', license=['MIT', 'Apache-2.0'])
serialized = request.model_dump()
assert serialized['license'] == ['MIT', 'Apache-2.0']
def test_show_response_without_model_info():
"""ShowResponse should accept responses that omit model_info (e.g. cloud models).
Regression test for https://github.com/ollama/ollama-python/issues/607
"""
from ollama._types import ShowResponse
# model_info completely absent from response
resp = ShowResponse()
assert resp.modelinfo is None
resp = ShowResponse(template='{{ .Prompt }}')
assert resp.modelinfo is None
assert resp.template == '{{ .Prompt }}'
def test_show_response_with_model_info_alias():
"""ShowResponse should accept model_info via its alias."""
from ollama._types import ShowResponse
resp = ShowResponse(model_info={'general.architecture': 'llama'})
assert resp.modelinfo == {'general.architecture': 'llama'}
def test_show_response_with_modelinfo_field_name():
"""ShowResponse should accept modelinfo via its Python field name."""
from ollama._types import ShowResponse
resp = ShowResponse(modelinfo={'general.architecture': 'llama'})
assert resp.modelinfo == {'general.architecture': 'llama'}