Files
ewoooc/tests/test_ai_provider_ollama_first.py
OoO a46396ca7f
All checks were successful
CD Pipeline / deploy (push) Successful in 1m6s
[V10.350] 關閉 Gemini 預設備援出站
2026-05-20 20:10:21 +08:00

57 lines
1.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""AIProviderService Ollama-first / Gemini fallback contract."""
from services.ai_provider import AIProviderService
from services.gemini_service import GeminiResponse
from services.ollama_service import OllamaResponse
def test_default_provider_gemini_is_forced_to_ollama():
service = AIProviderService(default_provider="gemini")
assert service.default_provider == "ollama"
def test_requested_gemini_still_uses_ollama_first(monkeypatch):
service = AIProviderService(default_provider="ollama")
monkeypatch.setattr(
service._ollama,
"generate_sales_copy",
lambda **_kw: OllamaResponse(True, "ollama copy", "llama3.1:8b"),
)
monkeypatch.setattr(
service._gemini,
"generate_sales_copy",
lambda **_kw: (_ for _ in ()).throw(AssertionError("Gemini 不應在 Ollama 成功時被呼叫")),
)
result = service.generate_sales_copy("測試商品", provider="gemini")
assert result.success is True
assert result.provider == "ollama"
assert result.content == "ollama copy"
def test_gemini_is_called_only_after_ollama_failure(monkeypatch):
monkeypatch.setenv("GEMINI_FALLBACK_ENABLED", "true")
service = AIProviderService(default_provider="ollama")
monkeypatch.setattr(
service._ollama,
"generate_sales_copy",
lambda **_kw: OllamaResponse(False, "", "llama3.1:8b", error="ollama down"),
)
monkeypatch.setattr(
service._gemini,
"generate_sales_copy",
lambda **_kw: GeminiResponse(True, "gemini fallback", "gemini-2.5-flash"),
)
result = service.generate_sales_copy("測試商品")
assert result.success is True
assert result.provider == "gemini"
assert result.content == "gemini fallback"