import os import uvicorn from fastapi import FastAPI, HTTPException from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from pydantic import BaseModel from transformers import pipeline import torch from typing import Optional # Inisialisasi FastAPI app = FastAPI(title="LyonPoy AI Chat") # All 11 models configuration MODELS = { "tinny-llama": { "name": "Tinny Llama", "model_path": "Lyon28/Tinny-Llama", "task": "text-generation" }, "pythia": { "name": "Pythia", "model_path": "Lyon28/Pythia", "task": "text-generation" }, "bert-tinny": { "name": "BERT Tinny", "model_path": "Lyon28/Bert-Tinny", "task": "text-classification" }, "albert-base-v2": { "name": "ALBERT Base V2", "model_path": "Lyon28/Albert-Base-V2", "task": "text-classification" }, "t5-small": { "name": "T5 Small", "model_path": "Lyon28/T5-Small", "task": "text2text-generation" }, "gpt-2": { "name": "GPT-2", "model_path": "Lyon28/GPT-2", "task": "text-generation" }, "gpt-neo": { "name": "GPT-Neo", "model_path": "Lyon28/GPT-Neo", "task": "text-generation" }, "distilbert-base-uncased": { "name": "DistilBERT", "model_path": "Lyon28/Distilbert-Base-Uncased", "task": "text-classification" }, "distil-gpt-2": { "name": "DistilGPT-2", "model_path": "Lyon28/Distil_GPT-2", "task": "text-generation" }, "gpt-2-tinny": { "name": "GPT-2 Tinny", "model_path": "Lyon28/GPT-2-Tinny", "task": "text-generation" }, "electra-small": { "name": "ELECTRA Small", "model_path": "Lyon28/Electra-Small", "task": "text-classification" } } class ChatRequest(BaseModel): message: str model: Optional[str] = "gpt-2" # Startup @app.on_event("startup") async def load_models(): app.state.pipelines = {} os.environ['HF_HOME'] = '/tmp/.cache/huggingface' os.makedirs(os.environ['HF_HOME'], exist_ok=True) print("🤖 LyonPoy AI Chat Ready!") # Frontend route @app.get("/", response_class=HTMLResponse) async def get_frontend(): html_content = '''