| import tempfile |
| import unittest |
| import json |
| from pathlib import Path |
| from unittest import mock |
|
|
| from approach.vlm.gpt4v import gpt4v |
|
|
|
|
| class VlmAdapterTests(unittest.TestCase): |
| def test_app_metadata_cache_fails_on_missing_app_id(self): |
| with tempfile.TemporaryDirectory() as tmpdir: |
| cache_path = Path(tmpdir) / "apps.json" |
| cache_path.write_text(json.dumps({"123": {"app_name": "App", "app_description": "Desc"}})) |
| cache = gpt4v.load_app_metadata_cache(cache_path) |
|
|
| self.assertEqual(gpt4v.get_steam_app_data("123", "123_4.jpg", cache), ("App", "Desc")) |
| with self.assertRaises(KeyError): |
| gpt4v.get_steam_app_data("456", "456_1.jpg", cache) |
|
|
| def test_process_image_uses_selected_openrouter_profile_and_real_mime_type(self): |
| client = mock.Mock() |
| client.complete_json.return_value = {"objects": {"button": "round red"}} |
|
|
| with tempfile.TemporaryDirectory() as tmpdir: |
| image_path = Path(tmpdir) / "123_4.png" |
| image_path.write_bytes(b"not-decoded-by-the-adapter") |
| with mock.patch.object( |
| gpt4v, |
| "get_steam_app_data", |
| return_value=("Test App", "Test description"), |
| ), mock.patch.object( |
| gpt4v, |
| "OpenAICompatibleChatClient", |
| return_value=client, |
| ) as client_class: |
| result = gpt4v.process_image( |
| "default", |
| "describe", |
| str(image_path), |
| False, |
| 0, |
| ) |
|
|
| self.assertEqual(result["objects"]["button"], "round red") |
| self.assertEqual(client_class.call_args.args[0].provider, "openrouter") |
| encoded_image = client.complete_json.call_args.args[1][0] |
| self.assertEqual(encoded_image.media_type, "image/png") |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|