import os
import httpx
from app.llm.mock_engine import generate_secure, generate_vulnerable
async def call_llm(
prompt: str,
*,
user_input: str,
task: str = "translate",
mode: str = "secure",
injection_detected: bool = False,
) -> str:
provider = os.getenv("LLM_PROVIDER", "mock")
if provider == "mock":
if mode == "vulnerable":
return generate_vulnerable(user_input, task=task)
return generate_secure(
prompt,
user_input=user_input,
task=task,
injection_detected=injection_detected,
)
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("LLM_PROVIDER 非 mock 时需配置 OPENAI_API_KEY")
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
model = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
async with httpx.AsyncClient(timeout=60.0) as client:
resp = await client.post(
f"{base_url}/chat/completions",
headers={"Authorization": f"Bearer {api_key}"},
json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.2,
},
)
resp.raise_for_status()
data = resp.json()
return data["choices"][0]["message"]["content"]