Spaces:
Running
Running
File size: 3,597 Bytes
6cca775 c8bd764 3e9ccc0 c8bd764 3e9ccc0 9f62497 3e9ccc0 79c0a5a 6cca775 3e9ccc0 6cca775 3e9ccc0 9f62497 3e9ccc0 6cca775 3e9ccc0 6cca775 3e9ccc0 6cca775 c8bd764 3e9ccc0 6cca775 c8bd764 6cca775 3e9ccc0 6cca775 3e9ccc0 6cca775 |
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
import os
import uvicorn
import torch
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse, Response
from pydantic import BaseModel
from transformers import pipeline
# Utw贸rz instancj臋 FastAPI
app = FastAPI(
title="Bielik Text Generation API",
description="API do generowania tekstu za pomoc膮 modelu Bielik-1.5B-v3.0-Instruct",
version="1.0.0"
)
# 艢cie偶ka do modelu - Hugging Face automatycznie pobierze model
MODEL_NAME = "speakleash/Bielik-1.5B-v3.0-Instruct"
generator = None # Zostanie za艂adowany p贸藕niej
# Model wej艣ciowy dla POST request
class GenerationRequest(BaseModel):
prompt: str
max_new_tokens: int = 50
temperature: float = 0.7
top_p: float = 0.9
@app.on_event("startup")
async def startup_event():
"""
艁adowanie modelu podczas uruchamiania aplikacji.
To zajmie troch臋 czasu, ale dzieje si臋 tylko raz.
"""
global generator
print(f"艁adowanie modelu: {MODEL_NAME}...")
try:
# Mo偶esz dostosowa膰 device=0 (GPU) lub device=-1 (CPU) w zale偶no艣ci od wybranej maszyny Space
# Free tier spaces usually run on CPU, unless you explicitly select a GPU.
# It's safer to not specify device if you want it to auto-detect or default to CPU.
generator = pipeline(
"text-generation",
model=MODEL_NAME,
# device=0 if torch.cuda.is_available() else -1 # Odkomentuj dla detekcji GPU
)
print("Model za艂adowany pomy艣lnie!")
except Exception as e:
print(f"B艂膮d 艂adowania modelu: {e}")
# Mo偶esz zdecydowa膰, czy aplikacja ma zako艅czy膰 dzia艂anie, czy kontynuowa膰 bez modelu
# W przypadku b艂臋du 艂adowania modelu, endpoint generacji tekstu b臋dzie zwraca艂 b艂膮d
generator = None # Ustaw na None, aby sygnalizowa膰 problem
@app.get("/")
async def root():
"""
G艂贸wny endpoint (health check).
"""
return {"message": "Bielik Text Generation API is running!"}
@app.post("/generate")
async def generate_text(request: GenerationRequest):
"""
Endpoint do generowania tekstu na podstawie promptu.
"""
if generator is None:
raise HTTPException(status_code=503, detail="Model nie zosta艂 za艂adowany lub wyst膮pi艂 b艂膮d.")
try:
generated_text = generator(
request.prompt,
max_new_tokens=request.max_new_tokens,
temperature=request.temperature,
top_p=request.top_p,
do_sample=True, # Wa偶ne dla generowania z temperatur膮
return_full_text=False # Dodaj ten parametr, aby model nie zwraca艂 od razu promptu
)
# Pipeline zwraca list臋 s艂ownik贸w, bierzemy pierwszy wynik
#gen_text = {"generated_text": generated_text[0]["generated_text"]}
response_data = {"generated_text": generated_text[0]["generated_text"]}
return JSONResponse(
content=response_data,
media_type="application/json; charset=utf-8"
)
#return Response(content=generated_text[0]["generated_text"], media_type="text/plain; charset=utf-8")
# return {"generated_text": generated_text[0]["generated_text"]}
except Exception as e:
raise HTTPException(status_code=500, detail=f"B艂膮d podczas generowania tekstu: {e}")
# Uruchamianie serwera Uvicorn bezpo艣rednio (dla Dockera)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=int(os.getenv("PORT", 7860)))
|