-
Notifications
You must be signed in to change notification settings - Fork 53
Open
Description
Method Mismatch in Function Serialization
Issue Description
There is a method name mismatch between the Function class implementation and the SDK's serialization expectations. The SDK attempts to call to_dict() on Function objects, but the Function class only implements toJson().
Current Behavior
When attempting to simulate or deploy custom functions, the following error occurs:
Traceback (most recent call last):
File "...\agent_test_suite.py", line 189, in <module>
response = agent.simulate_twitter(session_id="research-session")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\site-packages\virtuals_sdk\game.py", line 214, in simulate_twitter
return self.game_sdk.simulate(
^^^^^^^^^^^^^^^^^^^^^^^
File "...\site-packages\virtuals_sdk\sdk.py", line 41, in simulate
"customFunctions": [x.to_dict() for x in custom_functions]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\site-packages\virtuals_sdk\sdk.py", line 41, in <listcomp>
"customFunctions": [x.to_dict() for x in custom_functions]
^^^^^^^^^
AttributeError: 'Function' object has no attribute 'to_dict'Expected Behavior
The SDK should either:
- Use
toJson()instead ofto_dict()in sdk.py, or - The Function class should implement both methods for compatibility
Code Analysis
In game.py
@dataclass
class Function:
# ...
def toJson(self):
return {
"id": self.id,
"fn_name": self.fn_name,
"fn_description": self.fn_description,
"args": [asdict(arg) for arg in self.args],
"hint": self.hint,
"config": asdict(self.config)
}In sdk.py
def simulate(self, session_id: str, goal: str, description: str, world_info: str, functions: list, custom_functions: list):
# ...
"customFunctions": [x.to_dict() for x in custom_functions] # This line causes the errorCurrent Workaround
Users can implement a wrapper class to provide the missing method:
class CustomFunction(game.Function):
def to_dict(self):
return self.toJson()Suggested Fix
Option 1 (Preferred):
# In sdk.py, change:
"customFunctions": [x.toJson() for x in custom_functions]Option 2:
# In game.py, add to Function class:
def to_dict(self):
return self.toJson()Impact
This issue affects any users trying to implement custom functions with the SDK, particularly when using the simulation or deployment features.
Additional Notes
- The issue appears to be a simple naming inconsistency rather than a functional problem
- The
toJson()method works correctly when called directly - The fix should be backward compatible regardless of which option is chosen
Labels
- bug
- documentation
- enhancement
Madeindreams
Metadata
Metadata
Assignees
Labels
No labels