Spaces:
Running
Running
| 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") | |
| 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()) | |