Skip to content

Commit bbecfc5

Browse files
authored
Merge branch 'main' into optimize-ls
2 parents 7d92fc5 + cd193b7 commit bbecfc5

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

python/cocoindex/cli.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import asyncio
21
import click
32
import datetime
43
from rich.console import Console

python/cocoindex/functions.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
"""All builtin functions."""
2-
from typing import Annotated, Any
2+
from typing import Annotated, Any, TYPE_CHECKING
33

4-
import sentence_transformers
54
from .typing import Float32, Vector, TypeAttr
65
from . import op, llm
76

7+
# Libraries that are heavy to import. Lazily import them later.
8+
if TYPE_CHECKING:
9+
import sentence_transformers
10+
811
class ParseJson(op.FunctionSpec):
912
"""Parse a text into a JSON object."""
1013

@@ -35,9 +38,10 @@ class SentenceTransformerEmbedExecutor:
3538
"""Executor for SentenceTransformerEmbed."""
3639

3740
spec: SentenceTransformerEmbed
38-
_model: sentence_transformers.SentenceTransformer
41+
_model: "sentence_transformers.SentenceTransformer"
3942

4043
def analyze(self, text):
44+
import sentence_transformers # pylint: disable=import-outside-toplevel
4145
args = self.spec.args or {}
4246
self._model = sentence_transformers.SentenceTransformer(self.spec.model, **args)
4347
dim = self._model.get_sentence_embedding_dimension()

python/cocoindex/op.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import dataclasses
66
import inspect
77

8-
from typing import get_type_hints, Protocol, Any, Callable, Awaitable, dataclass_transform
8+
from typing import Protocol, Any, Callable, Awaitable, dataclass_transform
99
from enum import Enum
1010

11-
from .typing import encode_enriched_type
11+
from .typing import encode_enriched_type, resolve_forward_ref
1212
from .convert import encode_engine_value, make_engine_value_decoder
1313
from . import _engine
1414

@@ -214,10 +214,11 @@ def _inner(cls: type[Executor]) -> type:
214214
"""
215215
Decorate a class to provide an executor for an op.
216216
"""
217-
type_hints = get_type_hints(cls)
217+
# Use `__annotations__` instead of `get_type_hints`, to avoid resolving forward references.
218+
type_hints = cls.__annotations__
218219
if 'spec' not in type_hints:
219220
raise TypeError("Expect a `spec` field with type hint")
220-
spec_cls = type_hints['spec']
221+
spec_cls = resolve_forward_ref(type_hints['spec'])
221222
sig = inspect.signature(cls.__call__)
222223
return _register_op_factory(
223224
category=spec_cls._op_category,

python/cocoindex/typing.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,8 @@ def encode_enriched_type(t) -> dict[str, Any] | None:
245245
return None
246246

247247
return encode_enriched_type_info(analyze_type_info(t))
248+
249+
def resolve_forward_ref(t):
250+
if t is str:
251+
return eval(t) # pylint: disable=eval-used
252+
return t

src/setup/driver.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,11 @@ fn group_resource_states<'a>(
215215
entry.existing.current = Some(current.clone());
216216
}
217217
if let Some(legacy_state_key) = &state.legacy_state_key {
218-
if !entry
218+
if entry
219219
.existing
220220
.legacy_state_key
221221
.as_ref()
222-
.map_or(false, |v| v == legacy_state_key)
222+
.map_or(false, |v| v != legacy_state_key)
223223
{
224224
warn!(
225225
"inconsistent legacy key: {:?}, {:?}",

0 commit comments

Comments
 (0)