Skip to content

📦 Optional reranker deps + lazy langchain_classic.agents import - #2

Merged
GiorgosPanagopoulos merged 1 commit into
mainfrom
refactor/optional-reranker-deps
Jul 27, 2026
Merged

📦 Optional reranker deps + lazy langchain_classic.agents import#2
GiorgosPanagopoulos merged 1 commit into
mainfrom
refactor/optional-reranker-deps

Conversation

@GiorgosPanagopoulos

Copy link
Copy Markdown
Owner

Πρόβλημα

Το import routers.chat έπαιρνε ~7s. Η αλυσίδα ήταν
agent/executor.py → langchain_classic.agents → sentence_transformers → transformers → torch. Παράλληλα, τα βαριά ML πακέτα ήταν υποχρεωτικά στο
default install ενώ ο reranker είναι opt-in (USE_RERANKER=false).

Αλλαγές

  • backend/requirements-rerank.txt (νέο): sentence-transformers>=3.0.0.
    Τα torch/transformers/tokenizers έρχονται transitively - δεν υπήρχαν ποτέ
    explicit pins.
  • backend/requirements.txt: αφαίρεση της γραμμής + pointer στο optional file.
  • rag/reranker.py: ImportError → RuntimeError με το ακριβές install command.
    Τα υπόλοιπα exceptions γίνονται log.error με ρητή αναφορά ότι το
    retrieval συνεχίζει χωρίς reranking.
  • agent/executor.py: το from langchain_classic.agents import ...
    μετακινήθηκε μέσα στο _build_agent_executor(), με TYPE_CHECKING guard.
  • Dockerfile.backend: ARG INSTALL_RERANK=false, conditional install του
    requirements-rerank.txt στο builder stage.
  • docker-compose.yml: build.args.INSTALL_RERANK: ${INSTALL_RERANK:-false}.
  • backend/.env.example + README: τεκμηρίωση του build-time/runtime
    ζεύγους INSTALL_RERANK / USE_RERANKER.
  • backend/tests/test_optional_reranker.py (νέο, 3 tests): AST check ότι δεν
    υπάρχει module-level langchain_classic import, import με μπλοκαρισμένο
    sentence_transformers μέσω meta_path, RuntimeError χωρίς το package.

Αποτέλεσμα

import routers.chat: 7.00s → 1.59s (-77%). Καθαρό venv με το νέο
requirements.txt: 134 πακέτα, κανένα torch/transformers/sentence-transformers.

Σημείωση

Η αρχική υπόθεση ότι έφταιγε το langchain_text_splitters.sentence_transformers
ήταν λάθος - έχει ήδη try/except ImportError. Η πραγματική καθυστέρηση ήταν ότι
το langchain_classic/agents/__init__.py (5.66s) φορτώνει eagerly όλους τους
legacy agent types, οπότε narrower import path δεν βοηθάει. Η λύση ήταν το lazy
import, όχι μόνο η αφαίρεση του sentence-transformers.

Επαλήθευση

  • docker compose build backend χωρίς override → κανένα torch στο image.
  • pytest: 158 passed (με local Mongo up).
  • ruff + mypy καθαρά.

… import

Move sentence-transformers/torch/transformers out of the default backend
install into requirements-rerank.txt (opt-in via USE_RERANKER). Also defer
the langchain_classic.agents import to first agent invocation instead of
process startup, since it eagerly loads every legacy agent implementation.
Combined, this cuts routers.chat import time from ~7.0s to ~1.6s.

The Docker image built from the default install still shipped with
USE_RERANKER=true, so a container could come up cleanly and fail reranking
at request time instead of at build/boot. Add an INSTALL_RERANK build arg
(default false) that conditionally installs requirements-rerank.txt in the
Dockerfile.backend builder stage, wire it through docker-compose.yml's
build.args, and document the INSTALL_RERANK/USE_RERANKER pairing in
backend/.env.example and the README so the two flags can't silently drift
out of sync.
@GiorgosPanagopoulos
GiorgosPanagopoulos merged commit 7b49bc8 into main Jul 27, 2026
2 checks passed
@GiorgosPanagopoulos
GiorgosPanagopoulos deleted the refactor/optional-reranker-deps branch July 27, 2026 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant