Spaces:
Sleeping
Sleeping
| from typing import List | |
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| from fastapi import HTTPException | |
| from rlcube.envs.cube2 import Cube2Env | |
| from rlcube.models.search import MonteCarloTree | |
| import numpy as np | |
| app = FastAPI() | |
| class StateArgs(BaseModel): | |
| state: List[List[int]] | |
| def solve(body: StateArgs): | |
| state = body.state | |
| if not ( | |
| isinstance(state, list) | |
| and len(state) == 6 | |
| and all(isinstance(row, list) and len(row) == 4 for row in state) | |
| ): | |
| raise HTTPException(status_code=400, detail="state must be a 6x4 matrix") | |
| env = Cube2Env() | |
| env.reset(state=np.array(state, dtype=np.int8)) | |
| tree = MonteCarloTree(env.obs(), max_simulations=256) | |
| if tree.is_solved: | |
| return {"steps": [action for _, action in tree.solved_path]} | |
| raise HTTPException(status_code=422, detail="Unable to solve the cube") | |