Spaces:
Runtime error
Runtime error
File size: 2,511 Bytes
6275495 e6961b0 6275495 983eb46 af4b77b 983eb46 db606bb 983eb46 9113cb8 b10ba12 80ceb8c 6275495 9c601ea 9d9c29a db606bb af5c917 983eb46 db606bb af4b77b c263659 db606bb d334b30 db606bb 5e09a54 24fb973 c263659 af4b77b 52ae47c af4b77b 52ae47c 5e09a54 52ae47c af4b77b 983eb46 000988a 3bb8597 983eb46 3bb8597 983eb46 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
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=["*"],
)
@app.post("/api/ask")
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) |