From e2f552a1c504c4f63bd879793633b9e47a499521 Mon Sep 17 00:00:00 2001 From: Adam Wilson Date: Fri, 30 May 2025 08:40:38 -0600 Subject: [PATCH] initial pass at logging service --- src/text_generation/entrypoints/http_api.py | 35 ------------------- .../entrypoints/http_api_controller.py | 10 ++++-- src/text_generation/entrypoints/server.py | 13 ++----- .../service/logging_service.py | 10 ++++++ 4 files changed, 21 insertions(+), 47 deletions(-) delete mode 100644 src/text_generation/entrypoints/http_api.py create mode 100644 src/text_generation/service/logging_service.py diff --git a/src/text_generation/entrypoints/http_api.py b/src/text_generation/entrypoints/http_api.py deleted file mode 100644 index 5f0225bc3..000000000 --- a/src/text_generation/entrypoints/http_api.py +++ /dev/null @@ -1,35 +0,0 @@ -# """ -# Usage: -# $ uvicorn src.api.http_api:app --host 0.0.0.0 --port 9999 -# """ - -# from fastapi import FastAPI -# from pathlib import Path -# from pydantic import BaseModel -# from src.llm.llm import Phi3LanguageModel - - -# STATIC_PATH = Path(__file__).parent.absolute() / 'static' - -# app = FastAPI( -# title='Phi-3 Language Model API', -# description='HTTP API for interacting with Phi-3 Mini 4K language model' -# ) - -# class LanguageModelPrompt(BaseModel): -# prompt: str - -# class LanguageModelResponse(BaseModel): -# response: str - - -# @app.get('/', response_model=str) -# async def health_check(): -# return 'success' - - -# @app.post('/api/conversations', response_model=LanguageModelResponse) -# async def get_llm_conversation_response(request: LanguageModelPrompt): -# service = Phi3LanguageModel() -# response = service.invoke(user_input=request.prompt) -# return LanguageModelResponse(response=response) diff --git a/src/text_generation/entrypoints/http_api_controller.py b/src/text_generation/entrypoints/http_api_controller.py index 420255a77..d883979cc 100644 --- a/src/text_generation/entrypoints/http_api_controller.py +++ b/src/text_generation/entrypoints/http_api_controller.py @@ -3,9 +3,11 @@ import traceback from src.text_generation.adapters.llm.llm import Phi3LanguageModel from src.text_generation.adapters.llm.llm_rag import Phi3LanguageModelWithRag +from src.text_generation.service.logging_service import LoggingService class HttpApiController: def __init__(self): + self.logger = LoggingService(filename='text_generation.controller.log').logger self.routes = {} # Register routes self.register_routes() @@ -67,8 +69,10 @@ class HttpApiController: data = self.get_service_response(prompt) response_body = self.format_response(data) + http_status_code = 200 # make enum response_headers = [('Content-Type', 'application/json'), ('Content-Length', str(len(response_body)))] - start_response('200 OK', response_headers) + start_response(f'{http_status_code} OK', response_headers) + self.logger.info('non-RAG response', request_body, http_status_code, response_body) return [response_body] def handle_conversations_with_rag(self, env, start_response): @@ -91,8 +95,10 @@ class HttpApiController: data = self.get_service_response_with_rag(prompt) response_body = self.format_response(data) + http_status_code = 200 # make enum response_headers = [('Content-Type', 'application/json'), ('Content-Length', str(len(response_body)))] - start_response('200 OK', response_headers) + start_response(f'{http_status_code} OK', response_headers) + self.logger.info('RAG response', request_body, http_status_code, response_body) return [response_body] def __http_200_ok(self, env, start_response): diff --git a/src/text_generation/entrypoints/server.py b/src/text_generation/entrypoints/server.py index 665be9f9b..f8081944b 100644 --- a/src/text_generation/entrypoints/server.py +++ b/src/text_generation/entrypoints/server.py @@ -1,17 +1,11 @@ -import json -import logging - from src.text_generation.entrypoints.http_api_controller import HttpApiController +from src.text_generation.service.logging_service import LoggingService from wsgiref.simple_server import make_server class RestApiServer: def __init__(self): - pass - - def post_response(self, env, start_response): - start_response('200 OK', [('Content-Type', 'application/json')]) - yield [json.dumps({'received': 'data'}).encode('utf-8')] + self.logger = LoggingService(filename='text_generation.server.log').logger def listen(self): try: @@ -21,8 +15,7 @@ class RestApiServer: print(f'listening on port {port}...') wsgi_srv.serve_forever() except Exception as e: - logging.warning(e) - + self.logger.debug(e) if __name__ == '__main__': srv = RestApiServer() diff --git a/src/text_generation/service/logging_service.py b/src/text_generation/service/logging_service.py new file mode 100644 index 000000000..a8a79a230 --- /dev/null +++ b/src/text_generation/service/logging_service.py @@ -0,0 +1,10 @@ +import logging + +class LoggingService: + # TODO use base class and make this file logging service + + def __init__(self, filename): + logger = logging.getLogger() + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.FileHandler(filename)) + self.logger = logger