Spaces:
Paused
Paused
File size: 3,161 Bytes
7d51224 1044c29 7d51224 acc58cf a7653ed 7d51224 c3fd9b2 1044c29 7d51224 acc58cf 7d51224 86f94f0 6218ec6 3151c18 7d973d2 6218ec6 7d973d2 6218ec6 7d973d2 6218ec6 3151c18 86f94f0 6218ec6 86f94f0 b0aa891 86f94f0 7d51224 0d521c3 1044c29 86f94f0 7d51224 0d521c3 7d51224 |
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 100 101 102 |
import fastapi
import json
import markdown
import uvicorn
from ctransformers import AutoModelForCausalLM
from fastapi.responses import HTMLResponse
from fastapi.middleware.cors import CORSMiddleware
from sse_starlette.sse import EventSourceResponse
from ctransformers.langchain import CTransformers
from pydantic import BaseModel, Field
from typing import List, Any
from typing_extensions import TypedDict, Literal
llm = AutoModelForCausalLM.from_pretrained("NeoDim/starchat-alpha-GGML",
model_file="starchat-alpha-ggml-q4_0.bin",
model_type="starcoder")
app = fastapi.FastAPI(title="Starchat Alpha")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def index():
with open("README.md", "r", encoding="utf-8") as readme_file:
md_template_string = readme_file.read()
html_content = markdown.markdown(md_template_string)
return HTMLResponse(content=html_content, status_code=200)
class ChatCompletionRequest(BaseModel):
prompt: str
@app.get("/demo")
async def demo():
html_content = """
<!DOCTYPE html>
<html>
<body>
<style>
pre {
padding: 1em;
border: 1px solid black;
}
#content {
font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace !important;
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
padding: 45px;
font-size: 16px;
}
@media (max-width: 767px) {
#content {
padding: 15px;
}
}
</style>
<pre><code id="content"></code></pre>
<script>
var source = new EventSource("https://matthoffner-starchat-alpha.hf.space/stream");
source.onmessage = function(event) {
document.getElementById("content").innerHTML += event.data
};
</script>
</body>
</html>
"""
return HTMLResponse(content=html_content, status_code=200)
@app.get("/stream")
async def chat(prompt = "Write a simple expres server"):
tokens = llm.tokenize(prompt)
async def server_sent_events(chat_chunks, llm):
yield prompt
for chat_chunk in llm.generate(chat_chunks):
yield llm.detokenize(chat_chunk)
yield ""
return EventSourceResponse(server_sent_events(tokens, llm))
@app.post("/v1/chat/completions")
async def chat(request: ChatCompletionRequest, response_mode=None):
tokens = llm.tokenize(request.prompt)
async def server_sent_events(chat_chunks, llm):
for token in llm.generate(chat_chunks):
yield llm.detokenize(token)
yield ""
return EventSourceResponse(server_sent_events(tokens, llm))
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
|