Skip to content

Commit a778db7

Browse files
committed
test fixes
1 parent fdd68de commit a778db7

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

examples/foundational/35-pattern-pair-voice-switching.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
110110
pattern_id="voice_tag",
111111
start_pattern="<voice>",
112112
end_pattern="</voice>",
113+
type="voice",
113114
remove_match=True,
114115
)
115116

src/pipecat/extensions/ivr/ivr_navigator.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,19 @@ def _get_conversation_history(self) -> List[dict]:
114114
def _setup_xml_patterns(self):
115115
"""Set up XML pattern detection and handlers."""
116116
# Register DTMF pattern
117-
self._aggregator.add_pattern_pair("dtmf", "<dtmf>", "</dtmf>", remove_match=True)
117+
self._aggregator.add_pattern_pair(
118+
"dtmf", "<dtmf>", "</dtmf>", type="dtmf", remove_match=True
119+
)
118120
self._aggregator.on_pattern_match("dtmf", self._handle_dtmf_action)
119121

120122
# Register mode pattern
121-
self._aggregator.add_pattern_pair("mode", "<mode>", "</mode>", remove_match=True)
123+
self._aggregator.add_pattern_pair(
124+
"mode", "<mode>", "</mode>", type="mode", remove_match=True
125+
)
122126
self._aggregator.on_pattern_match("mode", self._handle_mode_action)
123127

124128
# Register IVR pattern
125-
self._aggregator.add_pattern_pair("ivr", "<ivr>", "</ivr>", remove_match=True)
129+
self._aggregator.add_pattern_pair("ivr", "<ivr>", "</ivr>", type="ivr", remove_match=True)
126130
self._aggregator.on_pattern_match("ivr", self._handle_ivr_action)
127131

128132
async def process_frame(self, frame: Frame, direction: FrameDirection):

tests/test_pattern_pair_aggregator.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,16 @@ def setUp(self):
2020
pattern_id="test_pattern",
2121
start_pattern="<test>",
2222
end_pattern="</test>",
23+
type="test",
2324
remove_match=True,
2425
)
26+
self.aggregator.add_pattern_pair(
27+
pattern_id="code_pattern",
28+
start_pattern="<code>",
29+
end_pattern="</code>",
30+
type="code",
31+
remove_match=False,
32+
)
2533

2634
# Register the mock handler
2735
self.aggregator.on_pattern_match("test_pattern", self.test_handler)
@@ -30,7 +38,8 @@ async def test_pattern_match_and_removal(self):
3038
# First part doesn't complete the pattern
3139
result = await self.aggregator.aggregate("Hello <test>pattern")
3240
self.assertIsNone(result)
33-
self.assertEqual(self.aggregator.text, "Hello <test>pattern")
41+
self.assertEqual(self.aggregator.text.text, "Hello <test>pattern")
42+
self.assertEqual(self.aggregator.text.type, "test")
3443

3544
# Second part completes the pattern and includes an exclamation point
3645
result = await self.aggregator.aggregate(" content</test>!")
@@ -45,14 +54,15 @@ async def test_pattern_match_and_removal(self):
4554

4655
# The exclamation point should be treated as a sentence boundary,
4756
# so the result should include just text up to and including "!"
48-
self.assertEqual(result, "Hello !")
57+
self.assertEqual(result.text, "Hello !")
58+
self.assertEqual(result.type, "sentence")
4959

5060
# Next sentence should be processed separately
5161
result = await self.aggregator.aggregate(" This is another sentence.")
52-
self.assertEqual(result, " This is another sentence.")
62+
self.assertEqual(result.text, " This is another sentence.")
5363

5464
# Buffer should be empty after returning a complete sentence
55-
self.assertEqual(self.aggregator.text, "")
65+
self.assertEqual(self.aggregator.text.text, "")
5666

5767
async def test_incomplete_pattern(self):
5868
# Add text with incomplete pattern
@@ -65,11 +75,12 @@ async def test_incomplete_pattern(self):
6575
self.test_handler.assert_not_called()
6676

6777
# Buffer should contain the incomplete text
68-
self.assertEqual(self.aggregator.text, "Hello <test>pattern content")
78+
self.assertEqual(self.aggregator.text.text, "Hello <test>pattern content")
79+
self.assertEqual(self.aggregator.text.type, "test")
6980

