feat: 添加对 LiteLLM 嵌入后端的支持,增强并发 API 调用能力

This commit is contained in:
catlog22
2025-12-24 22:20:13 +08:00
parent e3e61bcae9
commit 3c3ce55842
8 changed files with 412 additions and 141 deletions

View File

@@ -0,0 +1,67 @@
"""Tests for embedding backend availability checks.
These tests validate the logic used to decide whether embeddings generation
should run for a given backend (fastembed vs. litellm).
"""
import pytest
def test_is_embedding_backend_available_invalid_backend(monkeypatch):
import codexlens.semantic as semantic
ok, err = semantic.is_embedding_backend_available("nope")
assert ok is False
assert "Invalid embedding backend" in (err or "")
def test_is_embedding_backend_available_fastembed_true(monkeypatch):
import codexlens.semantic as semantic
monkeypatch.setattr(semantic, "SEMANTIC_AVAILABLE", True)
ok, err = semantic.is_embedding_backend_available("fastembed")
assert ok is True
assert err is None
def test_is_embedding_backend_available_fastembed_false(monkeypatch):
import codexlens.semantic as semantic
monkeypatch.setattr(semantic, "SEMANTIC_AVAILABLE", False)
monkeypatch.setattr(semantic, "_import_error", "fastembed missing")
ok, err = semantic.is_embedding_backend_available("fastembed")
assert ok is False
assert err == "fastembed missing"
def test_is_embedding_backend_available_litellm_true(monkeypatch):
import codexlens.semantic as semantic
monkeypatch.setattr(semantic, "LITELLM_AVAILABLE", True)
ok, err = semantic.is_embedding_backend_available("litellm")
assert ok is True
assert err is None
def test_is_embedding_backend_available_litellm_false(monkeypatch):
import codexlens.semantic as semantic
monkeypatch.setattr(semantic, "LITELLM_AVAILABLE", False)
ok, err = semantic.is_embedding_backend_available("litellm")
assert ok is False
assert "ccw-litellm not available" in (err or "")
def test_generate_embeddings_uses_backend_availability_gate(monkeypatch, tmp_path):
from codexlens.cli import embedding_manager
monkeypatch.setattr(
embedding_manager,
"is_embedding_backend_available",
lambda _backend: (False, "blocked"),
)
result = embedding_manager.generate_embeddings(tmp_path / "_index.db", embedding_backend="litellm")
assert result["success"] is False
assert result["error"] == "blocked"