@zilliz/claude-context-core 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for Bug #279 fix: MilvusVectorDatabase.query() empty filter handling
4
+ *
5
+ * Before the fix, passing an empty string '' as filter to Milvus would cause
6
+ * the SDK to return empty results. The fix skips the filter param when it's
7
+ * empty or whitespace-only.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ // Mock the Milvus SDK before importing
11
+ const mockQuery = jest.fn();
12
+ const mockGetLoadState = jest.fn();
13
+ jest.mock('@zilliz/milvus2-sdk-node', () => ({
14
+ MilvusClient: jest.fn().mockImplementation(() => ({
15
+ query: mockQuery,
16
+ getLoadState: mockGetLoadState,
17
+ })),
18
+ DataType: { VarChar: 21, FloatVector: 101, Int64: 5, SparseFloatVector: 104 },
19
+ MetricType: { COSINE: 'COSINE', BM25: 'BM25' },
20
+ FunctionType: { BM25: 1 },
21
+ LoadState: { LoadStateLoaded: 'LoadStateLoaded' },
22
+ }));
23
+ jest.mock('../zilliz-utils', () => ({
24
+ ClusterManager: {
25
+ getAddressFromToken: jest.fn(),
26
+ },
27
+ }));
28
+ const milvus_vectordb_1 = require("../milvus-vectordb");
29
+ describe('MilvusVectorDatabase.query() - empty filter handling (Bug #279)', () => {
30
+ let db;
31
+ beforeEach(() => {
32
+ jest.clearAllMocks();
33
+ mockGetLoadState.mockResolvedValue({ state: 'LoadStateLoaded' });
34
+ mockQuery.mockResolvedValue({
35
+ status: { error_code: 'Success' },
36
+ data: [{ id: 'test-id', content: 'test-content' }],
37
+ });
38
+ db = new milvus_vectordb_1.MilvusVectorDatabase({ address: 'localhost:19530' });
39
+ });
40
+ test('empty string filter should NOT include filter in queryParams', async () => {
41
+ await db.query('test_collection', '', ['id', 'content']);
42
+ expect(mockQuery).toHaveBeenCalledTimes(1);
43
+ const params = mockQuery.mock.calls[0][0];
44
+ expect(params).not.toHaveProperty('filter');
45
+ expect(params.collection_name).toBe('test_collection');
46
+ expect(params.output_fields).toEqual(['id', 'content']);
47
+ // Should have default limit 16384 when no filter
48
+ expect(params.limit).toBe(16384);
49
+ });
50
+ test('whitespace-only filter should NOT include filter in queryParams', async () => {
51
+ await db.query('test_collection', ' ', ['id', 'content']);
52
+ const params = mockQuery.mock.calls[0][0];
53
+ expect(params).not.toHaveProperty('filter');
54
+ expect(params.limit).toBe(16384);
55
+ });
56
+ test('valid filter should include filter in queryParams', async () => {
57
+ await db.query('test_collection', 'id != ""', ['id', 'content']);
58
+ const params = mockQuery.mock.calls[0][0];
59
+ expect(params.filter).toBe('id != ""');
60
+ });
61
+ test('valid filter with explicit limit should use provided limit', async () => {
62
+ await db.query('test_collection', 'id != ""', ['id', 'content'], 50);
63
+ const params = mockQuery.mock.calls[0][0];
64
+ expect(params.filter).toBe('id != ""');
65
+ expect(params.limit).toBe(50);
66
+ });
67
+ test('empty filter with explicit limit should use provided limit, not default 16384', async () => {
68
+ await db.query('test_collection', '', ['metadata'], 1);
69
+ const params = mockQuery.mock.calls[0][0];
70
+ expect(params).not.toHaveProperty('filter');
71
+ expect(params.limit).toBe(1);
72
+ });
73
+ test('tab/newline-only filter should NOT include filter in queryParams', async () => {
74
+ await db.query('test_collection', '\t\n ', ['id']);
75
+ const params = mockQuery.mock.calls[0][0];
76
+ expect(params).not.toHaveProperty('filter');
77
+ expect(params.limit).toBe(16384);
78
+ });
79
+ test('query returns data from mock client', async () => {
80
+ const results = await db.query('test_collection', '', ['id', 'content']);
81
+ expect(results).toEqual([{ id: 'test-id', content: 'test-content' }]);
82
+ });
83
+ test('valid filter without explicit limit should NOT set default limit', async () => {
84
+ await db.query('test_collection', 'id != ""', ['id', 'content']);
85
+ const params = mockQuery.mock.calls[0][0];
86
+ expect(params.filter).toBe('id != ""');
87
+ expect(params.limit).toBeUndefined();
88
+ });
89
+ });
90
+ //# sourceMappingURL=milvus-query-filter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"milvus-query-filter.test.js","sourceRoot":"","sources":["../../../src/vectordb/__tests__/milvus-query-filter.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zilliz/claude-context-core",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Core indexing engine for Claude Context",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",