sachin sharma commited on
Commit
8cbad39
·
1 Parent(s): da2b98d

fix circular deps issue

Browse files
app/api/routes/prediction.py CHANGED
@@ -4,7 +4,7 @@ from fastapi import APIRouter, Depends
4
 
5
  from app.api.controllers import PredictionController
6
  from app.api.models import ImageRequest, PredictionResponse
7
- from app.core.app import get_inference_service
8
  from app.services.base import InferenceService
9
 
10
  router = APIRouter()
 
4
 
5
  from app.api.controllers import PredictionController
6
  from app.api.models import ImageRequest, PredictionResponse
7
+ from app.core.dependencies import get_inference_service
8
  from app.services.base import InferenceService
9
 
10
  router = APIRouter()
app/core/app.py CHANGED
@@ -9,7 +9,7 @@ from pydantic import Field
9
  from pydantic_settings import BaseSettings
10
 
11
  from app.core.logging import logger
12
- from app.services.base import InferenceService
13
  from app.services.inference import ResNetInferenceService
14
  from app.api.routes import prediction
15
 
@@ -29,19 +29,6 @@ class Settings(BaseSettings):
29
 
30
  settings = Settings()
31
 
32
- _inference_service: Optional[InferenceService] = None
33
-
34
-
35
- def get_inference_service() -> Optional[InferenceService]:
36
- """Get inference service for dependency injection."""
37
- return _inference_service
38
-
39
-
40
- def _set_inference_service(service: InferenceService) -> None:
41
- """Set inference service. Called internally during startup."""
42
- global _inference_service
43
- _inference_service = service
44
-
45
 
46
  @asynccontextmanager
47
  async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
@@ -55,7 +42,7 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
55
  # Replace ResNetInferenceService with your own implementation
56
  service = ResNetInferenceService(model_name="microsoft/resnet-18")
57
  await service.load_model()
58
- _set_inference_service(service)
59
 
60
  logger.info("Startup completed successfully")
61
 
 
9
  from pydantic_settings import BaseSettings
10
 
11
  from app.core.logging import logger
12
+ from app.core.dependencies import set_inference_service
13
  from app.services.inference import ResNetInferenceService
14
  from app.api.routes import prediction
15
 
 
29
 
30
  settings = Settings()
31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
  @asynccontextmanager
34
  async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
 
42
  # Replace ResNetInferenceService with your own implementation
43
  service = ResNetInferenceService(model_name="microsoft/resnet-18")
44
  await service.load_model()
45
+ set_inference_service(service)
46
 
47
  logger.info("Startup completed successfully")
48
 
app/core/logging.py CHANGED
@@ -1,49 +1,26 @@
1
- """
2
- Logging configuration for the application.
3
- """
4
 
5
  import logging
6
  import sys
7
- from typing import Optional
8
 
9
- from app.core.config import settings
10
 
 
 
 
11
 
12
- class LoggerSetup:
13
- """Logger setup utility class."""
14
-
15
- @staticmethod
16
- def setup_logging(
17
- logger_name: Optional[str] = None,
18
- level: Optional[str] = None,
19
- format_string: Optional[str] = None
20
- ) -> logging.Logger:
21
- """Set up and configure a logger."""
22
- logger = logging.getLogger(logger_name or settings.app_name)
23
-
24
- # Avoid duplicate handlers
25
- if logger.handlers:
26
- return logger
27
-
28
- # Set level
29
- log_level = getattr(logging, (level or "INFO").upper())
30
- logger.setLevel(log_level)
31
-
32
- # Create console handler
33
- handler = logging.StreamHandler(sys.stdout)
34
- handler.setLevel(log_level)
35
-
36
- # Create formatter
37
- formatter = logging.Formatter(
38
- format_string or "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
39
- )
40
- handler.setFormatter(formatter)
41
 
42
- # Add handler to logger
43
- logger.addHandler(handler)
 
 
 
 
 
 
44
 
45
- return logger
46
 
47
 
48
- # Create application logger
49
- logger = LoggerSetup.setup_logging()
 
1
+ """Logging configuration."""
 
 
2
 
3
  import logging
4
  import sys
 
5
 
 
6
 
7
+ def setup_logging(logger_name: str = "ML Inference Service") -> logging.Logger:
8
+ """Setup and configure logger."""
9
+ logger = logging.getLogger(logger_name)
10
 
11
+ if logger.handlers:
12
+ return logger
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
 
14
+ logger.setLevel(logging.INFO)
15
+ handler = logging.StreamHandler(sys.stdout)
16
+ handler.setLevel(logging.INFO)
17
+ formatter = logging.Formatter(
18
+ "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
19
+ )
20
+ handler.setFormatter(formatter)
21
+ logger.addHandler(handler)
22
 
23
+ return logger
24
 
25
 
26
+ logger = setup_logging()