import unittest from typing import AsyncGenerator from pipecat.services.ai_services import AIService, match_endofsentence from pipecat.frames.frames import EndFrame, Frame, TextFrame class SimpleAIService(AIService): async def process_frame(self, frame: Frame) -> AsyncGenerator[Frame, None]: yield frame class TestBaseAIService(unittest.IsolatedAsyncioTestCase): async def test_simple_processing(self): service = SimpleAIService() input_frames = [ TextFrame("hello"), EndFrame() ] output_frames = [] for input_frame in input_frames: async for output_frame in service.process_frame(input_frame): output_frames.append(output_frame) self.assertEqual(input_frames, output_frames) async def test_endofsentence(self): assert match_endofsentence("This is a sentence.") assert match_endofsentence("This is a sentence! ") assert match_endofsentence("This is a sentence?") assert match_endofsentence("This is a sentence:") assert not match_endofsentence("This is not a sentence") assert not match_endofsentence("This is not a sentence,") assert not match_endofsentence("This is not a sentence, ") assert not match_endofsentence("Ok, Mr. Smith let's ") assert not match_endofsentence("Dr. Walker, I presume ") assert not match_endofsentence("Prof. Walker, I presume ") assert not match_endofsentence("zweitens, und 3.") assert not match_endofsentence("Heute ist Dienstag, der 3.") # 3. Juli 2024 assert not match_endofsentence("America, or the U.") # U.S.A. assert not match_endofsentence("It still early, it's 3:00 a.") # 3:00 a.m. if __name__ == "__main__": unittest.main()