bing-chat-api / apis /chat_api.py
Hansimov's picture
:gem: [Feature] API: Create Conversation Session and return unique ids
1828807
raw
history blame
2.51 kB
import uvicorn
from fastapi import FastAPI, APIRouter, WebSocket, WebSocketDisconnect
from fastapi.routing import APIRoute
from pydantic import BaseModel, Field
from conversations import ConversationSession
class ChatAPIApp:
def __init__(self):
self.app = FastAPI(
docs_url="/",
title="Bing Chat API",
version="1.0",
)
self.setup_routes()
def get_available_models(self):
self.available_models = [
{
"id": "bing-precise",
"description": "Bing (Precise): Concise and straightforward.",
},
{
"id": "bing-balanced",
"description": "Bing (Balanced): Informative and friendly.",
},
{
"id": "bing-creative",
"description": "Bing (Creative): Original and imaginative.",
},
{
"id": "bing-precise-offline",
"description": "Bing (Precise): (No Internet) Concise and straightforward.",
},
{
"id": "bing-balanced-offline",
"description": "Bing (Balanced): (No Internet) Informative and friendly.",
},
{
"id": "bing-creative-offline",
"description": "Bing (Creative): (No Internet) Original and imaginative.",
},
]
return self.available_models
class CreateConversationSessionPostItem(BaseModel):
model: str = Field(
default="precise",
description="(str) `precise`, `balanced`, `creative`, `precise-offline`, `balanced-offline`, `creative-offline`",
)
def create_conversation_session(self, item: CreateConversationSessionPostItem):
session = ConversationSession(item.model)
session.open()
return {
"conversation_id": session.connector.conversation_id,
"client_id": session.connector.client_id,
"sec_access_token": session.connector.sec_access_token,
}
def setup_routes(self):
self.app.get(
"/models",
summary="Get available models",
)(self.get_available_models)
self.app.post(
"/create",
summary="Create a conversation session",
)(self.create_conversation_session)
app = ChatAPIApp().app
if __name__ == "__main__":
uvicorn.run("__main__:app", host="0.0.0.0", port=22222, reload=True)