MineCraftAI / main.py
Illia56's picture
Upload 8 files
b70539a verified
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from datetime import datetime
import os
from dotenv import load_dotenv
from typing import List, Optional
from uuid import uuid4
from rag import RAGSystem, load_config
# Load environment variables
load_dotenv()
# Load configuration
CONFIG = load_config()
MOB_MAPPINGS = CONFIG['mob_mappings']
# Get API key
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if not OPENAI_API_KEY:
raise ValueError("OPENAI_API_KEY environment variable is not set")
# Initialize FastAPI app
app = FastAPI(
title="CubixAI API",
description="API for CubixAI - Minecraft bot with AI capabilities",
version="0.1.0",
)
# Initialize RAG system
rag_system = RAGSystem(openai_api_key=OPENAI_API_KEY)
# Status response model
class StatusResponse(BaseModel):
status: str
version: str
timestamp: str
# Message request model
class MessageRequest(BaseModel):
message: str
user_id: Optional[str] = None
# Document URL model
class DocumentURLs(BaseModel):
urls: List[str]
app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/status", response_model=StatusResponse)
async def get_status():
"""Get the current status of the API."""
return StatusResponse(
status="online",
version=app.version,
timestamp=datetime.now().isoformat()
)
@app.post("/process_message")
async def process_message(request: MessageRequest):
"""Process a message from a player and generate a structured JSON response."""
user_id = request.user_id or str(uuid4())
response = rag_system.generate_response(user_id, request.message)
# Just add user_id to response without other modifications
if isinstance(response, dict):
response["user_id"] = user_id
return response
@app.get("/mob_mappings")
async def get_mob_mappings():
"""Get the mapping of mob names to entity IDs."""
return MOB_MAPPINGS
@app.get("/command_specs")
async def get_command_specs():
"""Get the command specifications."""
return CONFIG['command_specs']
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)