From f96a428ef1a6c3c34d8bf1d51cab2dfc28c4a254 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Mon, 27 Jul 2026 10:44:32 +0300 Subject: [PATCH] Fix defects found reviewing the coverage work check_source_accessible narrowed its handler to ValueError, but Path.exists re-raises errno values outside its ignored set (EACCES, ENAMETOOLONG). Those were swallowed before and now escaped into the rebuild sweep the guard exists to protect. Catch OSError too. Restore the arity guard in _common_path_prefix: without it an empty list raises from min() and a single label yields a prefix covering the whole path. Two tests would have hung rather than failed on regression (the vacuum skip and the protected-wait cancellation); both are now bounded. The import vacuum test raced against the done-callback that discards the task, and now spies on the call instead, with a negative control. Replace assertions that could not fail: blank-query search against an empty corpus, a batch flush counted against an empty table, a picture description asserting its own input state, and an FS scheme check with nothing on disk to resolve. The get_model matrix asserted only the returned type across 26 cases and now pins the per-provider settings. The three batching tests now count flushes, which revealed embed-only writes through chunks_table.add rather than _flush_rebuild_batch. --- haiku_rag_slim/haiku/rag/client/documents.py | 8 +- haiku_rag_slim/haiku/rag/client/rebuild.py | 3 + haiku_rag_slim/haiku/rag/doctor.py | 2 + ...ory_get_by_id_and_list_all_pagination.yaml | 49 +++++- ..._search_returns_empty_for_blank_query.yaml | 82 ++++++++++ ...ts_schedules_vacuum_per_config[False].yaml | 42 ++++++ ...ts_schedules_vacuum_per_config[True].yaml} | 0 ...ild_batch_is_a_noop_without_documents.yaml | 42 ++++++ tests/ingester/test_fs_source.py | 5 + tests/ingester/test_webdav_source.py | 19 +-- tests/sandbox/test_sandbox_toc.py | 15 +- tests/store/test_restore.py | 4 +- tests/test_chunk.py | 29 ++-- tests/test_chunker.py | 7 +- tests/test_client.py | 38 +++-- tests/test_config.py | 2 +- tests/test_context.py | 8 +- tests/test_database_autocreate.py | 10 +- tests/test_embedder_config.py | 7 +- tests/test_lancedb_connection.py | 16 +- tests/test_rebuild.py | 85 ++++++++++- tests/test_utils.py | 142 ++++++++++++++---- 22 files changed, 518 insertions(+), 97 deletions(-) create mode 100644 tests/cassettes/test_chunk/test_chunk_search_returns_empty_for_blank_query.yaml create mode 100644 tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[False].yaml rename tests/cassettes/test_client/{test_import_documents_schedules_vacuum_when_enabled.yaml => test_import_documents_schedules_vacuum_per_config[True].yaml} (100%) create mode 100644 tests/cassettes/test_rebuild/test_flush_rebuild_batch_is_a_noop_without_documents.yaml diff --git a/haiku_rag_slim/haiku/rag/client/documents.py b/haiku_rag_slim/haiku/rag/client/documents.py index 4b0373e2..a9698ce5 100644 --- a/haiku_rag_slim/haiku/rag/client/documents.py +++ b/haiku_rag_slim/haiku/rag/client/documents.py @@ -908,8 +908,10 @@ async def update_document( def check_source_accessible(uri: str) -> bool: """Check if a document's source URI is accessible. - A stored URI that no longer parses (``urlparse`` rejects malformed IPv6 - hosts) counts as inaccessible rather than aborting the caller's sweep. + Anything the URI itself makes unanswerable counts as inaccessible rather + than aborting the caller's sweep: ``urlparse`` rejects malformed IPv6 + hosts, and ``Path.exists`` re-raises errno values outside its ignored set + (an unreadable parent directory, an over-long name). """ try: parsed_url = urlparse(uri) @@ -918,5 +920,5 @@ def check_source_accessible(uri: str) -> bool: elif parsed_url.scheme in ("http", "https", "s3"): return True return False - except ValueError: + except (ValueError, OSError): return False diff --git a/haiku_rag_slim/haiku/rag/client/rebuild.py b/haiku_rag_slim/haiku/rag/client/rebuild.py index 0ff37cb5..6ba9ca7b 100644 --- a/haiku_rag_slim/haiku/rag/client/rebuild.py +++ b/haiku_rag_slim/haiku/rag/client/rebuild.py @@ -281,6 +281,9 @@ async def _populate_staging_table(client: "HaikuRAG") -> None: pagination drift), so peak memory stays bounded regardless of corpus size. The vector column is omitted — the point of embed-only rebuild is to regenerate it. + + Requires ``_resolve_rebuild_recovery`` to have cleared any leftover + staging table first: ``create_table`` raises if the name is already taken. """ db = client.store.db tables = (await db.list_tables()).tables diff --git a/haiku_rag_slim/haiku/rag/doctor.py b/haiku_rag_slim/haiku/rag/doctor.py index c885dc68..9355a26b 100644 --- a/haiku_rag_slim/haiku/rag/doctor.py +++ b/haiku_rag_slim/haiku/rag/doctor.py @@ -330,6 +330,8 @@ def _common_path_prefix(labels: list[str]) -> str: Returns "" unless the shared prefix is long enough to be worth factoring out of every line (deep URI trees are otherwise unreadable). """ + if len(labels) < 2: # pragma: no cover - families always have >=2 members + return "" lo, hi = min(labels), max(labels) end = 0 while end < len(lo) and lo[end] == hi[end]: diff --git a/tests/cassettes/test_chunk/test_chunk_repository_get_by_id_and_list_all_pagination.yaml b/tests/cassettes/test_chunk/test_chunk_repository_get_by_id_and_list_all_pagination.yaml index c4d2bfa1..2875e5ea 100644 --- a/tests/cassettes/test_chunk/test_chunk_repository_get_by_id_and_list_all_pagination.yaml +++ b/tests/cassettes/test_chunk/test_chunk_repository_get_by_id_and_list_all_pagination.yaml @@ -8,7 +8,7 @@ interactions: connection: - keep-alive content-length: - - '123' + - '4851' content-type: - application/json host: @@ -18,9 +18,32 @@ interactions: encoding_format: base64 input: - |- - First paragraph. - Second paragraph. - Third paragraph. + Jakarta Election Campaigns Heat Up: Here's How to Understand the System + As election day in Jakarta draws nearer, candidates are out in force using various strategies to woo voters and prepare to exercise their democratic rights. Citizens make their voices heard as the city vibrates with life. This coverage offers valuable insight into campaign activities while offering an in-depth guide for understanding electoral processes in Jakarta. + Initial Launch of Candidates' Campaign Plans on September 1 + After September 1st, when campaign season officially kicked off, candidates have moved swiftly to engage their bases. Amira Bintang, an upstart candidate with extensive social activism experience and promising urban development and public transportation reform as key platforms of her candidacy speech in Jakarta; incumbent Rizal Harahap relies heavily on his track record and highlights all infrastructure projects completed during his term. + Campaign Strategies: From Digital Battlegrounds to Door-toDoor Outreach + Campaign strategies have taken an advanced turn as candidates leverage digital media to reach a wider audience. Hashtags, viral videos, targeted ads and targeted messaging can all play an influential role in changing public opinion with just a tweet or meme. At the grassroots level candidates engage in door-to-door campaigns personalized for individual voters in an attempt to connect. + - |- + Bintang's interactive app for gathering real-time feedback from citizens about daily commute challenges was applauded as an innovative form of civic engagement, while Harahap launched a series of webinars featuring experts discussing economic growth under his administration. + Rallies and Persuasion + Jakartan politicians know the power of an impassioned speech cannot be underrated, and candidates have been taking full advantage of its effectiveness at rallies. Rallies feature vibrant colors, banners and impassioned discourse in an attempt to win converts over. At one high-spirited rally on October 22, Bintang outlined her policy plans for improving education and healthcare to an appreciative crowd while Harahap's rallies often consist of shows of solidarity from various political allies united behind his plea for continuity and stability. + Debates: Clashes Between Visions and Policies + - |- + Debates are one of the highlights of Jakarta election campaigns, allowing candidates to outline their platforms and discuss critical issues. On November 5th, citizens witnessed an exhilarating debate between candidates Bintang and Harahap over whether the city was prepared for digital transformation in public services; Bintang advocated an aggressive move toward smart city model while Harahap advocated a more measured approach so as not to alienate less tech-savvy residents. + Voter Engagement: Making Every Vote Count + Ensuring every eligible voter is engaged and informed remains an ongoing challenge for Jakartans. Civil society groups and independent bodies host workshops and publish voter guides to inform voters of their rights and choices, while an annual democracy festival such as that held on November 20 featured interactive exhibits on Jakarta's electoral history as well as mock voting booths for first-time voters. + Campaign Financing: Transparency and Accountability + - |- + Campaign financing has always been a contentious topic in elections, and this election cycle is no exception. Bintang's campaign, funded largely through crowdfunders online supporters, stands in stark contrast with Harahap's sophisticated machine backed by both private donors and party funds. To protect democratic decision making processes from any + undue influences on decision-making processes, Jakarta Election Commission mandated strict reporting and transparency measures during campaign financing decisions. + Before Election Day: Submit Final Appeals Now + As election day nears, candidates make their last appeals to voters. Bintang plans a visit through key neighborhoods while Harahap plans a final rally scheduled for late November. Both camps are honing their messaging and policy proposals while encouraging supporters to make an appearance at polling booths on November 8th. + Polling Day: The Final Act of Campaign Activities + On December 6th, voting booths across Jakarta will open their doors, signalling the culmination of weeks of intense campaigning. Voters will cast their vote and candidates await results that depend on how effective their strategies, speeches and outreach initiatives have been. + - Jakarta's vibrant election campaign offers an insight into its flourishing democracy. As the city looks ahead to an + exciting new chapter in its political history, electoral processes demonstrate the significance of people-power in + shaping our collective futures. model: qwen3-embedding:4b uri: http://localhost:11434/v1/embeddings response: @@ -31,14 +54,26 @@ interactions: - chunked parsed_body: data: - - embedding: 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 + - embedding: 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 index: 0 object: embedding + - embedding: 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 + index: 1 + object: embedding + - embedding: 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 + index: 2 + object: embedding + - embedding: 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 + index: 3 + object: embedding + - embedding: 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 + index: 4 + object: embedding model: qwen3-embedding:4b object: list usage: - prompt_tokens: 10 - total_tokens: 10 + prompt_tokens: 858 + total_tokens: 858 status: code: 200 message: OK diff --git a/tests/cassettes/test_chunk/test_chunk_search_returns_empty_for_blank_query.yaml b/tests/cassettes/test_chunk/test_chunk_search_returns_empty_for_blank_query.yaml new file mode 100644 index 00000000..2c719326 --- /dev/null +++ b/tests/cassettes/test_chunk/test_chunk_search_returns_empty_for_blank_query.yaml @@ -0,0 +1,82 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '102' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - Searchable body about elections. + model: qwen3-embedding:4b + uri: http://localhost:11434/v1/embeddings + response: + headers: + content-type: + - application/json + transfer-encoding: + - chunked + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + model: qwen3-embedding:4b + object: list + usage: + prompt_tokens: 7 + total_tokens: 7 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '79' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - elections + model: qwen3-embedding:4b + uri: http://localhost:11434/v1/embeddings + response: + headers: + content-type: + - application/json + transfer-encoding: + - chunked + parsed_body: + data: + - embedding: yZNTOdr8JD3HjTS70RMKPRVFKjoF8SI9pr5ePaq1ATvUDQM9/qAiO9iehLxjhss6HCkOOwmmqTzIfbY8r7KYvKz28DwpOQ88WoxCvRtg+rsW0pK8QDxUPFVShj0Cvoo8GMtxO8Ht67wygr28GhgcvvHXjbwUMba7GSsjvbMkIr3+Tbg7J5yPPBv84DtJ0IC8PqIVPWHN4ru2Q2Q8nr/3vGs7h7r0CHe8lyhPPLXDfbwg6Ls81xLMu66WMTt0sIY7klcMvABV2rwyJXk7UAc+OQhkATuhENi8KXsPPBO+A72irjo9KBA0vPbNILsgjgQ8gUhOvEkMF7kj/1682ZE6vOexyLtb8Vi8eDn7vOD9xL0/o6E7legFPCBqVL1Hxmq8MBSDvNwqDjyHVMs8HKJlvK/0ALxv3N88lKbHO/QgzjxoBVc8I/EavADqEzyDona72XDhPPEcJzv/dn68zMt6uno8grygHbM8yszcO76LxDyYLvM6dDUrPb0NhbsV/Ia76M9QvAlIuLxf8568iaF+PCvlALsuAPC86a+OPMPXLLxyf2i8rpTxvBwW5rtEEPQ6Aozxu85E6bv18fq7t6KsvEgKODy+aSS9iTYavD+Mazoj7Is7Qr/3PPyFUjx0CYO8LB8XuvmZhTzlrPW7N3kpPM22TTvhniW6PohqvCZ0MjkiJRK8WAhEPEG6zzzQ1tc6QJRMPJUuvbzHrwU9Io5mu1GHBjwNop87Jb6TO8xMnTxnK5G7wBSiO2Tg/TuqO4o6aSCIvH26kjw7Rnm8j/TJPJScujxiNPS79zunPDoC8rtOtms8IhiLPJKUtTw377w83r1hvLeMJrx5Ico7pf6RO/F3kLvcJqE8zkngvMrw+jsYr3k8ArAtvEDlwrwDNsC77giJvPs3JDzva1O8RISVvL9kuTvGxua7DG+wu0ODbrs7BWC82db3vK+WfLx0Xza8UIAjvAulwbyYxvs8ARpbu3v2gzuQ0/O77FnTufriajyIU587yJ6IO1R8RL1xpzw8LT8LvOJWOzkbrNy76L7hOzHzsrznZD480OhpvIYTYDw4Xgy8+hyIvGj5Nrx6h5i7wi3zu/7vYLwMBwe8pTSVvG7/b7lBncW85DHLO/HuR7y0gY28ROkuvbGTiDy8xeQ7SamBvD1jybsU+7Y8Hx2rPDuh0zsjsRc67/ahvE6ik7lXTiS9X+MhPNQdEjxF85k86LupPJRR/7s0qrw7mIjgPEtpmrw3q58776cgPAWx9zoTCFQ8pv5CvMW+Q7qPIAs8UL19vB4gXbyMKg+7mDNpPHvisDvoGdG8CM/NO2z7Fbr5bFW8aQOhvLQkvLzxPJG8f8UQPR7st7zA8We8sLQCPMpsn7wu0Ma8eov0u98FAz2hYts8Xd7/PIFTprxVoTC7R6vYORWq77y5qXO7hsk4uyPetjzFpJs7lOMtPb/j7rpeqbo87B5DPAcLLLySyvK7s1ndu9fa77vViS48ZiHWPI8wBbwe37g7xeAnvYlZlzxBxCO6rTnsPB2DhTyI0CM86+N0O0ToKLzUY0o7O0VzPOdVMDwsax+8eeCBvAszCbtM2Sg8Eyj8u8yVBLzpDqq8ZqoXu4QZlLsITU88YlNsPM6YGbxGhlw8V+NsPCO2a7hwDDK9f1pRvfs8MLzDuKW8uliePMWRDbyheyu8UzWsvP69fTqWJT88a1q7u7kHLL1XIiM53E8avSBjqrwMt1u7MrcjPCIr6Ds/6jg6rrNhPH42ATmb5AI9Qr62u531Kzx0Lbs7kb8bvPgt4riqrl28bDK1u2uuJT392Lk8cW1aPEFQ4ruxgpq8FZVhPLxNgbsxccS81L4jPG60nrrbClQ8f6FhvfW6lzz+wyw83lInvKXJ7LulroG83LsTvRqMUzyPsX68HoOFu3DwJzy6auG8UhM3vLSOGryjsgE9XtkWPI1Q2Ty4ASM8NTn2vCME1DwQcxm9/LqNvPF/ebv4sBM9AmBSO7ieerpOSYS8G0kOvNRDmz3zo+W8ZnjVuq4ENDzoHtE8295UPSPx1rtrAYc8vTlLvPS6SzyHTwo7QADkPA0pory6Sje8HZ1rOu+8tTtuTWO7PZOuPCylwDtBywQ8zXc/PHB2xTtkPQg9z9+ZvLABHLv1a7i8B+QjvfnxA72r4iY8YnxPvLxixrm+G1A9CkmDPNROebwGXUK8S2sBPaa4EDuymKM8RA7NOsAJP7rlZcM6jv2iO8P8Tr1OLZe6zlT8OhmdxbzbO1W8A9qEOxskpjukgAE89vQxvI4yFDvqhY88LzUFvGyICTsW99k7slI/PJADVD1dD667ujFQPUNGGT3EOIC8fdOwu8dyEL1Lff47CzoMvFRplTvChMY8fR0ivX/Lobzju1I6/6iVO48MSj2fUiO8YZzquddnhLyJNAw8ciSYu9icrrxGSY87feobuxkLpzsggai8VUOVPMMqib0N7TI8fuXUuVZGarzZLh+8+f94vG/BPjs6qYS89PwhvEtk2TxUQd+8Ik7LvMTu/LsjZ9Y78R8fvBXYMTwsuqg8w9kUvN1gIjxpKC48xtaPPD5Jkbp9xLS8D/HSvPB6gzxCDpO7jc1WPHXjcDylmh0771YFvfQyeDud0/O6DgzuPKnM27xedwE8d18rvGFsMT2EIx+9ygeLO4+yFD0dn4283fJcvM/f6rpQKUK8OehsOw6jHT0QnsA8TLuOuX2cKbxm+cQ8WL4BPevJ8zzBiVg8rWcNvTGVjrz3QLu8614qvHf9Kzs+kCA9RQiVPNV9HL3lq8A6u3qwPCtvdLzadIC8FvDpPDBUzzxKWwO9cTUxPXszJ7s0uGm7PZ+au4X8dzw7Qfy8uw01vEXrqTy9q2C7f5OyPNN2fztk9cC8AdDCPKw/nLwRnnw8Z5OmvLtJ+zvBONQ7soYXPAHmubun7xu9WLYdPcSJOrz4EdC7gcyfvADumrvPN6s8EkUHPZi9LjrbpOI80q+EvHtRpLzy97+8TxdfPONHIjudTcw81CmHO2fgI7wylUY8QokGvSPXUrt0/BK8vZ85vR6coDxah8E8EdEvPHlvkTvkjGW8YPDvu3aZbLwR/Cq9+QlFvGaIgDyYiBA8WngmPMeUxrzPf6M8tagrvPs3BT3M/Jk8wbPyPL0fHLxmSdU4dD9xu6ZSvLzsdRU8rmffuwHVlrwkIO4849s/PLT/HLwJk4o8KCs3PVBI9bwUNRm8Bu/EO99jZ7wP/bG8PSsKvfX7qzwbN2G7xnsfPNrGN7wzu4+7hbT9O6iDxDwyjYI8yusJvbjssLx7kkO7AduJvHHikryKrj68F00MO8dQhjvSoQO9gUB3u4ZlYL3HkbW8w16hvH8kmDl4BQK9ZBS5PDhXI7wTDIU7JjK8vAfcojwH4d48uCtuvCsxFT0XEiM80mZnvAK54btnycC8tK0ZPczgl7aQUQU9eA4fvYgM4LzQrWi8SEajvKicOzyxug888c+GPBKb2bw6Th267xFHPQ5I3Ty4TBo8IwWRvOZliDvs5U+7yVYVOyqX+7yVOpg8f1KqPCQaQr0SimS8HAD8vLTqr7wc7u08ahe9PFywXLsNpeE8ZzYPvE59lLxjVFg9naNuvZg2vrvAt6i618A+PAKv8bvxYdq8eoTEu0if+zts6cg89Uv6unNcezvrvwy8GaIWvKBUpTzbxuk8nwQEO+24urxFvk26REW+OpTDUzwp5+M7RQ43vJ5jqzxSsLq8AwvIu9kTRbw0/u48P+uNPPPl1bvbBlA60XALPeL6BD3+soM8XimLPA2e7zxgWKi6sNnRubq4prxTMDy7V0YnPAgapDwjKs68O38/uvknajyM+G67H4cYPH9vBjssabW8qyxzPIVNW7qcxeI8dugbPUUVV7tZ1IQ72oECPJWpAbzi0vS8KNijvLQF3TwcrwS9cE4aPHWo7bv63zi4iJV6u2y5H7yB0AW8MYgoOiRgWTybmSU98Ff/vKefJjwfUBu9iJaDOwDINjv+aZQ708mxOi/rDD30WkQ7eXCRvF1Z/DrLYfU74ys1PAF5FT3fDAI9GwqMPHEDUrxcKju8DKCtPFRk/7ymPBC9+E7CPKUH7jsgP4w87X2TvQlOkjs6ewc7N3zNOuTJgzvi9Ig7vbG7PF9dm7x2NTO8LAn+vGcsIjw2Zhu85IaavPeWArykXsQ8CqYTvFyt1LyutyS9Q+3YvPIFYLzLZOG8tKOcvKpJTjwcbhw8wOsfvO3mhzrGaGC7iNEaO0LnhTupBAS9yVBRvJPZCLzPYvC699UAvbK3obwBDAU9+1Q6uxTFejwx0JS6j+72u9mcrzsrurU83VdsvHC/sLwKnfw7oKTfOtlMSDkUfsW8NM8BvVOM2LnbIw48kBhoPSXBtTxikYc87dEyu9iw6rumMjw7YRfdvGZNvTx8wsY7omYqO+28prz+mMe6jHZRPARoUDy8hgo78BdKulYrp7yRySm8g2URvTPau7x0VLy84KpvO95DNjy6SzQ9YTglvXHcCbvMJUa8OKyBvHeddjsTPK07tIKsPEhiSDtd7w49kzjpvEYkwDxsWL08CIxbPJHyjTzQNn08Ysm0PGUOYTxC+ku8xjoHvSAw3rx943I7z1WZuiK4hzt9Try7lMwFvS8tzDsK4R69FibnPEyWD7wCKOg8uY7lPGKog7zo6QS6h497PNDVuLy4wcg7/VxxPGQEkzw2Xj68K3YnPUz5Wz0Osh+8R/XAu2/J6bwUho68OBXMOrQbGr381ea7fCY8O+i50DxvtrY8p8CoO3WyKTxEkwa8FGG+vPaD1Dx8qja90tafvADw3DzUOcg7uJ2pPCInujwcy08869SKvBECnrzqyO88Y7BrvHdADb0nO368A8iKPDHfDDw0IkW9HPt5vOduDbyjMCG7D9E1vAZdmTvpj5k7/+WavPJjy7wUb6i84044PVzDZ7wv5n86X+MxO+oDBb2/EvE6asfovLubCzxJyC48oFSNvNu64Lzdily8QifiOzgQ6btGxRK8KkmFvBf5m7yhPme8tYGIPNjiMT2Gl0W8sppIPJk5zbuVjVg8OPEwvPSTpjxe+MW82qRaPPXxFDx81n68Y1mHPKrhprx+mTm8AT4IPHQKljx7JPI7Tx2TuwDrFbse0o8832AiOx5ZSDzZmMg7toYZvHmwXDunFIK74qy4O5dYBjz4gz+8B21BPGWqq7tZYKc78EuYuYmttzoZItk8iXc4PWdkFz2Ojqm8p51tPCsdAzxACt28QvPuu5a1VL2oQ7q8J1ahvCSRVrt3cBk8RA0TPPlTFzzpwaa8GipfPE/7oTxzdrY8u/4uPDVTOjxmE+Q8M8rTPJjsC703gye8WbytOOBSsbxTEOS86PJcvAR9izzfX7e8vnouPOP0Crvy6p+88f1mPIpe1Lww/Rc8DOmLvEDsIbskxrg7jGkYOh5mPzsHEqG7lthtPIn+TbwX6Cw8dayxvKS9jjznrwq9VKkSPNqMWTsLkzq8jQ+VPKB42DzREOc8lVA4u8EMqzxnfv06DhF+PHVmUzz7iOw7y3ouPAfqBjzI1NC8tQLyOlINcTzHZOW8J0+rPCxUCrvSjUa80Jt2O8VojLwQtSc8eiASvd1EDD2zSYC7JEZUu3QCNbw6/Qi9q+rcvNctQDzZuNM8BoSQPHMAozxzZsq8DCPhO6BbsLwhpq066H0zvXe4/zxY/QC8Ds9DvUnDujxLliC9FQLKuws+kjw/Ras7rGAwPG+YkrwpObM7HCA3u4Z9vrya9+S8KuEOvUScgbxd6wG9016LvHaUlTwkShS9z773PNPjGrgAgkK8rUOjPMwmujscUAW8CJOevEzBvbvQVzg91AKxvL4I27xrAFy8INSrPCbgF7xgRyY9I6tYO9hDJrzl5qu8dcWDuRXX1Lx31g889GQkPfsTYzwsW5w80HbVu4bM+Dxw+WA8EmqLu1SUAL1Nvk28Z1zFOsoE2Lo2TmO8HaJPvDgZort8/2Q87wunvGiLcbzeGEW8RNzdPKWVEj2wrfk8qvAuvYJMITzzZx68FB8sPedllzxCUTG8jBOaPFd8wjwU9ja8CImfO80fnryXRzU5xJGtvMt2CzzhDqW8MXACPXBPt7whjgo9UIemvFrZ1TsSx8M8Qz97vF8siby5hIw8SVGcPO+1tDxG5Hm83h8RPKjXwjzsiSw7ARk8vHjWjjvUUl08bbs9PR1TNLoiKD478zXqvASfnzxPySu9QTPLPL4NMzyZbI+8Wc2BvGaNqryhfqI8JymrPMJPCDxqIUa8IuOQu7iGqbt2QA+9uVdavPm8yjwaAU48xPYbPVNsjDwqzpm8FmVGu1NHD7x8gGY6GEstPH6i7bvopTs8g45uPHk6eLzGK0i75AyFPCS0Jbyk51q8u3GMO7R1OL2P0wK94o4YvPefGr2HVhs8csLqvH6o2ruya7O5pdiCOaAxLDykqum8/8k0PeW9eDyQcbs78iLFPAGtgjzUSNw7+Zzuuxse8zxwRD688SlUvDXTZDsepzS8vCCRPBBWwjng3gM8PiOnvD9oCbyePwg8LlCHPEVzUzy7zMW8eiruu06utjucXuO8FE8bPXrrq7suJdw7KIjWuy8YB71xVr88Kpm0OyLqAj2vUjw8n+40O5o2rzydDeg838DIPNqlB73AnO88sZZVvBbo57y9BQ+9dcHYOyGdoju8Ki28Hk3KPPYeG7uyfqY6CU/fvEeDBDy0GhM9cJxVvBlt3bxZKL67ZUL/O9cnjrwJqlw7jt1XPBA067vHLJ08tJxrvHc/gzw6WHU8euWlOm6JujtS98y75jMeu05Akjz2BSW9AccNPH9t2rxj8b48UA+DPDSLSTyh7Lq8aFMVvIFMm7uI1Iq7MGULPcYtZbwkVoC81xxkPAFl8bvjP5q6T+0yvToWBrw2dZe8bJn9PEjjcrw39eE7x95TOhG6ULuR1ye88vDbvOezJjqgjtc78CS0vMhq/Ty3hoM8zVlmvPqEjzsOgOk8MAtqPJPA8zuNO0O8p2Y7ur0gibsp0SI8IbSJvMV+RDw28bM8o+vcu1dHZrsvq+47A0Gwu07XWDwZnIm8whJmOlkDPLyWvdQ7U+bnOwywizxzxq88zJG+vPOpaTsy9d47PV+Su5fmXjvvcqk8/ylsPH4rLbx4C+y8UkIBvV3jQTx3WBk8rbD8O/+xrzwb4gq9ACKJPAl+TDwgyc28dtVxvLaNLbypnXY8LhwpPOno/7wis+I8dEgfPR6wVLyjohe7ONcLO/wW2TvoLBm93RBiu87ijLwyKPa8tUCGOpwhHjxXHC88rZszvNJPhDxpLTY9M+2ZPOBxCTxqM1S85MwsPcF27zw3FMq7PsVjPKj3hbsaERm840fmOTFN9ryZrP478Au8PNthDj13drg8vJzSvDtuqbone848MnIaPSyXbLxwmhS99W7dukKpozwRUJI8O52lvGGBzjsylta8tpLLvA1HG7305vU7wuoxPBpUnryT7O47ZdnNPEHWQ7xZcXE8EwiePBNkN7x7t8S6Kn5gu0PQfT0JUBg8T/MeO7kyvrsIE/C7x5oDOf9FuLzQgK288bJ9u0gi1TkZzyU8lYRBOzfimDy9x0U6kG5MvHy0OD2W6yI9nw7LPHeVx7wMWN67Xe1yvL9rgzzEt4q5K/KXO5ibGrsucts8ADneO0Vo3zw9CIG7SyQSPMzuVb37oUE7uBgdOdjr8rtpva48nKnoO8DNQjy30Fi8tULnPC7SxbsK0q076MzQPJlcET1l3VI8fZm8O8X+Lby0S8m7yOywPKmgyrwxia46L2sZPeM7sLxWHfA7Mq20PAabzrzR3T68NXktvWomrLy3np28FZoBvZ/sGToSJka8Fo+CPP05KrsmqLA8SWWlPIv52rxL5YW6OrqwvPashjxeDQw8YV3Nu+0Cqju44hG9eyBWPDVvvbxtQd+8wOlvPDSFDDyEKFg8JrXTOjBlBLybIxO6xzkMPf6jj7xJVBa8mxBtu0mPKjzxDW28g2A8untEw7zvqoQ8xBaPPHsN+7svPRs61sgpPWeKXzzbp488KDCJu7+Hjry1O6y8HR+jO8dggjwmyWk8fxPCO1A0CLyrNgy7eW0TO/jBkjwR2Z+8dyX+u/B/GD1fSJm7bL2SPAKLf7xDqcA8fK2PPG3/r7v3FoE8dbxLPFt7Sjz/NLu8LqPjOxfvAjxE46o8ZazAO3wUaDt6z7u8x25jPFcGibturwi8lHS6utULaLqcDDO8CS9rvK+IBzx82608WU2pPI6bsTyNcc68DkBTPEBZzTsl2wu8jc2uOj5vJLrlXq08IcB7PIJRSzwarlM8GI0LvDu6ET3IdJq8Wbf5PPOkabvX8xm8vPvru8iEGj3YL2S8WIgAu45KyrxIMxk8xqYGPKiB3DwQgIQ8iyzCPOl3DDt4dtY8aCoyvDFi+Drc8is6R3dWvLES07x+dJK8kweePBy7TryU/wE5SWECPGBYoTwpgt47bQF3PAtu0jzoraY8elBwOxY3PLz2Dqi8wcM7PICybTyorMk76zOuPJoQ8LzT76a75O3zPG+IODtdNce6EbQrPEBCEjywhRG7veDvvEzoMTyCeqq7irSXPGVEQrxjQn86d45MvF22o7xD5Ow7JezNuesyCT2HJJQ7rP0avKB2AzyL+su78igYO4O76Dvqsik9mH8WvMiYQjsPk2g7GiqUvHk4HzqORGy89R0jPRFmozvwGz68Y1ltOhr1erxWM508CQkvu076EjuG0Cu87xm3u1gKgDulogm8pk21vMrWJjwyGnM7/DO9PJjdLD3S2Nw72R/VPH2moDwHYQQ87B28uw5drzuQM3a67DSVPNnMFzwUo/K5yfCxuUQH9bzHGK68zAQ2PbZTJjxAJou82xCGO80i+ryD1fq7YW79vEO7tLqfn5K8ZZ4cvQEvdTyg2ko8Vcvgu8GdXzwWfQC9EM3LOzdaDL1dEIO8SyoeOndTbbzuZDO8ptxVvNk/wDyPZea8W6lZO+dJqrvUXBo83wfMvCj8+byuJHQ8RTDzu6Z2QD0u6wa8wW6wu/QCCrxi5Oy8UJQROl2xUjzp2hy8MBiFPPr7zDxScpS7yejBPAgFDD1vlj26znuPvA3alrwMXgi9A3MPPOrsvTyuf/6890D0u81DZ7wX6z48+3H2uy1WGjzFVRs7MpihPB/TzDseUxc8I3uePKXZeLzjunw7xIO9OwIygjzGk7M8n0haO1UdKj0FjOM8i10zvIytAj0YSdO8j6OPu6CwK70DI7g7jhMPPAjNGjzt+F68IPSZPHd7HT3jhJE8KB1cPEo1ZLwQtRa9cq3rvPox2Dx7HpY8UbspvelGirx7N2G87gwbPGG627zI1ua8MZNlPMNrHbvRDiw8F6vpO8UsnjzA9O44IYM6vAT8BbvhIRW9nRHmujsdCzuUJMs6JWYlPe98Urq0EFM8wRg4uzKbqTwDp345tF3KPK322jzntCy99kXSPBPLwDuXyoe8KloiPLwFHTsl4KC8TTjRvMWhCz0Rx488OGGNPCVTr7wKiAc7taNTPImzabpPMgO93fJHPV3CDrxsToE85ZORvIrqET3l/za7pFiqPDvgTjz5Qdo8dvOtvF//Rr1Fzre7nYGRvFqXXD3PWXw8VKoQvInGJzvOQV08l6MIPPEpIz1PFQu8H6AtvONIurtYSgK92MbAPJC1FLu87yS8ThMOOSwtSbwofCW9yQmMvFB2obwwJxs5WxXXvHPR4Lwnx7+8f/sePMI/m7t+bZo88KQEvZdRjrvLDPW8saRXvILp67l9L3m7fnbDPJWS9ruGsne7LSrPvNH27juBmqQ8K0VMvJiryzxirAC6dVHSu7rfGLzyrQc8jBAVvYOrnjxuWiG7z3OqvKn5+LsoPlq8A+j0uyTB0bn7bug7La5bPBd/Cjy4ghQ8yGqJvDfZ+rvOwYc890UcPIn6gzxfwwe8Vzl3PBa/HTwUhYO8gHL3O/IzhzwQzUC8P/BgvMlhwLwth6e8CbkIuzn+uDzL8Sa8wKfnPNUpRTzJDE68gFNXPBVpjjykgRg9Bv6hPE0eVLumKxS8kpcrPR4WU7mVbD68CR8pvRoXJ7tfX567euDiujAPGrw3HQo8N3eVu30pgzwBeu06EoMNPFdeDrxa5Yq8S4YrvUAc/DmFipU8vrI0PMd7AjxXvuy7Ug/svGypxTvMaCq8hXnvPBwU+jyrEZ879RLdO/P/DjwqgWm7xJwxPLIhDz0VRMS8oe+Puzv1eDwj7xE9OpLsPOSi2juMVLY85WNBPAWSx7wri1C6BV+2PJnfIr2bfnG8BwZpPD6QyTw7OcU8jouaPEe/Bjy86SQ8/SGsO5wVxTy+cjW88D7MO5yJsLystty6CSQEvLmZAL0DrrU8p2wVPHgwvzqH36C8KN4lvf5K6LtIbMa89kDuu46vZLwNlew8HH8wvPOurLwLwMY8eTo4PFbORLtbEo06f8e9vJVwW7xq2RU8gtEvu3lK+zwY7DW97C2/PHPTozr2f0K7mnheuwYvLjzXdAa8T1CJvP+jAD2/Gxm7TGn6OzJIarvmqia8ZMDYOwOKUjuf7PC8imTJvOLMnzy4Td476na0PGttLL2exwm88yUqPKOQELxbv628s3x9u95YHbzrVqy7tlw/u3N6njjy17k8dz4Auj57w7u+yAa9hq1UPEJYAj1Wznm7wSY2vexgGr0fmwy8wcSqPFNMZ7z9oEq8aQQyuuW9U7yZk0C8XCqivLWf07wemDq7hwMzPHEyLDvxGFK8xyihvEgJdLuL7Sg68cwivFcg0rsIv208IiSgPJrJvjygKYy8Cud2vDYENDtGGJ08btPfPOj94LwE/BM880ShOyQsUryfjh+9mpcLvUK1BD22lI+82pITvEzBlzyLu4s8GMWvOhtYPTyGih28SvChO+X5Bj1sU487oP3wOyIrGbyYW6q8Ns/Zu0Mj17yaU/C8gj/+vOfd8Tve8vK8TJH7vJVJWDytm1W8YlkqPeSPojvOleu8HhpBvObShTtptgy8LpfDu+awVzyyezW9xjABvUYojDuatby7udrwuyAV6rzVqdU8FWWSvJTdgTy/KcO8vMKDvK68DTv+dgK85OqCO+GqRzzNJJi8XMEEvUcPzLsHhoU7IYg0O7icGb3rddG8s+FlPT0LjDwozqM8UAuJvJt3QT2DIaC7OaxwvB4UzjzNMKO8JMqIPIAKzzuasn+8wLr5u98FLTyHtPg6lOEKPe1OnrwVpSC8Wb83PJOHzrxxmhC8hXrDumno7zyadVs8RDwXPOOi6Tsm/+U5P+ZDPd+qnTyjW6s7x6+tvPhJSrwDLQs9+MrIO4BDBL2z+fk89x+uvCtqAb1wKo86yLlivNuG3TpH7Js8iUHtu8tgjTu5Gts6TXmWO+Gyi7wzTTq8XO4aPb6cL7rmCw+9GCOTvP4gGTw0Qz28biGIPGcl9Ty0gk27778vPa12GDw08Ky8FYlsPEfqhrx9hAy9BNuiPAcZUL0QSxw7G8c9O5cHeLyV+p47OB/UO3iKu7vVw006angQPGz0oLkIsxK9QBguOpyUhbwScqC8j2JYvYau+rsrMJq8sE+WuxsOijz+7ym8pLEkvHH0pryg0jO80/zTPM1KHbsEyYg7gF+PO0bPwjr5U5U86iUDvZ81MrybuAW8/mHjvL8RqDwoFA49YtC9O9urXTiJFQq611rIuyC4tjsbHBW8g9ypPPoT1jsn/+y8PqCTuiNHg7zhKoc8jBUnvdrdgbulN3C8p4hsvLCWHz3N65a8c5VFvPGBADz6jgA7RjRXu0m/Xr1QMpU8sQKSvGRXczzIiSe8W556O3m+8ruBeuk8ECHQPLPh6jt5MqU8J/Ejvc+AyTs31VU8E1B6O7L4hTxgxRQ85YXJPPNWljtIyNs7E5jxu0Gky7x6O5c85JQEPSX8C73smrq7/CP1vFnkpruO2Ia8r6kcvLYuXbwvhIa7yy8vPBX7BjzHYic80VW3uwE6tzsqGGW8wj5VvLRXq7zt1Zi81kxnvD0WDbvE/AU8Vi6ZvG9b+zxg/jI9pZqruwFsPjsGOje7r88IPZUqKjxeWOy7hRndvGVWB7xJxGi8Y+v5OzUqQ725AIG71wdEvOxxq7rcE4I8sL23PECaNzwXMQC7cVJlvI9Kizs0JUS8lfFsu2/KrjvpOSU8r99aOkkrhbw/cli8ukQVvUuhGT1sVWc8O/6YPC7Qp7zVfb+72WfWPK1E8Tzy8qk8TFCMOTvrTLzG0Xg8XcYnvD0amTvj1Ga7fYyvPKiprjyGYga9XrbUvPf5pDxLj+Y7lJW8vCtkEr0hFkw8528TPBzJaDympYm84D+XvBNNhzxoTl08d/3QOxBW8jzfT0U8RzmbvAPWnLxE27K7/d2gO4FJozwPZaw67zY8vNKWmzyQn+W8aswNvaB1YTxj+lq8fReKvFQEszwLV0Y8PqLNvJFkCT0Buz88qT6UO5zh8jxPUts8fYVwvFOAmjv7Hr45gAckPSQUKDyAdEm85UQQvGQRpbxjZJW86E6JPJw3QbwJ3Uk8KwKvPJ8RErxv0bA6vPERvaP4+ju6bBe86AJku4mIGbxVQsG8fFx8vKelKLsv2qE6JcfrPLeO0rxThDK7z7SvPOdjDz3th348V43QPB8QmrwqBK28gBsZPJyvIbtEGvE76ivwPB2UzryXOwO8fLn0uuEvwzwyzQ49VLHzu67QBT0lf948etArvC930bqhpM28h8svvDEhajzaYKA8eNEuPGdUqrxIxrc8bcFVPC0QRjudt9w6AVm0vFHBzLyPgzo6ESW7PBTgoLzm+yO8wgOfvA5BejvfzCA7p2AVvZ/DAbyfe9w84rTeOxahibuM2Is7b/yovDPA4zwb206774QjvFDfLj1rrhG8w12uvKKJ/7wjwQo82/09u2DWA7wN3ZM7fOH3OgVHIb1DHNq8TICFuujS4jshaJG8Cv5AvMl6q7xIOHk9Cs+2vOilfjtSBfC7wOl0PHX2Y7xkbXW8J1/UPNaxID1DEdW4bXVeO05wibzSADc8XJgvu+CJpTmJ41E8RxdYO//gMjpxRBs7kYuwPMoUszuIWSy8e7zlOywhM71xpCI9bvsDvVrlVLv2Gx482oEyPcKTcjyYvJM6KFQAPGmHZTzJfMQ8tpU2PDGGQrwNbGu8Id4FPCZ7Sby+aTQ7HTeUPGpQtrxtbbS7GgDgu3UDgjxZD7u8W1fyO5UbgTxkLi26Zz1VuUykBr2FwLI7VUvmPJCJh7tR0ia89/XTvFdRBrw5wrW7fCwkPSl8xTovBns8d0fHPN3g9DosD4k8s4WvuxFGlryDM748QL1uu5ShHzuZ/Bm6Cii/vB5h+Ttz1DU7r5qRvGcxgzvgp6q7822uOzlHabwB7CO9AVqru3CPx7wnJAY8nnJEvC7mmjycYQW9q49ivEjftLvqYKa8cg8mPPuwSTkV+I48TKkjvB8yzjzdcVW8MxQkPEHPuzx47Ee853iOPMrtOztq9568Uw+sPMkqpTsQK7y7EMAKPNbHArwjJVu7+vQ2vMinxTuXVCG83eQDvIywTrz/xM+7dxH5O35eazxDwMk7hLyaO+4Ctrw10Ss85FgwvKfQ17tiESm9VgF1OwPvpDuiTQQ8wSrCu1RVvbxtqok78qQ6vA== + index: 0 + object: embedding + model: qwen3-embedding:4b + object: list + usage: + prompt_tokens: 3 + total_tokens: 3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[False].yaml b/tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[False].yaml new file mode 100644 index 00000000..d5ea4a7f --- /dev/null +++ b/tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[False].yaml @@ -0,0 +1,42 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '90' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - Batch imported body. + model: qwen3-embedding:4b + uri: http://localhost:11434/v1/embeddings + response: + headers: + content-type: + - application/json + transfer-encoding: + - chunked + parsed_body: + data: + - embedding: 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 + index: 0 + object: embedding + model: qwen3-embedding:4b + object: list + usage: + prompt_tokens: 5 + total_tokens: 5 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_client/test_import_documents_schedules_vacuum_when_enabled.yaml b/tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[True].yaml similarity index 100% rename from tests/cassettes/test_client/test_import_documents_schedules_vacuum_when_enabled.yaml rename to tests/cassettes/test_client/test_import_documents_schedules_vacuum_per_config[True].yaml diff --git a/tests/cassettes/test_rebuild/test_flush_rebuild_batch_is_a_noop_without_documents.yaml b/tests/cassettes/test_rebuild/test_flush_rebuild_batch_is_a_noop_without_documents.yaml new file mode 100644 index 00000000..624bafb2 --- /dev/null +++ b/tests/cassettes/test_rebuild/test_flush_rebuild_batch_is_a_noop_without_documents.yaml @@ -0,0 +1,42 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '77' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - keep me + model: qwen3-embedding:4b + uri: http://localhost:11434/v1/embeddings + response: + headers: + content-type: + - application/json + transfer-encoding: + - chunked + parsed_body: + data: + - embedding: CGgEuRoaljzcLDc9uQYMvQZKLLooAno9eD+NPVSGCTzJN+88Yd08O5SPazwH/8K8v6XBO45vYL0CSZs7MRbhvJNtzjtYKmA7biIvO+6Cq7u0sry8IAGpvCmfOT0/DQ29fcKFu2hZR7yCO8e8H/x0vcoYZD1ntJm7ltGsvCqLiL1nr9E8BJuuPIz6BTx0HqO8P7xgvLnGRrxkBMm8081bvDwctjyJz+S8/0nTPLMd67t9Tr681bFlvIHCpTuIVcO8szBlPECzgrzpbhQ7bjZkPBZM0zxPM9a8b1eCu81vCzpLPgU901EHvKetIb1wzn072ZoQNw9NPjyL+qS8yNymvFnAmbt3dSi9GLxuvIlZcr2jBP87I23mu33izbxhSI08Lt8tvB54LjxN2oy8kg3tvMtBHbyGOPw8siBevOLkyjynwZC8wwDJO2Y2TzzQjfQ7EsOHPF5HrTtJej85F8jmO60UB7xDTWS8XDp1PC24dry4wpM7j9mTPJTVFDxech28t0wAvHt+27yBa8+8ersOPDOvprvIRD47dfKTPER6RrwIQu+7+0LQvK7htbwIf4K7af5xuxCDITs8DoW8oWiTulAzFjoduDu8THLxvFtzc7y9cq485GiePJNGfjzaaxK8BFm4u2OWDjyP4De8vto4PPMKbTyzpgK8SGyxvKzud7wBeFO8RSqjPCPdwjyznZu8ZvOpvIOaGbxW6B66/ftVO0uhPrs1Rzu7xnCkvGIDYTxC1BC8Vmk6POhpAzxbkKe7Q2iXvCQOlbyONmG7JGovPQzmRzxAOKU7tGpvPIJcvTsoOHA7q3oAPfn5orgLTNc8UY6kvMY8uTwzp5c8koZcPED5IDy9I388SF6ZvMSKiD3dTX08oc+9O5iAp7wmwKO5iIRhvEhurruyJ346PK/svIBp0LwkQIW6HWIWveOSFDt/SKa8k7eVvDOTJbz71Mc8ynXAu0wDqDpEPy+9kdd0vG319DvSwtM7eer0u7gEpjurJ0M8YXI1PDlj8LwF/WM8yng4vOwAibyT6eC6KHhlvGmWs7zKuLE8XBkSOrznvzxJ9Do7HJPFO80ejTxsQSq6i6A5PHltL7zrTuG6ODa7vCRdRTwl18+8yprXPAp1v7y/NzW876EgvcmVezvAJuY75ZMLvc9xlrz//pc8qqEIPU8jHLyvl/g7Q6JPvLtQGDycEEu9CLWWugfFOzq0ZUs7fH+GO73MBDsbaAO8P/ioPLXWU7x5nSq8nCzfO6f2tzwS01K81NdsvH802Tsmki479VoRvI4/dLxFiBo4Jut1PG+Fi7sae8u8VsUFvL2LmbyjpL68f2bKvHKhX7w7CgA5clTBO4miybwfgpM8M7TDu23W0LwtbfC692OlurqRtDxwnQk7qX+PO9goW7wVN+27yJONvMTK+DophYq7PTicPNfQgToRRM28fraGPRPV+LtoRNI7PR1wPA1/XzvIcoy83ZYFO5xjJTt9rH88GtcqPU3+sLxUCHk7m9KcOg2uNjzedz889dbWvFvPoLw621A84/3IvE0DyTrKxKI8ilvovLoSaTvzId27d1GOPHq2Jb0b5ZY8W2yIvOCvnrs4zYa8dBMOPH1WzLvNoSy7j7SlvGiGgDvAURG78gZlPEMTlTs2zIi7UhMmvX44oby6gaC8ed0mO2YSpLuSTJe8JJ0vvXxfljwORoq6Dh7+vNXo1ryMJrq73gRXveHK3Tz6Jzi84aSHPBWLGTxXraQ8YgiTPLEaHzyHYI48qLgOPMYW6jyRFcK8pJzFugpYQrsCYG27oR/9OumIKz0wl3w79a6BPKZqYbtghLo8YizlvKDFHT2etP+8Z9ysPCUNZjzb7w68emjcvJx80byTn+48IapWvF6nRDyDTXa8FII+vFbdrjwszHK7Oj+uPO7UpTysk9K8X6/uu4Uy0bqu7PM73iGpO2X3xzuXxK679ioJvGpC1zwlmz28UcAUvaqYhTx7VlG78m01Pfwurruyxje7WKNqvCN9zbsESta8f19qu7Ydabw+wBM80GX0PH6GZrzTMSs8DPGmvNIBPTx1GUe85HTNPEnUkLyTDzS8Jc6zu7sYJjx+Qaa6h+x6PH8wBry//Rc967oPPMqowDynDlE8eYJHu6Rn4jqoIaG7QdHQvAQUSTy50ja8caiPvGGEUbuHgXg7WjUaPAwBULyFrTk8avbQPA0bEDw2aeW8AZqTvGGlkjwYmO47u60avZS2G73AhIK7uiaCvBhtsLyb34y89ZBTuv0g47shKRc8JP8AvWuzmTxnoco7mx6WvML6TjxMuoA8B+1jPPYggj1aZGM66QS1PAAp9ThUi+m8/EOyOrjworybzrU5z6nzu0txqzvHNXo8mHUYvW1OkDq6sLG8ZpKzPDnYgDyXhCi8BB+dvJu0l7x7VCQ8Ts6ru6WqtLzM6pA8ZhhmO354g7y+N6i82xhkPIeZu73GTYA6iEzrPBqUqbw/cLC8I6AEvfIkQ7vYVc68ff2VvGt4/zxHvx+9DnNZvCA/1Lu3DQE83uVkvCv+5TwxOLS8oeiOO0Mrirw4kkM81CyUPGZrpTv1A+s8ZkF2ODJwpDv7NQ09HxzpPNjiQz1h4ug5/6odu5jmAjyLVzM6B50GvKjFX7xeX4A7W+zTvCqFBD32wB29+pzROX6CcjyE63y8c5UdPO4qxDsfMDW8fLYuu1mpFT0BCJA8X7imvLo3nLygmt884izvPMFYgju3PiK8Dk5xvZj7W7sXrKo8XwqtvPbJV7whBmA8DrKfPF1UFL0gKzm8WhZOPVBX3rxko5I7NcTZPKQ4ZjwVPWK8lDrKO4e7AD1fbyM8aIAnOiOC+7y1Dxy8VLL2u+/dEDw6FSo86s0APQcrZ7y0Dua6CWYQvD1+Jjw2UJ07LShlvESDujsKDwu9Z8QavDZK+zoKpUq8brksPE/fCLxkpVQ8E+vuOrylC73BJPK7Z/IHPSqOHTwosp48JusWvDZDOLzBypq7SatBO113DTp1+oU86mfRO4Ooi7yZqxi9eWTVPKPUDLpVBFS8BwGLvHXdszx4ONA7mJewOqAFOrsk/rq7T0WBvC/QVjz/cOa8+e7KO1rm/ztiEiI9kDwaPHfWZrsYVXs8jGdpvLizDbxe6xe8LvoUPaR5DjtEKE69USycO3A8arzLTRG8zx+MOhSRG72e3bY8o/KuvMzuLDyqppO8Y2juPLZjkbyS1WC82pRxOsMeKLwh6SC8nvPXO3ez+ztzDxq90n/iOwEd3rxVM7g7s7HLO/Ur1jyYoIk8MCdjvb9psrxPAPA7482cvPIAtLhrbia9u8FmvEW9x7sSSUa8cQh5u2NpJ702iCG9BNKfuzuhk7wnRzW8vSnzOljzErze7LY8EXD3uqhFY7tYvN68qLtMvTn7xzzziO27v4SXvLqRHDyqeaI6XnMmPMPp1LwlqOs7EuEpvWLe97wT1Ue9jkXqu65kITxWn248oMfsO+GjlTxelhO7/hKhvDTUi7z1UNM8z9vfu27r5DxWRUg85+qjvCtD6buqF5e7qEFhPG1PSr3e9nA8QnI0vR4EtLvVOUk9OrORPOY/Cr3i7aw7MyaWvPA8LTwG5TQ8FP0KvcUv8jxmFyK7VycfPLeN+zt5NLY7XSUhPJzvKD2L4li889PKuqJmuDsPD3I7bNlkPHI5yTtLfrI8NGC7PBaQ87yy6LI73/kbPY0TYLrL2rm6kB2lvLr/kzxw7uC8hTXeuxqkSzwOrWO7VeLoOwGGBL1wMdQ7HegZPb07Pjzh+oE8Yr8qvFQvljzkTuk62cILvMCWLr01D606LksAO0Z7QbysQdS8gHZCu/4ZJLwb9oK8xNCAu0k1cTwIdDi9Qn1kvIgqp7zq8oY8ikrWPPMMxTvPL0s7eWWsPCEfMzzm76e67OQuPNbx+jxBqbW8ezc+POxQELy+efo88koRPAI9ODyiIlY8zhiPOx4gxLvR0Ps8TGV6u9PIHTz++WQ6IHytvAqJ7zzezPm8weeSPNXQbLrBGdU8fhOJu8n/trpai+Q84E6ru5SY9jzPC3888sYEPF/lP7w7RLa8L5gyPEqEq7ubV4G8AijxOv+3XrtHGgu8JI9WvL3dI71A5zY6uwtuPYB477x5om48EC+AOxQ1iDtGmu682B9KvRkUGz0Thla8SMjeO7BeKjtz/BU9xzcdu/IQMbxHyjy85NmWvLV92LyPMNu82pgtvLLfFD1+XxA8jFkRvAagzbxyZeA8HVjgPKQmSrwFoDC7BfHhvP6Ab7xGkg68RkMGvYymWrwNKXc9u1eiPBHYJTxobow83rmxvEfIkzzKluO64ssCPVR3PL0lj9y7/CiCPNWqQTy75Ua8mqebPBa8T7yLuT88mMQhPUfa2zwHEOc8p5sSO3Ayn7yFe0A8SPaXPH6cFDzJYr67nhaSO36nRDzy7T27jsKBPNNOlToWSHU846wCOzpVvzuETJU8wvcjvUKm1ryxiqi8pvqGvHvP3zsIfw89c1gFvb2B9jlxku47pl83vO3oRTvH93W8ii6oPMMdvDx3MaU9ca7BO+5BpjsBWRE9MmKdPHHmED0aB0i808WcOzxt67vd8wM8BrXcvNiJGLyKJQS9LEtOurorhbsRpJs7E1l8vO5QFT1xeDG9rRIXPOk53DsOBnA8EHiaug76kjy3lLK80U7yux2+Orxli447lkjrPOLFuDzAuJw79cETPVOhSzyuy5e8OHmrO8y83rspsbe7Hh4UPIpFgrykv5G6co6EPL3CmzwjLzY8FPaAPFyambz6B7W7H6YkPD8PpTq1Wcu8yH6iPDz1szzuuou8uN8KPeQExTwUDv27P7tlvAcqlbu0Nos8Jq51ukmbzLwJJhW9hNp/ucwKEDsdsmG97DohvAEPn7xRvCO8Veaxu3bg6Tvaeh49d5U/PL7vUL2k2dS8lXkxPWyPiLyxTZG8O50ivGblRb0kl8i82CvlvEl1EzyxiDg7nfeuvE9mv7yTPsK7QJelPNaxXzyGGYA8urxcvAVAqLye9+07+P9AvEfOfT3IogS8h+CUu8wq7Dx3C326tVvqPKvkwjzNT3C8WUNhu1hECL2n52c6PAmbPJg4Vby69wy8sSp+vFa59jxoCNK7op4rPDF957vR6Zi8uuhoPLEUTzyy3fI8Ab6ZPJKypbzPISG85//su8PttLzax2q8SEV8PJ6mTrycdsc7WbuYu6VTkbyyoWs8JtLWPBsSaD3Lepa8DnYSPToXCjx1uPi8aariPDiEv7y3oUI8k87gvFMLkDxUpBy7CbKjuaOOOTz027A7ypGMOxwt4DzIsmI94yJrujJ8NztPKw49ATfjO9LTb7qoR4o7QxNCPCK/Ib0Qjsa8J28CvXT7Fz18MUC8J/Z1PN9tybzwj6q8PKPnuZnvYbuciZG70I4BvfypMjwYIAA8RrdsvOFBpbz6K4I8atOmuwLsqzzBxp46W/IhOudBAj0WGhK9YokJPVrjDDwBbgy9LagyPKcijDzXwsw7jp3XvAwlhzzLHpo8A1YOPB1Nkzu4GRU8JtsaOeCAEb2lthi8+cCeO/jv+bszaN+8tPuOPNrAIjuZShs9GHRGPHfgLrvCyhk8T+OfvPS8Jj19Xyu8EQQ8u7WwmrzcLL88Crg2PKCP8jtCFLk8aj3SPIzzBD1dr3K8rsPuu3Xu6rxedCI8sI9ru8MdfDr37ou7ERPTvPiF3bvGwNK8l7v5POw2nLwARSO8dpGIOouqjDy7PFe86abSvM5aNTuyIBm9fRYHvQdmODsM2ma7+Zz3u1F9ATx4gS286B8cPHcLtDyi1VO8VYaMPA8bPz1IcJ67DBmgu4NXPLxkf349IZKBvJot7zrNH6W8w29FvDlkpDtvW+e73+HgO2wMmTtwaBA7DuEtu/HVprzRYJW8hXfbPH7R3jvLV948t74EvfANvTsMVny8YJZRPCMkdjvWf1a8HApeu738obw0Eo+8scT+O5oOUTxqbok7W8aLvK4jiDzD2A28N6Ymu4FuGz39wUU8HSkNveIYJ7xfG8u8CtbCPH3xNjwEEAS82cVtPURosLlpu+W8gpWkugmBHz24XIq6W9o4vGu+wTyM1tm62EadvMM5vLl36TE9WJ5NvAzX9jzv4t87QjHJurZCG70C+JO8oKK4vJ7dTzoH1vk7XE7ju19zsTwNzLw8nNiXvBuVnzxm95o7X2xXO0ogKLwn0o87APUTvfLoTTxXMZ+8Zzm2vP+yG7yBfku8fVLNvF2MDb1uVMk8AQVYO46xoDxEd5Y83Re9PCPaEDzAp8I7cV0IvRBchjwciAe8UAP4PO/hxLoz/RS9YUUAPBb0tzy6q/A68mCtvO6Qd7xOuLk8BxuzvD1cXDx7SgM8KrjYO2vEzrtu8qK5zSSWvKuskDsGdOS8g4eYuoJ5Gb3OZqU86OfcvA5KRTyqdIk82SKTvAKY6Tykc1Y8r0RVPVpgxDt5o1c8d+9rPOoAHj0oJLy8GuaIvLqunTsZB1+7anq4PHC5kTs7C3+8ZuYfPF1o87p2eRa97rGoO9vVUrr8m3S7u3iPPKK5Q7wl08O8ZUAvO+59hruAOQ67MT0kPca+FL3ylYo8t68RvUvRMrzBV6A8dBiFPF+GFTy9SnA8ik4HO8/Jkjwktjw961rBPF+wPLye+bo8jg+auhq897waPwC9Wz4AuqrrOr2HHga9Bi89u1/vsTuKHUg8qYjjugav8DsMTKg8LKXNvAwgh7ynL428fGXgvFeDhDy3HhI83fniO3mNszv0x8W7x5ydvJgoND1uPSA93S8FvT8K5jw6V+u8A6qju2XpELzqvF+9nZ0wuslSg7x1heO8y2pHPEe45Ltms867i2YEutkcr7zUSxu69/EXPV8rlLvsbUi9TDmFPN6/ZDvQjhy9Vrf9vK1T5ztl7Fu89P66PL+lMrxy1SK8DL/wvH1UMbxPdpK8ird+PJbZsbyrjh08s+gXvTzvCDynN5E8aZoMvYx/0TrLL0Q8i0IcvEiwxrtidbQ7QfDoPILEf7w/1Re8sRCDvNRbK7wsesO7fA6tvI4Y5bvVSNy6LB2AO5vSYjzY4u66ipSkuZ/kLruUXaI7VxRVvA1KorxxNdI8EUGKOyr08DuwwaI8wNfku3KOED3q1F484S+nPBZzPb3eM1q8sh/bvKyg1jvyi5Y79eoQObtqijvMQSi94v0KPfxsVzx9cDu9fSs9vB3bEbsEZj48DwfYPIU0HLxAk+M8CYHvPE8Wt7uVeeM7ATtFPIzekzwUNrO86UoMPXcHVDt0hDu8utAnPMH8mbsudZk8LC6dOxynu7shju47/BOuPLK0A72zj6K8zUcBPdv0ojzQ5NW8c+1uvA+DNL3fyG68wamWu1LtMLxtPUq7/0Ksu7xLrDwyHBM9XxWmvEyMjTtL7/a7Vm+pPEscJTsPKJC8ea86PMowDD33kok8wuL3vMeWRT1X/JC8gFfCu1j8ozxdALw8s2GCPKq4Gb0Nmkk8dvybuzE8Ujup0AM9oqeDOw0EAb1YPOO86rYEOmovWz2+ova8BkZ9vFbaQDyPwEG8V1Z6O4EO37zfYnM84l97PNWq2Tw9Yws8eJP0O5jlFzp1nbW7ffEevH+gszx/Vqi8YgB4u/OEIbjocwk6/t+CvPW2p7xBQrE7u+v+O8qtzjuUQIE8Xe30uu2VRj3fo9w69YvEvJcpZbz8gNQ7X49bO3Ix6rzxYlu72biYvMxCpLuJYmE7Z/2Yu7DiY7tBQp276cJXPJO4sroheZa7vUqiu+/alDqk6rW8NwSgPD7bprsPXhs8VnxHPPjr9rxMmEU8X0YnPZE2CL1r9x68sAnUvKQ/D7uAQBK9JZ+cuwLunDztMpW8tmSyvBN7G70VZvI81P+cPOS3X7w+or881QsTvWxjgrww0p+61Di5uT1GkDy3iie9OY3Zu0AHrLt/RE275uAZPexbojw0lCU8xWzRuz7J9jvUshW8GHyePBvdlbvPlW67gp+mvNiMRToU4Qa99e68PCqq7jspHHm5i32PO+tKcTy3c6S8JdOxO5LHeLtEYQY9NIOPPGRgALx/HZ27oESmPAqqEruUaag8k8iRPFzoWDw0SMu69fKPvNLYhzwXvOY7hGQTvV0dgDs0c7k6XLDhO1ahtjj3PfA7EcMWPU+TQDxOksg8Gp7APJ0fNrvsi2E80or2u0TrNzpJjag8EbeRu0j34bwXMOM8m89EPHYxDbvUAgq7yTpNOe8CEjzVj488boo8vOANqbtxZpc8gDaNPJF7ELw61F28X77luxAFlDw3MuE8PjfYvAONQT1cMzY9uJQevJfKZ7taX488Bcd2PFWmgT3qtbq8fGwEPSWSTTyXBA285nnIvD9uwDwx2O67MKenO4T5OL38tvI7OCBoPNBrGj3Gpfq8Kn3ZO48BGT0fNgk6D6qcvADGPTyDDSw90TQwvIrkfLxkL0i8s0WTPABMMztkBmg8C45yPEdpkzxKtTO8O91ZvET1CjzsTsE8qABovCQkDTvKsTc7NZCiuw2twTxN7Dk8B9yZPHPcWrw2w1a8PEp3PAshBj0Nyg+8xQm2Ox2F2Ds7wLq8ply3vL8wKbwNNlY8drfIu2LRfDwIRFA8957vOzlcjLwgvcW8UV+YPBEpm7tviE48b4OLPNDmiTvpyZO8aO0dvHSozzxiBz09821Uuz9UcTzRsj48gTpJOwsWoTzHOFU8kg7gu3m8lTtS1Re8QTlavCHZJr0iBi09/GUpPNoq7Lxpszy7U+azvL1whDxrQfO8rdJIu/LkLLyK3GQ6a2+5PPMCqTxebra6jULtPC8hyjtV7wG4M16OvIkhLTwuBm25lcQBOgzBlbo+0O2896iLvFGSxrvQmQe9rxNCPZqn/jz+biq8uXjYu5Uk+TvttpE8af0svNlnrLuVGnI82nRYvI7TdTyptCA9DoKbvGPzwby6v7W8PfeTPC6v+by7pqu8EExjuszenrwH0tS7IFRpPDMroTqIbwq9gQPIPLu3szsSApc7kBc+PNmTIzw7GU+8WSdMvBSH9DzlPDS8ZqWpPKYQ6Ds8/8+8m0hHu0voGzzqAOu8jalPO1OXZDz5BuC8Sx+NPJogNzyAgPq80e9KvBRK/rz3vEc8+xp0PC2oRjyYToS7Cd2pvJkAKjvelQ88sk8KvDSRvTxenTc7FDldPMcpFjxfc+U8rv3HvHd+ero8yCI7zPkMvEMuMT0yAIA8jd7DPKtEJj1Bw4K6py2YO9bNxjzM0CW9ZjECO6W/rrxE8Qk8oAeju5HpRbuJ8Wk6gkPou4NC/TzHbLu70GSYPHqmMzzKrPM70RipvFq2ADwMABM8VbPmOinnkLw8zOk8MbK3vI45q7xczcO8sjLHPCPG6ztmkuw6/yMLPCFXyTy90jU8gOc8vHmalbxGGou8CqBEvG5Ro7uMxu+82tvUPL0l+ztzjIS8d6EMvN7LAD2FZi47aLcSPV/uujz4InA8Z2UTOmJVhjzHQgW9c8cFu0rldbxqiZI8c65NvO0TNjpV2Ss8CNPAPDfSXbzvOOc5aOruPHs8lbzxyai8STT5O0hrZDvIRwK8Am8DuxlwBjxGMMG8QgEBPGheubz+79M8Sa06u9NTl7zMLTq7zuJGu3fVCT1T0hA9qybTO635TbyZIdo8cYJ7vNGUHT0PlUE8nSx7vJ5lMjkAxzM8gTjFOwv2l7vQrrw8vcqIOy6j8jqrHse7AdVTPFgkyLtj8Wo8EP4pvZFnuLwMu8A7/7rzuvkTk7wqpOA74P7xvGg+F7svpvi8v/mbvBKeED2k+4u757QIOzkaMb0+Fug8b3K9vLAeJDzxubc7BqhqvD5vfjylgUe6Mg7Mu3AvK72gRYc7cBvDvBkvkbpKzAC8V6nAvC/rvrwhW+s7Fv5OO32UCbzYX4i8qHK4OlCtujwIHsg7uwEuvM3cA71Ov/e7fQiDO0lHSjsr+Qy7JWONPNmriDwQpwG9nTSSO8s0Njybs1m8qd44vNs62Lxe1DY6A6oTPFilzjyYTQA9VoMIPI2db7wtf6e708K9PEgvmDwtYZM8vqGePNlkvDpjW0w8R80NPR59eDyGqc68keHwvNnuFD24sUw8CrWbu0HEbjwAJPM7KR0JPFFtHT3Z2Am8T34hPOoIj7y5BiK9cCCpvBy3vDvffWI8U5BZvMEVjbygRrm87f+tvF5Ujjvv7vm83+2QPOfpiDw5jn+7dq6wOoqOXj2e1Kk8b3axPF/wjDy8stm7aC29vBHUljxlfZg7nH0NPPk2Ljs3eDI8A9QCO4xOs7xRuzy775bBPFPRyDoF/As6mUGdPJzu/TvUV5C7uN/YPHOyTDzdw7w8hvq6O5yOULufyma88yjHPCBbsbx3Yxg8ZAsFPN7FjrxHB4E79YBWPMGkyTw90Ou874JBvGGI4ryoigi8RBlTPHryXzq+px49cgK9u67yobt6Vp48VbSPPBGPADyA5om8bzJDvWsoWL3tQGy8lB4qvMYqDD2BZ0S8PiAXPJP7Y7son0+7hK9DvK0exbrDtFS7vR4tu8HFkzxLHAG93hVrutK347tr6pC9Ij6oPAj4ZDsKPhc72zlaPPBFWTwv7QQ9UYeJOwZMuby2QJi7rvUWPamxhbxliIK7bn1ovLEZRDyZLHI97jAWOxj8qTzAIBc9R/5IPHtvIjzMGnu8RPXHO3Sn5jyWZKs7frF3vNZPxLwk9xK8hbIMvRHwKryt1QW87nDSvOPVC70hh747wFS/vP+e0bwh+iy8b5TTPNDiB7z0vU+8CJBSO8Br1bz6oi87BvYBPH1zUbyVumI8LATpu8vKFjyLYQi91mQlPGdqXLo1Obk82w51PC7DUbx9cDu7ZoXVPDsNLryV5he9HjUEvNbx4jvgI8W74lZUvDJQ5bvA3Ps7gDk7PbWCYrtA4YS8mJWuPOUDIbzouDo8Hx8sO2EwVbwRGAA9KlIpvAlkfbrcpxm89/nyvIncAz2jrK07Vdl1u16oAj2ZnTK9qGhpPBPFAz1J31C93ILwOpmlgLpH6I48EqCBvFPn5DpYcDi8Z7NOvU/pm7ygv4+8n9yKvHtwTbwtAUE84tOYvBhI67tZqa260HhmvHfiljzqAkq7SgwcvCZ1BD1p73u8/uSQvE0Oezyeomu8QUyQvK4EEb3PUK650td/PNqT7jzHVcg88WQMPVHkujz4Q927dxePO7lUC7z+9FK847ibPPDmRTw1JdE7VhwWu+NpBjqMC+I7kB4ePadze7wWs0a8LHHFO00drryfTa+8hZ1AOxC6lTxXXlc7w5wFu/Z8Oby2cwm96QWRO+pgBzzsLoQ84Vc8vMAyCrwuuXA795HQO0cifLwd5mC7xD+nuzuX37zcb3G8dLtsvIUUg7yOUGE8bW3GvNI3uzzXY6i8oLCfu9ffxjsMIvI7EgpUOyneGrs+8OO88iGPO2jdXTwtBKQ8ExabvPAXnDyFbIs784qoPJqlJD0hSg07su8QPfdGx7w7i3g6PDmPOlt0Ar0jnWU8UeV+PClABb3W2w68l67wu+8HjrxfXVS7YQuzvDL1IbqcEQk7iD+DvDd9OL1kVma8Pv+SvP486bwrhx28osO7PBS/7Dx9b/i8IYKJvJIgArw6N4A8u5zXuywjMjyBcFm8+TWGPNsNH71iNLs8GvNyPPHmNrx+N8a8PD2vuv1rLz2gduw7SU63uirGv7wDCco7pVMSve2wCTwjsVU8XtECOyrNULpkoQe9/ke+PF/ny7w/yWA7WZB4vLaSFT1FO+a8sJLBvFyQ1TzI+3m8wbm8uzjTbbztdny8Jeleu5FpqLzcJgM9+CfzvCKP3TuH/3s8v4SuvPXVVrwTcwg8W73+PGzetLs1F/I7ChY0vMuPqbuySbg7gNZlvFEi/TzMBn68I8+qPK9nxDsFZWM8W+PDuOaB7rwlGQg9FVsrPKsDqrxnJoI86E2pOt8O4DuMhrG7kfIBvfyeTL1guO47+LJ3OoL2yjw/mT282CIkPGIWxjufunO840ImvedKrLyww3u87lYgOj0DNrwpXos8DQe3vAMnTDwCkHI7OonAvHckEDso01I7cJOqPLGGhzwz5Ei8wHiMuvv1YbwEw627AnO2OxdUzbxqd0G8CnvYuwylRr1jadw8KC8MOlLSujwMvPe8vtZhvD6uxTxQCsq6OIKXO4NSGrvyZBS8gyCXOwhv4roftAu9H0cHvS8sk7y84BQ4BdSvPJcDqjoHG4E8N7DZPPWS+TyHLCA95gd/u1RWqruQVyE8xXhGvJ8XmTxw3ne76p20PGx3jzwaxmE8WdBtuZnc0zwhyEu8XS6QvOsclrwRw5M8nu4cOil4tjyXpou7KlIVvbVh17ykSsE7oyqRvI6r6zy/wPY82GiDvAkC+bw1Exu8GNDIPKOFqjoXVIu82Gu3uwWrQjxOhVe7Hqe+vHQqD7ueGye8edrmvCDiEzlIoAA8102CvKkBpDxZ9DI8uWI4vIwZCj37E0E88MsNu0vEqTwWRgi99WAAu7vQKjxQKGK7TY4Jva3H4LtkXjC9r3clOyC0lzuYd9i8VPS6PNBRETwAhC+8FWxSvC+oUzyAGUC8T7zRO5RMx7vgfuq82Cmlu3ePCzwzmH88GXWmPJtqt7tAwsW8lkOOPImbGDwziIA7I2esvLFRBzmjLg+92zaSPDgcxrx3Cte7k+bOPDM84bsYqbg87zIMPB6vxrrodyk9qWwWPSbqgTu9jAW6IP6ivCR5U7xgA+684LLSu9JlqLsgkaI8d7lJvDNAlzzOgSI9DIwDPa/QFjyh/Ag8P2AnvLYdDDxCaDo8KGncPIjpEbxCiek7L+joO6K7dLyPdNe5rIcZvNb9Mrwna9Q7FhOfvHuPqrtOKK+7BhKBvGcGUryVQrm7nRcwOggsBD1MIzw8UzHYvMe+u7xKVOS8Jk28PCOqUjoXSbQ83GWPvA5J/bzSCCe8OWijO2KAfzwnFDC6rQ5APDz6cby2qhk9XyYlvJXQCzyW1zA8YuHDPJE7h7utwRC8g4G+PLXSHLvEMXe8pLVDO+OtcjsHFSY8IP2xujfaVzsNWXc7VVWhPPvb1jwpbhM8OUG4uiUBgjwc8lg75zw2PNnPmbzpTwE9qCBovCLjvzy29xu8alYiPC8IRrtBu788cHTRPL8zY7n6kVq7J+W0PDY0uLzzCmG85cpJPOz7A7sMeEg8a94CPKK2mLwnxJa8gtNGvFfNPTweLcg7oEZQPH/xwjzqWjc6pV35POrt07sHJ7w8HtKfO1lY5LyY2Zk8bs+mvLrtWbwr3Hm7kqEIPE1y8jsO2pg8U75cPPqJsTxDthk7jnAjvH6HP7w7w+m65S/tu9MTbTwdIhQ87pPzu/WhhDs5r0G84r5tu5s80bwM73y8tXyfu7lFVbysD4A6cK2Juy7vLLwF0iI8g6TuvDm5nTvgBUW6jPv5uxBeHjvAqgK9i18Ou5m+WLsa/Ao8sXQmu7VAMLyGd3U8DctcPOqlS7yoeV88Tfv7O/V0HLsYepO7tXkUPMXITLxGRkk8XaaRPFL4E7t9agI8ILNrPHm5PryKQ6G7fFzLOj9z8LvpAJc8ifo8O+FUebx29ko83aIyvP1gAjyMLfI76MkCvMyqRLwySBu7eTP3uxd3ojnJOyu8U89nvNIul7sY1iw8sGl2PA== + index: 0 + object: embedding + model: qwen3-embedding:4b + object: list + usage: + prompt_tokens: 3 + total_tokens: 3 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/ingester/test_fs_source.py b/tests/ingester/test_fs_source.py index 105b698b..55b4fc17 100644 --- a/tests/ingester/test_fs_source.py +++ b/tests/ingester/test_fs_source.py @@ -338,6 +338,11 @@ async def test_fetch_rejects_foreign_scheme(tmp_path): so the unsupported-scheme path must be handled there too.""" src = FSSource(root=tmp_path, supported_extensions=[".md"], source_id="local") + # A same-named file under the root exists, so a scheme-blind implementation + # would happily resolve it — None/raise here really is the scheme check. + (tmp_path / "key.md").write_text("local copy") + assert await src.head((tmp_path / "key.md").as_uri()) is not None + with pytest.raises(UnsupportedSourceError): await src.fetch("s3://bucket/key.md") diff --git a/tests/ingester/test_webdav_source.py b/tests/ingester/test_webdav_source.py index 1da7e450..8659c017 100644 --- a/tests/ingester/test_webdav_source.py +++ b/tests/ingester/test_webdav_source.py @@ -713,19 +713,16 @@ async def test_head_returns_none_for_empty_multistatus(): assert await src.head("https://nc.example.com/dav/a.md") is None -@pytest.mark.asyncio -async def test_entry_with_status_but_no_prop_has_no_revision(): - """A 200 propstat carrying no still yields an entry, without a revision.""" +def test_entry_with_status_but_no_prop_has_no_revision(): + """A 200 propstat carrying no still yields an entry, without a + revision — distinct from the malformed bodies that yield no entry at all.""" + from haiku.rag.ingester.sources.webdav import _parse_multistatus - def handler(request: httpx.Request) -> httpx.Response: - return httpx.Response(207, content=_raw_multistatus(_STATUS_WITHOUT_PROP)) + entries = _parse_multistatus(_raw_multistatus(_STATUS_WITHOUT_PROP)) - src = WebDAVSource( - source_id="nc", - base_url="https://nc.example.com/dav/", - transport=_transport(handler), - ) - assert await src.head("https://nc.example.com/dav/a.md") is None + assert len(entries) == 1 + assert entries[0].revision is None + assert _parse_multistatus(_raw_multistatus(_NO_HREF)) == [] @pytest.mark.asyncio diff --git a/tests/sandbox/test_sandbox_toc.py b/tests/sandbox/test_sandbox_toc.py index 10ae264a..e76fbc7b 100644 --- a/tests/sandbox/test_sandbox_toc.py +++ b/tests/sandbox/test_sandbox_toc.py @@ -380,9 +380,20 @@ class TestVfsReadPaths: sandbox = Sandbox(temp_db_path, AppConfig(), AnalysisContext()) - content = await _read_vfs_text(sandbox, f"/documents/{doc_id}/content.txt") + # Build the VFS first, then change the stored content. A lazy + # CallbackFile reads through at access time and sees the new body; + # an eager MemoryFile mount would have captured the old one. + vfs = await sandbox._build_vfs() + sandbox._loop = asyncio.get_running_loop() - assert content == "the stored body" + async with HaikuRAG(temp_db_path, create=False) as client: + await client.update_document(doc_id, content="the rewritten body") + + content = await asyncio.to_thread( + vfs.path_read_text, PurePosixPath(f"/documents/{doc_id}/content.txt") + ) + + assert content == "the rewritten body" async def test_document_files_are_read_only(self, temp_db_path): async with HaikuRAG(temp_db_path, create=True) as client: diff --git a/tests/store/test_restore.py b/tests/store/test_restore.py index ab1460b9..b7e0d295 100644 --- a/tests/store/test_restore.py +++ b/tests/store/test_restore.py @@ -427,5 +427,7 @@ async def test_wait_protected_reraises_when_recovery_itself_is_cancelled(): outer = asyncio.create_task(_wait_protected(self_cancelling_recovery())) + # Bounded: without the re-raise the retry loop spins forever on an + # already-cancelled task, and the timeout turns that into a clean failure. with pytest.raises(asyncio.CancelledError): - await outer + await asyncio.wait_for(outer, timeout=5) diff --git a/tests/test_chunk.py b/tests/test_chunk.py index 288371e8..5fe774f3 100644 --- a/tests/test_chunk.py +++ b/tests/test_chunk.py @@ -457,12 +457,14 @@ async def test_ensure_fts_index_warns_on_failure(temp_db_path): @pytest.mark.vcr() -async def test_chunk_repository_get_by_id_and_list_all_pagination(temp_db_path): +async def test_chunk_repository_get_by_id_and_list_all_pagination( + qa_corpus: list[dict[str, str]], temp_db_path +): """get_by_id resolves a stored chunk; list_all honours limit and offset.""" async with HaikuRAG(db_path=temp_db_path, config=Config, create=True) as client: - doc = await client.create_document( - content="First paragraph.\n\nSecond paragraph.\n\nThird paragraph." - ) + # A corpus document is long enough to chunk more than once, which is + # what makes the offset assertion below meaningful. + doc = await client.create_document(content=qa_corpus[0]["document_extracted"]) assert doc.id is not None stored = await client.chunk_repository.get_by_document_id(doc.id) @@ -482,18 +484,23 @@ async def test_chunk_repository_get_by_id_and_list_all_pagination(temp_db_path): assert len(first) == 1 assert first[0].id == everything[0].id - # offset is applied even when it selects the whole set - assert len(await client.chunk_repository.list_all(offset=0)) == len(everything) + # Fail loudly if the fixture stops producing enough chunks to page. + assert len(everything) >= 2 - if len(everything) > 1: - second = await client.chunk_repository.list_all(limit=1, offset=1) - assert len(second) == 1 - assert second[0].id == everything[1].id + second = await client.chunk_repository.list_all(limit=1, offset=1) + assert len(second) == 1 + assert second[0].id == everything[1].id +@pytest.mark.vcr() async def test_chunk_search_returns_empty_for_blank_query(temp_db_path): - """A blank query with no precomputed vector has nothing to search for.""" + """A blank query with no precomputed vector short-circuits before searching.""" async with HaikuRAG(db_path=temp_db_path, config=Config, create=True) as client: + await client.create_document(content="Searchable body about elections.") + + # Positive control: the corpus is non-empty, so [] is a real decision + # rather than the answer to every query. + assert await client.chunk_repository.search("elections") assert await client.chunk_repository.search(" ") == [] diff --git a/tests/test_chunker.py b/tests/test_chunker.py index 97b0514c..c39f5831 100644 --- a/tests/test_chunker.py +++ b/tests/test_chunker.py @@ -862,7 +862,10 @@ class TestDoclingServeChunkerRefResolution: return [ { "raw_text": "body", - "doc_items": [{"self_ref": "#/texts/0", "label": "paragraph"}], + # A label the document does NOT carry, so the assertion + # proves the dict's own label was used rather than a + # lookup against the document. + "doc_items": [{"self_ref": "#/texts/0", "label": "caption"}], } ] @@ -872,4 +875,4 @@ class TestDoclingServeChunkerRefResolution: assert len(chunks) == 1 assert chunks[0].metadata["doc_item_refs"] == ["#/texts/0"] - assert chunks[0].metadata["labels"] == ["paragraph"] + assert chunks[0].metadata["labels"] == ["caption"] diff --git a/tests/test_client.py b/tests/test_client.py index 7a94b1fa..48de4ad5 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,3 +1,4 @@ +import asyncio import json import tempfile import threading @@ -2521,32 +2522,40 @@ async def test_visualize_chunk_falls_back_when_expansion_drops_refs(temp_db_path @pytest.mark.vcr() -async def test_import_documents_schedules_vacuum_when_enabled(temp_db_path): - """A batch import with auto_vacuum on queues a background vacuum.""" +@pytest.mark.parametrize("auto_vacuum", [True, False]) +async def test_import_documents_schedules_vacuum_per_config(temp_db_path, auto_vacuum): + """A batch import runs a background vacuum only when auto_vacuum is on.""" from haiku.rag.config import AppConfig config = AppConfig() - config.storage.auto_vacuum = True + config.storage.auto_vacuum = auto_vacuum async with HaikuRAG(temp_db_path, config=config, create=True) as client: docling_doc = await client.convert("Batch imported body.") chunks = await client.chunk(docling_doc) - await client.import_documents( - [ - DocumentImport( - docling_document=docling_doc, - chunks=chunks, - uri="test://batch-vacuum", - ) - ] - ) - assert client._vacuum_tasks + # Spy rather than inspecting _vacuum_tasks: the scheduling code + # discards each task on completion, so the set races to empty. The + # spy's count does not race, and draining the scheduled task keeps + # the assertion deterministic without pulling in the close-time pass. + with patch.object(client.store, "vacuum", new=AsyncMock()) as vacuum: + await client.import_documents( + [ + DocumentImport( + docling_document=docling_doc, + chunks=chunks, + uri="test://batch-vacuum", + ) + ] + ) + await asyncio.gather(*client._vacuum_tasks) + + assert vacuum.await_count == (1 if auto_vacuum else 0) @pytest.mark.vcr() async def test_reingesting_a_source_applies_an_explicit_title(temp_db_path): - """Re-adding an unchanged source with a new title updates just the title.""" + """Re-adding a changed source with a title updates both, in place.""" async with HaikuRAG(temp_db_path, create=True) as client: with tempfile.TemporaryDirectory() as temp_dir: source = Path(temp_dir) / "retitled.txt" @@ -2563,6 +2572,7 @@ async def test_reingesting_a_source_applies_an_explicit_title(temp_db_path): assert not isinstance(second, list) assert second.id == first.id assert second.title == "Explicit Title" + assert second.content == "changed content" async def test_update_document_rejects_unknown_id(temp_db_path): diff --git a/tests/test_config.py b/tests/test_config.py index c848beb4..21a07fc6 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -540,4 +540,4 @@ def test_load_default_config_falls_back_to_builtin_defaults(monkeypatch): config = _load_default_config() - assert config.environment == AppConfig().environment + assert config.model_dump() == AppConfig().model_dump() diff --git a/tests/test_context.py b/tests/test_context.py index dd5f1cc8..d99a70a9 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -1466,7 +1466,13 @@ class TestExpandWithItemsWindowEdges: rag.document_item_repository, doc.id, [resolvable, unmatched], 5000 ) - assert "untouched" in [r.content for r in expanded] + assert len(expanded) == 2 + by_content = {r.content for r in expanded} + # The unmatched result is passed through byte-for-byte... + assert "untouched" in by_content + # ...while the resolvable one actually grew to its neighbours. + grew = next(c for c in by_content if c != "untouched") + assert "paragraph 0" in grew and "paragraph 1" in grew def test_build_result_skips_positions_with_no_item(): diff --git a/tests/test_database_autocreate.py b/tests/test_database_autocreate.py index f7a0b63f..cb2759ab 100644 --- a/tests/test_database_autocreate.py +++ b/tests/test_database_autocreate.py @@ -45,8 +45,7 @@ async def test_operations_work_after_database_created(tmp_path): assert doc.content == "Test content" -@pytest.mark.asyncio -async def test_default_db_path_comes_from_storage_data_dir(tmp_path): +def test_default_db_path_comes_from_storage_data_dir(tmp_path): """Omitting db_path places the database under the configured data dir.""" from haiku.rag.client import HaikuRAG from haiku.rag.config import AppConfig @@ -62,7 +61,12 @@ async def test_default_db_path_comes_from_storage_data_dir(tmp_path): @pytest.mark.asyncio async def test_vacuum_is_callable_on_the_client(temp_db_path): """The public vacuum() delegates to the store.""" + from unittest.mock import AsyncMock, patch + from haiku.rag.client import HaikuRAG async with HaikuRAG(temp_db_path, create=True) as client: - await client.vacuum() + with patch.object(client.store, "vacuum", new=AsyncMock()) as store_vacuum: + await client.vacuum() + + store_vacuum.assert_awaited_once() diff --git a/tests/test_embedder_config.py b/tests/test_embedder_config.py index ce7561ff..8d21257b 100644 --- a/tests/test_embedder_config.py +++ b/tests/test_embedder_config.py @@ -160,8 +160,8 @@ def test_vector_dim_property_reports_configured_dimension(): "provider,env_var", [("voyageai", "VOYAGE_API_KEY"), ("cohere", "CO_API_KEY")], ) -def test_saas_providers_build_offline(monkeypatch, provider, env_var): - """Construction only wires the SDK; no request is made.""" +def test_saas_providers_are_wired_without_a_request(monkeypatch, provider, env_var): + """Construction wires the SDK and reports the configured dimension.""" monkeypatch.setenv(env_var, "test-key") config = AppConfig( embeddings=EmbeddingsConfig( @@ -174,6 +174,9 @@ def test_saas_providers_build_offline(monkeypatch, provider, env_var): embedder = get_embedder(config) assert embedder.vector_dim == 1024 + assert embedder.supports_images is False + # The provider and model reach the underlying pydantic-ai embedder. + assert embedder._embedder._model == f"{provider}:some-model" # ty: ignore[unresolved-attribute] def test_cohere_floats_rejects_missing_embeddings(): diff --git a/tests/test_lancedb_connection.py b/tests/test_lancedb_connection.py index c601a2c5..8e624250 100644 --- a/tests/test_lancedb_connection.py +++ b/tests/test_lancedb_connection.py @@ -344,6 +344,11 @@ class TestVectorIndexCreation: @pytest.mark.asyncio async def test_index_failure_is_warned_not_raised(self, temp_db_path): + import logging + + from haiku.rag.store import engine as engine_module + from tests.conftest import capture_logs + async with Store(temp_db_path, create=True) as store: await self._seed_chunks(store, 256) @@ -351,8 +356,10 @@ class TestVectorIndexCreation: raise RuntimeError("index build failed") with patch.object(store.chunks_table, "create_index", boom): - await store._ensure_vector_index() + with capture_logs(engine_module.logger, logging.WARNING) as records: + await store._ensure_vector_index() + assert any("index build failed" in r.getMessage() for r in records) indexes = await store.chunks_table.list_indices() assert not any("vector" in idx.columns for idx in indexes) @@ -378,10 +385,13 @@ class TestStoreMiscellany: @pytest.mark.asyncio async def test_vacuum_skips_when_already_running(self, temp_db_path): + import asyncio + async with Store(temp_db_path, create=True) as store: async with store._vacuum_lock: - # Returns immediately rather than blocking on the held lock. - await store.vacuum() + # Bounded: a regression here blocks on the held lock, and the + # timeout turns that deadlock into a clean failure. + await asyncio.wait_for(store.vacuum(), timeout=5) @pytest.mark.asyncio async def test_history_rejects_unknown_table(self, temp_db_path): diff --git a/tests/test_rebuild.py b/tests/test_rebuild.py index e8514b17..f76c5592 100644 --- a/tests/test_rebuild.py +++ b/tests/test_rebuild.py @@ -1071,18 +1071,38 @@ async def test_rebuild_blocks_tag_operations(temp_db_path, monkeypatch): assert set(await client.store.list_tags()) == {"post-rebuild"} +def _count_flushes(monkeypatch, rebuild_module) -> list[int]: + """Record the size of every batch handed to _flush_rebuild_batch.""" + real = rebuild_module._flush_rebuild_batch + sizes: list[int] = [] + + async def spy(client, documents, chunks): + sizes.append(len(documents)) + return await real(client, documents, chunks) + + monkeypatch.setattr(rebuild_module, "_flush_rebuild_batch", spy) + return sizes + + # --- unit-level rebuild helpers (no embedder involved) --- +@pytest.mark.vcr() async def test_flush_rebuild_batch_is_a_noop_without_documents(temp_db_path): from haiku.rag.client.rebuild import _flush_rebuild_batch async with HaikuRAG(temp_db_path, create=True) as client: + # A populated table makes "unchanged" distinguishable from "wiped". + existing = await client.create_document(content="keep me") before = await client.store.documents_table.count_rows() + assert before == 1 await _flush_rebuild_batch(client, [], []) assert await client.store.documents_table.count_rows() == before + after = await client.get_document_by_id(existing.id) + assert after is not None + assert after.updated_at == existing.updated_at async def test_mark_phase1_complete_is_idempotent(temp_db_path): @@ -1130,8 +1150,16 @@ async def test_hydrate_skips_documents_deleted_mid_rebuild(temp_db_path): assert [doc async for doc in _hydrate(client, [stored])] == [] -async def test_apply_descriptions_skips_pictures_without_text(): - """A picture whose generated description is empty is left untouched.""" +@pytest.mark.parametrize( + "description,expected_text", + [("", None), ("a red square", "a red square")], + ids=["empty_skipped", "populated_applied"], +) +async def test_apply_descriptions_writes_only_non_empty_text( + description, expected_text +): + """An empty generated description leaves the picture untouched; a real one + is written through to the picture meta.""" from haiku.rag.client.rebuild import _apply_descriptions_sync from haiku.rag.store.models.document import Document from tests.store.test_document_items import _docling_doc_with_picture @@ -1140,9 +1168,13 @@ async def test_apply_descriptions_skips_pictures_without_text(): ref = docling_doc.pictures[0].self_ref document = Document(content="x", uri="test://doc") - _apply_descriptions_sync(docling_doc, document, {ref: ""}) + _apply_descriptions_sync(docling_doc, document, {ref: description}) - assert docling_doc.pictures[0].meta is None + meta = docling_doc.pictures[0].meta + actual = getattr(getattr(meta, "description", None), "text", None) if meta else None + assert actual == expected_text + # The blob is re-compressed either way; page rasters must survive it. + assert document.docling_document is not None @pytest.mark.asyncio @@ -1234,6 +1266,22 @@ async def test_rebuild_embed_only_flushes_in_batches(temp_db_path, monkeypatch): assert doc.id is not None ids.append(doc.id) + # Phase 2 writes straight to the chunks table rather than going + # through _flush_rebuild_batch, so count the adds it makes. Patch at + # class level: embed-only recreates the table, discarding any patch + # applied to the instance that exists now. + import lancedb + + real_add = lancedb.AsyncTable.add + adds: list[int] = [] + + async def counting_add(self, records, *args, **kwargs): + if self.name == "chunks": + adds.append(len(records)) + return await real_add(self, records, *args, **kwargs) + + monkeypatch.setattr(lancedb.AsyncTable, "add", counting_add) + processed = [ doc_id async for doc_id in client.rebuild_database(mode=RebuildMode.EMBED_ONLY) @@ -1243,6 +1291,9 @@ async def test_rebuild_embed_only_flushes_in_batches(temp_db_path, monkeypatch): for doc_id in ids: assert await client.chunk_repository.get_by_document_id(doc_id) + # 3 docs at batch size 2: one mid-loop write plus the trailing one. + assert len(adds) == 2 + @pytest.mark.vcr() async def test_rechunk_raises_when_docling_blob_is_missing(temp_db_path): @@ -1266,6 +1317,7 @@ async def test_rebuild_full_flushes_in_batches(temp_db_path, monkeypatch): from haiku.rag.client import rebuild as rebuild_module monkeypatch.setattr(rebuild_module, "_REBUILD_BATCH_SIZE", 2) + flushes = _count_flushes(monkeypatch, rebuild_module) async with HaikuRAG(temp_db_path, create=True) as client: ids = [] @@ -1280,6 +1332,8 @@ async def test_rebuild_full_flushes_in_batches(temp_db_path, monkeypatch): assert sorted(processed) == sorted(ids) + assert len(flushes) == 2 + @pytest.mark.vcr() async def test_rebuild_full_warns_when_source_is_missing(temp_db_path): @@ -1324,7 +1378,13 @@ async def test_rebuild_full_flushes_pending_before_source_rebuild(temp_db_path): async for doc_id in client.rebuild_database(mode=RebuildMode.FULL) ] - assert content_doc.id in processed + # The content-path document keeps its id and must survive the + # flush that precedes the source re-ingest; the source document + # is replaced by a freshly ingested one with a new id. + assert content_doc.id in processed + assert source_doc.id not in processed + assert len(processed) == 2 + assert await client.store.documents_table.count_rows() == 2 @pytest.mark.vcr() @@ -1341,6 +1401,7 @@ async def test_rebuild_descriptions_flushes_in_batches(temp_db_path, monkeypatch config.processing.pictures = "description" monkeypatch.setattr(rebuild_module, "_REBUILD_BATCH_SIZE", 1) + flushes = _count_flushes(monkeypatch, rebuild_module) async def fake_describe(image_bytes_by_ref, *, config): return {ref: "A red square (mocked)." for ref in image_bytes_by_ref} @@ -1366,6 +1427,9 @@ async def test_rebuild_descriptions_flushes_in_batches(temp_db_path, monkeypatch assert sorted(processed) == sorted(ids) + # 2 docs at batch size 1: one flush each, none left for the trailing pass. + assert len(flushes) == 2 + @pytest.mark.vcr() async def test_rebuild_full_skips_document_deleted_mid_rebuild(temp_db_path): @@ -1408,7 +1472,10 @@ async def test_rebuild_embed_only_recovers_picture_bytes( async with HaikuRAG(temp_db_path, create=True) as rag: # The configured ollama embedder is text-only; stand in for a # multimodal one so the picture-bytes recovery branch runs. + embedded_images: list[bytes] = [] + async def fake_embed_image(image): + embedded_images.append(image) return [0.2] * rag.embedder.vector_dim monkeypatch.setattr(rag.embedder, "supports_images", True) @@ -1449,3 +1516,11 @@ async def test_rebuild_embed_only_recovers_picture_bytes( assert created.id in processed warned = any("no recoverable bytes" in r.getMessage() for r in records) assert warned is wipe_bytes + + if wipe_bytes: + # Nothing to recover, so the caption is text-embedded instead. + assert embedded_images == [] + else: + # The stored PNG was re-attached and routed through embed_image. + assert len(embedded_images) == 1 + assert embedded_images[0].startswith(b"\x89PNG") diff --git a/tests/test_utils.py b/tests/test_utils.py index 7ecbf13c..7616c653 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -140,22 +140,46 @@ Emoji test: 🚀 ✅ 📝""" @pytest.mark.parametrize( - "kwargs", + "kwargs,expected_settings", [ - {"provider": "ollama", "name": "llama3"}, - {"provider": "ollama", "name": "gpt-oss", "enable_thinking": False}, - {"provider": "ollama", "name": "gpt-oss", "enable_thinking": True}, - {"provider": "ollama", "name": "llama3", "temperature": 0.5, "max_tokens": 100}, - {"provider": "openai", "name": "gpt-4o"}, - {"provider": "openai", "name": "o1", "enable_thinking": True}, - {"provider": "openai", "name": "o1", "enable_thinking": False}, - { - "provider": "openai", - "name": "gpt-4o", - "enable_thinking": False, - "temperature": 0.7, - "max_tokens": 500, - }, + ({"provider": "ollama", "name": "llama3"}, None), + ( + {"provider": "ollama", "name": "gpt-oss", "enable_thinking": False}, + {"openai_reasoning_effort": "low"}, + ), + ( + {"provider": "ollama", "name": "gpt-oss", "enable_thinking": True}, + {"openai_reasoning_effort": "high"}, + ), + ( + { + "provider": "ollama", + "name": "llama3", + "temperature": 0.5, + "max_tokens": 100, + }, + {"temperature": 0.5, "max_tokens": 100}, + ), + ({"provider": "openai", "name": "gpt-4o"}, None), + ( + {"provider": "openai", "name": "o1", "enable_thinking": True}, + {"openai_reasoning_effort": "high"}, + ), + ( + {"provider": "openai", "name": "o1", "enable_thinking": False}, + {"openai_reasoning_effort": "low"}, + ), + ( + { + "provider": "openai", + "name": "gpt-4o", + "enable_thinking": False, + "temperature": 0.7, + "max_tokens": 500, + }, + # gpt-4o is not a reasoning model, so only the common settings land. + {"temperature": 0.7, "max_tokens": 500}, + ), ], ids=[ "ollama", @@ -168,9 +192,17 @@ Emoji test: 🚀 ✅ 📝""" "openai_all_settings", ], ) -def test_get_model_returns_openai_chat_model(kwargs): - """Every ollama and openai configuration resolves to an OpenAIChatModel.""" - assert isinstance(get_model(ModelConfig(**kwargs)), OpenAIChatModel) +def test_get_model_openai_chat_settings(kwargs, expected_settings): + """Each ollama/openai configuration maps onto the expected model settings.""" + result = get_model(ModelConfig(**kwargs)) + + assert isinstance(result, OpenAIChatModel) + if expected_settings is None: + assert result.settings is None + return + assert result.settings is not None + for key, value in expected_settings.items(): + assert result.settings.get(key) == value def test_get_model_ollama_appends_v1_to_per_model_base_url(): @@ -296,8 +328,14 @@ def test_get_model_anthropic(): @pytest.mark.skipif(not HAS_ANTHROPIC, reason="Anthropic not installed") -@pytest.mark.parametrize("enable_thinking", [True, False]) -def test_get_model_anthropic_with_thinking(enable_thinking): +@pytest.mark.parametrize( + "enable_thinking,expected_thinking", + [ + (True, {"type": "enabled", "budget_tokens": 4096}), + (False, {"type": "disabled"}), + ], +) +def test_get_model_anthropic_with_thinking(enable_thinking, expected_thinking): """Test get_model configures thinking for Anthropic.""" from pydantic_ai.models.anthropic import AnthropicModel @@ -307,7 +345,10 @@ def test_get_model_anthropic_with_thinking(enable_thinking): enable_thinking=enable_thinking, ) result = get_model(model_config) + assert isinstance(result, AnthropicModel) + assert result.settings is not None + assert result.settings.get("anthropic_thinking") == expected_thinking @pytest.mark.skipif(not HAS_GOOGLE, reason="Google not installed") @@ -343,8 +384,10 @@ def test_get_model_groq(): @pytest.mark.skipif(not HAS_GROQ, reason="Groq not installed") -@pytest.mark.parametrize("enable_thinking", [True, False]) -def test_get_model_groq_with_thinking(enable_thinking): +@pytest.mark.parametrize( + "enable_thinking,expected_format", [(True, "parsed"), (False, "hidden")] +) +def test_get_model_groq_with_thinking(enable_thinking, expected_format): """Test get_model configures thinking format for Groq.""" from pydantic_ai.models.groq import GroqModel @@ -354,7 +397,10 @@ def test_get_model_groq_with_thinking(enable_thinking): enable_thinking=enable_thinking, ) result = get_model(model_config) + assert isinstance(result, GroqModel) + assert result.settings is not None + assert result.settings.get("groq_reasoning_format") == expected_format @pytest.mark.skipif(not HAS_BEDROCK, reason="Bedrock not installed") @@ -370,19 +416,39 @@ def test_get_model_bedrock(): @pytest.mark.skipif(not HAS_BEDROCK, reason="Bedrock not installed") -@pytest.mark.parametrize("enable_thinking", [True, False]) @pytest.mark.parametrize( - "name", + "name,enable_thinking,expected_fields", [ - "anthropic.claude-3-5-sonnet-20241022-v2:0", - "openai.o3-mini-v1:0", - "qwen.qwen3-32b-v1:0", + ( + "anthropic.claude-3-5-sonnet-20241022-v2:0", + True, + {"thinking": {"type": "enabled", "budget_tokens": 4096}}, + ), + ( + "anthropic.claude-3-5-sonnet-20241022-v2:0", + False, + {"thinking": {"type": "disabled"}}, + ), + ("openai.o3-mini-v1:0", True, {"reasoning_effort": "high"}), + ("openai.o3-mini-v1:0", False, {"reasoning_effort": "low"}), + ("qwen.qwen3-32b-v1:0", True, {"reasoning_config": "high"}), + ("qwen.qwen3-32b-v1:0", False, {"reasoning_config": "low"}), # A family with no reasoning mapping leaves the request fields untouched. - "meta.llama3-70b-instruct-v1:0", + ("meta.llama3-70b-instruct-v1:0", True, None), + ("meta.llama3-70b-instruct-v1:0", False, None), + ], + ids=[ + "claude_on", + "claude_off", + "o_series_on", + "o_series_off", + "qwen_on", + "qwen_off", + "unmapped_on", + "unmapped_off", ], - ids=["claude", "o_series", "qwen", "unmapped_family"], ) -def test_get_model_bedrock_with_thinking(name, enable_thinking): +def test_get_model_bedrock_with_thinking(name, enable_thinking, expected_fields): """Each Bedrock model family maps thinking onto its own request field.""" from pydantic_ai.models.bedrock import BedrockConverseModel @@ -392,7 +458,16 @@ def test_get_model_bedrock_with_thinking(name, enable_thinking): enable_thinking=enable_thinking, ) result = get_model(model_config) + assert isinstance(result, BedrockConverseModel) + if expected_fields is None: + assert result.settings is None + return + assert result.settings is not None + assert ( + result.settings.get("bedrock_additional_model_requests_fields") + == expected_fields + ) def test_get_model_unknown_provider(): @@ -803,7 +878,12 @@ async def test_render_picture_handles_stored_bytes(stored, renders): result = await _render_picture(client, "doc1", "#/pictures/0") - assert (result is not None) is renders + if renders: + from textual_image.renderable import Image as RichImage + + assert isinstance(result, RichImage) + else: + assert result is None async def test_render_picture_without_client_returns_none():