API / app.py
Reem1's picture
Update app.py
7327eb7 verified
raw
history blame
3.62 kB
import os
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import pipeline
# ๐Ÿ”ง ู†ุฎู„ูŠ ุงู„ูƒุงุด ููŠ ููˆู„ุฏุฑ ู‚ุงุจู„ ู„ู„ูƒุชุงุจุฉ
os.environ["HF_HOME"] = "/data"
os.environ["TRANSFORMERS_CACHE"] = "/data/cache"
app = FastAPI(
title="๐Ÿ“– ุญูƒุงูŠุชูŠ - API",
description="ู…ูˆู„ุฏ ู‚ุตุต ู„ู„ุฃุทูุงู„"
)
MODEL_REPO = "Reem1/hakayti-merged"
# ู…ุซุงู„ ุชูˆุถูŠุญูŠ few-shot
few_shot_example = """<s>[User]: ุงุณู…ูŠ ูƒุฑูŠู… ูˆุฃุญุจ ุงู„ูุถุงุก.
ุงูƒุชุจ ู„ูŠ ู‚ุตุฉ ุทูˆูŠู„ุฉ ู„ู„ุฃุทูุงู„ (40 ุฌู…ู„ุฉ ุนู„ู‰ ุงู„ุฃู‚ู„) ู…ูƒุชูˆุจุฉ ุจุฃุณู„ูˆุจ ู‚ุตุตูŠ ู…ู…ุชุน.
[Assistant]:
ูƒุฑูŠู… ูƒุงู† ูŠุญุจ ุงู„ู†ุธุฑ ุฅู„ู‰ ุงู„ุณู…ุงุก ูƒู„ ู„ูŠู„ุฉ. ูƒุงู† ูŠุฌู„ุณ ููŠ ุดุฑูุฉ ุจูŠุชู‡ุŒ ูŠุฑุงู‚ุจ ุงู„ู†ุฌูˆู… ูˆูŠุนุฏู‡ุง ูˆุงุญุฏุฉ ุชู„ูˆ ุงู„ุฃุฎุฑู‰. ุฃุญูŠุงู†ู‹ุง ูƒุงู† ูŠุชุฎูŠู„ ุฃู† ุงู„ู†ุฌูˆู… ู…ุซู„ ู…ุตุงุจูŠุญ ุตุบูŠุฑุฉ ุชุถูŠุก ู„ู‡ ุงู„ุทุฑูŠู‚ ู†ุญูˆ ุฃุญู„ุงู…ู‡ ุงู„ูƒุจูŠุฑุฉ.
ููŠ ุงู„ู…ุฏุฑุณุฉุŒ ู„ุงุญุธ ุงู„ู…ุนู„ู… ุดุบู ูƒุฑูŠู… ุจุงู„ูุถุงุก. ุฃุนุทุงู‡ ูƒุชุงุจู‹ุง ู…ู„ูŠุฆู‹ุง ุจุงู„ุตูˆุฑ ุงู„ู…ู„ูˆู†ุฉ ู„ู„ูƒูˆุงูƒุจ ูˆุงู„ุฃู‚ู…ุงุฑ. ุงู†ุจู‡ุฑ ูƒุฑูŠู… ุนู†ุฏู…ุง ุฑุฃู‰ ุตูˆุฑ ูƒูˆูƒุจ ุฒุญู„ ูˆุญู„ู‚ุงุชู‡ ุงู„ู„ุงู…ุนุฉุŒ ูˆุฃุฎุฐ ูŠุชุฎูŠู„ ู†ูุณู‡ ูŠุทูŠุฑ ุญูˆู„ู‡.
ู‚ุฑุฑ ูƒุฑูŠู… ุฃู† ูŠุตู†ุน ู†ู…ูˆุฐุฌู‹ุง ุตุบูŠุฑู‹ุง ู„ู„ู…ุฌู…ูˆุนุฉ ุงู„ุดู…ุณูŠุฉ. ุฌู…ุน ูƒุฑุงุช ุตุบูŠุฑุฉ ูˆุทู„ู‘ุงู‡ุง ุจุงู„ุฃู„ูˆุงู†: ุงู„ุฃุฒุฑู‚ ู„ู„ุฃุฑุถุŒ ุงู„ุฃุญู…ุฑ ู„ู„ู…ุฑูŠุฎุŒ ูˆุงู„ุฃุตูุฑ ู„ู„ุดู…ุณ. ุนู„ู‘ู‚ู‡ุง ุจุฎูŠูˆุท ููŠ ุบุฑูุชู‡ุŒ ูุตุงุฑุช ูƒุฃู†ู‡ุง ุณู…ุงุก ุตุบูŠุฑุฉ ูŠุนูŠุด ููŠู‡ุง.
ููŠ ุฃุญุฏ ุงู„ุฃูŠุงู…ุŒ ุฃุนู„ู†ุช ุงู„ู…ุฏุฑุณุฉ ุนู† ู…ุณุงุจู‚ุฉ ู„ู„ุฑุณู… ุจุนู†ูˆุงู† "ุฑุญู„ุฉ ุฅู„ู‰ ุงู„ูุถุงุก". ุฑุณู… ูƒุฑูŠู… ู„ูˆุญุฉ ูƒุจูŠุฑุฉ ูŠุธู‡ุฑ ููŠู‡ุง ุตุงุฑูˆุฎ ูŠู†ุทู„ู‚ ู…ู† ุงู„ุฃุฑุถุŒ ูˆุญูˆู„ู‡ ุฃุทูุงู„ ูŠู„ูˆู‘ุญูˆู† ุจุฃูŠุฏูŠู‡ู…. ูุงุฒ ูƒุฑูŠู… ุจุงู„ุฌุงุฆุฒุฉ ุงู„ุฃูˆู„ู‰ุŒ ูˆูƒุงู† ุณุนูŠุฏู‹ุง ุฌุฏู‹ุง ู„ุฃู† ุญู„ู…ู‡ ุจุงู„ูุถุงุก ุฃุตุจุญ ุฃู‚ุฑุจ ู…ู…ุง ูŠุชุฎูŠู„.
ููŠ ุงู„ู…ุณุงุกุŒ ุฌู„ุณ ูƒุฑูŠู… ู…ุน ูˆุงู„ุฏู‡ ุนู„ู‰ ุณุทุญ ุงู„ู…ู†ุฒู„. ุฃุดุงุฑ ูˆุงู„ุฏู‡ ุฅู„ู‰ ุงู„ู‚ู…ุฑ ูˆู‚ุงู„: "ุชุฎูŠู‘ู„ ูŠุง ูƒุฑูŠู… ุฃู† ุงู„ุนู„ู…ุงุก ูŠุฏุฑุณูˆู† ุงู„ุขู† ูƒูŠู ูŠุนูŠุด ุงู„ู†ุงุณ ูŠูˆู…ู‹ุง ู…ุง ููŠ ุงู„ูุถุงุก". ุงุจุชุณู… ูƒุฑูŠู… ูˆุฃุฌุงุจ: "ุณุฃูƒูˆู† ุฃู†ุง ูˆุงุญุฏู‹ุง ู…ู†ู‡ู…".
ูˆู‡ูƒุฐุง ุชุนู„ู… ูƒุฑูŠู… ุฃู† ุงู„ุญู„ู… ูŠุจุฏุฃ ุจุฎุทูˆุฉ ุตุบูŠุฑุฉุŒ ูˆุฃู† ุญุจ ุงู„ู…ุนุฑูุฉ ูŠู…ูƒู† ุฃู† ูŠูุชุญ ู„ู‡ ุฃุจูˆุงุจู‹ุง ูˆุงุณุนุฉ ู†ุญูˆ ุงู„ู…ุณุชู‚ุจู„.
</s>"""
# ุชุญู…ูŠู„ ุงู„ู…ูˆุฏูŠู„ ู…ุฑุฉ ูˆุงุญุฏุฉ
pipe = pipeline(
"text-generation",
model=MODEL_REPO,
tokenizer=MODEL_REPO,
max_new_tokens=900,
temperature=0.9,
top_p=0.95
)
# body request
class StoryRequest(BaseModel):
name: str
hobby: str
# ู…ูˆู„ุฏ ุงู„ู‚ุตุฉ
def generate_story(name, hobby):
prompt = f"""{few_shot_example}
[User]: ุงุณู…ูŠ {name} ูˆุฃุญุจ {hobby}.
ุงูƒุชุจ ู„ูŠ ู‚ุตุฉ ุทูˆูŠู„ุฉ ู„ู„ุฃุทูุงู„ (40 ุฌู…ู„ุฉ ุนู„ู‰ ุงู„ุฃู‚ู„) ู…ูƒุชูˆุจุฉ ุจู†ูุณ ุงู„ุฃุณู„ูˆุจ ุงู„ุณุงุจู‚ุŒ
ูˆุชุฃูƒุฏ ุฃู† ุงู„ู‚ุตุฉ ูƒู„ู‡ุง ุชุฏูˆุฑ ุญูˆู„ {hobby} ูู‚ุท.
[Assistant]:"""
out = pipe(
prompt,
max_new_tokens=900,
temperature=0.9,
top_p=0.95,
do_sample=True
)
full_text = out[0]["generated_text"]
story = full_text.split("[Assistant]:")[-1].replace("</s>", "").strip()
return story
# API endpoint
@app.post("/generate")
def generate_story_api(req: StoryRequest):
story = generate_story(req.name, req.hobby)
return {"story": story}