Skip to content

Commit b56e7cc

Browse files
authored
Re-comment out optional support (#567)
Release coordination issue -- engine-side support still to come
1 parent 1d40e58 commit b56e7cc

5 files changed

Lines changed: 46 additions & 21 deletions

File tree

src/steamship/agents/schema/functions.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ class JSONType(str, Enum):
1717
class FunctionProperty(BaseModel):
1818
"""Schema for an individual parameter used in an OpenAI function."""
1919

20+
class Config:
21+
use_enum_values = True
22+
"""This tells Pydantic to serialize the Enum values as strings, which is VERY IMPORTANT for OpenAI"""
23+
2024
type: JSONType = JSONType.object
2125
"""Type of the property. Defaults to object."""
2226

@@ -27,6 +31,10 @@ class FunctionProperty(BaseModel):
2731
class FunctionParameters(BaseModel):
2832
"""Schema for the description of how to invoke an OpenAI function."""
2933

34+
class Config:
35+
use_enum_values = True
36+
"""This tells Pydantic to serialize the Enum values as strings, which is VERY IMPORTANT for OpenAI"""
37+
3038
type: JSONType = JSONType.object
3139
"""Type of this object. DO NOT MODIFY."""
3240

src/steamship/data/manifest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def from_python_type(t: Type):
2727
class ConfigParameter(BaseModel):
2828
type: ConfigParameterType
2929
description: Optional[str] = None
30-
optional: Optional[bool] = None
30+
# optional: Optional[bool] = None
3131

3232
# Use strict so that Pydantic doesn't coerce values into the first one that fits
3333
default: Optional[Union[StrictStr, StrictBool, StrictFloat, StrictInt]] = None

src/steamship/invocable/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,12 @@ def get_config_parameters(cls) -> Dict[str, ConfigParameter]:
6363
# the notion of whether the absense of a value will truly be treated as absence.
6464
# That way it can provide hints to the user to minimize surprise about how their inputs will be interpreted.
6565

66-
optional_ = field.required is False and field.allow_none is True
66+
# optional_ = field.required is False and field.allow_none is True
6767

6868
result[field_name] = ConfigParameter(
69-
type=type_, default=default_, description=description, optional=optional_
69+
type=type_,
70+
default=default_,
71+
description=description, # optional=optional_
7072
)
7173

7274
return result

tests/steamship_tests/app/unit/test_config_template_extraction.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class BoolConfig(Config):
5252
assert "x" in names
5353
assert "y" in names
5454

55-
assert config_template["x"].optional is False
56-
assert config_template["y"].optional is False
55+
# assert config_template["x"].optional is False
56+
# assert config_template["y"].optional is False
5757

5858

5959
def test_config_parameter_with_defaults():
@@ -69,16 +69,16 @@ class DefaultsConfig(Config):
6969

7070
assert config_template["w"].type == ConfigParameterType.STRING
7171
assert config_template["w"].default == "deeeefault"
72-
assert config_template["w"].optional is False
72+
# assert config_template["w"].optional is False
7373
assert config_template["x"].type == ConfigParameterType.BOOLEAN
7474
assert config_template["x"].default # Assert that the default == True
75-
assert config_template["x"].optional is False
75+
# assert config_template["x"].optional is False
7676
assert config_template["y"].type == ConfigParameterType.NUMBER
7777
assert config_template["y"].default == 3
78-
assert config_template["y"].optional is False
78+
# assert config_template["y"].optional is False
7979
assert config_template["z"].type == ConfigParameterType.NUMBER
8080
assert config_template["z"].default == 7.5
81-
assert config_template["z"].optional is False
81+
# assert config_template["z"].optional is False
8282

8383

8484
def test_optional_config_parameters():
@@ -102,42 +102,42 @@ class DefaultsConfig(Config):
102102

103103
assert config_template["w"].type == ConfigParameterType.STRING
104104
assert config_template["w"].default == "deeeefault"
105-
assert config_template["w"].optional
105+
# assert config_template["w"].optional
106106
assert config_template["x"].type == ConfigParameterType.BOOLEAN
107107
assert config_template["x"].default # Assert that the default == True
108-
assert config_template["x"].optional
108+
# assert config_template["x"].optional
109109
assert config_template["y"].type == ConfigParameterType.NUMBER
110110
assert config_template["y"].default == 3
111-
assert config_template["y"].optional
111+
# assert config_template["y"].optional
112112
assert config_template["z"].type == ConfigParameterType.NUMBER
113113
assert config_template["z"].default == 7.5
114-
assert config_template["z"].optional
114+
# assert config_template["z"].optional
115115

116116
assert config_template["w2"].type == ConfigParameterType.STRING
117117
assert config_template["w2"].default is None
118-
assert config_template["w2"].optional
118+
# assert config_template["w2"].optional
119119
assert config_template["x2"].type == ConfigParameterType.BOOLEAN
120120
assert config_template["x2"].default is None
121-
assert config_template["x2"].optional
121+
# assert config_template["x2"].optional
122122
assert config_template["y2"].type == ConfigParameterType.NUMBER
123123
assert config_template["y2"].default is None
124-
assert config_template["y2"].optional
124+
# assert config_template["y2"].optional
125125
assert config_template["z2"].type == ConfigParameterType.NUMBER
126126
assert config_template["z2"].default is None
127-
assert config_template["z2"].optional
127+
# assert config_template["z2"].optional
128128

129129
assert config_template["w3"].type == ConfigParameterType.STRING
130130
assert config_template["w3"].default is None
131-
assert config_template["w3"].optional
131+
# assert config_template["w3"].optional
132132
assert config_template["x3"].type == ConfigParameterType.BOOLEAN
133133
assert config_template["x3"].default is None
134-
assert config_template["x3"].optional
134+
# assert config_template["x3"].optional
135135
assert config_template["y3"].type == ConfigParameterType.NUMBER
136136
assert config_template["y3"].default is None
137-
assert config_template["y3"].optional
137+
# assert config_template["y3"].optional
138138
assert config_template["z3"].type == ConfigParameterType.NUMBER
139139
assert config_template["z3"].default is None
140-
assert config_template["z3"].optional
140+
# assert config_template["z3"].optional
141141

142142

143143
def test_descriptions():

tests/steamship_tests/utils/test_enums.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from enum import Enum
66

7+
from steamship.agents.schema.functions import FunctionParameters, FunctionProperty, JSONType
78
from steamship.base.model import CamelModel
89

910

@@ -28,3 +29,17 @@ def test_enum_serialization_behavior():
2829
assert t2.training_platform == TrainingPlatform.LAMBDA
2930
assert t1.training_platform == "ecs"
3031
assert t2.training_platform == "lambda"
32+
33+
34+
def test_function_serialization_behavior():
35+
property = FunctionProperty(type=JSONType.integer, description="An Int")
36+
37+
assert property.dict() == {"type": "integer", "description": "An Int"}
38+
39+
typed_one = FunctionParameters(type=JSONType.object, properties={"key": property})
40+
41+
assert typed_one.dict() == {
42+
"type": "object",
43+
"properties": {"key": {"type": "integer", "description": "An Int"}},
44+
"required": [],
45+
}

0 commit comments

Comments
 (0)