98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
|
|
from typing import Union, Optional, List
|
|
from pydantic import BaseModel
|
|
from fastapi import FastAPI, Request, Depends
|
|
from CommonCode.settings import get_logger
|
|
import logging
|
|
from fastapi.responses import StreamingResponse
|
|
import os
|
|
import sys
|
|
import json
|
|
import time
|
|
from util import embed_scores as ES
|
|
from fastapi_server_session import SessionManager, RedisSessionInterface, Session
|
|
import redis
|
|
from datetime import timedelta
|
|
|
|
app = FastAPI()
|
|
|
|
session_manager = SessionManager(
|
|
interface=RedisSessionInterface(redis.from_url("redis://localhost"))
|
|
)
|
|
|
|
logger = get_logger(__name__,'/var/log/vector_search_logs/main_embed_scores', stdout=True, systemd=False, level = logging.INFO)
|
|
r = redis.Redis(host='localhost', port=6379, db=15)
|
|
|
|
|
|
class VideosPostRequest(BaseModel):
|
|
query: str = "A cat and a human"
|
|
threshold: float = 0.10
|
|
c_dirs: Optional[List[str]] = None
|
|
task_id: str = 'compute_log'
|
|
|
|
@app.post("/videos.json")
|
|
async def videos_json(
|
|
vpr: VideosPostRequest,
|
|
session: Session = Depends(session_manager.use_session),
|
|
):
|
|
|
|
query = vpr.query
|
|
threshold = vpr.threshold
|
|
c_dirs = vpr.c_dirs
|
|
task_id = vpr.task_id
|
|
if c_dirs is None:
|
|
c_dirs = [
|
|
# "/mnt/hdd_24tb_1/videos/ftp/leopards2/2025/08/26",
|
|
# "/srv/ftp_tcc/leopards1/2025/08/27",
|
|
# "/srv/ftp_tcc/leopards1/2025/08/28",
|
|
# "/srv/ftp_tcc/leopards1/2025/08/29",
|
|
# "/srv/ftp_tcc/leopards1/2025/08/30",
|
|
# "/srv/ftp_tcc/leopards1/2025/08/31",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/01",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/02",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/03",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/04",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/05",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/06",
|
|
# "/srv/ftp_tcc/leopards1/2025/09/07",
|
|
"/srv/ftp_tcc/leopards1/2025/09/08",
|
|
"/srv/ftp_tcc/leopards1/2025/09/09",
|
|
"/srv/ftp_tcc/leopards1/2025/09/10",
|
|
"/srv/ftp_tcc/leopards1/2025/09/11",
|
|
]
|
|
|
|
|
|
# print(','.join([str(x) for x in c_dirs]))
|
|
# message = {'task':'SCHEDULED','when':[str(x) for x in c_dirs], 'time':time.time()}
|
|
# r.rpush(task_id, json.dumps(message))?
|
|
|
|
|
|
for x in c_dirs:
|
|
message = {'task':'QUEUEING', 'when': str(x), 'time': time.time()}
|
|
r.rpush(task_id, json.dumps(message))
|
|
|
|
folder_scores = ES.calculate_embedding_score_in_folders(
|
|
tuple(c_dirs), threshold=threshold, query=query, redis_key = task_id)
|
|
# if p_hits != ES.calculate_embedding_score_in_folders.cache_info().hits:
|
|
# logger.info("FROM CACHE")
|
|
# else:pp
|
|
# logger.info("COMPUTED FROM SCRATCH")
|
|
|
|
|
|
|
|
folder_scores["breaks"] = ES.add_breaks_between_videos(folder_scores)
|
|
folder_scores['videos'] = ES.collapse_scores_to_maxmin_avg(folder_scores)
|
|
|
|
|
|
session["folder_scores"] = folder_scores
|
|
return folder_scores
|
|
|
|
|
|
class ClickEvent(BaseModel):
|
|
timestamp: float
|
|
|
|
|
|
class ClickResponse(BaseModel):
|
|
path: str
|
|
timeoffset: float
|