Commit graph

41 commits

Author SHA1 Message Date
Yiorgis Gozadinos
9288519308
Update every GitHub Action to its latest major
All of them targeted Node 20, which the runners now force onto Node 24.
Two nested ones came along with their parents: actions/upload-artifact
inside upload-pages-artifact, and actions/github-script inside
codecov-action.

setup-uv v10 disables the cache under enable-cache: auto for release,
workflow_run and pull_request_target. Every job that caches passes
enable-cache: true explicitly, so none of them lose it.
2026-09-07 15:09:05 +03:00
Yiorgis Gozadinos
da6cdfbc51
Resolve file:// URIs to paths through url2pathname
urlparse().path keeps the leading slash in front of a Windows drive, so
file:///C:/docs/a.pdf read as \C:\docs\a.pdf and the ingester reported
"File does not exist" for every file it discovered. url2pathname is the
stdlib conversion that strips it, per platform.

Four sites each decided both "is this local" and "what path is this":
FSSource._uri_to_path and supports, resolve_adhoc_fetcher,
create_document_from_source and check_source_accessible, and convert.
is_local_uri and uri_to_path in haiku.rag.uri own those two decisions now,
which closes two more cases of the same root cause. A bare C:\docs\a.pdf
parses with scheme "c", so add-src raised "No source adapter for URI scheme
'c'" and convert silently treated the path as raw text. And convert and
check_source_accessible never percent-decoded at all, so a file named
a[b] c.md read as missing on Linux and macOS too.

A file URI's host is reattached after conversion rather than passed to
url2pathname, which as of 3.14 rejects a non-local authority off Windows.
file:////server/share is the empty-authority spelling of a UNC path, its
host being the first path segment, so that host is normalised into the
authority before conversion. Output is identical on 3.12, 3.13 and 3.14.

The ad-hoc FS fetcher roots at the path's own anchor rather than "/", which
on Windows is only the current drive.

test_uri.py runs on ubuntu, macos and windows across 3.13 and 3.14 without
the project installed: --noconftest because the repo conftest imports
dependencies that job does not need, and -o addopts= to drop the
repository's -n auto. The Windows legs are what cover the drive conversion.

Fixes #574.
2026-08-21 10:22:26 +03:00
Yiorgis Gozadinos
7f54eb4dbc
Measure the CLI and its application layer
cli.py carried 40 pragmas over whole command bodies and app.py a
class-level one over all 412 statements, while tests/test_cli.py already
drove 29 commands through CliRunner. The pragmas hid lines the suite
executed, so the 100% gate understated real coverage and gave new CLI code
no scrutiny.

Both are measured now. 38 CLI tests stub HaikuRAGApp and assert the parsed
arguments reach the right method; 60 app tests stub the client and record
the console, pinning what each command asks for and what it prints. The only
pragma left in either file is cli() under __main__. The omit list is back to
the two Textual TUIs.

Three defects the coverage surfaced:

haiku-rag settings masked only top-level secret-named fields, so nested ones
printed in full — lancedb.api_key, providers.docling_serve.api_key, WebDAV
source passwords. It uses redact_secrets, which walks the dump.

chat guarded the wrong thing: haiku.rag.chat imports without Textual, and
run_chat raises when it imports ChatApp, so the missing extra escaped as an
ImportError. The guard is on the call. inspector raises at module import
instead, so inspect keeps its guard on the import; each has a test that
fails the way the real installation fails.

search --limit/--search-type and history --limit default to None so the
config resolves the default. Now pinned.

CI passed --cov=haiku while pyproject declares source = ["haiku_rag_slim"];
pass --cov and let the config decide. build-docs.yml only ran on push to
main, so a broken docs build merged and failed at deploy: build on pull
requests, with configure-pages, upload-pages-artifact and deploy gated to
push, and a per-ref concurrency group.
2026-08-20 13:23:00 +03:00
Yiorgis Gozadinos
eb09dc6d2c
Pin setup-uv to v9.0.0
There is no floating v9 tag — setup-uv publishes moving majors only up to
v7, so v9 failed to resolve and the lint job never started.
2026-07-27 13:38:02 +03:00
Yiorgis Gozadinos
04ad3823b9
Cover the lazy config init and restore the uv cache in CI
get_config() builds its instance on first use, so the branch was covered
only when a worker happened to call it before set_config(). Under xdist that
depends on how cases shard across workers, which varies with the core count:
covered locally, uncovered on the two-core runner. Assert it directly.

setup-uv v4 bundles a cache client the GitHub cache service now rejects with
400, so the uv cache never restored and every wheel was redownloaded. Bump
to v9 across all four workflows (build-docs was already drifting at v5).

