File size: 2,413 Bytes
a8c7066
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import os
from types import SimpleNamespace
from unittest.mock import MagicMock, patch

import src.bootstrap.container as container_module


class DummyLLM:
    def __init__(self, model_name: str | None = None):
        self._model_name = model_name

    def get_model_name(self) -> str | None:
        return self._model_name


class DummyEmbedding:
    def __init__(self, model_name: str | None = None):
        self._model_name = model_name

    def get_model_name(self) -> str | None:
        return self._model_name

    def get_embedding_function(self):
        return MagicMock()


def test_container_uses_specific_ragas_llm_and_embedding(monkeypatch):
    monkeypatch.setenv("RAGAS_LLM_MODEL_NAME", "ragas-llm")
    monkeypatch.setenv("RAGAS_EMBED_MODEL_NAME", "ragas-embed")
    monkeypatch.delenv("LANGFUSE_PUBLIC_KEY", raising=False)
    monkeypatch.delenv("LANGFUSE_SECRET_KEY", raising=False)
    monkeypatch.setenv("ENABLE_RAGAS_EVAL", "true")

    created_ragas_kwargs = {}

    def fake_ragas_adapter(**kwargs):
        created_ragas_kwargs.update(kwargs)
        return SimpleNamespace()

    with patch.object(container_module, "HuggingFaceEmbeddingAdapter", side_effect=lambda model_name=None: DummyEmbedding(model_name=model_name)), \
         patch.object(container_module, "GeminiLlmAdapter", side_effect=lambda prompt_builder, model_name=None: DummyLLM(model_name=model_name)), \
         patch.object(container_module, "RagasEvaluationAdapter", side_effect=fake_ragas_adapter), \
         patch.object(container_module, "NoOpEvaluationAdapter", return_value=SimpleNamespace()), \
         patch.object(container_module, "NativeRetrievalAdapter", return_value=SimpleNamespace()), \
         patch.object(container_module, "RagPromptBuilderAdapter", return_value=SimpleNamespace()), \
         patch.object(container_module, "AskQuestionService", return_value=SimpleNamespace()), \
         patch.object(container_module, "SubmitFeedbackService", return_value=SimpleNamespace()), \
         patch.object(container_module, "LoggingObservabilityAdapter", return_value=SimpleNamespace()), \
         patch.object(container_module, "LangfuseObservabilityAdapter", return_value=SimpleNamespace()):
        container_module.Container()

    assert created_ragas_kwargs["llm_port"].get_model_name() == "ragas-llm"
    assert created_ragas_kwargs["embedding_port"].get_model_name() == "ragas-embed"