Update app.py with mistralai streaming api
Browse files
app.py
CHANGED
@@ -1,7 +1,36 @@
|
|
1 |
-
from fastapi import FastAPI
|
|
|
|
|
|
|
|
|
2 |
|
3 |
app = FastAPI()
|
4 |
|
|
|
|
|
|
|
5 |
@app.get("/")
|
6 |
def hello():
|
7 |
-
return {"Hello": "World!"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import FastAPI, Depends
|
2 |
+
from fastapi.responses import StreamingResponse
|
3 |
+
from pydantic import BaseModel, Annotated
|
4 |
+
from mistralai import Mistral
|
5 |
+
import os
|
6 |
|
7 |
app = FastAPI()
|
8 |
|
9 |
+
mistral = os.environ.get('MISTRAL_KEY', '')
|
10 |
+
mistral_client = Mistral(api_key=mistral)
|
11 |
+
|
12 |
@app.get("/")
|
13 |
def hello():
|
14 |
+
return {"Hello": "World!"}
|
15 |
+
|
16 |
+
class MistralRequest(BaseModel):
|
17 |
+
model: str
|
18 |
+
prompt: str
|
19 |
+
|
20 |
+
@app.post("/mistral")
|
21 |
+
async def mistral(request: MistralRequest, token: Annotated[str, Depends(verify_token)]
|
22 |
+
async def generate():
|
23 |
+
response = await mistral_client.chat.stream_async(
|
24 |
+
model=request.model,
|
25 |
+
messages=[
|
26 |
+
{
|
27 |
+
"role": "user",
|
28 |
+
"content": request.prompt,
|
29 |
+
}
|
30 |
+
],
|
31 |
+
)
|
32 |
+
async for chunk in response:
|
33 |
+
if chunk.data.choices[0].delta.content is not None:
|
34 |
+
yield chunk.data.choices[0].delta.content
|
35 |
+
|
36 |
+
return StreamingResponse(generate(), media_type="text/plain")
|