| 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] |
|
|