diff --git a/.gitignore b/.gitignore index 4259be35d08..deb0acae56e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ .python-version .venv tests/e2e/.fixtures/ -tests/test_litellm/ocr/.fixtures/ .venv-typecheck .venv_policy_test .venv-mutmut diff --git a/tests/test_litellm/ocr/.fixtures/099863d538eee61d30ece33c67b6d274496e0065223342a76cc04e5ae4491a4c.json b/tests/test_litellm/ocr/.fixtures/099863d538eee61d30ece33c67b6d274496e0065223342a76cc04e5ae4491a4c.json new file mode 100644 index 00000000000..5892eae7fa3 --- /dev/null +++ b/tests/test_litellm/ocr/.fixtures/099863d538eee61d30ece33c67b6d274496e0065223342a76cc04e5ae4491a4c.json @@ -0,0 +1,95 @@ +{ + "litellm_input": { + "document": { + "image_url": "https://dummyjson.com/image/800x300/ffffff/000000?text=N&fontSize=33", + "type": "image_url" + }, + "extract_footer": true, + "extract_header": false, + "id": "-0mq4q9pmig_rn9x2-vn", + "image_limit": 66, + "image_min_size": 1320, + "include_blocks": true, + "include_image_base64": false, + "model": "mistral/mistral-ocr-latest", + "table_format": "html" + }, + "provider_response": { + "body_b64": "eyJwYWdlcyI6W3siaW5kZXgiOjAsIm1hcmtkb3duIjoiTiIsImltYWdlcyI6W10sInRhYmxlcyI6W10sImh5cGVybGlua3MiOltdLCJoZWFkZXIiOm51bGwsImZvb3RlciI6bnVsbCwiZGltZW5zaW9ucyI6eyJkcGkiOjIwMCwiaGVpZ2h0IjozMDAsIndpZHRoIjo4MDB9LCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwiYmxvY2tzIjpbeyJ0b3BfbGVmdF94IjozODYsInRvcF9sZWZ0X3kiOjEzNSwiYm90dG9tX3JpZ2h0X3giOjQxMiwiYm90dG9tX3JpZ2h0X3kiOjE2MiwiY29udGVudCI6Ik4iLCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwidHlwZSI6InRleHQifV19XSwibW9kZWwiOiJtaXN0cmFsLW9jci1sYXRlc3QiLCJkb2N1bWVudF9hbm5vdGF0aW9uIjpudWxsLCJ1c2FnZV9pbmZvIjp7InBhZ2VzX3Byb2Nlc3NlZCI6MSwiZG9jX3NpemVfYnl0ZXMiOjIyOTh9fQ==", + "headers": [ + { + "name": "Date", + "value": "Sat, 29 Aug 2026 21:29:07 GMT" + }, + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "set-cookie", + "value": "__cf_bm=vwrWUQPvG4As7fL9Gl1e.lxaZ4I1lG_9uVgrmykYadg-1788038947.3819609-1.0.1.1-4ibtTa5G29xCi1ADh.G_kJ.3l0T2gPlt.1mPNdaJOJNjekO4DR4yYlCCXhucA3Lq45RPrVMxxkPH2YFZ887YrReeGS9x0E05ZO58vqbcJhwfTGLh.3xJSmr.0471Xw4Q; HttpOnly; SameSite=None; Secure; Path=/; Domain=mistral.ai; Expires=Sat, 29 Aug 2026 21:59:07 GMT" + }, + { + "name": "mistral-correlation-id", + "value": "01a04f6d-228b-7cdc-9a1a-b99123c027c3" + }, + { + "name": "x-kong-request-id", + "value": "01a04f6d-228b-7cdc-9a1a-b99123c027c3" + }, + { + "name": "x-ratelimit-limit-ocr-pages-minute", + "value": "60" + }, + { + "name": "x-ratelimit-remaining-ocr-pages-minute", + "value": "56" + }, + { + "name": "x-ratelimit-ocr-pages-query-cost", + "value": "1" + }, + { + "name": "x-envoy-upstream-service-time", + "value": "395" + }, + { + "name": "Server", + "value": "cloudflare" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "x-kong-upstream-latency", + "value": "396" + }, + { + "name": "x-kong-proxy-latency", + "value": "17" + }, + { + "name": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "name": "cf-cache-status", + "value": "DYNAMIC" + }, + { + "name": "Strict-Transport-Security", + "value": "max-age=15552000; includeSubDomains; preload" + }, + { + "name": "CF-RAY", + "value": "a32ea63d2ad30065-SJC" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=86400" + } + ], + "status_code": 200 + } +} diff --git a/tests/test_litellm/ocr/.fixtures/177537cc3eb91a26336033c6016b0f431a36cc237657c498638a6c676bb6a28d.json b/tests/test_litellm/ocr/.fixtures/177537cc3eb91a26336033c6016b0f431a36cc237657c498638a6c676bb6a28d.json new file mode 100644 index 00000000000..4d8267d248d --- /dev/null +++ b/tests/test_litellm/ocr/.fixtures/177537cc3eb91a26336033c6016b0f431a36cc237657c498638a6c676bb6a28d.json @@ -0,0 +1,90 @@ +{ + "litellm_input": { + "document": { + "image_url": "https://dummyjson.com/image/800x300/ffffff/000000?text=ZPay&fontSize=24", + "type": "image_url" + }, + "id": "utdwr1axd37", + "image_min_size": 4099, + "model": "mistral/mistral-ocr-latest", + "table_format": "markdown" + }, + "provider_response": { + "body_b64": "eyJwYWdlcyI6W3siaW5kZXgiOjAsIm1hcmtkb3duIjoiWlBheSIsImltYWdlcyI6W10sInRhYmxlcyI6W10sImh5cGVybGlua3MiOltdLCJoZWFkZXIiOm51bGwsImZvb3RlciI6bnVsbCwiZGltZW5zaW9ucyI6eyJkcGkiOjIwMCwiaGVpZ2h0IjozMDAsIndpZHRoIjo4MDB9LCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwiYmxvY2tzIjpbeyJ0b3BfbGVmdF94IjozNzAsInRvcF9sZWZ0X3kiOjEzOCwiYm90dG9tX3JpZ2h0X3giOjQzMCwiYm90dG9tX3JpZ2h0X3kiOjE2NSwiY29udGVudCI6IlpQYXkiLCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwidHlwZSI6InRleHQifV19XSwibW9kZWwiOiJtaXN0cmFsLW9jci1sYXRlc3QiLCJkb2N1bWVudF9hbm5vdGF0aW9uIjpudWxsLCJ1c2FnZV9pbmZvIjp7InBhZ2VzX3Byb2Nlc3NlZCI6MSwiZG9jX3NpemVfYnl0ZXMiOjMxNDd9fQ==", + "headers": [ + { + "name": "Date", + "value": "Sat, 29 Aug 2026 21:29:05 GMT" + }, + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "set-cookie", + "value": "__cf_bm=_.yDONMxI8Wj6bdeKvgLqylB1uRdIzfx64ReOxc5C1o-1788038945.3530984-1.0.1.1-uwAg3dYolu9XCaCCJsie9eFRumBnKC1ZyQDkHA1Otpe_IUrpEsnokSCiyyPun1WOFenihkYZTLs7xMCwSkdbEUs1gN2O2WkWnKL3v_PA36X9McSO1o5iIlm84TAqmGOJ; HttpOnly; SameSite=None; Secure; Path=/; Domain=mistral.ai; Expires=Sat, 29 Aug 2026 21:59:05 GMT" + }, + { + "name": "mistral-correlation-id", + "value": "01a04f6d-1a9e-7b54-a1ef-e40d7988227f" + }, + { + "name": "x-kong-request-id", + "value": "01a04f6d-1a9e-7b54-a1ef-e40d7988227f" + }, + { + "name": "x-ratelimit-limit-ocr-pages-minute", + "value": "60" + }, + { + "name": "x-ratelimit-remaining-ocr-pages-minute", + "value": "58" + }, + { + "name": "x-ratelimit-ocr-pages-query-cost", + "value": "1" + }, + { + "name": "x-envoy-upstream-service-time", + "value": "388" + }, + { + "name": "Server", + "value": "cloudflare" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "x-kong-upstream-latency", + "value": "389" + }, + { + "name": "x-kong-proxy-latency", + "value": "13" + }, + { + "name": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "name": "cf-cache-status", + "value": "DYNAMIC" + }, + { + "name": "Strict-Transport-Security", + "value": "max-age=15552000; includeSubDomains; preload" + }, + { + "name": "CF-RAY", + "value": "a32ea6307e391be5-SJC" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=86400" + } + ], + "status_code": 200 + } +} diff --git a/tests/test_litellm/ocr/.fixtures/b6cee08db583cae6ed091afd4f81895ccc6bdbcf6f9fff3aab098998c7bc538d.json b/tests/test_litellm/ocr/.fixtures/b6cee08db583cae6ed091afd4f81895ccc6bdbcf6f9fff3aab098998c7bc538d.json new file mode 100644 index 00000000000..a2a937befa7 --- /dev/null +++ b/tests/test_litellm/ocr/.fixtures/b6cee08db583cae6ed091afd4f81895ccc6bdbcf6f9fff3aab098998c7bc538d.json @@ -0,0 +1,87 @@ +{ + "litellm_input": { + "document": { + "image_url": "https://dummyjson.com/image/800x300/ffffff/000000?text=0&fontSize=12", + "type": "image_url" + }, + "model": "mistral/mistral-ocr-latest" + }, + "provider_response": { + "body_b64": "eyJwYWdlcyI6W3siaW5kZXgiOjAsIm1hcmtkb3duIjoiMCIsImltYWdlcyI6W10sInRhYmxlcyI6W10sImh5cGVybGlua3MiOltdLCJoZWFkZXIiOm51bGwsImZvb3RlciI6bnVsbCwiZGltZW5zaW9ucyI6eyJkcGkiOjIwMCwiaGVpZ2h0IjozMDAsIndpZHRoIjo4MDB9LCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwiYmxvY2tzIjpbeyJ0b3BfbGVmdF94IjozOTIsInRvcF9sZWZ0X3kiOjE0NCwiYm90dG9tX3JpZ2h0X3giOjQwOCwiYm90dG9tX3JpZ2h0X3kiOjE1NywiY29udGVudCI6IjAiLCJjb25maWRlbmNlX3Njb3JlcyI6bnVsbCwidHlwZSI6ImZvb3RlciJ9XX1dLCJtb2RlbCI6Im1pc3RyYWwtb2NyLWxhdGVzdCIsImRvY3VtZW50X2Fubm90YXRpb24iOm51bGwsInVzYWdlX2luZm8iOnsicGFnZXNfcHJvY2Vzc2VkIjoxLCJkb2Nfc2l6ZV9ieXRlcyI6MTkxMn19", + "headers": [ + { + "name": "Date", + "value": "Sat, 29 Aug 2026 21:29:05 GMT" + }, + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "mistral-correlation-id", + "value": "01a04f6d-17f4-7ff9-a890-8e93430da5a7" + }, + { + "name": "x-kong-request-id", + "value": "01a04f6d-17f4-7ff9-a890-8e93430da5a7" + }, + { + "name": "x-ratelimit-limit-ocr-pages-minute", + "value": "60" + }, + { + "name": "x-ratelimit-remaining-ocr-pages-minute", + "value": "59" + }, + { + "name": "x-ratelimit-ocr-pages-query-cost", + "value": "1" + }, + { + "name": "x-envoy-upstream-service-time", + "value": "252" + }, + { + "name": "Server", + "value": "cloudflare" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "x-kong-upstream-latency", + "value": "252" + }, + { + "name": "x-kong-proxy-latency", + "value": "16" + }, + { + "name": "cf-cache-status", + "value": "DYNAMIC" + }, + { + "name": "set-cookie", + "value": "__cf_bm=Bu1ZsZArEglH4RxFKY1uja22ICsIoWxY3EHWLjhl0.U-1788038944.6771533-1.0.1.1-sq3d4oadvs6YUQHDueFHRtdC9k2PXHPeqfHHJ1aD95baBbevXjDnDKJVfn_7Yb.pLQ3kNVEzucNmUGFFbyYk0W7q_rFe54PLou5QgObpMaWYgrectVNvGi0cwNZeqH24; HttpOnly; SameSite=None; Secure; Path=/; Domain=mistral.ai; Expires=Sat, 29 Aug 2026 21:59:05 GMT" + }, + { + "name": "Strict-Transport-Security", + "value": "max-age=15552000; includeSubDomains; preload" + }, + { + "name": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "name": "CF-RAY", + "value": "a32ea62c3f91cf22-SJC" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=86400" + } + ], + "status_code": 200 + } +} diff --git a/tests/test_litellm/ocr/.fixtures/c8702579eea0ba7fb7989604401e0a149493bcf609378295206bf5719a369059.json b/tests/test_litellm/ocr/.fixtures/c8702579eea0ba7fb7989604401e0a149493bcf609378295206bf5719a369059.json new file mode 100644 index 00000000000..ed7f9ef38ba --- /dev/null +++ b/tests/test_litellm/ocr/.fixtures/c8702579eea0ba7fb7989604401e0a149493bcf609378295206bf5719a369059.json @@ -0,0 +1,88 @@ +{ + "litellm_input": { + "document": { + "image_url": "https://dummyjson.com/image/800x300/ffffff/000000?text=AuUPy5&fontSize=35", + "type": "image_url" + }, + "include_image_base64": true, + "model": "mistral/mistral-ocr-latest" + }, + "provider_response": { + "body_b64": "eyJwYWdlcyI6W3siaW5kZXgiOjAsIm1hcmtkb3duIjoiQXVVUHk1IiwiaW1hZ2VzIjpbXSwidGFibGVzIjpbXSwiaHlwZXJsaW5rcyI6W10sImhlYWRlciI6bnVsbCwiZm9vdGVyIjpudWxsLCJkaW1lbnNpb25zIjp7ImRwaSI6MjAwLCJoZWlnaHQiOjMwMCwid2lkdGgiOjgwMH0sImNvbmZpZGVuY2Vfc2NvcmVzIjpudWxsLCJibG9ja3MiOlt7InRvcF9sZWZ0X3giOjMyOSwidG9wX2xlZnRfeSI6MTM0LCJib3R0b21fcmlnaHRfeCI6NDY5LCJib3R0b21fcmlnaHRfeSI6MTcyLCJjb250ZW50IjoiQXVVUHk1IiwiY29uZmlkZW5jZV9zY29yZXMiOm51bGwsInR5cGUiOiJ0ZXh0In1dfV0sIm1vZGVsIjoibWlzdHJhbC1vY3ItbGF0ZXN0IiwiZG9jdW1lbnRfYW5ub3RhdGlvbiI6bnVsbCwidXNhZ2VfaW5mbyI6eyJwYWdlc19wcm9jZXNzZWQiOjEsImRvY19zaXplX2J5dGVzIjo0NDQ5fX0=", + "headers": [ + { + "name": "Date", + "value": "Sat, 29 Aug 2026 21:29:06 GMT" + }, + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "mistral-correlation-id", + "value": "01a04f6d-1e94-7169-acf2-331366511208" + }, + { + "name": "x-kong-request-id", + "value": "01a04f6d-1e94-7169-acf2-331366511208" + }, + { + "name": "x-ratelimit-limit-ocr-pages-minute", + "value": "60" + }, + { + "name": "x-ratelimit-remaining-ocr-pages-minute", + "value": "57" + }, + { + "name": "x-ratelimit-ocr-pages-query-cost", + "value": "1" + }, + { + "name": "x-envoy-upstream-service-time", + "value": "299" + }, + { + "name": "Server", + "value": "cloudflare" + }, + { + "name": "access-control-allow-origin", + "value": "*" + }, + { + "name": "x-kong-upstream-latency", + "value": "301" + }, + { + "name": "x-kong-proxy-latency", + "value": "13" + }, + { + "name": "cf-cache-status", + "value": "DYNAMIC" + }, + { + "name": "set-cookie", + "value": "__cf_bm=L.iPQSMbMkUfZ6bZqRUnIvFouaL6uaka9sb1RADqE7I-1788038946.371394-1.0.1.1-eP7TRle_nNnnCddZ21LX.mzRWslGV0sv5wZONgMz.g2Es_qbFOGUuPv6K1C0p86Pz6xULpoaVjmqxUOkza6Ug_53VGsNkwHRvyxXuKXvMSB62zZPyrO0PcwTqRZKYFLC; HttpOnly; SameSite=None; Secure; Path=/; Domain=mistral.ai; Expires=Sat, 29 Aug 2026 21:59:06 GMT" + }, + { + "name": "Strict-Transport-Security", + "value": "max-age=15552000; includeSubDomains; preload" + }, + { + "name": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "name": "CF-RAY", + "value": "a32ea636dd4eebe2-SJC" + }, + { + "name": "alt-svc", + "value": "h3=\":443\"; ma=86400" + } + ], + "status_code": 200 + } +}