Skip to content

Method Mismatch in Function Serializatio #8

@Hdpbilly

Description

@Hdpbilly

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:

  1. Use toJson() instead of to_dict() in sdk.py, or
  2. 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 error

Current 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions