Finish MVP and dockerize

This commit is contained in:
2026-04-02 19:15:47 +02:00
parent 90ad5e0260
commit 30cb18b55e
50 changed files with 2346 additions and 17 deletions

View File

@@ -1,23 +1,68 @@
import os
import time
from typing import Any
from celery import Celery
from dotenv import load_dotenv
from dlib.ai import TailoringContext, generate_tailoring_suggestions
from dlib.cv import StructuredBlock, StructuredDocument, parse_docx_bytes
from dlib.storage import MinioStorageClient, MinioStorageConfig
load_dotenv()
# Redis connection
redis_url = os.getenv("REDIS_URL", "redis://localhost:6379")
app = Celery('worker', broker=redis_url, backend=redis_url)
# Redis / Celery configuration
redis_url = os.getenv("REDIS_URL", "redis://localhost:6379/0")
app = Celery(
"worker", broker=redis_url, backend=os.getenv("CELERY_RESULT_BACKEND", redis_url)
)
def _storage_client() -> MinioStorageClient:
config = MinioStorageConfig(
bucket_name=os.getenv("MINIO_BUCKET", "resume-branches"),
region_name=os.getenv("MINIO_REGION", "us-east-1"),
endpoint_url=os.getenv("MINIO_ENDPOINT", "http://localhost:9900"),
access_key_id=os.getenv("MINIO_ROOT_USER"),
secret_access_key=os.getenv("MINIO_ROOT_PASSWORD"),
path_prefix=os.getenv("MINIO_PATH_PREFIX", "artifacts/cv"),
)
return MinioStorageClient(config)
storage_client = _storage_client()
@app.task
def simple_task(message):
"""A simple task that processes a message and returns a result"""
time.sleep(2) # Simulate some work
def simple_task(message: str) -> str:
"""Basic smoke-test task."""
time.sleep(1)
return f"Processed: {message}"
@app.task
def add_numbers(x, y):
"""Simple math task"""
return x + y
if __name__ == '__main__':
@app.task
def parse_document_from_storage(key: str) -> list[dict[str, Any]]:
data = storage_client.download_bytes(key=key)
structured = parse_docx_bytes(data)
return [block.model_dump() for block in structured.blocks]
@app.task
def generate_tailoring(
job_description: str, blocks: list[dict[str, Any]], focus_keywords: list[str]
):
context = TailoringContext(
job_description=job_description, focus_keywords=focus_keywords
)
document = StructuredDocument(
version_label="worker",
blocks=[StructuredBlock.model_validate(block) for block in blocks],
)
suggestions = generate_tailoring_suggestions(context, document)
return [suggestion.model_dump() for suggestion in suggestions]
if __name__ == "__main__":
app.start()