a1c00l's picture
Upload 9 files
8819832 verified
raw
history blame
3.02 kB
"""
Background worker for the AIBOM Generator.
This module provides a background worker that can be used to process
AIBOM generation tasks asynchronously.
"""
import logging
import os
import time
from typing import Dict, List, Optional, Any
from aibom_generator.generator import AIBOMGenerator
from aibom_generator.utils import setup_logging, calculate_completeness_score
# Set up logging
setup_logging()
logger = logging.getLogger(__name__)
class Worker:
"""
Background worker for AIBOM generation.
"""
def __init__(
self,
poll_interval: int = 60,
hf_token: Optional[str] = None,
inference_model_url: Optional[str] = None,
use_inference: bool = True,
cache_dir: Optional[str] = None,
):
"""
Initialize the worker.
Args:
poll_interval: Interval in seconds to poll for new tasks
hf_token: Hugging Face API token
inference_model_url: URL of the inference model service
use_inference: Whether to use the inference model
cache_dir: Directory to cache API responses and model cards
"""
self.poll_interval = poll_interval
self.generator = AIBOMGenerator(
hf_token=hf_token,
inference_model_url=inference_model_url,
use_inference=use_inference,
cache_dir=cache_dir,
)
self.running = False
def start(self):
"""Start the worker."""
self.running = True
logger.info("Worker started")
try:
while self.running:
# Process tasks
self._process_tasks()
# Sleep for poll interval
time.sleep(self.poll_interval)
except KeyboardInterrupt:
logger.info("Worker stopped by user")
except Exception as e:
logger.error(f"Worker error: {e}")
finally:
self.running = False
logger.info("Worker stopped")
def stop(self):
"""Stop the worker."""
self.running = False
def _process_tasks(self):
"""Process pending tasks."""
# This is a placeholder for actual task processing
# In a real implementation, this would fetch tasks from a queue or database
logger.debug("Processing tasks")
# Simulate task processing
# In a real implementation, this would process actual tasks
pass
def main():
"""Main entry point for the worker."""
# Create and start the worker
worker = Worker(
poll_interval=int(os.environ.get("AIBOM_POLL_INTERVAL", 60)),
hf_token=os.environ.get("HF_TOKEN"),
inference_model_url=os.environ.get("AIBOM_INFERENCE_URL"),
use_inference=os.environ.get("AIBOM_USE_INFERENCE", "true").lower() == "true",
cache_dir=os.environ.get("AIBOM_CACHE_DIR"),
)
worker.start()
if __name__ == "__main__":
main()