Spaces:
Runtime error
Runtime error
import os | |
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" | |
import torch | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
import gradio as gr | |
from fastapi import FastAPI, Request | |
import uvicorn | |
from fastapi.middleware.cors import CORSMiddleware | |
# === Модель === | |
model_id = "sberbank-ai/rugpt3medium_based_on_gpt2" | |
tokenizer = AutoTokenizer.from_pretrained(model_id) | |
model = AutoModelForCausalLM.from_pretrained(model_id) | |
device = "cuda" if torch.cuda.is_available() else "cpu" | |
model.to(device) | |
context = ( | |
"Университет Иннополис был основан в 2012 году. " | |
"Это современный вуз в России, специализирующийся на IT и робототехнике, " | |
"расположенный в городе Иннополис, Татарстан.\n" | |
) | |
def generate_response(question): | |
prompt = f"Прочитай текст и ответь на вопрос:\n\n{context}\n\nВопрос: {question}\nОтвет:" | |
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device) | |
with torch.no_grad(): | |
output_ids = model.generate( | |
input_ids, | |
max_new_tokens=100, | |
temperature=0.8, | |
top_p=0.9, | |
do_sample=True, | |
pad_token_id=tokenizer.eos_token_id | |
) | |
output = tokenizer.decode(output_ids[0], skip_special_tokens=True) | |
if "Ответ:" in output: | |
answer = output.split("Ответ:")[-1].strip() | |
else: | |
answer = output[len(prompt):].strip() | |
return answer | |
# === Gradio интерфейс === | |
def chat_interface(message, history): | |
return generate_response(message) | |
demo = gr.ChatInterface( | |
fn=chat_interface, | |
title="Иннополис Бот", | |
description="Задавайте вопросы о Университете Иннополис" | |
) | |
# === FastAPI приложение === | |
app = FastAPI() | |
# Настройка CORS | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], | |
allow_methods=["*"], | |
allow_headers=["*"], | |
) | |
async def api_ask(request: Request): | |
data = await request.json() | |
question = data.get("question", "") | |
answer = generate_response(question) | |
return {"answer": answer} | |
# === Для работы в Spaces === | |
app = gr.mount_gradio_app(app, demo, path="/") | |
# === Для локального тестирования === | |
if __name__ == "__main__": | |
uvicorn.run(app, host="0.0.0.0", port=7860) |