Skip to content

Commit

Permalink
fix: download model in background task (#96)
Browse files Browse the repository at this point in the history
  • Loading branch information
kyteinsky authored Oct 31, 2024
2 parents f2b8dc4 + 69bd0e8 commit 4a2e505
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 37 deletions.
4 changes: 1 addition & 3 deletions context_chat_backend/chain/ingest/doc_loader.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import re
import gc
import tempfile
import traceback
from collections.abc import Callable
Expand Down Expand Up @@ -138,5 +137,4 @@ def decode_source(source: UploadFile) -> str | None:
log_error(f'Error decoding source file ({source.filename})')
return None
finally:
source.file.close() # Ensure file is closed after processing
gc.collect() # Force garbage collection to free up memory
source.file.close() # Ensure file is closed after processing
51 changes: 17 additions & 34 deletions context_chat_backend/controller.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import os
import threading
from collections.abc import Callable
from contextlib import asynccontextmanager
from functools import wraps
from logging import error as log_error
from threading import Event
from typing import Annotated, Any, Callable
from typing import Annotated, Any

from fastapi import BackgroundTasks, Body, FastAPI, Request, UploadFile
from fastapi import Body, FastAPI, Request, UploadFile
from langchain.llms.base import LLM
from nc_py_api import NextcloudApp
from nc_py_api.ex_app import persistent_storage
from nc_py_api.ex_app.integration_fastapi import fetch_models_task
from nc_py_api import AsyncNextcloudApp, NextcloudApp
from nc_py_api.ex_app import persistent_storage, set_handlers
from pydantic import BaseModel, ValidationInfo, field_validator

from .chain import ContextException, LLMOutput, ScopeType, embed_sources, process_context_query, process_query
Expand All @@ -19,7 +19,7 @@
from .models import LlmException
from .ocs_utils import AppAPIAuthMiddleware
from .setup_functions import ensure_config_file, repair_run, setup_env_vars
from .utils import JSONResponse, update_progress, value_of
from .utils import JSONResponse, value_of
from .vectordb import BaseVectorDB, DbException

# setup
Expand All @@ -29,17 +29,25 @@
ensure_config_file()

models_to_fetch = {
"https://huggingface.co/Ralriki/multilingual-e5-large-instruct-GGUF/resolve/main/multilingual-e5-large-instruct-q6_k.gguf": {
"https://huggingface.co/Ralriki/multilingual-e5-large-instruct-GGUF/resolve/8738f8d3d8f311808479ecd5756607e24c6ca811/multilingual-e5-large-instruct-q6_k.gguf": { # noqa: E501
"save_path": os.path.join(persistent_storage(), 'model_files', "multilingual-e5-large-instruct-q6_k.gguf")
}
}
app_enabled = Event()

# disabled for now
# scheduler = AsyncIOScheduler()
def enabled_handler(enabled: bool, _: NextcloudApp | AsyncNextcloudApp) -> str:
if enabled:
app_enabled.set()
else:
app_enabled.clear()

print('App', 'enabled' if enabled else 'disabled', flush=True)
return ''


@asynccontextmanager
async def lifespan(app: FastAPI):
set_handlers(app, enabled_handler, models_to_fetch=models_to_fetch)
nc = NextcloudApp()
if nc.enabled_state:
app_enabled.set()
Expand Down Expand Up @@ -187,31 +195,6 @@ def _(userId: str, sourceNames: str):
def _():
return JSONResponse(content={'enabled': app_enabled.is_set()}, status_code=200)

@app.put('/enabled')
def _(enabled: bool):

if enabled:
app_enabled.set()
else:
app_enabled.clear()

print('App', 'enabled' if enabled else 'disabled', flush=True)
return JSONResponse(content={'error': ''}, status_code=200)


@app.get('/heartbeat')
def _():
print('heartbeat_handler: result=ok')
return JSONResponse(content={'status': 'ok'}, status_code=200)


@app.post('/init')
def _(bg_tasks: BackgroundTasks):
nc = NextcloudApp()
fetch_models_task(nc, models_to_fetch, 0)
update_progress(app, 100)
return JSONResponse(content={}, status_code=200)


@app.post('/deleteSources')
@enabled_guard(app)
Expand Down

0 comments on commit 4a2e505

Please sign in to comment.