Spaces:
Sleeping
Sleeping
# Import required libraries | |
from fastapi import FastAPI, HTTPException | |
#import redis | |
from dotenv import load_dotenv | |
import os | |
from modules.redistribute import redistribute, insert_element_at_position | |
from modules.models.api import Input, Output, NewItem, UUID | |
from modules.database import BoostDatabase, UserDatabase, User | |
# Load environment variables from .env file | |
load_dotenv('../.env') | |
# Access environment variables | |
redis_port = os.getenv("REDIS_PORT") | |
fastapi_port = os.getenv("FASTAPI_PORT") | |
print("Redis port:", redis_port) | |
print("FastAPI port:", fastapi_port) | |
app = FastAPI() | |
boost_db = BoostDatabase('data/boost_bank.csv') | |
user_db = UserDatabase() | |
# Define a health check endpoint | |
async def health_check(): | |
return {"status": "ok"} | |
# Define FastAPI routes and logic | |
async def rerank_items(input_data: Input) -> Output: | |
# who is the user? | |
user = input_data.session.user_id | |
date = input_data.session.current_time | |
platform = input_data.session.platform | |
items = input_data.items | |
# TODO consider sampling them? | |
print(items) | |
reranked_ids, first_topic, insertion_pos = redistribute(items=items) | |
#reranked_ids = [ for id_ in reranked_ids] | |
print("here!") | |
print(reranked_ids) | |
user_in_db = user_db.get_user(user_id=user) | |
# if user already exists -> has boosting records | |
if user_in_db: | |
# has been boosted today? | |
if user_in_db.is_boosted_today(): | |
# return only reranked items, no insertion | |
return Output(reranked_ids=reranked_ids, new_items=[]) | |
# user exists and not boosted today yet | |
else: | |
new_items = [] | |
boosts_received = user_in_db.boosts | |
# there was some civic content in the batch | |
if first_topic != "non-civic": | |
fetched_boost = boost_db.get_random_boost(topic=first_topic, | |
platform=platform, | |
blacklist_ids=boosts_received) | |
user_db.add_boost_to_user(user_id=user, boost=fetched_boost) | |
user_db.update_user_boosted_today(user_id=user, date=date) | |
# insert boost before first civic in batch | |
reranked_ids = insert_element_at_position(lst=reranked_ids, | |
element=UUID(fetched_boost['id']), | |
position=insertion_pos) | |
return Output(ranked_ids=reranked_ids, new_items=[NewItem(id=UUID(fetched_boost["id"]), url=fetched_boost["url"])]) | |
# no civic content to boost on | |
else: | |
return Output(ranked_ids=reranked_ids, new_items=[]) | |
# user doesn't exist | |
else: | |
print(first_topic) | |
print(platform) | |
if first_topic != "non-civic": | |
fetched_boost = boost_db.get_random_boost(topic=first_topic, | |
platform=platform, | |
blacklist_ids=[]) | |
print(fetched_boost) | |
print(type(fetched_boost)) | |
user_db.add_user(user_id=user, | |
user=User(user_id=user, last_boost=date, boosts=[fetched_boost])) | |
# insert boost before first civic in batch | |
reranked_ids = insert_element_at_position(lst=reranked_ids, | |
element=UUID(fetched_boost['id']), | |
position=insertion_pos) | |
return Output(ranked_ids=reranked_ids, new_items=[NewItem(id=UUID(fetched_boost["id"]), url=fetched_boost["url"])]) | |
# no civic content to boost on | |
else: | |
print("there") | |
return Output(ranked_ids=reranked_ids, new_items=[]) | |