Skip to content

Commit 23548ce

Browse files
committed
Stringify return type arrays to not break server
1 parent 2efa54a commit 23548ce

File tree

4 files changed

+7
-7
lines changed

4 files changed

+7
-7
lines changed

ollama/_types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ class Function(SubscriptableBaseModel):
230230
description: str
231231

232232
class Parameters(SubscriptableBaseModel):
233-
type: Union[str, List[str]]
233+
type: str
234234
required: Optional[Sequence[str]] = None
235235
properties: Optional[JsonSchemaValue] = None
236236

ollama/_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ def _get_json_type(python_type: Any) -> str | List[str]:
6666
if non_none_args := [arg for arg in args if arg not in (None, type(None))]:
6767
if len(non_none_args) == 1:
6868
return _get_json_type(non_none_args[0])
69-
# For multiple types (e.g., int | str | None), return array of types
70-
return [_get_json_type(arg) for arg in non_none_args]
69+
# For multiple return types (e.g., int | str | None), return stringified array of types -> "['integer', 'string', 'null']"
70+
return str([_get_json_type(arg) for arg in non_none_args]).replace(' ', '')
7171
return 'null'
7272

7373
# Handle generic types (List[int], Dict[str, int], etc.)

tests/test_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ def all_types(
9090
assert tool.function.parameters.properties['y']['type'] == 'string'
9191
assert tool.function.parameters.properties['z']['type'] == 'array'
9292
assert tool.function.parameters.properties['w']['type'] == 'object'
93-
assert set(tool.function.parameters.properties['v']['type']) == {'string', 'integer'}
94-
assert set(tool.function.return_type) == {'string', 'integer', 'array', 'object'}
93+
assert set(x.strip().strip("'") for x in tool.function.parameters.properties['v']['type'].removeprefix('[').removesuffix(']').split(',')) == {'string', 'integer'}
94+
assert set(x.strip().strip("'") for x in tool.function.return_type.removeprefix('[').removesuffix(']').split(',')) == {'string', 'integer', 'array', 'object'}
9595

9696

9797
def test_process_tools():
@@ -136,7 +136,7 @@ def test_advanced_json_type_conversion():
136136
assert _get_json_type(Dict[str, List[int]]) == 'object'
137137

138138
# Test multiple unions
139-
assert set(_get_json_type(Union[int, str, float])) == {'integer', 'string', 'number'}
139+
assert set(x.strip().strip("'") for x in _get_json_type(Union[int, str, float]).removeprefix('[').removesuffix(']').split(',')) == {'integer', 'string', 'number'}
140140

141141
# Test collections.abc types
142142
assert _get_json_type(Sequence[int]) == 'array'

tests/test_utils_legacy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,4 @@ def all_types(
6969
assert tool.function.parameters.properties['t']['type'] == 'array'
7070
assert tool.function.parameters.properties['l']['type'] == 'array'
7171
assert tool.function.parameters.properties['o']['type'] == 'integer'
72-
assert set(tool.function.return_type) == {'string', 'object'}
72+
assert set(x.strip().strip("'") for x in tool.function.return_type.removeprefix('[').removesuffix(']').split(',')) == {'string', 'object'}

0 commit comments

Comments
 (0)