| import pytest |
| from app.services.vision import has_images |
| from app.services.cache_layer import make_cache_key, compute_embedding, cosine_similarity |
|
|
|
|
| class TestProxyRouter: |
| def test_has_images_text_only(self): |
| messages = [{"role": "user", "content": "Hello"}] |
| assert has_images(messages) is False |
|
|
| def test_has_images_with_image_url(self): |
| messages = [{"role": "user", "content": [{"type": "image_url", "image_url": {"url": "https://example.com/img.jpg"}}]}] |
| assert has_images(messages) is True |
|
|
| def test_has_images_with_content_list_text(self): |
| messages = [{"role": "user", "content": [{"type": "text", "text": "describe this"}]}] |
| assert has_images(messages) is False |
|
|
| def test_make_cache_key_deterministic(self): |
| messages = [{"role": "user", "content": "hello"}] |
| key1 = make_cache_key("gpt-4", messages) |
| key2 = make_cache_key("gpt-4", messages) |
| assert key1 == key2 |
|
|
| def test_make_cache_key_different_model(self): |
| messages = [{"role": "user", "content": "hello"}] |
| key1 = make_cache_key("gpt-4", messages) |
| key2 = make_cache_key("gpt-3.5", messages) |
| assert key1 != key2 |
|
|
| def test_compute_embedding(self): |
| emb = compute_embedding("hello world") |
| assert len(emb) == 256 |
| assert all(isinstance(v, float) for v in emb) |
|
|
| def test_cosine_similarity_identical(self): |
| emb = compute_embedding("test") |
| sim = cosine_similarity(emb, emb) |
| assert abs(sim - 1.0) < 0.001 |
|
|
| def test_cosine_similarity_orthogonal(self): |
| a = [1.0] + [0.0] * 255 |
| b = [0.0] * 256 |
| b[0] = 1.0 |
| sim = cosine_similarity(a, b) |
| assert abs(sim - 1.0) < 0.001 |
|
|
| def test_cosine_similarity_different(self): |
| a = compute_embedding("hello world") |
| b = compute_embedding("goodbye universe") |
| assert cosine_similarity(a, b) < 0.99 |
|
|