from typing import Optional from pydantic import BaseModel from fastapi import Depends, Request, HTTPException from user_agents import parse """user-agent management""" class ClientInfo: def __init__(self, browser, os, device_type): self.browser = browser self.os = os self.device_type = device_type def is_browser(self) -> bool: if ( self.browser == "Chrome" or self.browser == "Firefox" or self.browser == "Safari" or self.browser == "Edge" ): return True return False def parse_user_agent(user_agent: str) -> Optional[ClientInfo]: if not user_agent: return None ua = parse(user_agent) device_type = "desktop" if ua.is_pc else "mobile" if ua.is_mobile else "tablet" client_info = ClientInfo( browser=ua.browser.family, os=ua.os.family, device_type=device_type ) return client_info def get_client_info(request: Request): user_agent = request.headers.get("user-agent", "") if not user_agent: raise HTTPException( status_code=400, detail="User-Agent header is required", ) return parse_user_agent(user_agent) """ { "host_name": string, "openai_key": string, "pinecone_key": string, "pinecone_env": string, "firebase_key": string, "settings": { "temperature": float }, "token": string, "uuid": string, } """ class BasicReq(BaseModel): class Confs(BaseModel): class Settings(BaseModel): temperature: float = 0.6 openai_key: str pinecone_key: str pinecone_env: str firebase_key: str token: str = "" uuid: str = "" settings: Settings def to_json(self): return { "openai_key": self.openai_key, "pinecone_key": self.pinecone_key, "pinecone_env": self.pinecone_env, "firebase_key": self.firebase_key, "settings": {"temperature": self.settings.temperature}, "token": self.token, "uuid": self.uuid, } confs: Confs """endpoint: /sendNotification""" class Notification(BasicReq): message: str """endpoint: /uploadImage""" class UploadImage(BasicReq): image_name: str status: str """endpoint: /image_relatedness""" class ImageRelatedness(BasicReq): image_name: str message: str """endpoint: /feedback""" class Feedback(BasicReq): class Prompt(BaseModel): image_name: str message: str prompt: Prompt completion: Prompt rating: int """endpoint: /chat_rising""" class ChatRising(BasicReq): class Format(BaseModel): role: str content: str history: list[Format] user_input: str """endpoint: /send_sms""" class SendSMS(BasicReq): class Body(BaseModel): _from: str to: str body: str data: Body """endpoint : /train/contacts""" class TrainContacts(BasicReq): class ContactReq(BaseModel): contactId: str displayName: str phoneNumbers: list[str] status: str contacts: list[ContactReq] """endpoint: /document""" class Document(BasicReq): document_id: str page_content: str """endpoint /browser/item""" class BrowserItem(BasicReq): class ItemReq(BaseModel): title: str link: str items: list[ItemReq] prompt: str """endpoint /browser/ask""" class BrowserAsk(BasicReq): items: list[str] prompt: str """endpoint /train""" class Train(BasicReq): class TrainData(BaseModel): page_content: str timestamp: float id: str data: TrainData status: str """endpoint /auto_task/delete""" class AutoTaskDelete(BasicReq): class Body(BaseModel): reference_link: str data: Body """endpoint /read_emails""" class EmailReader(BasicReq): class Body(BaseModel): sender: str pwd: str imap_folder: str data: Body """endpoint /send_email""" class EmailSender(BasicReq): class Body(BaseModel): sender: str pwd: str to: str subject: str body: str to_send: bool filename: str | None file_content: str | None data: Body """endpoint : /contact/get_by_ids""" class GetContactsByIds(BasicReq): contactIds: list[str]