Spaces:
Runtime error
Runtime error
Commit
·
269b3c2
1
Parent(s):
e234fba
Add WebSocket routing for conversation handling and refactor controllers
Browse files- src/app.py +2 -1
- src/controllers/__init__.py +10 -3
- src/controllers/_conversation_controller.py +2 -1
- src/services/_web_rtc_service.py +4 -3
src/app.py
CHANGED
|
@@ -4,7 +4,7 @@ from contextlib import asynccontextmanager
|
|
| 4 |
from fastapi import FastAPI
|
| 5 |
from fastapi.middleware.cors import CORSMiddleware
|
| 6 |
|
| 7 |
-
from src.controllers import api_router
|
| 8 |
from src.config import logger, DatabaseConfig
|
| 9 |
from src.middlewares import AuthenticationMiddleware
|
| 10 |
|
|
@@ -48,3 +48,4 @@ async def check_health():
|
|
| 48 |
|
| 49 |
|
| 50 |
app.include_router(api_router, prefix="/api")
|
|
|
|
|
|
| 4 |
from fastapi import FastAPI
|
| 5 |
from fastapi.middleware.cors import CORSMiddleware
|
| 6 |
|
| 7 |
+
from src.controllers import api_router, websocket_router
|
| 8 |
from src.config import logger, DatabaseConfig
|
| 9 |
from src.middlewares import AuthenticationMiddleware
|
| 10 |
|
|
|
|
| 48 |
|
| 49 |
|
| 50 |
app.include_router(api_router, prefix="/api")
|
| 51 |
+
app.include_router(websocket_router, prefix="/ws")
|
src/controllers/__init__.py
CHANGED
|
@@ -6,9 +6,11 @@ from ._file_controller import FileController
|
|
| 6 |
from ._conversation_controller import ConversationController
|
| 7 |
|
| 8 |
api_router = APIRouter()
|
|
|
|
| 9 |
|
| 10 |
auth_router = AuthController().api_router
|
| 11 |
-
|
|
|
|
| 12 |
file_router = FileController().api_router
|
| 13 |
|
| 14 |
API_KEY_HEADER = APIKeyHeader(name="Authorization", auto_error=False)
|
|
@@ -20,11 +22,16 @@ api_router.include_router(
|
|
| 20 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 21 |
)
|
| 22 |
api_router.include_router(
|
| 23 |
-
|
| 24 |
prefix="/v1",
|
| 25 |
tags=["Conversation"],
|
| 26 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 27 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
api_router.include_router(
|
| 29 |
file_router,
|
| 30 |
prefix="/v1",
|
|
@@ -32,6 +39,6 @@ api_router.include_router(
|
|
| 32 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 33 |
)
|
| 34 |
|
| 35 |
-
__all__ = ["api_router"]
|
| 36 |
__version__ = "0.1.0"
|
| 37 |
__author__ = "Ramanjit Singh"
|
|
|
|
| 6 |
from ._conversation_controller import ConversationController
|
| 7 |
|
| 8 |
api_router = APIRouter()
|
| 9 |
+
websocket_router = APIRouter()
|
| 10 |
|
| 11 |
auth_router = AuthController().api_router
|
| 12 |
+
conversation_api_router = ConversationController().api_router
|
| 13 |
+
conversation_websocket_router = ConversationController().websocket_router
|
| 14 |
file_router = FileController().api_router
|
| 15 |
|
| 16 |
API_KEY_HEADER = APIKeyHeader(name="Authorization", auto_error=False)
|
|
|
|
| 22 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 23 |
)
|
| 24 |
api_router.include_router(
|
| 25 |
+
conversation_api_router,
|
| 26 |
prefix="/v1",
|
| 27 |
tags=["Conversation"],
|
| 28 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 29 |
)
|
| 30 |
+
websocket_router.include_router(
|
| 31 |
+
conversation_websocket_router,
|
| 32 |
+
prefix="/v1",
|
| 33 |
+
tags=["Conversation"],
|
| 34 |
+
)
|
| 35 |
api_router.include_router(
|
| 36 |
file_router,
|
| 37 |
prefix="/v1",
|
|
|
|
| 39 |
dependencies=[Depends(API_KEY_HEADER)],
|
| 40 |
)
|
| 41 |
|
| 42 |
+
__all__ = ["api_router", "websocket_router"]
|
| 43 |
__version__ = "0.1.0"
|
| 44 |
__author__ = "Ramanjit Singh"
|
src/controllers/_conversation_controller.py
CHANGED
|
@@ -74,6 +74,7 @@ class ConversationController:
|
|
| 74 |
self.redis_client = RedisClient().client
|
| 75 |
self.service = ConversationService
|
| 76 |
self.api_router = APIRouter()
|
|
|
|
| 77 |
self.api_router.add_api_route(
|
| 78 |
"/conversations",
|
| 79 |
self.create_conversation,
|
|
@@ -92,7 +93,7 @@ class ConversationController:
|
|
| 92 |
methods=["POST"],
|
| 93 |
response_model=CreateConversationSummaryResponse,
|
| 94 |
)
|
| 95 |
-
self.
|
| 96 |
|
| 97 |
async def create_conversation(
|
| 98 |
self, request: Request, data: CreateConversationSchema
|
|
|
|
| 74 |
self.redis_client = RedisClient().client
|
| 75 |
self.service = ConversationService
|
| 76 |
self.api_router = APIRouter()
|
| 77 |
+
self.websocket_router = APIRouter()
|
| 78 |
self.api_router.add_api_route(
|
| 79 |
"/conversations",
|
| 80 |
self.create_conversation,
|
|
|
|
| 93 |
methods=["POST"],
|
| 94 |
response_model=CreateConversationSummaryResponse,
|
| 95 |
)
|
| 96 |
+
self.websocket_router.add_websocket_route("/conversations", self.conversation)
|
| 97 |
|
| 98 |
async def create_conversation(
|
| 99 |
self, request: Request, data: CreateConversationSchema
|
src/services/_web_rtc_service.py
CHANGED
|
@@ -24,9 +24,10 @@ class WebRTCService:
|
|
| 24 |
data = await websocket.receive_text()
|
| 25 |
message = json.loads(data)
|
| 26 |
|
| 27 |
-
user_status = await redis_client.get(f"session:{user_id}{conversation_id}")
|
| 28 |
-
if not user_status:
|
| 29 |
-
|
|
|
|
| 30 |
|
| 31 |
openai_server_events = {
|
| 32 |
"session_created": message["type"] == "session.created",
|
|
|
|
| 24 |
data = await websocket.receive_text()
|
| 25 |
message = json.loads(data)
|
| 26 |
|
| 27 |
+
# user_status = await redis_client.get(f"session:{user_id}{conversation_id}")
|
| 28 |
+
# if not user_status:
|
| 29 |
+
# logger.error("User session has ended")
|
| 30 |
+
# raise Exception("A max 25 minute session has ended")
|
| 31 |
|
| 32 |
openai_server_events = {
|
| 33 |
"session_created": message["type"] == "session.created",
|