From 49fdbe45b79e9055364881999007888bf1cba0c8 Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Sat, 16 Aug 2025 11:28:45 -0700 Subject: [PATCH] chore: vscode ruff, and format --- .gitignore | 1 + .vscode/extensions.json | 5 +++++ .vscode/settings.json | 22 +++++++++++++++++++++ packages/leann-core/src/leann/api.py | 7 ++++--- packages/leann-core/src/leann/chat.py | 24 +++++++++++++++-------- packages/leann-core/src/leann/cli.py | 4 ++-- packages/leann-core/src/leann/registry.py | 4 ++-- pyproject.toml | 22 ++------------------- 8 files changed, 54 insertions(+), 35 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 821f602..7563979 100755 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ demo/experiment_results/**/*.json *.eml *.emlx *.json +!.vscode/*.json *.sh *.txt !CMakeLists.txt diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..e6a7fad --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "charliermarsh.ruff", + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3e1a508 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "python.defaultInterpreterPath": ".venv/bin/python", + "python.terminal.activateEnvironment": true, + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit", + "source.fixAll": "explicit" + }, + "editor.insertSpaces": true, + "editor.tabSize": 4 + }, + "ruff.enable": true, + "files.watcherExclude": { + "**/.venv/**": true, + "**/__pycache__/**": true, + "**/*.egg-info/**": true, + "**/build/**": true, + "**/dist/**": true + } +} diff --git a/packages/leann-core/src/leann/api.py b/packages/leann-core/src/leann/api.py index a00b6f9..ec32569 100644 --- a/packages/leann-core/src/leann/api.py +++ b/packages/leann-core/src/leann/api.py @@ -614,7 +614,7 @@ class LeannSearcher: zmq_port=zmq_port, ) # logger.info(f" Generated embedding shape: {query_embedding.shape}") - time.time() - start_time + # time.time() - start_time # logger.info(f" Embedding time: {embedding_time} seconds") start_time = time.time() @@ -680,8 +680,9 @@ class LeannSearcher: This method should be called after you're done using the searcher, especially in test environments or batch processing scenarios. """ - if hasattr(self.backend_impl, "embedding_server_manager"): - self.backend_impl.embedding_server_manager.stop_server() + backend = getattr(self.backend_impl, "embedding_server_manager", None) + if backend is not None: + backend.stop_server() # Enable automatic cleanup patterns def __enter__(self): diff --git a/packages/leann-core/src/leann/chat.py b/packages/leann-core/src/leann/chat.py index a428462..391c59d 100644 --- a/packages/leann-core/src/leann/chat.py +++ b/packages/leann-core/src/leann/chat.py @@ -707,20 +707,28 @@ class GeminiChat(LLMInterface): logger.info(f"Sending request to Gemini with model {self.model}") try: - # Set generation configuration - generation_config = { - "temperature": kwargs.get("temperature", 0.7), - "max_output_tokens": kwargs.get("max_tokens", 1000), - } + from google.genai.types import GenerateContentConfig + + generation_config = GenerateContentConfig( + temperature=kwargs.get("temperature", 0.7), + max_output_tokens=kwargs.get("max_tokens", 1000), + ) # Handle top_p parameter if "top_p" in kwargs: - generation_config["top_p"] = kwargs["top_p"] + generation_config.top_p = kwargs["top_p"] response = self.client.models.generate_content( - model=self.model, contents=prompt, config=generation_config + model=self.model, + contents=prompt, + config=generation_config, ) - return response.text.strip() + # Handle potential None response text + response_text = response.text + if response_text is None: + logger.warning("Gemini returned None response text") + return "" + return response_text.strip() except Exception as e: logger.error(f"Error communicating with Gemini: {e}") return f"Error: Could not get a response from Gemini. Details: {e}" diff --git a/packages/leann-core/src/leann/cli.py b/packages/leann-core/src/leann/cli.py index 021f7d6..36a03af 100644 --- a/packages/leann-core/src/leann/cli.py +++ b/packages/leann-core/src/leann/cli.py @@ -1,7 +1,7 @@ import argparse import asyncio from pathlib import Path -from typing import Union +from typing import Optional, Union from llama_index.core import SimpleDirectoryReader from llama_index.core.node_parser import SentenceSplitter @@ -647,7 +647,7 @@ Examples: return False def _delete_index_directory( - self, index_dir: Path, index_name: str, project_path: Path | None = None + self, index_dir: Path, index_name: str, project_path: Optional[Path] = None ): """Actually delete the index directory""" try: diff --git a/packages/leann-core/src/leann/registry.py b/packages/leann-core/src/leann/registry.py index 25d2235..6778745 100644 --- a/packages/leann-core/src/leann/registry.py +++ b/packages/leann-core/src/leann/registry.py @@ -5,7 +5,7 @@ import importlib.metadata import json import logging from pathlib import Path -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Optional, Union if TYPE_CHECKING: from leann.interface import LeannBackendFactoryInterface @@ -47,7 +47,7 @@ def autodiscover_backends(): # print("INFO: Backend auto-discovery finished.") -def register_project_directory(project_dir: str | Path | None = None): +def register_project_directory(project_dir: Optional[Union[str, Path]] = None): """ Register a project directory in the global LEANN registry. diff --git a/pyproject.toml b/pyproject.toml index 9aa3db3..3267332 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,8 +14,6 @@ dependencies = [ "numpy>=1.26.0", "torch", "tqdm", - "flask", - "flask_compress", "datasets>=2.15.0", "evaluate", "colorama", @@ -66,9 +64,7 @@ test = [ "pytest>=7.0", "pytest-timeout>=2.0", "llama-index-core>=0.12.0", - "llama-index-readers-file>=0.4.0", "python-dotenv>=1.0.0", - "sentence-transformers>=2.2.0", ] diskann = [ @@ -100,13 +96,8 @@ leann-backend-hnsw = { path = "packages/leann-backend-hnsw", editable = true } [tool.ruff] target-version = "py39" line-length = 100 -extend-exclude = [ - "third_party", - "*.egg-info", - "__pycache__", - ".git", - ".venv", -] +extend-exclude = ["third_party"] + [tool.ruff.lint] select = [ @@ -129,21 +120,12 @@ ignore = [ "RUF012", # mutable class attributes should be annotated with typing.ClassVar ] -[tool.ruff.lint.per-file-ignores] -"test/**/*.py" = ["E402"] # module level import not at top of file (common in tests) -"examples/**/*.py" = ["E402"] # module level import not at top of file (common in examples) - [tool.ruff.format] quote-style = "double" indent-style = "space" skip-magic-trailing-comma = false line-ending = "auto" -[dependency-groups] -dev = [ - "ruff>=0.12.4", -] - [tool.lychee] accept = ["200", "403", "429", "503"] timeout = 20