cocoindex 0.2.20__cp311-abi3-macosx_11_0_arm64.whl → 0.2.21__cp311-abi3-macosx_11_0_arm64.whl
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.
Potentially problematic release.
This version of cocoindex might be problematic. Click here for more details.
- cocoindex/_engine.abi3.so +0 -0
- cocoindex/cli.py +1 -3
- cocoindex/engine_value.py +15 -13
- cocoindex/flow.py +4 -4
- cocoindex/op.py +262 -5
- cocoindex/typing.py +6 -6
- {cocoindex-0.2.20.dist-info → cocoindex-0.2.21.dist-info}/METADATA +1 -1
- {cocoindex-0.2.20.dist-info → cocoindex-0.2.21.dist-info}/RECORD +11 -11
- {cocoindex-0.2.20.dist-info → cocoindex-0.2.21.dist-info}/licenses/THIRD_PARTY_NOTICES.html +33 -27
- {cocoindex-0.2.20.dist-info → cocoindex-0.2.21.dist-info}/WHEEL +0 -0
- {cocoindex-0.2.20.dist-info → cocoindex-0.2.21.dist-info}/entry_points.txt +0 -0
cocoindex/_engine.abi3.so
CHANGED
|
Binary file
|
cocoindex/cli.py
CHANGED
|
@@ -84,9 +84,7 @@ def _load_user_app(app_target: str) -> None:
|
|
|
84
84
|
try:
|
|
85
85
|
load_user_app(app_target)
|
|
86
86
|
except UserAppLoaderError as e:
|
|
87
|
-
raise
|
|
88
|
-
f"Failed to load APP_TARGET '{app_target}': {e}"
|
|
89
|
-
) from e
|
|
87
|
+
raise ValueError(f"Failed to load APP_TARGET '{app_target}'") from e
|
|
90
88
|
|
|
91
89
|
add_user_app(app_target)
|
|
92
90
|
|
cocoindex/engine_value.py
CHANGED
|
@@ -70,6 +70,17 @@ def _is_type_kind_convertible_to(src_type_kind: str, dst_type_kind: str) -> bool
|
|
|
70
70
|
ANY_TYPE_INFO = analyze_type_info(inspect.Parameter.empty)
|
|
71
71
|
|
|
72
72
|
|
|
73
|
+
def make_engine_key_encoder(type_info: AnalyzedTypeInfo) -> Callable[[Any], Any]:
|
|
74
|
+
"""
|
|
75
|
+
Create an encoder closure for a key type.
|
|
76
|
+
"""
|
|
77
|
+
value_encoder = make_engine_value_encoder(type_info)
|
|
78
|
+
if isinstance(type_info.variant, AnalyzedBasicType):
|
|
79
|
+
return lambda value: [value_encoder(value)]
|
|
80
|
+
else:
|
|
81
|
+
return value_encoder
|
|
82
|
+
|
|
83
|
+
|
|
73
84
|
def make_engine_value_encoder(type_info: AnalyzedTypeInfo) -> Callable[[Any], Any]:
|
|
74
85
|
"""
|
|
75
86
|
Create an encoder closure for a specific type.
|
|
@@ -94,6 +105,9 @@ def make_engine_value_encoder(type_info: AnalyzedTypeInfo) -> Callable[[Any], An
|
|
|
94
105
|
# Otherwise it's a vector, falling into basic type in the engine.
|
|
95
106
|
|
|
96
107
|
if isinstance(variant, AnalyzedDictType):
|
|
108
|
+
key_type_info = analyze_type_info(variant.key_type)
|
|
109
|
+
key_encoder = make_engine_key_encoder(key_type_info)
|
|
110
|
+
|
|
97
111
|
value_type_info = analyze_type_info(variant.value_type)
|
|
98
112
|
if not isinstance(value_type_info.variant, AnalyzedStructType):
|
|
99
113
|
raise ValueError(
|
|
@@ -102,22 +116,10 @@ def make_engine_value_encoder(type_info: AnalyzedTypeInfo) -> Callable[[Any], An
|
|
|
102
116
|
)
|
|
103
117
|
value_encoder = make_engine_value_encoder(value_type_info)
|
|
104
118
|
|
|
105
|
-
key_type_info = analyze_type_info(variant.key_type)
|
|
106
|
-
key_encoder = make_engine_value_encoder(key_type_info)
|
|
107
|
-
if isinstance(key_type_info.variant, AnalyzedBasicType):
|
|
108
|
-
|
|
109
|
-
def encode_row(k: Any, v: Any) -> Any:
|
|
110
|
-
return [key_encoder(k)] + value_encoder(v)
|
|
111
|
-
|
|
112
|
-
else:
|
|
113
|
-
|
|
114
|
-
def encode_row(k: Any, v: Any) -> Any:
|
|
115
|
-
return key_encoder(k) + value_encoder(v)
|
|
116
|
-
|
|
117
119
|
def encode_struct_dict(value: Any) -> Any:
|
|
118
120
|
if not value:
|
|
119
121
|
return []
|
|
120
|
-
return [
|
|
122
|
+
return [key_encoder(k) + value_encoder(v) for k, v in value.items()]
|
|
121
123
|
|
|
122
124
|
return encode_struct_dict
|
|
123
125
|
|
cocoindex/flow.py
CHANGED
|
@@ -459,7 +459,9 @@ class _FlowBuilderState:
|
|
|
459
459
|
field_name_builder: _NameBuilder
|
|
460
460
|
|
|
461
461
|
def __init__(self, full_name: str):
|
|
462
|
-
self.engine_flow_builder = _engine.FlowBuilder(
|
|
462
|
+
self.engine_flow_builder = _engine.FlowBuilder(
|
|
463
|
+
full_name, execution_context.event_loop
|
|
464
|
+
)
|
|
463
465
|
self.field_name_builder = _NameBuilder()
|
|
464
466
|
|
|
465
467
|
def get_data_slice(self, v: Any) -> _engine.DataSlice:
|
|
@@ -931,9 +933,7 @@ def _create_lazy_flow(
|
|
|
931
933
|
flow_builder_state, flow_builder_state.engine_flow_builder.root_scope()
|
|
932
934
|
)
|
|
933
935
|
fl_def(FlowBuilder(flow_builder_state), root_scope)
|
|
934
|
-
return flow_builder_state.engine_flow_builder.build_flow(
|
|
935
|
-
execution_context.event_loop
|
|
936
|
-
)
|
|
936
|
+
return flow_builder_state.engine_flow_builder.build_flow()
|
|
937
937
|
|
|
938
938
|
return Flow(flow_name, _create_engine_flow)
|
|
939
939
|
|
cocoindex/op.py
CHANGED
|
@@ -9,22 +9,33 @@ from typing import (
|
|
|
9
9
|
Any,
|
|
10
10
|
Awaitable,
|
|
11
11
|
Callable,
|
|
12
|
+
Iterator,
|
|
12
13
|
Protocol,
|
|
13
14
|
dataclass_transform,
|
|
14
15
|
Annotated,
|
|
16
|
+
TypeVar,
|
|
17
|
+
Generic,
|
|
18
|
+
Literal,
|
|
15
19
|
get_args,
|
|
16
20
|
)
|
|
21
|
+
from collections.abc import AsyncIterator
|
|
17
22
|
|
|
18
23
|
from . import _engine # type: ignore
|
|
19
24
|
from .subprocess_exec import executor_stub
|
|
20
25
|
from .engine_object import dump_engine_object, load_engine_object
|
|
21
26
|
from .engine_value import (
|
|
27
|
+
make_engine_key_encoder,
|
|
22
28
|
make_engine_value_encoder,
|
|
23
29
|
make_engine_value_decoder,
|
|
24
30
|
make_engine_key_decoder,
|
|
25
31
|
make_engine_struct_decoder,
|
|
26
32
|
)
|
|
27
33
|
from .typing import (
|
|
34
|
+
KEY_FIELD_NAME,
|
|
35
|
+
AnalyzedTypeInfo,
|
|
36
|
+
StructSchema,
|
|
37
|
+
StructType,
|
|
38
|
+
TableType,
|
|
28
39
|
TypeAttr,
|
|
29
40
|
encode_enriched_type_info,
|
|
30
41
|
resolve_forward_ref,
|
|
@@ -96,12 +107,12 @@ class Executor(Protocol):
|
|
|
96
107
|
op_category: OpCategory
|
|
97
108
|
|
|
98
109
|
|
|
99
|
-
def _get_required_method(
|
|
100
|
-
method = getattr(
|
|
110
|
+
def _get_required_method(obj: type, name: str) -> Callable[..., Any]:
|
|
111
|
+
method = getattr(obj, name, None)
|
|
101
112
|
if method is None:
|
|
102
|
-
raise ValueError(f"Method {name}() is required for {
|
|
103
|
-
if not inspect.isfunction(method):
|
|
104
|
-
raise ValueError(f"
|
|
113
|
+
raise ValueError(f"Method {name}() is required for {obj}")
|
|
114
|
+
if not inspect.isfunction(method) and not inspect.ismethod(method):
|
|
115
|
+
raise ValueError(f"{obj}.{name}() is not a function; {method}")
|
|
105
116
|
return method
|
|
106
117
|
|
|
107
118
|
|
|
@@ -421,6 +432,252 @@ def function(**args: Any) -> Callable[[Callable[..., Any]], Callable[..., Any]]:
|
|
|
421
432
|
return _inner
|
|
422
433
|
|
|
423
434
|
|
|
435
|
+
########################################################
|
|
436
|
+
# Custom source connector
|
|
437
|
+
########################################################
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
@dataclasses.dataclass
|
|
441
|
+
class SourceReadOptions:
|
|
442
|
+
"""
|
|
443
|
+
The options for reading a source row.
|
|
444
|
+
This is argument for both `list()` and `get_value()` methods.
|
|
445
|
+
Note that in most cases (unless spelled out otherwise below) it's not a mandatory requirement, but more like a hint to say it's useful under the current context.
|
|
446
|
+
|
|
447
|
+
- include_ordinal: Whether to include the ordinal of the source row.
|
|
448
|
+
When provides_ordinal() returns True, you must provide `ordinal` in `list()` when `include_ordinal` is True.
|
|
449
|
+
It's optional for other cases. It's helpful to skip unnecessary reprocessing early, and avoid output from older version of input over-writing the latest one when there's concurrency (especially multiple processes) and source updates frequently.
|
|
450
|
+
|
|
451
|
+
- include_content_version_fp: Whether to include the content version fingerprint of the source row.
|
|
452
|
+
It's always optional even if this is True.
|
|
453
|
+
It's helpful to skip unnecessary reprocessing early.
|
|
454
|
+
You should only consider providing it if you can directly get it without computing the hash on the content.
|
|
455
|
+
|
|
456
|
+
- include_value: Whether to include the value of the source row.
|
|
457
|
+
You must provide it in `get_value()` when `include_value` is True.
|
|
458
|
+
It's optional for `list()`.
|
|
459
|
+
Consider providing it when it's significantly cheaper then calling another `get_value()` for each row.
|
|
460
|
+
It will save costs of individual `get_value()` calls.
|
|
461
|
+
"""
|
|
462
|
+
|
|
463
|
+
include_ordinal: bool = False
|
|
464
|
+
include_content_version_fp: bool = False
|
|
465
|
+
include_value: bool = False
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
K = TypeVar("K")
|
|
469
|
+
V = TypeVar("V")
|
|
470
|
+
|
|
471
|
+
NON_EXISTENCE: Literal["NON_EXISTENCE"] = "NON_EXISTENCE"
|
|
472
|
+
NO_ORDINAL: Literal["NO_ORDINAL"] = "NO_ORDINAL"
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
@dataclasses.dataclass
|
|
476
|
+
class PartialSourceRowData(Generic[V]):
|
|
477
|
+
"""
|
|
478
|
+
The data of a source row.
|
|
479
|
+
|
|
480
|
+
- value: The value of the source row. NON_EXISTENCE means the row does not exist.
|
|
481
|
+
- ordinal: The ordinal of the source row. NO_ORDINAL means ordinal is not available for the source.
|
|
482
|
+
- content_version_fp: The content version fingerprint of the source row.
|
|
483
|
+
"""
|
|
484
|
+
|
|
485
|
+
value: V | Literal["NON_EXISTENCE"] | None = None
|
|
486
|
+
ordinal: int | Literal["NO_ORDINAL"] | None = None
|
|
487
|
+
content_version_fp: bytes | None = None
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
@dataclasses.dataclass
|
|
491
|
+
class PartialSourceRow(Generic[K, V]):
|
|
492
|
+
key: K
|
|
493
|
+
data: PartialSourceRowData[V]
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
class _SourceExecutorContext:
|
|
497
|
+
_executor: Any
|
|
498
|
+
|
|
499
|
+
_key_encoder: Callable[[Any], Any]
|
|
500
|
+
_key_decoder: Callable[[Any], Any]
|
|
501
|
+
|
|
502
|
+
_value_encoder: Callable[[Any], Any]
|
|
503
|
+
|
|
504
|
+
_list_fn: Callable[
|
|
505
|
+
[SourceReadOptions],
|
|
506
|
+
AsyncIterator[PartialSourceRow[Any, Any]]
|
|
507
|
+
| Iterator[PartialSourceRow[Any, Any]],
|
|
508
|
+
]
|
|
509
|
+
_orig_get_value_fn: Callable[..., Any]
|
|
510
|
+
_get_value_fn: Callable[..., Awaitable[PartialSourceRowData[Any]]]
|
|
511
|
+
_provides_ordinal_fn: Callable[[], bool] | None
|
|
512
|
+
|
|
513
|
+
def __init__(
|
|
514
|
+
self,
|
|
515
|
+
executor: Any,
|
|
516
|
+
key_type_info: AnalyzedTypeInfo,
|
|
517
|
+
key_decoder: Callable[[Any], Any],
|
|
518
|
+
value_type_info: AnalyzedTypeInfo,
|
|
519
|
+
):
|
|
520
|
+
self._executor = executor
|
|
521
|
+
|
|
522
|
+
self._key_encoder = make_engine_key_encoder(key_type_info)
|
|
523
|
+
self._key_decoder = key_decoder
|
|
524
|
+
self._value_encoder = make_engine_value_encoder(value_type_info)
|
|
525
|
+
|
|
526
|
+
self._list_fn = _get_required_method(executor, "list")
|
|
527
|
+
self._orig_get_value_fn = _get_required_method(executor, "get_value")
|
|
528
|
+
self._get_value_fn = to_async_call(self._orig_get_value_fn)
|
|
529
|
+
self._provides_ordinal_fn = getattr(executor, "provides_ordinal", None)
|
|
530
|
+
|
|
531
|
+
def provides_ordinal(self) -> bool:
|
|
532
|
+
if self._provides_ordinal_fn is not None:
|
|
533
|
+
result = self._provides_ordinal_fn()
|
|
534
|
+
return bool(result)
|
|
535
|
+
else:
|
|
536
|
+
return False
|
|
537
|
+
|
|
538
|
+
async def list_async(
|
|
539
|
+
self, options: dict[str, Any]
|
|
540
|
+
) -> AsyncIterator[tuple[Any, dict[str, Any]]]:
|
|
541
|
+
"""
|
|
542
|
+
Return an async iterator that yields individual rows one by one.
|
|
543
|
+
Each yielded item is a tuple of (key, data).
|
|
544
|
+
"""
|
|
545
|
+
read_options = load_engine_object(SourceReadOptions, options)
|
|
546
|
+
args = _build_args(self._list_fn, 0, options=read_options)
|
|
547
|
+
list_result = self._list_fn(*args)
|
|
548
|
+
|
|
549
|
+
# Handle both sync and async iterators
|
|
550
|
+
if hasattr(list_result, "__aiter__"):
|
|
551
|
+
async for partial_row in list_result:
|
|
552
|
+
yield (
|
|
553
|
+
self._key_encoder(partial_row.key),
|
|
554
|
+
self._encode_source_row_data(partial_row.data),
|
|
555
|
+
)
|
|
556
|
+
else:
|
|
557
|
+
for partial_row in list_result:
|
|
558
|
+
yield (
|
|
559
|
+
self._key_encoder(partial_row.key),
|
|
560
|
+
self._encode_source_row_data(partial_row.data),
|
|
561
|
+
)
|
|
562
|
+
|
|
563
|
+
async def get_value_async(
|
|
564
|
+
self,
|
|
565
|
+
raw_key: Any,
|
|
566
|
+
options: dict[str, Any],
|
|
567
|
+
) -> dict[str, Any]:
|
|
568
|
+
key = self._key_decoder(raw_key)
|
|
569
|
+
read_options = load_engine_object(SourceReadOptions, options)
|
|
570
|
+
args = _build_args(self._orig_get_value_fn, 1, key=key, options=read_options)
|
|
571
|
+
row_data = await self._get_value_fn(*args)
|
|
572
|
+
return self._encode_source_row_data(row_data)
|
|
573
|
+
|
|
574
|
+
def _encode_source_row_data(
|
|
575
|
+
self, row_data: PartialSourceRowData[Any]
|
|
576
|
+
) -> dict[str, Any]:
|
|
577
|
+
"""Convert Python PartialSourceRowData to the format expected by Rust."""
|
|
578
|
+
return {
|
|
579
|
+
"ordinal": row_data.ordinal,
|
|
580
|
+
"content_version_fp": row_data.content_version_fp,
|
|
581
|
+
"value": (
|
|
582
|
+
NON_EXISTENCE
|
|
583
|
+
if row_data.value == NON_EXISTENCE
|
|
584
|
+
else self._value_encoder(row_data.value)
|
|
585
|
+
),
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
class _SourceConnector:
|
|
590
|
+
"""
|
|
591
|
+
The connector class passed to the engine.
|
|
592
|
+
"""
|
|
593
|
+
|
|
594
|
+
_spec_cls: type[Any]
|
|
595
|
+
_key_type_info: AnalyzedTypeInfo
|
|
596
|
+
_key_decoder: Callable[[Any], Any]
|
|
597
|
+
_value_type_info: AnalyzedTypeInfo
|
|
598
|
+
_table_type: EnrichedValueType
|
|
599
|
+
_connector_cls: type[Any]
|
|
600
|
+
|
|
601
|
+
_create_fn: Callable[[Any], Awaitable[Any]]
|
|
602
|
+
|
|
603
|
+
def __init__(
|
|
604
|
+
self,
|
|
605
|
+
spec_cls: type[Any],
|
|
606
|
+
key_type: Any,
|
|
607
|
+
value_type: Any,
|
|
608
|
+
connector_cls: type[Any],
|
|
609
|
+
):
|
|
610
|
+
self._spec_cls = spec_cls
|
|
611
|
+
self._key_type_info = analyze_type_info(key_type)
|
|
612
|
+
self._value_type_info = analyze_type_info(value_type)
|
|
613
|
+
self._connector_cls = connector_cls
|
|
614
|
+
|
|
615
|
+
# TODO: We can save the intermediate step after #1083 is fixed.
|
|
616
|
+
encoded_engine_key_type = encode_enriched_type_info(self._key_type_info)
|
|
617
|
+
engine_key_type = EnrichedValueType.decode(encoded_engine_key_type)
|
|
618
|
+
|
|
619
|
+
# TODO: We can save the intermediate step after #1083 is fixed.
|
|
620
|
+
encoded_engine_value_type = encode_enriched_type_info(self._value_type_info)
|
|
621
|
+
engine_value_type = EnrichedValueType.decode(encoded_engine_value_type)
|
|
622
|
+
|
|
623
|
+
if not isinstance(engine_value_type.type, StructType):
|
|
624
|
+
raise ValueError(f"Expected a StructType, got {engine_value_type.type}")
|
|
625
|
+
|
|
626
|
+
if isinstance(engine_key_type.type, StructType):
|
|
627
|
+
key_fields_schema = engine_key_type.type.fields
|
|
628
|
+
else:
|
|
629
|
+
key_fields_schema = [
|
|
630
|
+
FieldSchema(name=KEY_FIELD_NAME, value_type=engine_key_type)
|
|
631
|
+
]
|
|
632
|
+
self._key_decoder = make_engine_key_decoder(
|
|
633
|
+
[], key_fields_schema, self._key_type_info
|
|
634
|
+
)
|
|
635
|
+
self._table_type = EnrichedValueType(
|
|
636
|
+
type=TableType(
|
|
637
|
+
kind="KTable",
|
|
638
|
+
row=StructSchema(
|
|
639
|
+
fields=key_fields_schema + engine_value_type.type.fields
|
|
640
|
+
),
|
|
641
|
+
num_key_parts=len(key_fields_schema),
|
|
642
|
+
),
|
|
643
|
+
)
|
|
644
|
+
|
|
645
|
+
self._create_fn = to_async_call(_get_required_method(connector_cls, "create"))
|
|
646
|
+
|
|
647
|
+
async def create_executor(self, raw_spec: dict[str, Any]) -> _SourceExecutorContext:
|
|
648
|
+
spec = load_engine_object(self._spec_cls, raw_spec)
|
|
649
|
+
executor = await self._create_fn(spec)
|
|
650
|
+
return _SourceExecutorContext(
|
|
651
|
+
executor, self._key_type_info, self._key_decoder, self._value_type_info
|
|
652
|
+
)
|
|
653
|
+
|
|
654
|
+
def get_table_type(self) -> Any:
|
|
655
|
+
return dump_engine_object(self._table_type)
|
|
656
|
+
|
|
657
|
+
|
|
658
|
+
def source_connector(
|
|
659
|
+
*,
|
|
660
|
+
spec_cls: type[Any],
|
|
661
|
+
key_type: Any = Any,
|
|
662
|
+
value_type: Any = Any,
|
|
663
|
+
) -> Callable[[type], type]:
|
|
664
|
+
"""
|
|
665
|
+
Decorate a class to provide a source connector for an op.
|
|
666
|
+
"""
|
|
667
|
+
|
|
668
|
+
# Validate the spec_cls is a SourceSpec.
|
|
669
|
+
if not issubclass(spec_cls, SourceSpec):
|
|
670
|
+
raise ValueError(f"Expect a SourceSpec, got {spec_cls}")
|
|
671
|
+
|
|
672
|
+
# Register the source connector.
|
|
673
|
+
def _inner(connector_cls: type) -> type:
|
|
674
|
+
connector = _SourceConnector(spec_cls, key_type, value_type, connector_cls)
|
|
675
|
+
_engine.register_source_connector(spec_cls.__name__, connector)
|
|
676
|
+
return connector_cls
|
|
677
|
+
|
|
678
|
+
return _inner
|
|
679
|
+
|
|
680
|
+
|
|
424
681
|
########################################################
|
|
425
682
|
# Custom target connector
|
|
426
683
|
########################################################
|
cocoindex/typing.py
CHANGED
|
@@ -475,16 +475,16 @@ def _encode_type(type_info: AnalyzedTypeInfo) -> dict[str, Any]:
|
|
|
475
475
|
}
|
|
476
476
|
|
|
477
477
|
|
|
478
|
-
def encode_enriched_type_info(
|
|
478
|
+
def encode_enriched_type_info(type_info: AnalyzedTypeInfo) -> dict[str, Any]:
|
|
479
479
|
"""
|
|
480
|
-
Encode an
|
|
480
|
+
Encode an `AnalyzedTypeInfo` to a CocoIndex engine's `EnrichedValueType` representation
|
|
481
481
|
"""
|
|
482
|
-
encoded: dict[str, Any] = {"type": _encode_type(
|
|
482
|
+
encoded: dict[str, Any] = {"type": _encode_type(type_info)}
|
|
483
483
|
|
|
484
|
-
if
|
|
485
|
-
encoded["attrs"] =
|
|
484
|
+
if type_info.attrs is not None:
|
|
485
|
+
encoded["attrs"] = type_info.attrs
|
|
486
486
|
|
|
487
|
-
if
|
|
487
|
+
if type_info.nullable:
|
|
488
488
|
encoded["nullable"] = True
|
|
489
489
|
|
|
490
490
|
return encoded
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
cocoindex-0.2.
|
|
2
|
-
cocoindex-0.2.
|
|
3
|
-
cocoindex-0.2.
|
|
4
|
-
cocoindex-0.2.
|
|
1
|
+
cocoindex-0.2.21.dist-info/METADATA,sha256=dmcpI0cptqzSRSMvU4SdifiOithkSaYcgIPZCEBp2Mk,13644
|
|
2
|
+
cocoindex-0.2.21.dist-info/WHEEL,sha256=kelVgS1CONjYuT6OEIC92ofaP9Aiw74EQCpLzMjs2Gg,103
|
|
3
|
+
cocoindex-0.2.21.dist-info/entry_points.txt,sha256=_NretjYVzBdNTn7dK-zgwr7YfG2afz1u1uSE-5bZXF8,46
|
|
4
|
+
cocoindex-0.2.21.dist-info/licenses/THIRD_PARTY_NOTICES.html,sha256=_rafrUNfyvjjCzp4oqD9ti424cq-OkzpGbOW9RFmwls,719655
|
|
5
5
|
cocoindex/__init__.py,sha256=6qZWVkK4WZ01BIAg3CPh_bRRdA6Clk4d4Q6OnZ2jFa4,2630
|
|
6
|
-
cocoindex/_engine.abi3.so,sha256=
|
|
6
|
+
cocoindex/_engine.abi3.so,sha256=jJLUooHUllXpt1kaQQriL3XRb5RBMybFnkaaV0fkasI,66844752
|
|
7
7
|
cocoindex/auth_registry.py,sha256=g-uLDWLYW5NMbYe7q4Y-sU5dSyrlJXBEciyWtAiP9KE,1340
|
|
8
|
-
cocoindex/cli.py,sha256=
|
|
8
|
+
cocoindex/cli.py,sha256=vk_YtGMPXTuu1U4J_VxzjWfTFv8Fu3tdyaVocpoxb5g,23941
|
|
9
9
|
cocoindex/engine_object.py,sha256=5YTuWoR3WILhyt3PW-d9es3MAas_xD6tZZqvipN-sjg,10050
|
|
10
|
-
cocoindex/engine_value.py,sha256=
|
|
11
|
-
cocoindex/flow.py,sha256=
|
|
10
|
+
cocoindex/engine_value.py,sha256=WJw8ymYAqF2CCyg9SBiQzx8z9bl7XNVuD6ffgYvRRWQ,23277
|
|
11
|
+
cocoindex/flow.py,sha256=xDz3rOo4RhbboknvC-KnbWq8RBykEO0YsjGSBfXqIEg,40076
|
|
12
12
|
cocoindex/functions/__init__.py,sha256=V2IF4h-Cqq4OD_GN3Oqdry-FArORyRCKmqJ7g5UlJr8,1021
|
|
13
13
|
cocoindex/functions/_engine_builtin_specs.py,sha256=WpCGrjUfJBa8xZP5JiEmA8kLu7fp9Rcs7ynpuJmvSGg,1786
|
|
14
14
|
cocoindex/functions/colpali.py,sha256=oACyG3qG2dquyCJ6bT7FkMkua5rXDLSxnOHcgoz9waU,8865
|
|
@@ -16,7 +16,7 @@ cocoindex/functions/sbert.py,sha256=1z5OJT-blXT6tVN5vEvEzvYAzOnzs1RCnu1UbCUP6wM,
|
|
|
16
16
|
cocoindex/index.py,sha256=tz5ilvmOp0BtroGehCQDqWK_pIX9m6ghkhcxsDVU8WE,982
|
|
17
17
|
cocoindex/lib.py,sha256=spfdU4IbzdffHyGdrQPIw_qGo9aX0OAAboqsjj8bTiQ,2290
|
|
18
18
|
cocoindex/llm.py,sha256=8ZdJhOmhdb2xEcCxk6rDpnj6hlhCyFBmJdhCNMqAOP4,875
|
|
19
|
-
cocoindex/op.py,sha256=
|
|
19
|
+
cocoindex/op.py,sha256=TO-ETk3qXgnNS51NlWuLrOw_TfQ2mw83-_iswqULcQI,36095
|
|
20
20
|
cocoindex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
cocoindex/query_handler.py,sha256=X-SQT71LHiOOXn6-TJlQcGodJk-iT8p_1TcIMvRLBRI,1344
|
|
22
22
|
cocoindex/runtime.py,sha256=4NxcltaDZvA3RR3Pnt6gH_f99jcWSyMH_1Xi5BjbtwY,1342
|
|
@@ -35,8 +35,8 @@ cocoindex/tests/test_optional_database.py,sha256=snAmkNa6wtOSaxoZE1HgjvL5v_ylitt
|
|
|
35
35
|
cocoindex/tests/test_transform_flow.py,sha256=G69w-n-vnCTo3r9hVIk2lJNAQEkGUA7PZfHsXna3oS0,6030
|
|
36
36
|
cocoindex/tests/test_typing.py,sha256=JoR-oMK-ZWjOGQi0pH5Etg5jp4oL_JSIreGBH247GCg,16291
|
|
37
37
|
cocoindex/tests/test_validation.py,sha256=X6AQzVs-hVKIXcrHMEMQnhfUE8at7iXQnPq8nHNhZ2Q,4543
|
|
38
|
-
cocoindex/typing.py,sha256=
|
|
38
|
+
cocoindex/typing.py,sha256=qQj5uM6XAKHzRJ2BIEs7X-xeOXVcM9p_xz5SVqPVvS8,23914
|
|
39
39
|
cocoindex/user_app_loader.py,sha256=bc3Af-gYRxJ9GpObtpjegZY855oQBCv5FGkrkWV2yGY,1873
|
|
40
40
|
cocoindex/utils.py,sha256=hUhX-XV6XGCtJSEIpBOuDv6VvqImwPlgBxztBTw7u0U,598
|
|
41
41
|
cocoindex/validation.py,sha256=PZnJoby4sLbsmPv9fOjOQXuefjfZ7gmtsiTGU8SH-tc,3090
|
|
42
|
-
cocoindex-0.2.
|
|
42
|
+
cocoindex-0.2.21.dist-info/RECORD,,
|
|
@@ -2428,7 +2428,7 @@ Software.
|
|
|
2428
2428
|
<h3 id="Apache-2.0">Apache License 2.0</h3>
|
|
2429
2429
|
<h4>Used by:</h4>
|
|
2430
2430
|
<ul class="license-used-by">
|
|
2431
|
-
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.
|
|
2431
|
+
<li><a href=" https://crates.io/crates/cocoindex ">cocoindex 0.2.21</a></li>
|
|
2432
2432
|
<li><a href=" https://github.com/awesomized/crc-fast-rust ">crc-fast 1.3.0</a></li>
|
|
2433
2433
|
<li><a href=" https://github.com/qdrant/rust-client ">qdrant-client 1.15.0</a></li>
|
|
2434
2434
|
</ul>
|
|
@@ -10677,6 +10677,38 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
10677
10677
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
10678
10678
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
10679
10679
|
THE SOFTWARE.</pre>
|
|
10680
|
+
</li>
|
|
10681
|
+
<li class="license">
|
|
10682
|
+
<h3 id="MIT">MIT License</h3>
|
|
10683
|
+
<h4>Used by:</h4>
|
|
10684
|
+
<ul class="license-used-by">
|
|
10685
|
+
<li><a href=" https://github.com/tree-sitter/tree-sitter-scala ">tree-sitter-scala 0.24.0</a></li>
|
|
10686
|
+
</ul>
|
|
10687
|
+
<pre class="license-text">(The MIT License)
|
|
10688
|
+
|
|
10689
|
+
Copyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>
|
|
10690
|
+
|
|
10691
|
+
Permission is hereby granted, free of charge, to any person
|
|
10692
|
+
obtaining a copy of this software and associated documentation
|
|
10693
|
+
files (the "Software"), to deal in the Software without
|
|
10694
|
+
restriction, including without limitation the rights to use,
|
|
10695
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10696
|
+
copies of the Software, and to permit persons to whom the
|
|
10697
|
+
Software is furnished to do so, subject to the following
|
|
10698
|
+
conditions:
|
|
10699
|
+
|
|
10700
|
+
The above copyright notice and this permission notice shall be
|
|
10701
|
+
included in all copies or substantial portions of the Software.
|
|
10702
|
+
|
|
10703
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
10704
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
10705
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
10706
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
10707
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
10708
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
10709
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
10710
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
10711
|
+
</pre>
|
|
10680
10712
|
</li>
|
|
10681
10713
|
<li class="license">
|
|
10682
10714
|
<h3 id="MIT">MIT License</h3>
|
|
@@ -12300,32 +12332,6 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
12300
12332
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
12301
12333
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
12302
12334
|
THE SOFTWARE.
|
|
12303
|
-
</pre>
|
|
12304
|
-
</li>
|
|
12305
|
-
<li class="license">
|
|
12306
|
-
<h3 id="MIT">MIT License</h3>
|
|
12307
|
-
<h4>Used by:</h4>
|
|
12308
|
-
<ul class="license-used-by">
|
|
12309
|
-
<li><a href=" https://github.com/tree-sitter/tree-sitter-scala ">tree-sitter-scala 0.24.0</a></li>
|
|
12310
|
-
</ul>
|
|
12311
|
-
<pre class="license-text">This software is released under the MIT license:
|
|
12312
|
-
|
|
12313
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
12314
|
-
this software and associated documentation files (the "Software"), to deal in
|
|
12315
|
-
the Software without restriction, including without limitation the rights to
|
|
12316
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
12317
|
-
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
12318
|
-
subject to the following conditions:
|
|
12319
|
-
|
|
12320
|
-
The above copyright notice and this permission notice shall be included in all
|
|
12321
|
-
copies or substantial portions of the Software.
|
|
12322
|
-
|
|
12323
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
12324
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
12325
|
-
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
12326
|
-
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
12327
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
12328
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12329
12335
|
</pre>
|
|
12330
12336
|
</li>
|
|
12331
12337
|
<li class="license">
|
|
File without changes
|
|
File without changes
|