def calculate_backtesting()

in src/backend/entrypoints/llm_backend/api/llm.py [0:0]


def calculate_backtesting(request_model: BacktestingRequestModel = Body(), session: Session = Depends(get_session)):
    if not session.flow_status.is_step_done(Steps.SUBMIT_LLM_CHAT):
        raise LLMChatNotSubmittedError
    if session.flow_status.is_llm_chat_history_cleared:
        raise LLMChatHistoryClearedError
    if not session.flow_status.is_trading_block_present:
        raise TradingBlockIsNotPresentError

    current_user = user.get()

    task = celery_app.signature(
        "calculate_backtesting",
        kwargs={
            "actual_currency": request_model.actual_currency,
            "bet_size": request_model.bet_size,
            "per_instrument_gross_limit": request_model.per_instrument_gross_limit,
            "total_gross_limit": request_model.total_gross_limit,
            "nop_limit": request_model.nop_limit,
            "account_for_dividends": request_model.account_for_dividends,
            "trade_fill_price": request_model.trade_fill_price,
            "execution_cost_bps": request_model.execution_cost_bps,
        },
        queue="alerts_default",
        routing_key="alerts_default",
        headers=create_task_headers(session.session_id),
    )

    task_id = str(uuid.uuid4())
    task_scheduled_timestamp = time.time()

    save_task_ws_meta_info(
        task_id,
        start_time=time.time(),
    )

    session.add_action(task_id, task_scheduled_timestamp)
    session_manager_singleton.save(current_user.email, session)

    soft_time_limit = 10 * 60
    task.apply_async(soft_time_limit=soft_time_limit, time_limit=soft_time_limit + 20, task_id=task_id)

    return {"task_id": task_id}