diff --git a/semantic_router/layer.py b/semantic_router/layer.py
index f34ec9d1f2be9abfd978f9b0e66a29b1ad124496..ec051633364696ebf3c0361bd229e4a445a1f392 100644
--- a/semantic_router/layer.py
+++ b/semantic_router/layer.py
@@ -488,7 +488,7 @@ class RouteLayer:
             remote_utterances=remote_utterances,
         )
         # generate sync strategy
-        sync_strategy = diff.to_sync_strategy()
+        sync_strategy = diff.get_sync_strategy(sync_mode=sync_mode)
         # and execute
         self._execute_sync_strategy(sync_strategy)
         return diff.to_utterance_str()
diff --git a/semantic_router/schema.py b/semantic_router/schema.py
index ca5e55c4ea9ceb541ad9e93ce7a0939ce04c57a9..ef2b219062ee175869cb65796c2f957064e4becd 100644
--- a/semantic_router/schema.py
+++ b/semantic_router/schema.py
@@ -98,6 +98,8 @@ class Utterance(BaseModel):
         """
         route, utterance = tuple_obj[0], tuple_obj[1]
         function_schemas = tuple_obj[2] if len(tuple_obj) > 2 else None
+        if isinstance(function_schemas, dict):
+            function_schemas = [function_schemas]
         metadata = tuple_obj[3] if len(tuple_obj) > 3 else {}
         return cls(
             route=route,