cevheri's picture
docs: add code-of-conduct.md
6d854d8
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware
from app.api import chat_api, conversation_api, management_api
from loguru import logger
from contextlib import asynccontextmanager
from app.db.factory import db_client
from gradio_chatbot import build_gradio_app, app_auth
import gradio as gr
from app.core.initial_setup.setup import InitialSetup
@asynccontextmanager
async def lifespan(app: FastAPI):
"""
Lifespan context manager for FastAPI application.
Handles startup and shutdown events.
"""
# Startup
logger.info("Starting up application...")
await db_client.connect()
# Run initial setup if database type is embedded
initial_setup = InitialSetup()
await initial_setup.setup()
yield
# Shutdown
logger.info("Shutting down application...")
await db_client.close()
VERSION = "0.3.0"
TITLE = "Talk to your data chat and visualize API"
DESCRIPTION = """
Talk to your data chat and visualize API
## Chat
You can use the chat API to talk to your data and visualize the results.
## Authentication
All endpoints require API key authentication using the `Authorization` header.
API keys are in the format: `sk-{username}-{base64_encoded_data}`
## Endpoints
### Chat (openai compatible APIs) - Given a list of messages comprising a conversation, the model will return a response.
- GET `/v1/chat/completions`: listChatCompletions - List stored chat completions. Only Chat completions that have been stored with the `store` parameter set to `true` will be returned.
- POST `/v1/chat/completions`: createChatCompletion - Create a new chat completion.
- GET `/v1/chat/completions/{completion_id}`: getChatCompletion - Get a stored chat completion. Only Chat Completions that have been created with the `store` parameter set to `true` will be returned.
- POST `/v1/chat/completions/{completion_id}`: modifyChatCompletion - Modify a stored chat completion.
- DELETE `/v1/chat/completions/{completion_id}`: deleteChatCompletion - Delete a stored chat completion.
- GET `/v1/chat/completions/{completion_id}/messages`: getChatCompletionMessages - Get the messages in a stored chat completion.
### Plots( custom endpoints)
- GET `/v1/chat/completions/{completion_id}/messages/{message_id}/plots`: getChatPlotByMessage - Get the plot for a specific message in a chat.
"""
openapi_tags = [
{
"name": "chat",
"description": "Chat API : Given a list of messages comprising a conversation, the model will return a response.",
}
]
app = FastAPI(
title=TITLE,
description=DESCRIPTION,
version=VERSION,
docs_url="/docs",
redoc_url="/redoc",
openapi_url="/openapi.json",
lifespan=lifespan,
openapi_tags=openapi_tags,
debug=True,
)
# Configure OpenAPI security scheme
app.openapi_components = {
"securitySchemes": {
"ApiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "Authorization",
"description": "API key in the format: sk-{username}-{base64_encoded_data}",
}
}
}
# Configure CORS
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"])
app.mount("/static", StaticFiles(directory="static"), name="static")
app.mount("/.well-known", StaticFiles(directory=".well-known"), name="well-known")
app.include_router(chat_api.router)
app.include_router(management_api.router)
app.include_router(conversation_api.router)
# Build and mount Gradio app
demo = build_gradio_app()
app = gr.mount_gradio_app(app, demo, path="/ui", auth=app_auth)
# uv run uvicorn main:app --host 0.0.0.0 --port 7860 --reload