7081
# Reset and confirm buffer is cleared
7182
await self.aggregator.reset()
72-
self.assertEqual(self.aggregator.text, "")
83+
self.assertEqual(self.aggregator.text.text, "")
7384

7485
async def test_multiple_patterns(self):
7586
# Set up multiple patterns and handlers
@@ -109,7 +120,7 @@ async def test_multiple_patterns(self):
109120
self.assertEqual(result, "Hello I am <em>very</em> excited to meet you!")
110121

111122
# Buffer should be empty
112-
self.assertEqual(self.aggregator.text, "")
123+
self.assertEqual(self.aggregator.text.text, "")
113124

114125
async def test_handle_interruption(self):
115126
# Start with incomplete pattern
@@ -120,7 +131,7 @@ async def test_handle_interruption(self):
120131
await self.aggregator.handle_interruption()
121132

122133
# Buffer should be cleared
123-
self.assertEqual(self.aggregator.text, "")
134+
self.assertEqual(self.aggregator.text.text, "")
124135

125136
# Handler should not have been called
126137
self.test_handler.assert_not_called()
@@ -144,4 +155,4 @@ async def test_pattern_across_sentences(self):
144155
self.assertEqual(result, "Hello Final sentence.")
145156

146157
# Buffer should be empty
147-
self.assertEqual(self.aggregator.text, "")
158+
self.assertEqual(self.aggregator.text.text, "")

tests/test_skip_tags_aggregator.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,41 @@ async def test_no_tags(self):
1818

1919
# No tags involved, aggregate at end of sentence.
2020
result = await self.aggregator.aggregate("Hello Pipecat!")
21-
self.assertEqual(result, "Hello Pipecat!")
22-
self.assertEqual(self.aggregator.text, "")
21+
self.assertEqual(result.text, "Hello Pipecat!")
22+
self.assertEqual(result.type, "sentence")
23+
self.assertEqual(self.aggregator.text.text, "")
2324

2425
async def test_basic_tags(self):
2526
await self.aggregator.reset()
2627

2728
# Tags involved, avoid aggregation during tags.
2829
result = await self.aggregator.aggregate("My email is <spell>[email protected]</spell>.")
29-
self.assertEqual(result, "My email is <spell>[email protected]</spell>.")
30-
self.assertEqual(self.aggregator.text, "")
30+
self.assertEqual(result.text, "My email is <spell>[email protected]</spell>.")
31+
self.assertEqual(result.type, "sentence")
32+
self.assertEqual(self.aggregator.text.text, "")
3133

3234
async def test_streaming_tags(self):
3335
await self.aggregator.reset()
3436

3537
# Tags involved, stream small chunk of texts.
3638
result = await self.aggregator.aggregate("My email is <sp")
3739
self.assertIsNone(result)
38-
self.assertEqual(self.aggregator.text, "My email is <sp")
40+
self.assertEqual(self.aggregator.text.text, "My email is <sp")
3941

4042
result = await self.aggregator.aggregate("ell>foo.")
4143
self.assertIsNone(result)
42-
self.assertEqual(self.aggregator.text, "My email is <spell>foo.")
44+
self.assertEqual(self.aggregator.text.text, "My email is <spell>foo.")
4345

4446
result = await self.aggregator.aggregate("bar@pipecat.")
4547
self.assertIsNone(result)
46-
self.assertEqual(self.aggregator.text, "My email is <spell>foo.bar@pipecat.")
48+
self.assertEqual(self.aggregator.text.text, "My email is <spell>foo.bar@pipecat.")
4749

4850
result = await self.aggregator.aggregate("ai</spe")
4951
self.assertIsNone(result)
50-
self.assertEqual(self.aggregator.text, "My email is <spell>[email protected]</spe")
52+
self.assertEqual(self.aggregator.text.text, "My email is <spell>[email protected]</spe")
53+
self.assertEqual(self.aggregator.text.type, "sentence")
5154

5255
result = await self.aggregator.aggregate("ll>.")
53-
self.assertEqual(result, "My email is <spell>[email protected]</spell>.")
54-
self.assertEqual(self.aggregator.text, "")
56+
self.assertEqual(result.text, "My email is <spell>[email protected]</spell>.")
57+
self.assertEqual(self.aggregator.text.text, "")
58+
self.assertEqual(self.aggregator.text.type, "sentence")

0 commit comments

Comments
 (0)