Commit graph

1881 commits

Author SHA1 Message Date
Yiorgis Gozadinos
80594cd38c
Handle percent/decimal convention in Number-Match 2026-06-06 14:52:04 +03:00
Yiorgis Gozadinos
c2a48b55c0
Add deterministic Number-Match QA scoring for T²-RAGBench 2026-06-06 14:52:04 +03:00
Yiorgis Gozadinos
9f1bd9940a
Add T²-RAGBench FinQA evaluation dataset 2026-06-06 14:52:04 +03:00
Yiorgis Gozadinos
3807c48a60
Merge pull request #425 from ggozad/fix/sandbox-borrowed-bug
Fix analysis-sandbox "Already borrowed" crash under concurrent tool calls
2026-06-06 14:16:29 +03:00
Yiorgis Gozadinos
52738cbc0b
Always create the shared-connection lock so serialization can't be skipped 2026-06-06 10:51:07 +03:00
Yiorgis Gozadinos
4a65a69a27
Make the shared-connection lock optional for direct tool calls 2026-06-05 18:04:56 +03:00
Yiorgis Gozadinos
e59ee56002
Serialize shared-connection access across skill tools and the sandbox 2026-06-05 17:22:11 +03:00
Yiorgis Gozadinos
b47583258e
Run analysis sandbox VFS reads on the calling loop via the skill connection 2026-06-05 16:20:11 +03:00
Yiorgis Gozadinos
e0a892ec97
Update embedding-drift docs for read-only opens 2026-06-05 12:14:14 +03:00
Yiorgis Gozadinos
916b84bff4
vb 2026-06-05 12:09:57 +03:00
Yiorgis Gozadinos
f3cc1e8c7c
Merge pull request #422 from ggozad/fix/sandbox-lancedb-event-loop
Fix analysis sandbox "Already borrowed" crash on document VFS reads
2026-06-05 12:08:01 +03:00
Yiorgis Gozadinos
7906688bf1
Fix analysis sandbox "Already borrowed" crash on VFS reads 2026-06-05 11:50:19 +03:00
Yiorgis Gozadinos
a2def043cc
Merge pull request #421 from ggozad/fix/read-only-update
Read operations no longer modify the database
2026-06-05 11:46:46 +03:00
Yiorgis Gozadinos
abefdcdd41
Test vector_dim mismatch raises in read-only mode 2026-06-05 10:55:38 +03:00
Yiorgis Gozadinos
414be551fb
Open read CLI verbs read-only 2026-06-05 10:48:49 +03:00
Yiorgis Gozadinos
0e3d53791f
Add rebuild --set-embedder to reconcile embedder identity 2026-06-05 10:42:15 +03:00
Yiorgis Gozadinos
213569601b
Stop rewriting stored embedding settings on database open 2026-06-05 10:35:50 +03:00
Yiorgis Gozadinos
b6bbea3d64
Stop writing the schema version on database open 2026-06-05 10:32:30 +03:00
Yiorgis Gozadinos
e70f271ac7
vb 2026-06-04 14:13:55 +03:00
Yiorgis Gozadinos
c688871b61
Merge pull request #418 from ggozad/feat/ingester-postgres-queue
Support a database server for the ingester queue (SQLite + Postgres)
2026-06-04 14:07:14 +03:00
Yiorgis Gozadinos
e2e0a8dc1b
Cover the Postgres queue construction paths in CI 2026-06-04 12:21:47 +03:00
Yiorgis Gozadinos
73e8ac2dd6
Build the SQLite queue URL without reparsing the path 2026-06-04 12:14:27 +03:00
Yiorgis Gozadinos
a04dc9445b
Pre-ping the Postgres queue engine 2026-06-04 11:29:31 +03:00
Yiorgis Gozadinos
e37d764ab2
Add a docker-compose for integration test services 2026-06-04 11:13:16 +03:00
Yiorgis Gozadinos
1717bd4996
Make the SQLite job claim atomic across processes 2026-06-03 16:57:57 +03:00
Yiorgis Gozadinos
5cc32f111e
Mask the dburi password in queue init/migrate output 2026-06-03 14:42:32 +03:00
Yiorgis Gozadinos
a3cc13230f
test the Postgres queue and document dburi 2026-06-03 14:34:09 +03:00
Yiorgis Gozadinos
44089e5b1f
Support a dburi for the ingester queue (SQLite + Postgres)
Migrate the ingester queue storage from raw aiosqlite to SQLAlchemy Core
async. The backend is chosen by ingester.queue.dburi: a SQLAlchemy async
URL points the queue at a database server, and SQLite remains the default
when unset. The Postgres path claims jobs with FOR UPDATE SKIP LOCKED so
multiple ingester processes can share one queue; SQLite caps the pool to a
single connection to keep the select-then-update claim atomic.
2026-06-03 14:34:09 +03:00
Yiorgis Gozadinos
4eae86225e
vb 2026-06-03 14:26:58 +03:00
Yiorgis Gozadinos
0b58e6dc14
Merge pull request #417 from ggozad/fix/atomic-rename-race
skip spurious ingester DELETE when the resource is back on its source
2026-06-03 14:17:51 +03:00
Yiorgis Gozadinos
8afdd46176
skip spurious ingester DELETE when the resource is back on its source 2026-06-03 14:05:53 +03:00
Yiorgis Gozadinos
5b879aa6ed
Merge pull request #416 from ggozad/fix/rebuild-embed-images
Fix rebuild --embed-only corrupting picture embeddings
2026-06-03 13:49:04 +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
651b22ddcf
Fix rebuild --embed-only corrupting picture embeddings 2026-06-03 11:46:43 +03:00
Yiorgis Gozadinos
6d95fbe74a
Merge pull request #414 from ggozad/feat/prune-ingestor-pool
Add retention window to ingester queue
2026-06-03 11:06:44 +03:00
Yiorgis Gozadinos
a423a6dd9c
authenticate HuggingFace downloads in test job 2026-06-03 10:57:45 +03:00
Yiorgis Gozadinos
46747d369a
Add retention window to ingester queue, prune terminal job rows past retention window 2026-06-03 10:38:58 +03:00
Yiorgis Gozadinos
83b7e37855
Merge pull request #413 from ggozad/feat/analysis-citation-improvement
Improve citation rate for analysis skill in lesser models (gemma4)
2026-06-03 10:03:54 +03:00
Yiorgis Gozadinos
4ff17a84bb
Update benchmarks 2026-06-02 15:20:17 +03:00
Yiorgis Gozadinos
eb74525084
Lift analysis-skill citation rate via SKILL.md tightening 2026-06-01 18:58:52 +03:00
Yiorgis Gozadinos
8dbcd4bd7a
vb, changelog 2026-06-01 18:54:22 +03:00
Yiorgis Gozadinos
0550e363d4
Merge pull request #394 from mcdonc/perf/max-file-size-validation
perf: add configurable max_file_size to prevent OOM on large files
2026-06-01 18:49:18 +03:00
Chris McDonough
7e4aa8c71f
Add configurable max_file_size to reject oversized files before ingestion
Large files buffered entirely in RAM can OOM workers. Add
max_file_size to source config (default None = no limit).

