Files
auto-stock/backend/app/api/endpoints/tensorflow_predictions.py
2026-02-22 17:23:20 +09:00

41 lines
1.4 KiB
Python

from fastapi import APIRouter, HTTPException, Query
from typing import List
import logging
logger = logging.getLogger(__name__)
router = APIRouter()
def _get_predictor():
try:
from app.services.tensorflow_predictor import TensorFlowPredictor, TensorFlowNotAvailable
try:
return TensorFlowPredictor()
except TensorFlowNotAvailable as e:
raise HTTPException(status_code=503, detail=f"TensorFlow predictor unavailable: {e}")
except Exception as e:
raise HTTPException(status_code=503, detail=f"TensorFlow unavailable: {e}")
@router.get("/tf-predictions")
async def get_tensorflow_predictions(
codes: str = Query("005930,000660,035420", description="Comma-separated stock codes"),
top: int = Query(10, ge=1, le=50, description="Top N by expected return")
):
predictor = _get_predictor()
stock_codes: List[str] = [c.strip() for c in codes.split(",") if c.strip()]
results = []
for code in stock_codes:
pred = await predictor.predict_stock(code)
results.append(pred)
# Filter out errors, sort by expected_return
valid = [r for r in results if isinstance(r, dict) and "expected_return" in r]
valid.sort(key=lambda x: x.get("expected_return", 0.0), reverse=True)
return {
"total": len(valid),
"requested": stock_codes,
"predictions": valid[:top],
"errors": [r for r in results if "error" in r]
}