from models.chat import ( AudioInput, ChatCompletionRequest, FunctionCall, ImageURL, Message, MessageContentItem, ToolCall, URLRef, VideoInput, ) def test_function_call_model(): """Test FunctionCall model validation.""" fc = FunctionCall(name="test_func", arguments='{"arg": 1}') assert fc.name == "test_func" assert fc.arguments == '{"arg": 1}' def test_tool_call_model(): """Test ToolCall model validation.""" fc = FunctionCall(name="test_func", arguments='{"arg": 1}') tc = ToolCall(id="call_123", function=fc) assert tc.id == "call_123" assert tc.type == "function" assert tc.function == fc def test_image_url_model(): """Test ImageURL model validation.""" img = ImageURL(url="http://example.com/image.png") assert img.url == "http://example.com/image.png" assert img.detail is None img_detail = ImageURL(url="http://example.com/image.png", detail="high") assert img_detail.detail == "high" def test_audio_input_model(): """Test AudioInput model validation.""" audio = AudioInput(url="http://example.com/audio.mp3") assert audio.url == "http://example.com/audio.mp3" assert audio.data is None audio_data = AudioInput(data="base64data", format="mp3") assert audio_data.data == "base64data" assert audio_data.format == "mp3" def test_video_input_model(): """Test VideoInput model validation.""" video = VideoInput(url="http://example.com/video.mp4") assert video.url == "http://example.com/video.mp4" def test_url_ref_model(): """Test URLRef model validation.""" ref = URLRef(url="http://example.com/file.pdf") assert ref.url == "http://example.com/file.pdf" def test_message_content_item_model(): """Test MessageContentItem model validation.""" # Text item text_item = MessageContentItem(type="text", text="Hello") assert text_item.type == "text" assert text_item.text == "Hello" # Image item img = ImageURL(url="http://example.com/img.png") img_item = MessageContentItem(type="image_url", image_url=img) assert img_item.type == "image_url" assert img_item.image_url == img # Input image item input_img_item = MessageContentItem(type="input_image", input_image=img) assert input_img_item.type == "input_image" assert input_img_item.input_image == img def test_message_model(): """Test Message model validation.""" # Simple text message msg = Message(role="user", content="Hello") assert msg.role == "user" assert msg.content == "Hello" # Message with list content item = MessageContentItem(type="text", text="Hello") msg_list = Message(role="user", content=[item]) assert isinstance(msg_list.content, list) assert len(msg_list.content) == 1 assert msg_list.content[0] == item # Message with tool calls fc = FunctionCall(name="func", arguments="{}") tc = ToolCall(id="1", function=fc) msg_tool = Message(role="assistant", tool_calls=[tc]) assert msg_tool.tool_calls == [tc] def test_chat_completion_request_model(): """Test ChatCompletionRequest model validation.""" msg = Message(role="user", content="Hello") req = ChatCompletionRequest(messages=[msg]) assert req.messages == [msg] assert req.stream is False # Default value req_stream = ChatCompletionRequest(messages=[msg], stream=True, temperature=0.7) assert req_stream.stream is True assert req_stream.temperature == 0.7