Skip to content

Commit 7a09f9c

Browse files
authored
Merge pull request #593
Fix/colang match statement
2 parents bb7e7c4 + 3075b48 commit 7a09f9c

File tree

4 files changed

+39
-34
lines changed

4 files changed

+39
-34
lines changed

nemoguardrails/colang/v2_x/lang/expansion.py

+32-29
Original file line numberDiff line numberDiff line change
@@ -332,36 +332,39 @@ def _expand_match_element(
332332
# Single match element
333333
if element.spec.spec_type == SpecType.FLOW and element.spec.members is None:
334334
# It's a flow
335-
element_ref = element.spec.ref
336-
if element_ref is None:
337-
element_ref = _create_ref_ast_dict_helper(
338-
f"_flow_event_ref_{new_var_uid()}"
339-
)
340-
assert isinstance(element_ref, dict)
341-
342-
arguments = {"flow_id": f"'{element.spec.name}'"}
343-
for arg in element.spec.arguments:
344-
arguments.update({arg: element.spec.arguments[arg]})
345-
346-
new_elements.append(
347-
SpecOp(
348-
op="match",
349-
spec=Spec(
350-
name=InternalEvents.FLOW_FINISHED,
351-
arguments=arguments,
352-
ref=element_ref,
353-
spec_type=SpecType.EVENT,
354-
),
355-
return_var_name=element.return_var_name,
356-
)
335+
raise ColangSyntaxError(
336+
f"Keyword `match` cannot be used with flows (flow `{element.spec.name}`)"
357337
)
358-
if element.return_var_name is not None:
359-
new_elements.append(
360-
Assignment(
361-
key=element.return_var_name,
362-
expression=f"${element_ref['elements'][0]['elements'][0]}.arguments.return_value",
363-
)
364-
)
338+
# element_ref = element.spec.ref
339+
# if element_ref is None:
340+
# element_ref = _create_ref_ast_dict_helper(
341+
# f"_flow_event_ref_{new_var_uid()}"
342+
# )
343+
# assert isinstance(element_ref, dict)
344+
345+
# arguments = {"flow_id": f"'{element.spec.name}'"}
346+
# for arg in element.spec.arguments:
347+
# arguments.update({arg: element.spec.arguments[arg]})k
348+
349+
# new_elements.append(
350+
# SpecOp(
351+
# op="match",
352+
# spec=Spec(
353+
# name=InternalEvents.FLOW_FINISHED,
354+
# arguments=arguments,
355+
# ref=element_ref,
356+
# spec_type=SpecType.EVENT,
357+
# ),
358+
# return_var_name=element.return_var_name,
359+
# )
360+
# )
361+
# if element.return_var_name is not None:
362+
# new_elements.append(
363+
# Assignment(
364+
# key=element.return_var_name,
365+
# expression=f"${element_ref['elements'][0]['elements'][0]}.arguments.return_value",
366+
# )
367+
# )
365368
elif (
366369
element.spec.spec_type == SpecType.EVENT or element.spec.members is not None
367370
):

nemoguardrails/colang/v2_x/lang/grammar/colang.lark

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ capture_ref: "as" var_name
8585
// A spec includes name, arguments and potentially members access.
8686
// Example members: .Finished(), .action
8787
spec: spec_name [classic_arguments | simple_arguments] (spec_member)* [capture_ref]
88+
| "(" spec_name [classic_arguments | simple_arguments] ")" (spec_member)* [capture_ref]
8889
| var_name (spec_member)* [capture_ref]
8990
spec_member: "." name [classic_arguments]
9091

nemoguardrails/colang/v2_x/runtime/statemachine.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2268,7 +2268,8 @@ def get_event_from_element(
22682268
flow_config = state.flow_configs[element_spec.name]
22692269
temp_flow_state = create_flow_instance(flow_config, "", "", {})
22702270
flow_event_name = element_spec.members[0]["name"]
2271-
flow_event_arguments = element_spec.members[0]["arguments"]
2271+
flow_event_arguments = element_spec.arguments
2272+
flow_event_arguments.update(element_spec.members[0]["arguments"])
22722273
flow_event_arguments = _evaluate_arguments(
22732274
flow_event_arguments, _get_eval_context(state, flow_state)
22742275
)

tests/v2_x/test_flow_mechanics.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -482,11 +482,11 @@ def test_flow_started_matching():
482482
await UtteranceBotAction(script=$script)
483483
484484
flow a
485-
match user said $transcript="Hi"
485+
match (user said $transcript="Hi").Finished()
486486
bot say 'Check1'
487487
488488
flow b
489-
match user said $transcript="Hello"
489+
match (user said $transcript="Hello").Finished()
490490
bot say 'Check2'
491491
492492
flow main
@@ -779,7 +779,7 @@ def test_finish_flow_event():
779779
await UtteranceBotAction(script="Hi")
780780
781781
flow b
782-
match a
782+
match a.Finished()
783783
await UtteranceBotAction(script="Yes")
784784
785785
flow main
@@ -2204,4 +2204,4 @@ def test_single_flow_activation_3():
22042204

22052205

22062206
if __name__ == "__main__":
2207-
test_single_flow_activation_3()
2207+
test_flow_started_matching()

0 commit comments

Comments
 (0)