setup-python read requires-python (">=3.12") and installed 3.14, which uv
then ignored in favour of .python-version (3.13) and downloaded itself.
Point it at .python-version so the interpreter it installs is the one used.
2026-07-27 13:35:50 +03:00
Yiorgis Gozadinos
e186720a5e
Report missing lines in the CI coverage output
A coverage-gate failure currently shows only the percentage, which is not
enough to identify the uncovered line from the log.
2026-07-27 13:26:02 +03:00
Yiorgis Gozadinos
2c5849b5d2
Invalidate CI HuggingFace model cache for transformers 5 2026-07-23 12:16:15 +03:00
Yiorgis Gozadinos
d84147511a
Drop broken type=gha cache from Docker slim publish 2026-07-03 20:32:51 +03:00
Yiorgis Gozadinos
73beae5a4c
Harden MCP publisher install and bump action versions 2026-06-24 19:38:50 +03:00
Yiorgis Gozadinos
a65757807e
Use cached HuggingFace models offline in test job
The Qwen tokenizer and cross-encoder pre-downloads call the HF metadata
API to revalidate even on a cache hit; a 429 there propagates instead of
falling back to the cached files, failing CI on HF throttling.

Skip the pre-download steps when the cache is restored and run pytest
with HF_HUB_OFFLINE/TRANSFORMERS_OFFLINE on a hit, so cached models are
used without any network revalidation; allow online on a miss so a fresh
cache key still populates. Rename the cache key so the snapshot
re-populates with every test model (the old key predated the
cross-encoder step and never cached it).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:11:33 +03:00
Yiorgis Gozadinos
a423a6dd9c
authenticate HuggingFace downloads in test job 2026-06-03 10:57:45 +03:00
Yiorgis Gozadinos
a4091cb6fa
Straight migration to zensical 2026-05-20 15:44:39 +03:00
Yiorgis Gozadinos
57f273e000
Minor fixes, CI should build 2026-05-14 15:43:36 +03:00
Yiorgis Gozadinos
5e99b84308
Prevent HuggingFace network access during tests 2026-03-05 12:10:07 +02:00
Yiorgis Gozadinos
017712c9b1
Update prompts & docs. Remove docker sandbox workflow 2026-02-24 09:55:45 +02:00
Yiorgis Gozadinos
ed89ff0fc9
Simplify tools/ — remove AG-UI state machinery, keep core toolsets 2026-02-20 16:36:48 +02:00
Yiorgis Gozadinos
b426827fc2
Docker-based sandbox. Reused within a single rlm() call for latency 2026-02-06 12:07:19 +01:00
Yiorgis Gozadinos
35bed89717
Fix flaky huggingface in tests by caching the tokenizer 2026-01-31 12:07:42 +02:00
Yiorgis Gozadinos
5e55c0df54
replace pyright with ty type checker 2026-01-19 15:50:14 +02:00
Yiorgis Gozadinos
6c5c23b338
Use pnpm, not npm on CI, fix errors. 2026-01-16 15:03:42 +02:00
Yiorgis Gozadinos
c1163dc8ff
Use biome on the frontend for linting, add to CI 2026-01-16 15:03:41 +02:00
Yiorgis Gozadinos
68ac50acff
Add coverage and badges 2025-12-29 14:36:01 +02:00
Yiorgis Gozadinos
bfae711a17
Do not run test requiring docling OCR in CI 2025-12-29 13:44:57 +02:00
Yiorgis Gozadinos
5844d07c5d
Add lint github action 2025-12-27 18:50:57 +02:00
Yiorgis Gozadinos
b64a2b08ee
Commit dataset for CI and github workflow 2025-12-26 19:30:26 +02:00
Yiorgis Gozadinos
f728fea489
Stop building full docker image 2025-11-18 14:48:34 +02:00
Yiorgis Gozadinos
a31fcad6b0
haiku.rag-slim docker image 2025-11-17 14:18:41 +02:00
Yiorgis Gozadinos
addf3cab89
Use pypi scoped token for slim 2025-11-05 13:36:52 +02:00
Yiorgis Gozadinos
4d64389052
Add workflow dispatch to build-publish-slim 2025-11-05 13:26:41 +02:00
Yiorgis Gozadinos
b8a56f85a5
Fix uv github actions 2025-11-05 13:24:21 +02:00
Yiorgis Gozadinos
ce79f8e037
Update github actions 2025-11-04 18:37:01 +02:00
Yiorgis Gozadinos
bddf20390b
Add arm arch when building docker image 2025-10-16 15:38:09 +03:00
Yiorgis Gozadinos
a5384fe1bb
Try to free up space no #2 2025-10-16 14:55:38 +03:00
Yiorgis Gozadinos
77bccd188e
Try to free up some space for running our docker build 2025-10-16 14:37:21 +03:00
Yiorgis Gozadinos
23b195c34c
Add github action for publishing docker image to the github container registry 2025-10-16 14:22:55 +03:00
Yiorgis Gozadinos
d6cefb1ebc
Allow for mcp registry action to run manually 2025-10-16 13:02:12 +03:00
Yiorgis Gozadinos
c69800fe2b
Fix downloading mcp publisher #2 2025-10-16 12:57:01 +03:00
Yiorgis Gozadinos
48243d8d8e
Fix downloading mcp publisher 2025-10-16 12:54:37 +03:00
Yiorgis Gozadinos
c9fc0cd750
MCP server registry 2025-10-08 11:10:54 +03:00
Yiorgis Gozadinos
7d2d895ff0
Github action for docs 2025-06-25 20:17:31 +03:00
Yiorgis Gozadinos
0e4d886b3a
Github actions for building 2025-06-19 15:20:29 +02:00