hermes-client-python 1.7.12__tar.gz → 1.7.13__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hermes-client-python
3
- Version: 1.7.12
3
+ Version: 1.7.13
4
4
  Summary: Async Python client for Hermes search server
5
5
  Project-URL: Homepage, https://github.com/SpaceFrontiers/hermes
6
6
  Project-URL: Repository, https://github.com/SpaceFrontiers/hermes
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "hermes-client-python"
7
- version = "1.7.12"
7
+ version = "1.7.13"
8
8
  description = "Async Python client for Hermes search server"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,14 +1,23 @@
1
1
  """Async Python client for Hermes search server."""
2
2
 
3
3
  from .client import HermesClient
4
- from .types import Document, IndexInfo, SearchHit, SearchResponse
4
+ from .types import (
5
+ DocAddress,
6
+ Document,
7
+ IndexInfo,
8
+ SearchHit,
9
+ SearchResponse,
10
+ VectorFieldStats,
11
+ )
5
12
 
6
13
  __all__ = [
7
14
  "HermesClient",
15
+ "DocAddress",
8
16
  "Document",
9
17
  "SearchHit",
10
18
  "SearchResponse",
11
19
  "IndexInfo",
20
+ "VectorFieldStats",
12
21
  ]
13
22
 
14
23
  __version__ = "1.0.2"
@@ -11,7 +11,15 @@ from grpc import aio
11
11
 
12
12
  from . import hermes_pb2 as pb
13
13
  from . import hermes_pb2_grpc as pb_grpc
14
- from .types import Document, IndexInfo, SearchHit, SearchResponse, SearchTimings
14
+ from .types import (
15
+ DocAddress,
16
+ Document,
17
+ IndexInfo,
18
+ SearchHit,
19
+ SearchResponse,
20
+ SearchTimings,
21
+ VectorFieldStats,
22
+ )
15
23
 
16
24
 
17
25
  class HermesClient:
@@ -158,11 +166,21 @@ class HermesClient:
158
166
  self._ensure_connected()
159
167
  request = pb.GetIndexInfoRequest(index_name=index_name)
160
168
  response = await self._search_stub.GetIndexInfo(request)
169
+ vector_stats = [
170
+ VectorFieldStats(
171
+ field_name=vs.field_name,
172
+ vector_type=vs.vector_type,
173
+ total_vectors=vs.total_vectors,
174
+ dimension=vs.dimension,
175
+ )
176
+ for vs in response.vector_stats
177
+ ]
161
178
  return IndexInfo(
162
179
  index_name=response.index_name,
163
180
  num_docs=response.num_docs,
164
181
  num_segments=response.num_segments,
165
182
  schema=response.schema,
183
+ vector_stats=vector_stats,
166
184
  )
167
185
 
168
186
  # =========================================================================
@@ -294,6 +312,8 @@ class HermesClient:
294
312
  fields_to_load: list[str] | None = None,
295
313
  reranker: tuple[str, list[float], int] | None = None,
296
314
  reranker_combiner: str = "weighted_top_k",
315
+ matryoshka_dims: int = 0,
316
+ filters: list[dict[str, Any]] | None = None,
297
317
  ) -> SearchResponse:
298
318
  """Search for documents.
299
319
 
@@ -318,6 +338,16 @@ class HermesClient:
318
338
  l1_limit=0 defaults to 10x the final limit.
319
339
  reranker_combiner: Score combiner for reranker multi-value fields:
320
340
  "log_sum_exp" (default), "max", "avg", "sum"
341
+ matryoshka_dims: Matryoshka pre-filter dimensions for reranker.
342
+ When > 0, scores candidates on leading N dimensions first,
343
+ keeps top survivors, then does full-dimension exact scoring.
344
+ 0 = disabled (default).
345
+ filters: Fast-field filters. Each dict has "field" and one condition key:
346
+ - {"field": "status", "eq_text": "active"}
347
+ - {"field": "price", "eq_u64": 100}
348
+ - {"field": "price", "range": {"min": 10.0, "max": 100.0}}
349
+ - {"field": "category", "in_text": ["books", "movies"]}
350
+ - {"field": "count", "in_u64": [1, 2, 3]}
321
351
 
322
352
  Returns:
323
353
  SearchResponse with hits
@@ -377,8 +407,11 @@ class HermesClient:
377
407
  vector=query_vector,
378
408
  limit=l1_limit,
379
409
  combiner=reranker_combiner_value,
410
+ matryoshka_dims=matryoshka_dims,
380
411
  )
381
412
 
413
+ pb_filters = _build_filters(filters) if filters else []
414
+
382
415
  request = pb.SearchRequest(
383
416
  index_name=index_name,
384
417
  query=query,
@@ -386,13 +419,17 @@ class HermesClient:
386
419
  offset=offset,
387
420
  fields_to_load=fields_to_load or [],
388
421
  reranker=pb_reranker,
422
+ filters=pb_filters,
389
423
  )
390
424
 
391
425
  response = await self._search_stub.Search(request)
392
426
 
393
427
  hits = [
394
428
  SearchHit(
395
- doc_id=hit.doc_id,
429
+ address=DocAddress(
430
+ segment_id=hit.address.segment_id,
431
+ doc_id=hit.address.doc_id,
432
+ ),
396
433
  score=hit.score,
397
434
  fields={k: _from_field_value(v) for k, v in hit.fields.items()},
398
435
  )
@@ -416,18 +453,23 @@ class HermesClient:
416
453
  timings=timings,
417
454
  )
418
455
 
419
- async def get_document(self, index_name: str, doc_id: int) -> Document | None:
420
- """Get a document by ID.
456
+ async def get_document(
457
+ self, index_name: str, address: DocAddress
458
+ ) -> Document | None:
459
+ """Get a document by address.
421
460
 
422
461
  Args:
423
462
  index_name: Name of the index
424
- doc_id: Document ID
463
+ address: DocAddress from a SearchHit
425
464
 
426
465
  Returns:
427
466
  Document or None if not found
428
467
  """
429
468
  self._ensure_connected()
430
- request = pb.GetDocumentRequest(index_name=index_name, doc_id=doc_id)
469
+ request = pb.GetDocumentRequest(
470
+ index_name=index_name,
471
+ address=pb.DocAddress(segment_id=address.segment_id, doc_id=address.doc_id),
472
+ )
431
473
  try:
432
474
  response = await self._search_stub.GetDocument(request)
433
475
  fields = {k: _from_field_value(v) for k, v in response.fields.items()}
@@ -599,6 +641,38 @@ def _reranker_combiner_to_proto(combiner: str) -> int:
599
641
  }.get(combiner.lower(), 0)
