Spaces:
Running
Running
File size: 1,823 Bytes
afd56bc | 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 55 56 57 58 59 60 | import os
import sys
# Musimy dodać ścieżkę do sys.path przed importami
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../backend")))
import pytest
import asyncio
from dotenv import load_dotenv
# Wczytujemy zmienne
load_dotenv("../backend/.env")
@pytest.mark.asyncio
async def test_llm_fallback_resilience():
"""
Test weryfikujący poprawność działania llm_router i circuit breakera.
Wymusza błędy kluczy API, aby sprawdzić czy system bez przerw przełącza się na fallback.
"""
# Krok 0: Mock autoryzacji (lub użycie realnego tokenu jeśli to możliwe)
# W testach E2E z appką w pamięci można zmockować `verify_token`.
# Dla uproszczenia ustawiamy klucz na zepsuty.
original_grok_key = os.environ.get("GROK_API_KEY")
os.environ["GROK_API_KEY"] = "INVALID_KEY_FOR_TESTING_FALLBACK"
try:
from core.llm_router import get_llm
from langchain_core.messages import SystemMessage, HumanMessage
# Wymuszamy model Grok
llm = get_llm(task_type="default")
# Zapytanie powinno zawieść na Grok i pójść do Gemini
res = llm.invoke(
[
SystemMessage(content="Jesteś pomocnym asystentem."),
HumanMessage(content="Odpowiedz słowem 'ZROZUMIANO'"),
]
)
assert res.content, "Odpowiedź jest pusta, fallback nie zadziałał!"
print(f"Fallback SUCCESS: Otrzymano odpowiedź: {res.content}")
except Exception as e:
pytest.fail(f"Fallback fail! Złapano wyjątek: {e}")
finally:
if original_grok_key:
os.environ["GROK_API_KEY"] = original_grok_key
else:
del os.environ["GROK_API_KEY"]
if __name__ == "__main__":
asyncio.run(test_llm_fallback_resilience())
|