Ctrl K
ComunidadGuías…

tests/test_recall_backend_contract.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Regressions for lossy CLI output and stale side-index reranking."""
import sys,json,subprocess,unittest
from pathlib import Path
from unittest import mock
ROOT=Path(__file__).resolve().parents[1]
sys.path[:0]=[str(ROOT/'scripts'),str(ROOT/'tools')]
import xbrain_recall as xb

class StructuredBackend(unittest.TestCase):
    def test_hybrid_rank_is_not_rewritten_by_a_different_index(self):
        import xkb_memory_service as svc
        hits=[{'slug':'new-card','chunk_text':'direct relevant evidence','score':.95,'score_scale':'card_hybrid'},
              {'slug':'old-card','chunk_text':'adjacent topic','score':.8,'score_scale':'card_hybrid'}]
        catalog=svc.KnowledgeCatalog()
        catalog._reset_request_stats()
        with mock.patch.object(svc,'xbrain_query',return_value=hits), mock.patch.object(catalog,'_drop_irrelevant',side_effect=lambda q,rows: (list(reversed(rows)),0)) as stale:
            rows=catalog._semantic_search('natural query',10)
        self.assertEqual([r['id'] for r in rows],['new-card','old-card'])
        stale.assert_not_called()
        self.assertTrue(all(r['score_scale']=='card_hybrid' for r in rows))
        import xkb_score
        ranked=xkb_score.rank(rows)
        self.assertEqual(ranked[0]['id'],'new-card')
        self.assertEqual(xkb_score.weight_for('card_hybrid'),xkb_score.weight_for('card'))

    def test_unavailable_judge_is_an_explicit_quality_warning(self):
        import xkb_memory_service as svc
        import tempfile
        with tempfile.TemporaryDirectory() as tmp:
            store=svc.Store(Path(tmp)/'service.sqlite')
            with mock.patch.object(store.catalog,'search',return_value={'records':[{'id':'fixture','summary':'candidate','score':.9,'score_scale':'card_hybrid'}],'retrieval_mode':'xbrain_hybrid'}), mock.patch.object(store,'recall',return_value={'memories':[]}), mock.patch.object(svc.xkb_jev,'relevance',return_value=None):
                packet=store.knowledge_recall('natural query')
        self.assertEqual(packet['judge']['status'],'unavailable')
        self.assertTrue(any('judge' in w and 'unverified' in w for w in packet['warnings']))
        self.assertEqual(packet['count'],1)

    def test_unreadable_local_provenance_preserves_remote_hits(self):
        import tempfile
        import xkb_paths
        with tempfile.TemporaryDirectory() as tmp:
            root = Path(tmp)
            (root / 'broken.md').write_bytes(b'\xff')
            hits = [{'slug': 'broken', 'chunk_text': 'Source URL: https://example.test/source', 'score': .9},
                    {'slug': 'other', 'chunk_text': 'Remote evidence', 'score': .8}]
            with mock.patch.object(xkb_paths, 'CARDS_DIR', root), \
                 mock.patch.object(xkb_paths, 'BOOKMARKS_DIR', root), \
                 mock.patch.object(xb, '_resolve_gbrain_dir', return_value=root), \
                 mock.patch.object(xb.subprocess, 'run', return_value=subprocess.CompletedProcess([], 0, json.dumps(hits), '')):
                rows = xb.xbrain_query('natural question')
        self.assertEqual(len(rows), 2)
        self.assertEqual(rows[0]['source_url'], 'https://example.test/source')

    def test_query_uses_lossless_operation_transport(self):
        hit={'slug':'fixture','title':'Complete title','chunk_text':'evidence '*80,'score':.91}
        envelope=[hit]
        with mock.patch.object(xb,'_resolve_gbrain_dir',return_value=Path('fixture')), mock.patch.object(xb.subprocess,'run',return_value=subprocess.CompletedProcess([],0,json.dumps(envelope),'')) as run:
            rows=xb.xbrain_query('natural question',limit=7)
        self.assertEqual(rows[0]['chunk_text'],hit['chunk_text'])
        command=run.call_args.args[0]
        self.assertIn('call',command)
        payload=json.loads(command[-1])
        self.assertEqual(payload,{'query':'natural question','limit':7,'expand':False})
        self.assertEqual(rows[0]['score_scale'],'card_hybrid')

if __name__ == "__main__":
    unittest.main()