600
642
 
601
643
 
644
+ def _build_filters(filters: list[dict[str, Any]]) -> list[pb.Filter]:
645
+ """Convert filter dicts to protobuf Filter messages."""
646
+ result = []
647
+ for f in filters:
648
+ field = f["field"]
649
+ kwargs: dict[str, Any] = {"field": field}
650
+ if "eq_u64" in f:
651
+ kwargs["eq_u64"] = int(f["eq_u64"])
652
+ elif "eq_i64" in f:
653
+ kwargs["eq_i64"] = int(f["eq_i64"])
654
+ elif "eq_f64" in f:
655
+ kwargs["eq_f64"] = float(f["eq_f64"])
656
+ elif "eq_text" in f:
657
+ kwargs["eq_text"] = str(f["eq_text"])
658
+ elif "range" in f:
659
+ r = f["range"]
660
+ range_kwargs = {}
661
+ if "min" in r:
662
+ range_kwargs["min"] = float(r["min"])
663
+ if "max" in r:
664
+ range_kwargs["max"] = float(r["max"])
665
+ kwargs["range"] = pb.RangeFilter(**range_kwargs)
666
+ elif "in_text" in f:
667
+ kwargs["in_values"] = pb.InFilter(text_values=list(f["in_text"]))
668
+ elif "in_u64" in f:
669
+ kwargs["in_values"] = pb.InFilter(u64_values=[int(v) for v in f["in_u64"]])
670
+ elif "in_i64" in f:
671
+ kwargs["in_values"] = pb.InFilter(i64_values=[int(v) for v in f["in_i64"]])
672
+ result.append(pb.Filter(**kwargs))
673
+ return result
674
+
675
+
602
676
  def _build_query(
603
677
  *,
604
678
  term: tuple[str, str] | None = None,
@@ -0,0 +1,142 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: hermes.proto
5
+ # Protobuf Python Version: 6.31.1
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 31,
16
+ 1,
17
+ '',
18
+ 'hermes.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
25
+
26
+
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0chermes.proto\x12\x06hermes\"\xad\x02\n\x05Query\x12!\n\x04term\x18\x01 \x01(\x0b\x32\x11.hermes.TermQueryH\x00\x12\'\n\x07\x62oolean\x18\x02 \x01(\x0b\x32\x14.hermes.BooleanQueryH\x00\x12#\n\x05\x62oost\x18\x03 \x01(\x0b\x32\x12.hermes.BoostQueryH\x00\x12\x1f\n\x03\x61ll\x18\x04 \x01(\x0b\x32\x10.hermes.AllQueryH\x00\x12\x32\n\rsparse_vector\x18\x05 \x01(\x0b\x32\x19.hermes.SparseVectorQueryH\x00\x12\x30\n\x0c\x64\x65nse_vector\x18\x06 \x01(\x0b\x32\x18.hermes.DenseVectorQueryH\x00\x12#\n\x05match\x18\x07 \x01(\x0b\x32\x12.hermes.MatchQueryH\x00\x42\x07\n\x05query\"\xa5\x02\n\x11SparseVectorQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0f\n\x07indices\x18\x02 \x03(\r\x12\x0e\n\x06values\x18\x03 \x03(\x02\x12\x0c\n\x04text\x18\x04 \x01(\t\x12,\n\x08\x63ombiner\x18\x05 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x13\n\x0bheap_factor\x18\x06 \x01(\x02\x12\x1c\n\x14\x63ombiner_temperature\x18\x07 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x08 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\t \x01(\x02\x12\x18\n\x10weight_threshold\x18\n \x01(\x02\x12\x16\n\x0emax_query_dims\x18\x0b \x01(\r\x12\x0f\n\x07pruning\x18\x0c \x01(\x02\"\xd4\x01\n\x10\x44\x65nseVectorQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x0e\n\x06nprobe\x18\x03 \x01(\r\x12\x15\n\rrerank_factor\x18\x04 \x01(\r\x12,\n\x08\x63ombiner\x18\x05 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x1c\n\x14\x63ombiner_temperature\x18\x06 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x07 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\x08 \x01(\x02\"(\n\tTermQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0c\n\x04term\x18\x02 \x01(\t\"k\n\x0c\x42ooleanQuery\x12\x1b\n\x04must\x18\x01 \x03(\x0b\x32\r.hermes.Query\x12\x1d\n\x06should\x18\x02 \x03(\x0b\x32\r.hermes.Query\x12\x1f\n\x08must_not\x18\x03 \x03(\x0b\x32\r.hermes.Query\"9\n\nBoostQuery\x12\x1c\n\x05query\x18\x01 \x01(\x0b\x32\r.hermes.Query\x12\r\n\x05\x62oost\x18\x02 \x01(\x02\"\n\n\x08\x41llQuery\")\n\nMatchQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xcd\x01\n\x08Reranker\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\r\n\x05limit\x18\x03 \x01(\r\x12,\n\x08\x63ombiner\x18\x04 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x1c\n\x14\x63ombiner_temperature\x18\x05 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x06 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\x07 \x01(\x02\x12\x17\n\x0fmatryoshka_dims\x18\x08 \x01(\r\"\xba\x01\n\x06\x46ilter\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x10\n\x06\x65q_u64\x18\x02 \x01(\x04H\x00\x12\x10\n\x06\x65q_i64\x18\x03 \x01(\x03H\x00\x12\x10\n\x06\x65q_f64\x18\x04 \x01(\x01H\x00\x12\x11\n\x07\x65q_text\x18\x05 \x01(\tH\x00\x12$\n\x05range\x18\x06 \x01(\x0b\x32\x13.hermes.RangeFilterH\x00\x12%\n\tin_values\x18\x07 \x01(\x0b\x32\x10.hermes.InFilterH\x00\x42\x0b\n\tcondition\"A\n\x0bRangeFilter\x12\x10\n\x03min\x18\x01 \x01(\x01H\x00\x88\x01\x01\x12\x10\n\x03max\x18\x02 \x01(\x01H\x01\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"G\n\x08InFilter\x12\x13\n\x0btext_values\x18\x01 \x03(\t\x12\x12\n\nu64_values\x18\x02 \x03(\x04\x12\x12\n\ni64_values\x18\x03 \x03(\x03\"\xbd\x01\n\rSearchRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x1c\n\x05query\x18\x02 \x01(\x0b\x32\r.hermes.Query\x12\r\n\x05limit\x18\x03 \x01(\r\x12\x0e\n\x06offset\x18\x04 \x01(\r\x12\x16\n\x0e\x66ields_to_load\x18\x05 \x03(\t\x12\"\n\x08reranker\x18\x06 \x01(\x0b\x32\x10.hermes.Reranker\x12\x1f\n\x07\x66ilters\x18\x07 \x03(\x0b\x32\x0e.hermes.Filter\"0\n\nDocAddress\x12\x12\n\nsegment_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64oc_id\x18\x02 \x01(\r\"\xdf\x01\n\tSearchHit\x12#\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x12.hermes.DocAddress\x12\r\n\x05score\x18\x02 \x01(\x02\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.hermes.SearchHit.FieldsEntry\x12,\n\x0eordinal_scores\x18\x04 \x03(\x0b\x32\x14.hermes.OrdinalScore\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue:\x02\x38\x01\".\n\x0cOrdinalScore\x12\x0f\n\x07ordinal\x18\x01 \x01(\r\x12\r\n\x05score\x18\x02 \x01(\x02\"\xdb\x01\n\nFieldValue\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12\r\n\x03u64\x18\x02 \x01(\x04H\x00\x12\r\n\x03i64\x18\x03 \x01(\x03H\x00\x12\r\n\x03\x66\x36\x34\x18\x04 \x01(\x01H\x00\x12\x15\n\x0b\x62ytes_value\x18\x05 \x01(\x0cH\x00\x12-\n\rsparse_vector\x18\x06 \x01(\x0b\x32\x14.hermes.SparseVectorH\x00\x12+\n\x0c\x64\x65nse_vector\x18\x07 \x01(\x0b\x32\x13.hermes.DenseVectorH\x00\x12\x14\n\njson_value\x18\x08 \x01(\tH\x00\x42\x07\n\x05value\"/\n\x0cSparseVector\x12\x0f\n\x07indices\x18\x01 \x03(\r\x12\x0e\n\x06values\x18\x02 \x03(\x02\"\x1d\n\x0b\x44\x65nseVector\x12\x0e\n\x06values\x18\x01 \x03(\x02\"~\n\x0eSearchResponse\x12\x1f\n\x04hits\x18\x01 \x03(\x0b\x32\x11.hermes.SearchHit\x12\x12\n\ntotal_hits\x18\x02 \x01(\r\x12\x0f\n\x07took_ms\x18\x03 \x01(\x04\x12&\n\x07timings\x18\x04 \x01(\x0b\x32\x15.hermes.SearchTimings\"X\n\rSearchTimings\x12\x11\n\tsearch_us\x18\x01 \x01(\x04\x12\x11\n\trerank_us\x18\x02 \x01(\x04\x12\x0f\n\x07load_us\x18\x03 \x01(\x04\x12\x10\n\x08total_us\x18\x04 \x01(\x04\"M\n\x12GetDocumentRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12#\n\x07\x61\x64\x64ress\x18\x02 \x01(\x0b\x32\x12.hermes.DocAddress\"\x91\x01\n\x13GetDocumentResponse\x12\x37\n\x06\x66ields\x18\x01 \x03(\x0b\x32\'.hermes.GetDocumentResponse.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue:\x02\x38\x01\")\n\x13GetIndexInfoRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"\xbd\x01\n\x14GetIndexInfoResponse\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x10\n\x08num_docs\x18\x02 \x01(\r\x12\x14\n\x0cnum_segments\x18\x03 \x01(\r\x12\x0e\n\x06schema\x18\x04 \x01(\t\x12)\n\x0cmemory_stats\x18\x05 \x01(\x0b\x32\x13.hermes.MemoryStats\x12.\n\x0cvector_stats\x18\x06 \x03(\x0b\x32\x18.hermes.VectorFieldStats\"e\n\x10VectorFieldStats\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x13\n\x0bvector_type\x18\x02 \x01(\t\x12\x15\n\rtotal_vectors\x18\x03 \x01(\x04\x12\x11\n\tdimension\x18\x04 \x01(\r\"\x8c\x01\n\x0bMemoryStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x34\n\x0findexing_buffer\x18\x02 \x01(\x0b\x32\x1b.hermes.IndexingBufferStats\x12\x32\n\x0esegment_reader\x18\x03 \x01(\x0b\x32\x1a.hermes.SegmentReaderStats\"\xdf\x01\n\x13IndexingBufferStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x16\n\x0epostings_bytes\x18\x02 \x01(\x04\x12\x1c\n\x14sparse_vectors_bytes\x18\x03 \x01(\x04\x12\x1b\n\x13\x64\x65nse_vectors_bytes\x18\x04 \x01(\x04\x12\x16\n\x0einterner_bytes\x18\x05 \x01(\x04\x12\x1c\n\x14position_index_bytes\x18\x06 \x01(\x04\x12\x14\n\x0cpending_docs\x18\x07 \x01(\r\x12\x14\n\x0cunique_terms\x18\x08 \x01(\r\"\xb7\x01\n\x12SegmentReaderStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x1d\n\x15term_dict_cache_bytes\x18\x02 \x01(\x04\x12\x19\n\x11store_cache_bytes\x18\x03 \x01(\x04\x12\x1a\n\x12sparse_index_bytes\x18\x04 \x01(\x04\x12\x19\n\x11\x64\x65nse_index_bytes\x18\x05 \x01(\x04\x12\x1b\n\x13num_segments_loaded\x18\x06 \x01(\r\"8\n\x12\x43reateIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\"&\n\x13\x43reateIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"=\n\nFieldEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue\"3\n\rNamedDocument\x12\"\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x12.hermes.FieldEntry\"Z\n\x1a\x42\x61tchIndexDocumentsRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12(\n\tdocuments\x18\x02 \x03(\x0b\x32\x15.hermes.NamedDocument\"I\n\x1b\x42\x61tchIndexDocumentsResponse\x12\x15\n\rindexed_count\x18\x01 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\x02 \x01(\r\"N\n\x14IndexDocumentRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\"\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x12.hermes.FieldEntry\"/\n\x16IndexDocumentsResponse\x12\x15\n\rindexed_count\x18\x01 \x01(\r\"#\n\rCommitRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"3\n\x0e\x43ommitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x10\n\x08num_docs\x18\x02 \x01(\r\"\'\n\x11\x46orceMergeRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\";\n\x12\x46orceMergeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x14\n\x0cnum_segments\x18\x02 \x01(\r\"(\n\x12\x44\x65leteIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"&\n\x13\x44\x65leteIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\x14\n\x12ListIndexesRequest\"*\n\x13ListIndexesResponse\x12\x13\n\x0bindex_names\x18\x01 \x03(\t\"/\n\x19RetrainVectorIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"-\n\x1aRetrainVectorIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08*\x81\x01\n\x12MultiValueCombiner\x12\x18\n\x14\x43OMBINER_LOG_SUM_EXP\x10\x00\x12\x10\n\x0c\x43OMBINER_MAX\x10\x01\x12\x10\n\x0c\x43OMBINER_AVG\x10\x02\x12\x10\n\x0c\x43OMBINER_SUM\x10\x03\x12\x1b\n\x17\x43OMBINER_WEIGHTED_TOP_K\x10\x04\x32\xdb\x01\n\rSearchService\x12\x37\n\x06Search\x12\x15.hermes.SearchRequest\x1a\x16.hermes.SearchResponse\x12\x46\n\x0bGetDocument\x12\x1a.hermes.GetDocumentRequest\x1a\x1b.hermes.GetDocumentResponse\x12I\n\x0cGetIndexInfo\x12\x1b.hermes.GetIndexInfoRequest\x1a\x1c.hermes.GetIndexInfoResponse2\xf3\x04\n\x0cIndexService\x12\x46\n\x0b\x43reateIndex\x12\x1a.hermes.CreateIndexRequest\x1a\x1b.hermes.CreateIndexResponse\x12P\n\x0eIndexDocuments\x12\x1c.hermes.IndexDocumentRequest\x1a\x1e.hermes.IndexDocumentsResponse(\x01\x12^\n\x13\x42\x61tchIndexDocuments\x12\".hermes.BatchIndexDocumentsRequest\x1a#.hermes.BatchIndexDocumentsResponse\x12\x37\n\x06\x43ommit\x12\x15.hermes.CommitRequest\x1a\x16.hermes.CommitResponse\x12\x43\n\nForceMerge\x12\x19.hermes.ForceMergeRequest\x1a\x1a.hermes.ForceMergeResponse\x12\x46\n\x0b\x44\x65leteIndex\x12\x1a.hermes.DeleteIndexRequest\x1a\x1b.hermes.DeleteIndexResponse\x12\x46\n\x0bListIndexes\x12\x1a.hermes.ListIndexesRequest\x1a\x1b.hermes.ListIndexesResponse\x12[\n\x12RetrainVectorIndex\x12!.hermes.RetrainVectorIndexRequest\x1a\".hermes.RetrainVectorIndexResponseb\x06proto3')
28
+
29
+ _globals = globals()
30
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'hermes_pb2', _globals)
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
34
+ _globals['_SEARCHHIT_FIELDSENTRY']._loaded_options = None
35
+ _globals['_SEARCHHIT_FIELDSENTRY']._serialized_options = b'8\001'
36
+ _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._loaded_options = None
37
+ _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_options = b'8\001'
38
+ _globals['_MULTIVALUECOMBINER']._serialized_start=4744
39
+ _globals['_MULTIVALUECOMBINER']._serialized_end=4873
40
+ _globals['_QUERY']._serialized_start=25
41
+ _globals['_QUERY']._serialized_end=326
42
+ _globals['_SPARSEVECTORQUERY']._serialized_start=329
43
+ _globals['_SPARSEVECTORQUERY']._serialized_end=622
44
+ _globals['_DENSEVECTORQUERY']._serialized_start=625
45
+ _globals['_DENSEVECTORQUERY']._serialized_end=837
46
+ _globals['_TERMQUERY']._serialized_start=839
47
+ _globals['_TERMQUERY']._serialized_end=879
48
+ _globals['_BOOLEANQUERY']._serialized_start=881
49
+ _globals['_BOOLEANQUERY']._serialized_end=988
50
+ _globals['_BOOSTQUERY']._serialized_start=990
51
+ _globals['_BOOSTQUERY']._serialized_end=1047
52
+ _globals['_ALLQUERY']._serialized_start=1049
53
+ _globals['_ALLQUERY']._serialized_end=1059
54
+ _globals['_MATCHQUERY']._serialized_start=1061
55
+ _globals['_MATCHQUERY']._serialized_end=1102
56
+ _globals['_RERANKER']._serialized_start=1105
57
+ _globals['_RERANKER']._serialized_end=1310
58
+ _globals['_FILTER']._serialized_start=1313
59
+ _globals['_FILTER']._serialized_end=1499
60
+ _globals['_RANGEFILTER']._serialized_start=1501
61
+ _globals['_RANGEFILTER']._serialized_end=1566
62
+ _globals['_INFILTER']._serialized_start=1568
63
+ _globals['_INFILTER']._serialized_end=1639
64
+ _globals['_SEARCHREQUEST']._serialized_start=1642
65
+ _globals['_SEARCHREQUEST']._serialized_end=1831
66
+ _globals['_DOCADDRESS']._serialized_start=1833
67
+ _globals['_DOCADDRESS']._serialized_end=1881
68
+ _globals['_SEARCHHIT']._serialized_start=1884
69
+ _globals['_SEARCHHIT']._serialized_end=2107
70
+ _globals['_SEARCHHIT_FIELDSENTRY']._serialized_start=2042
71
+ _globals['_SEARCHHIT_FIELDSENTRY']._serialized_end=2107
72
+ _globals['_ORDINALSCORE']._serialized_start=2109
73
+ _globals['_ORDINALSCORE']._serialized_end=2155
74
+ _globals['_FIELDVALUE']._serialized_start=2158
75
+ _globals['_FIELDVALUE']._serialized_end=2377
76
+ _globals['_SPARSEVECTOR']._serialized_start=2379
77
+ _globals['_SPARSEVECTOR']._serialized_end=2426
78
+ _globals['_DENSEVECTOR']._serialized_start=2428
79
+ _globals['_DENSEVECTOR']._serialized_end=2457
80
+ _globals['_SEARCHRESPONSE']._serialized_start=2459
81
+ _globals['_SEARCHRESPONSE']._serialized_end=2585
82
+ _globals['_SEARCHTIMINGS']._serialized_start=2587
83
+ _globals['_SEARCHTIMINGS']._serialized_end=2675
84
+ _globals['_GETDOCUMENTREQUEST']._serialized_start=2677
85
+ _globals['_GETDOCUMENTREQUEST']._serialized_end=2754
86
+ _globals['_GETDOCUMENTRESPONSE']._serialized_start=2757
87
+ _globals['_GETDOCUMENTRESPONSE']._serialized_end=2902
88
+ _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_start=2042
89
+ _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_end=2107
90
+ _globals['_GETINDEXINFOREQUEST']._serialized_start=2904
91
+ _globals['_GETINDEXINFOREQUEST']._serialized_end=2945
92
+ _globals['_GETINDEXINFORESPONSE']._serialized_start=2948
93
+ _globals['_GETINDEXINFORESPONSE']._serialized_end=3137
94
+ _globals['_VECTORFIELDSTATS']._serialized_start=3139
95
+ _globals['_VECTORFIELDSTATS']._serialized_end=3240
96
+ _globals['_MEMORYSTATS']._serialized_start=3243
97
+ _globals['_MEMORYSTATS']._serialized_end=3383
98
+ _globals['_INDEXINGBUFFERSTATS']._serialized_start=3386
99
+ _globals['_INDEXINGBUFFERSTATS']._serialized_end=3609
100
+ _globals['_SEGMENTREADERSTATS']._serialized_start=3612
101
+ _globals['_SEGMENTREADERSTATS']._serialized_end=3795
102
+ _globals['_CREATEINDEXREQUEST']._serialized_start=3797
103
+ _globals['_CREATEINDEXREQUEST']._serialized_end=3853
104
+ _globals['_CREATEINDEXRESPONSE']._serialized_start=3855
105
+ _globals['_CREATEINDEXRESPONSE']._serialized_end=3893
106
+ _globals['_FIELDENTRY']._serialized_start=3895
107
+ _globals['_FIELDENTRY']._serialized_end=3956
108
+ _globals['_NAMEDDOCUMENT']._serialized_start=3958
109
+ _globals['_NAMEDDOCUMENT']._serialized_end=4009
110
+ _globals['_BATCHINDEXDOCUMENTSREQUEST']._serialized_start=4011
111
+ _globals['_BATCHINDEXDOCUMENTSREQUEST']._serialized_end=4101
112
+ _globals['_BATCHINDEXDOCUMENTSRESPONSE']._serialized_start=4103
113
+ _globals['_BATCHINDEXDOCUMENTSRESPONSE']._serialized_end=4176
114
+ _globals['_INDEXDOCUMENTREQUEST']._serialized_start=4178
115
+ _globals['_INDEXDOCUMENTREQUEST']._serialized_end=4256
116
+ _globals['_INDEXDOCUMENTSRESPONSE']._serialized_start=4258
117
+ _globals['_INDEXDOCUMENTSRESPONSE']._serialized_end=4305
118
+ _globals['_COMMITREQUEST']._serialized_start=4307
119
+ _globals['_COMMITREQUEST']._serialized_end=4342
120
+ _globals['_COMMITRESPONSE']._serialized_start=4344
121
+ _globals['_COMMITRESPONSE']._serialized_end=4395
122
+ _globals['_FORCEMERGEREQUEST']._serialized_start=4397
123
+ _globals['_FORCEMERGEREQUEST']._serialized_end=4436
124
+ _globals['_FORCEMERGERESPONSE']._serialized_start=4438
125
+ _globals['_FORCEMERGERESPONSE']._serialized_end=4497
126
+ _globals['_DELETEINDEXREQUEST']._serialized_start=4499
127
+ _globals['_DELETEINDEXREQUEST']._serialized_end=4539
128
+ _globals['_DELETEINDEXRESPONSE']._serialized_start=4541
129
+ _globals['_DELETEINDEXRESPONSE']._serialized_end=4579
130
+ _globals['_LISTINDEXESREQUEST']._serialized_start=4581
131
+ _globals['_LISTINDEXESREQUEST']._serialized_end=4601
132
+ _globals['_LISTINDEXESRESPONSE']._serialized_start=4603
133
+ _globals['_LISTINDEXESRESPONSE']._serialized_end=4645
134
+ _globals['_RETRAINVECTORINDEXREQUEST']._serialized_start=4647
135
+ _globals['_RETRAINVECTORINDEXREQUEST']._serialized_end=4694
136
+ _globals['_RETRAINVECTORINDEXRESPONSE']._serialized_start=4696
137
+ _globals['_RETRAINVECTORINDEXRESPONSE']._serialized_end=4741
138
+ _globals['_SEARCHSERVICE']._serialized_start=4876
139
+ _globals['_SEARCHSERVICE']._serialized_end=5095
140
+ _globals['_INDEXSERVICE']._serialized_start=5098
141
+ _globals['_INDEXSERVICE']._serialized_end=5725
142
+ # @@protoc_insertion_point(module_scope)
@@ -20,11 +20,19 @@ class Document:
20
20
  return self.fields.get(key, default)
21
21
 
22
22
 
23
+ @dataclass
24
+ class DocAddress:
25
+ """Unique document address: segment + local doc_id."""
26
+
27
+ segment_id: str
28
+ doc_id: int
29
+
30
+
23
31
  @dataclass
24
32
  class SearchHit:
25
33
  """A single search result."""
26
34
 
27
- doc_id: int
35
+ address: DocAddress
28
36
  score: float
29
37
  fields: dict[str, Any] = field(default_factory=dict)
30
38
 
@@ -49,6 +57,16 @@ class SearchResponse:
49
57
  timings: SearchTimings | None = None
50
58
 
51
59
 
60
+ @dataclass
61
+ class VectorFieldStats:
62
+ """Per-field vector statistics."""
63
+
64
+ field_name: str
65
+ vector_type: str # "dense" or "sparse"
66
+ total_vectors: int
67
+ dimension: int
68
+
69
+
52
70
  @dataclass
53
71
  class IndexInfo:
54
72
  """Information about an index."""
@@ -57,3 +75,4 @@ class IndexInfo:
57
75
  num_docs: int
58
76
  num_segments: int
59
77
  schema: str
78
+ vector_stats: list[VectorFieldStats] = field(default_factory=list)
@@ -1,132 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Generated by the protocol buffer compiler. DO NOT EDIT!
3
- # NO CHECKED-IN PROTOBUF GENCODE
4
- # source: hermes.proto
5
- # Protobuf Python Version: 6.31.1
6
- """Generated protocol buffer code."""
7
- from google.protobuf import descriptor as _descriptor
8
- from google.protobuf import descriptor_pool as _descriptor_pool
9
- from google.protobuf import runtime_version as _runtime_version
10
- from google.protobuf import symbol_database as _symbol_database
11
- from google.protobuf.internal import builder as _builder
12
- _runtime_version.ValidateProtobufRuntimeVersion(
13
- _runtime_version.Domain.PUBLIC,
14
- 6,
15
- 31,
16
- 1,
17
- '',
18
- 'hermes.proto'
19
- )
20
- # @@protoc_insertion_point(imports)
21
-
22
- _sym_db = _symbol_database.Default()
23
-
24
-
25
-
26
-
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0chermes.proto\x12\x06hermes\"\xad\x02\n\x05Query\x12!\n\x04term\x18\x01 \x01(\x0b\x32\x11.hermes.TermQueryH\x00\x12\'\n\x07\x62oolean\x18\x02 \x01(\x0b\x32\x14.hermes.BooleanQueryH\x00\x12#\n\x05\x62oost\x18\x03 \x01(\x0b\x32\x12.hermes.BoostQueryH\x00\x12\x1f\n\x03\x61ll\x18\x04 \x01(\x0b\x32\x10.hermes.AllQueryH\x00\x12\x32\n\rsparse_vector\x18\x05 \x01(\x0b\x32\x19.hermes.SparseVectorQueryH\x00\x12\x30\n\x0c\x64\x65nse_vector\x18\x06 \x01(\x0b\x32\x18.hermes.DenseVectorQueryH\x00\x12#\n\x05match\x18\x07 \x01(\x0b\x32\x12.hermes.MatchQueryH\x00\x42\x07\n\x05query\"\xe2\x01\n\x11SparseVectorQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0f\n\x07indices\x18\x02 \x03(\r\x12\x0e\n\x06values\x18\x03 \x03(\x02\x12\x0c\n\x04text\x18\x04 \x01(\t\x12,\n\x08\x63ombiner\x18\x05 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x13\n\x0bheap_factor\x18\x06 \x01(\x02\x12\x1c\n\x14\x63ombiner_temperature\x18\x07 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x08 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\t \x01(\x02\"\xd4\x01\n\x10\x44\x65nseVectorQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\x0e\n\x06nprobe\x18\x03 \x01(\r\x12\x15\n\rrerank_factor\x18\x04 \x01(\r\x12,\n\x08\x63ombiner\x18\x05 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x1c\n\x14\x63ombiner_temperature\x18\x06 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x07 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\x08 \x01(\x02\"(\n\tTermQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0c\n\x04term\x18\x02 \x01(\t\"k\n\x0c\x42ooleanQuery\x12\x1b\n\x04must\x18\x01 \x03(\x0b\x32\r.hermes.Query\x12\x1d\n\x06should\x18\x02 \x03(\x0b\x32\r.hermes.Query\x12\x1f\n\x08must_not\x18\x03 \x03(\x0b\x32\r.hermes.Query\"9\n\nBoostQuery\x12\x1c\n\x05query\x18\x01 \x01(\x0b\x32\r.hermes.Query\x12\r\n\x05\x62oost\x18\x02 \x01(\x02\"\n\n\x08\x41llQuery\")\n\nMatchQuery\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0c\n\x04text\x18\x02 \x01(\t\"\xcd\x01\n\x08Reranker\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x0e\n\x06vector\x18\x02 \x03(\x02\x12\r\n\x05limit\x18\x03 \x01(\r\x12,\n\x08\x63ombiner\x18\x04 \x01(\x0e\x32\x1a.hermes.MultiValueCombiner\x12\x1c\n\x14\x63ombiner_temperature\x18\x05 \x01(\x02\x12\x16\n\x0e\x63ombiner_top_k\x18\x06 \x01(\r\x12\x16\n\x0e\x63ombiner_decay\x18\x07 \x01(\x02\x12\x17\n\x0fmatryoshka_dims\x18\x08 \x01(\r\"\x9c\x01\n\rSearchRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x1c\n\x05query\x18\x02 \x01(\x0b\x32\r.hermes.Query\x12\r\n\x05limit\x18\x03 \x01(\r\x12\x0e\n\x06offset\x18\x04 \x01(\r\x12\x16\n\x0e\x66ields_to_load\x18\x05 \x03(\t\x12\"\n\x08reranker\x18\x06 \x01(\x0b\x32\x10.hermes.Reranker\"\xca\x01\n\tSearchHit\x12\x0e\n\x06\x64oc_id\x18\x01 \x01(\r\x12\r\n\x05score\x18\x02 \x01(\x02\x12-\n\x06\x66ields\x18\x03 \x03(\x0b\x32\x1d.hermes.SearchHit.FieldsEntry\x12,\n\x0eordinal_scores\x18\x04 \x03(\x0b\x32\x14.hermes.OrdinalScore\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue:\x02\x38\x01\".\n\x0cOrdinalScore\x12\x0f\n\x07ordinal\x18\x01 \x01(\r\x12\r\n\x05score\x18\x02 \x01(\x02\"\xdb\x01\n\nFieldValue\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12\r\n\x03u64\x18\x02 \x01(\x04H\x00\x12\r\n\x03i64\x18\x03 \x01(\x03H\x00\x12\r\n\x03\x66\x36\x34\x18\x04 \x01(\x01H\x00\x12\x15\n\x0b\x62ytes_value\x18\x05 \x01(\x0cH\x00\x12-\n\rsparse_vector\x18\x06 \x01(\x0b\x32\x14.hermes.SparseVectorH\x00\x12+\n\x0c\x64\x65nse_vector\x18\x07 \x01(\x0b\x32\x13.hermes.DenseVectorH\x00\x12\x14\n\njson_value\x18\x08 \x01(\tH\x00\x42\x07\n\x05value\"/\n\x0cSparseVector\x12\x0f\n\x07indices\x18\x01 \x03(\r\x12\x0e\n\x06values\x18\x02 \x03(\x02\"\x1d\n\x0b\x44\x65nseVector\x12\x0e\n\x06values\x18\x01 \x03(\x02\"~\n\x0eSearchResponse\x12\x1f\n\x04hits\x18\x01 \x03(\x0b\x32\x11.hermes.SearchHit\x12\x12\n\ntotal_hits\x18\x02 \x01(\r\x12\x0f\n\x07took_ms\x18\x03 \x01(\x04\x12&\n\x07timings\x18\x04 \x01(\x0b\x32\x15.hermes.SearchTimings\"X\n\rSearchTimings\x12\x11\n\tsearch_us\x18\x01 \x01(\x04\x12\x11\n\trerank_us\x18\x02 \x01(\x04\x12\x0f\n\x07load_us\x18\x03 \x01(\x04\x12\x10\n\x08total_us\x18\x04 \x01(\x04\"8\n\x12GetDocumentRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0e\n\x06\x64oc_id\x18\x02 \x01(\r\"\x91\x01\n\x13GetDocumentResponse\x12\x37\n\x06\x66ields\x18\x01 \x03(\x0b\x32\'.hermes.GetDocumentResponse.FieldsEntry\x1a\x41\n\x0b\x46ieldsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue:\x02\x38\x01\")\n\x13GetIndexInfoRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"\x8d\x01\n\x14GetIndexInfoResponse\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x10\n\x08num_docs\x18\x02 \x01(\r\x12\x14\n\x0cnum_segments\x18\x03 \x01(\r\x12\x0e\n\x06schema\x18\x04 \x01(\t\x12)\n\x0cmemory_stats\x18\x05 \x01(\x0b\x32\x13.hermes.MemoryStats\"\x8c\x01\n\x0bMemoryStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x34\n\x0findexing_buffer\x18\x02 \x01(\x0b\x32\x1b.hermes.IndexingBufferStats\x12\x32\n\x0esegment_reader\x18\x03 \x01(\x0b\x32\x1a.hermes.SegmentReaderStats\"\xdf\x01\n\x13IndexingBufferStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x16\n\x0epostings_bytes\x18\x02 \x01(\x04\x12\x1c\n\x14sparse_vectors_bytes\x18\x03 \x01(\x04\x12\x1b\n\x13\x64\x65nse_vectors_bytes\x18\x04 \x01(\x04\x12\x16\n\x0einterner_bytes\x18\x05 \x01(\x04\x12\x1c\n\x14position_index_bytes\x18\x06 \x01(\x04\x12\x14\n\x0cpending_docs\x18\x07 \x01(\r\x12\x14\n\x0cunique_terms\x18\x08 \x01(\r\"\xb7\x01\n\x12SegmentReaderStats\x12\x13\n\x0btotal_bytes\x18\x01 \x01(\x04\x12\x1d\n\x15term_dict_cache_bytes\x18\x02 \x01(\x04\x12\x19\n\x11store_cache_bytes\x18\x03 \x01(\x04\x12\x1a\n\x12sparse_index_bytes\x18\x04 \x01(\x04\x12\x19\n\x11\x64\x65nse_index_bytes\x18\x05 \x01(\x04\x12\x1b\n\x13num_segments_loaded\x18\x06 \x01(\r\"8\n\x12\x43reateIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0e\n\x06schema\x18\x02 \x01(\t\"&\n\x13\x43reateIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"=\n\nFieldEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.hermes.FieldValue\"3\n\rNamedDocument\x12\"\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x12.hermes.FieldEntry\"Z\n\x1a\x42\x61tchIndexDocumentsRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12(\n\tdocuments\x18\x02 \x03(\x0b\x32\x15.hermes.NamedDocument\"I\n\x1b\x42\x61tchIndexDocumentsResponse\x12\x15\n\rindexed_count\x18\x01 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\x02 \x01(\r\"N\n\x14IndexDocumentRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\"\n\x06\x66ields\x18\x02 \x03(\x0b\x32\x12.hermes.FieldEntry\"/\n\x16IndexDocumentsResponse\x12\x15\n\rindexed_count\x18\x01 \x01(\r\"#\n\rCommitRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"3\n\x0e\x43ommitResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x10\n\x08num_docs\x18\x02 \x01(\r\"\'\n\x11\x46orceMergeRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\";\n\x12\x46orceMergeResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x14\n\x0cnum_segments\x18\x02 \x01(\r\"(\n\x12\x44\x65leteIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"&\n\x13\x44\x65leteIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"\x14\n\x12ListIndexesRequest\"*\n\x13ListIndexesResponse\x12\x13\n\x0bindex_names\x18\x01 \x03(\t\"/\n\x19RetrainVectorIndexRequest\x12\x12\n\nindex_name\x18\x01 \x01(\t\"-\n\x1aRetrainVectorIndexResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08*\x81\x01\n\x12MultiValueCombiner\x12\x18\n\x14\x43OMBINER_LOG_SUM_EXP\x10\x00\x12\x10\n\x0c\x43OMBINER_MAX\x10\x01\x12\x10\n\x0c\x43OMBINER_AVG\x10\x02\x12\x10\n\x0c\x43OMBINER_SUM\x10\x03\x12\x1b\n\x17\x43OMBINER_WEIGHTED_TOP_K\x10\x04\x32\xdb\x01\n\rSearchService\x12\x37\n\x06Search\x12\x15.hermes.SearchRequest\x1a\x16.hermes.SearchResponse\x12\x46\n\x0bGetDocument\x12\x1a.hermes.GetDocumentRequest\x1a\x1b.hermes.GetDocumentResponse\x12I\n\x0cGetIndexInfo\x12\x1b.hermes.GetIndexInfoRequest\x1a\x1c.hermes.GetIndexInfoResponse2\xf3\x04\n\x0cIndexService\x12\x46\n\x0b\x43reateIndex\x12\x1a.hermes.CreateIndexRequest\x1a\x1b.hermes.CreateIndexResponse\x12P\n\x0eIndexDocuments\x12\x1c.hermes.IndexDocumentRequest\x1a\x1e.hermes.IndexDocumentsResponse(\x01\x12^\n\x13\x42\x61tchIndexDocuments\x12\".hermes.BatchIndexDocumentsRequest\x1a#.hermes.BatchIndexDocumentsResponse\x12\x37\n\x06\x43ommit\x12\x15.hermes.CommitRequest\x1a\x16.hermes.CommitResponse\x12\x43\n\nForceMerge\x12\x19.hermes.ForceMergeRequest\x1a\x1a.hermes.ForceMergeResponse\x12\x46\n\x0b\x44\x65leteIndex\x12\x1a.hermes.DeleteIndexRequest\x1a\x1b.hermes.DeleteIndexResponse\x12\x46\n\x0bListIndexes\x12\x1a.hermes.ListIndexesRequest\x1a\x1b.hermes.ListIndexesResponse\x12[\n\x12RetrainVectorIndex\x12!.hermes.RetrainVectorIndexRequest\x1a\".hermes.RetrainVectorIndexResponseb\x06proto3')
28
-
29
- _globals = globals()
30
- _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
31
- _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'hermes_pb2', _globals)
32
- if not _descriptor._USE_C_DESCRIPTORS:
33
- DESCRIPTOR._loaded_options = None
34
- _globals['_SEARCHHIT_FIELDSENTRY']._loaded_options = None
35
- _globals['_SEARCHHIT_FIELDSENTRY']._serialized_options = b'8\001'
36
- _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._loaded_options = None
37
- _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_options = b'8\001'
38
- _globals['_MULTIVALUECOMBINER']._serialized_start=4072
39
- _globals['_MULTIVALUECOMBINER']._serialized_end=4201
40
- _globals['_QUERY']._serialized_start=25
41
- _globals['_QUERY']._serialized_end=326
42
- _globals['_SPARSEVECTORQUERY']._serialized_start=329
43
- _globals['_SPARSEVECTORQUERY']._serialized_end=555
44
- _globals['_DENSEVECTORQUERY']._serialized_start=558
45
- _globals['_DENSEVECTORQUERY']._serialized_end=770
46
- _globals['_TERMQUERY']._serialized_start=772
47
- _globals['_TERMQUERY']._serialized_end=812
48
- _globals['_BOOLEANQUERY']._serialized_start=814
49
- _globals['_BOOLEANQUERY']._serialized_end=921
50
- _globals['_BOOSTQUERY']._serialized_start=923
51
- _globals['_BOOSTQUERY']._serialized_end=980
52
- _globals['_ALLQUERY']._serialized_start=982
53
- _globals['_ALLQUERY']._serialized_end=992
54
- _globals['_MATCHQUERY']._serialized_start=994
55
- _globals['_MATCHQUERY']._serialized_end=1035
56
- _globals['_RERANKER']._serialized_start=1038
57
- _globals['_RERANKER']._serialized_end=1243
58
- _globals['_SEARCHREQUEST']._serialized_start=1246
59
- _globals['_SEARCHREQUEST']._serialized_end=1402
60
- _globals['_SEARCHHIT']._serialized_start=1405
61
- _globals['_SEARCHHIT']._serialized_end=1607
62
- _globals['_SEARCHHIT_FIELDSENTRY']._serialized_start=1542
63
- _globals['_SEARCHHIT_FIELDSENTRY']._serialized_end=1607
64
- _globals['_ORDINALSCORE']._serialized_start=1609
65
- _globals['_ORDINALSCORE']._serialized_end=1655
66
- _globals['_FIELDVALUE']._serialized_start=1658
67
- _globals['_FIELDVALUE']._serialized_end=1877
68
- _globals['_SPARSEVECTOR']._serialized_start=1879
69
- _globals['_SPARSEVECTOR']._serialized_end=1926
70
- _globals['_DENSEVECTOR']._serialized_start=1928
71
- _globals['_DENSEVECTOR']._serialized_end=1957
72
- _globals['_SEARCHRESPONSE']._serialized_start=1959
73
- _globals['_SEARCHRESPONSE']._serialized_end=2085
74
- _globals['_SEARCHTIMINGS']._serialized_start=2087
75
- _globals['_SEARCHTIMINGS']._serialized_end=2175
76
- _globals['_GETDOCUMENTREQUEST']._serialized_start=2177
77
- _globals['_GETDOCUMENTREQUEST']._serialized_end=2233
78
- _globals['_GETDOCUMENTRESPONSE']._serialized_start=2236
79
- _globals['_GETDOCUMENTRESPONSE']._serialized_end=2381
80
- _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_start=1542
81
- _globals['_GETDOCUMENTRESPONSE_FIELDSENTRY']._serialized_end=1607
82
- _globals['_GETINDEXINFOREQUEST']._serialized_start=2383
83
- _globals['_GETINDEXINFOREQUEST']._serialized_end=2424
84
- _globals['_GETINDEXINFORESPONSE']._serialized_start=2427
85
- _globals['_GETINDEXINFORESPONSE']._serialized_end=2568
86
- _globals['_MEMORYSTATS']._serialized_start=2571
87
- _globals['_MEMORYSTATS']._serialized_end=2711
88
- _globals['_INDEXINGBUFFERSTATS']._serialized_start=2714
89
- _globals['_INDEXINGBUFFERSTATS']._serialized_end=2937
90
- _globals['_SEGMENTREADERSTATS']._serialized_start=2940
91
- _globals['_SEGMENTREADERSTATS']._serialized_end=3123
92
- _globals['_CREATEINDEXREQUEST']._serialized_start=3125
93
- _globals['_CREATEINDEXREQUEST']._serialized_end=3181
94
- _globals['_CREATEINDEXRESPONSE']._serialized_start=3183
95
- _globals['_CREATEINDEXRESPONSE']._serialized_end=3221
96
- _globals['_FIELDENTRY']._serialized_start=3223
97
- _globals['_FIELDENTRY']._serialized_end=3284
98
- _globals['_NAMEDDOCUMENT']._serialized_start=3286
99
- _globals['_NAMEDDOCUMENT']._serialized_end=3337
100
- _globals['_BATCHINDEXDOCUMENTSREQUEST']._serialized_start=3339
101
- _globals['_BATCHINDEXDOCUMENTSREQUEST']._serialized_end=3429
102
- _globals['_BATCHINDEXDOCUMENTSRESPONSE']._serialized_start=3431
103
- _globals['_BATCHINDEXDOCUMENTSRESPONSE']._serialized_end=3504
104
- _globals['_INDEXDOCUMENTREQUEST']._serialized_start=3506
105
- _globals['_INDEXDOCUMENTREQUEST']._serialized_end=3584
106
- _globals['_INDEXDOCUMENTSRESPONSE']._serialized_start=3586
107
- _globals['_INDEXDOCUMENTSRESPONSE']._serialized_end=3633
108
- _globals['_COMMITREQUEST']._serialized_start=3635
109
- _globals['_COMMITREQUEST']._serialized_end=3670
110
- _globals['_COMMITRESPONSE']._serialized_start=3672
111
- _globals['_COMMITRESPONSE']._serialized_end=3723
112
- _globals['_FORCEMERGEREQUEST']._serialized_start=3725
113
- _globals['_FORCEMERGEREQUEST']._serialized_end=3764
114
- _globals['_FORCEMERGERESPONSE']._serialized_start=3766
115
- _globals['_FORCEMERGERESPONSE']._serialized_end=3825
116
- _globals['_DELETEINDEXREQUEST']._serialized_start=3827
117
- _globals['_DELETEINDEXREQUEST']._serialized_end=3867
118
- _globals['_DELETEINDEXRESPONSE']._serialized_start=3869
119
- _globals['_DELETEINDEXRESPONSE']._serialized_end=3907
120
- _globals['_LISTINDEXESREQUEST']._serialized_start=3909
121
- _globals['_LISTINDEXESREQUEST']._serialized_end=3929
122
- _globals['_LISTINDEXESRESPONSE']._serialized_start=3931
123
- _globals['_LISTINDEXESRESPONSE']._serialized_end=3973
124
- _globals['_RETRAINVECTORINDEXREQUEST']._serialized_start=3975
125
- _globals['_RETRAINVECTORINDEXREQUEST']._serialized_end=4022
126
- _globals['_RETRAINVECTORINDEXRESPONSE']._serialized_start=4024
127
- _globals['_RETRAINVECTORINDEXRESPONSE']._serialized_end=4069
128
- _globals['_SEARCHSERVICE']._serialized_start=4204
129
- _globals['_SEARCHSERVICE']._serialized_end=4423
130
- _globals['_INDEXSERVICE']._serialized_start=4426
131
- _globals['_INDEXSERVICE']._serialized_end=5053
132
- # @@protoc_insertion_point(module_scope)