Spaces:
Paused
Paused
File size: 5,214 Bytes
2da7ed3 037ad89 2da7ed3 21b18a2 2da7ed3 8fd32c3 b311a79 2da7ed3 4167c02 21b18a2 2da7ed3 4167c02 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 21b18a2 2da7ed3 4167c02 2da7ed3 4167c02 2da7ed3 21b18a2 2da7ed3 4167c02 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
from fastapi import Body, Request, HTTPException, status
from fastapi.encoders import jsonable_encoder
import sys
from ..models.calls import UpdateCall, UserCall, UserCaptions
# Used within calls to create call record in main.py
def create_calls(collection, user: UserCall = Body(...)):
calls = jsonable_encoder(user)
new_calls = collection.insert_one(calls)
created_calls = collection.find_one({"_id": new_calls.inserted_id})
return created_calls
def list_calls(collection, limit: int):
try:
calls = collection.find(limit = limit)
return list(calls)
except:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"No existing call records yet.")
'''Finding calls based on call id'''
def find_call(collection, call_id: str):
user_calls = collection.find_one({"call_id": call_id})
if user_calls is not None:
return user_calls
else:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call with ID: '{call_id}' not found.")
'''Finding calls based on user id'''
def find_user_calls(collection, user_id: str):
user_calls = list(collection.find({"$or": [{"caller_id": user_id}, {"callee_id": user_id}]})) # match on caller or callee ID
if len(user_calls):
return user_calls
else:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"User with ID: '{user_id}' has no calls yet.")
'''Finding calls based on key terms list'''
def list_transcripts_by_key_terms(collection, key_terms_list: list[str] = Body(...)):
key_terms_list = jsonable_encoder(key_terms_list)
call_records = list(collection.find({"key_terms": {"$in": key_terms_list}}, {'_id': 0})) # exclude returning ObjectID in find()
# Check if any call records were returned
if len(call_records):
return call_records
else:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call with key terms: '{key_terms_list}' not found!")
'''Finding calls based on date ranges'''
def list_transcripts_by_dates(collection, start_date: str, end_date: str):
# print(start_date, end_date)
# Convert strings to date string in YYYY-MM-ddT00:00:00 format
start_date = f'{start_date}T00:00:00'
end_date = f'{end_date}T00:00:00'
call_records = list(collection.find({"date":{"$gte": start_date, "$lte": end_date}}))
if len(call_records):
return call_records
else:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call with creation date between: '{start_date} - {end_date}' not found!")
'''Finding calls based on call lengths'''
def list_transcripts_by_duration(collection, min_len: int, max_len: int):
call_records = list(collection.find({"duration":{"$gte": min_len, "$lte": max_len}}))
if len(call_records):
return call_records
else:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call with duration between: '{min_len} - {max_len}' milliseconds not found!")
def update_calls(collection, call_id: str, calls: UpdateCall = Body(...)):
# calls = {k: v for k, v in calls.model_dump().items() if v is not None} #loop in the dict
calls = {k: v for k, v in calls.items() if v is not None} #loop in the dict
if len(calls) >= 1:
update_result = collection.update_one({"call_id": call_id}, {"$set": calls})
if update_result.modified_count == 0:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call not updated!")
if (existing_item := collection.find_one({"call_id": call_id})) is not None:
return existing_item
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call not found!")
def update_captions(collection, call_id: str, calls: UserCaptions = Body(...)):
# calls = {k: v for k, v in calls.model_dump().items() if v is not None}
captions = {k: v for k, v in calls.items() if v is not None}
if len(calls) >= 1:
update_result = collection.update_one({"call_id": call_id},
{"$push": {"captions": captions}})
if update_result.modified_count == 0:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Captions not updated!")
if (existing_item := collection.find_one({"call_id": call_id})) is not None:
return existing_item
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Captions not found!")
def delete_calls(collection, call_id: str):
deleted_calls = collection.delete_one({"call_id": call_id})
if deleted_calls.deleted_count == 1:
return f"Call deleted sucessfully!"
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Call not found!")
def get_caption_text(collection, call_id):
call_record = find_call((collection), call_id)
try: # Check if call has any captions first
caption_records = call_record['captions']
except KeyError:
return None
# iterate through caption embedded document and store original text
combined_text = [caption['original_text'] for caption in caption_records]
return " ".join(combined_text) |