Spaces:
Runtime error
Runtime error
| import asyncio | |
| from io import BytesIO | |
| from threading import Lock | |
| import gradio as gr | |
| from fastapi import Body, Depends, FastAPI, HTTPException | |
| from PIL import Image | |
| from sqlalchemy import Column, Float, ForeignKey, Integer, String, create_engine | |
| from sqlalchemy.orm import declarative_base, relationship, sessionmaker | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| # Database setup | |
| DATABASE_URL = "sqlite:///./sin_city_rp.db" | |
| engine = create_engine(DATABASE_URL) | |
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| Base = declarative_base() | |
| db_lock = Lock() | |
| # Define SQLAlchemy models | |
| class Player(Base): | |
| __tablename__ = "players" | |
| id = Column(Integer, primary_key=True, index=True) | |
| username = Column(String, unique=True, index=True) | |
| email = Column(String, unique=True, index=True) | |
| password = Column(String) | |
| characters = relationship("Character", back_populates="player") | |
| class Character(Base): | |
| __tablename__ = "characters" | |
| id = Column(Integer, primary_key=True, index=True) | |
| name = Column(String, index=True) | |
| player_id = Column(Integer, ForeignKey("players.id")) | |
| player = relationship("Player", back_populates="characters") | |
| level = Column(Integer, default=1) | |
| experience = Column(Integer, default=0) | |
| health = Column(Integer, default=100) | |
| items = relationship("Item", back_populates="character") | |
| class Quest(Base): | |
| __tablename__ = "quests" | |
| id = Column(Integer, primary_key=True, index=True) | |
| name = Column(String, index=True) | |
| description = Column(String) | |
| reward = Column(Integer) | |
| class Item(Base): | |
| __tablename__ = "items" | |
| id = Column(Integer, primary_key=True, index=True) | |
| name = Column(String, index=True) | |
| description = Column(String) | |
| value = Column(Float) | |
| character_id = Column(Integer, ForeignKey("characters.id")) | |
| character = relationship("Character", back_populates="items") | |
| # Create tables | |
| Base.metadata.create_all(engine) | |
| # FastAPI setup | |
| app = FastAPI() | |
| # Dependency for getting the current player | |
| def get_current_player(username: str = Body(...), password: str = Body(...)): | |
| with db_lock: | |
| session = SessionLocal() | |
| player = session.query(Player).filter(Player.username == username, Player.password == password).first() | |
| session.close() | |
| if not player: | |
| raise HTTPException(status_code=401, detail="Invalid username or password") | |
| return player | |
| # Login endpoint | |
| async def login(player: Player = Depends(get_current_player)): | |
| return {"message": f"Welcome {player.username}!"} | |
| # Load the DALL路E Mini model | |
| model_name = "flax-community/dalle-mini" | |
| model = AutoModelForCausalLM.from_pretrained(model_name) | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| # Function to generate image from text prompt using DALL路E Mini | |
| async def generate_image(prompt: str): | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| outputs = model.generate(**inputs) | |
| image = Image.fromarray(outputs[0].numpy()) | |
| # Convert the image to a format that can be used in FastAPI/Gradio | |
| buf = BytesIO() | |
| image.save(buf, format='PNG') | |
| buf.seek(0) | |
| return buf | |
| # Gradio Interface | |
| def gradio_interface(prompt): | |
| response = asyncio.run(generate_image(prompt)) | |
| return response | |
| interface = gr.Interface( | |
| fn=gradio_interface, | |
| inputs=gr.Textbox(label="Enter prompt"), | |
| outputs=gr.Image(label="Generated Image") | |
| ) | |
| if __name__ == "__main__": | |
| interface.launch() | |