FS checks stat().st_size before read_bytes(). HTTP and WebDAV issue
a HEAD request before GET when a limit is configured. S3 checks the
size from the existing head_async() call before get_async().

FileTooLargeError is classified as PermanentError so oversized files
go straight to the DLQ instead of retrying.
2026-06-01 18:40:46 +03:00
Yiorgis Gozadinos
774ac7c350
Merge pull request #393 from mcdonc/perf/batch-sync-state-writes
perf: batch sync_state writes during poller sweeps
2026-06-01 18:33:40 +03:00
Yiorgis Gozadinos
249d6c85c5
Merge pull request #401 from mcdonc/fix/revisionless-server-re-ingestion
fix: stop constant re-ingestion when server provides no revision header
2026-06-01 18:25:51 +03:00
Yiorgis Gozadinos
2cd97880fd
Replace sync_state batch 5-tuple with a SyncRow NamedTuple 2026-06-01 18:25:15 +03:00
Chris McDonough
a0a247d18a
Batch sync_state writes during poller sweeps
Each discovered file previously triggered a separate sync.upsert()
call with its own lock acquire + SQLite commit (fsync). On a sweep
finding 1,000 files this meant 1,000 individual commits.

Collect sync_state rows into a list during the sweep and flush them
in a single SyncStateRepo.batch_upsert() call at the end — one lock
acquisition, one commit, one fsync.
2026-06-01 18:21:09 +03:00
Chris McDonough
8deac2fee8
Fix constant re-ingestion when server provides no revision header
HTTP, S3, and WebDAV sources all check `revision is not None and
snapshot.get(uri) == revision` to decide UPSERT vs UNCHANGED.  When
a server returns no ETag or Last-Modified, revision is None and the
condition always fails — every sweep emits UPSERT even though the
content hasn't changed.

Now emit UNCHANGED when revision is None and the URI is already
known (has been ingested before).  A first-time discovery with no
revision still correctly emits UPSERT.
2026-06-01 18:14:27 +03:00
Yiorgis Gozadinos
20634376a3
Merge pull request #411 from mcdonc/chore/coverage-gaps
chore: close coverage gaps in cli, filter, registry, and migrations
2026-06-01 18:12:22 +03:00
Yiorgis Gozadinos
c0faf5ecf3
Merge pull request #408 from mcdonc/fix/directory-errors-permanent
fix: classify IsADirectoryError and NotADirectoryError as PermanentError
2026-06-01 18:07:24 +03:00