2024-01-09 22:26:41 +00:00
"""
project : lollms
file : lollms_discussion_events . py
author : ParisNeo
description :
This module contains a set of Socketio routes that provide information about the Lord of Large Language and Multimodal Systems ( LoLLMs ) Web UI
application . These routes are specific to discussion operation
"""
from fastapi import APIRouter , Request
from fastapi import HTTPException
from pydantic import BaseModel
import pkg_resources
from lollms . server . elf_server import LOLLMSElfServer
from fastapi . responses import FileResponse
from lollms . binding import BindingBuilder , InstallOption
from ascii_colors import ASCIIColors
from lollms . personality import MSG_TYPE , AIPersonality
from lollms . types import MSG_TYPE , SENDER_TYPES
from lollms . utilities import load_config , trace_exception , gc
2024-05-05 18:57:11 +00:00
from lollms . utilities import find_first_available_file_index , convert_language_name , PackageManager , run_async , add_period
from lollms . security import forbid_remote_access , check_access
2024-01-09 22:26:41 +00:00
from lollms_webui import LOLLMSWebUI
from pathlib import Path
from typing import List
from functools import partial
import socketio
import threading
import os
import time
2024-02-26 00:55:44 +00:00
from lollms . databases . discussions_database import Discussion
2024-01-09 22:26:41 +00:00
from datetime import datetime
router = APIRouter ( )
lollmsElfServer : LOLLMSWebUI = LOLLMSWebUI . get_instance ( )
# ----------------------------------- events -----------------------------------------
def add_events ( sio : socketio ) :
2024-03-28 22:58:51 +00:00
forbid_remote_access ( lollmsElfServer )
2024-01-09 22:26:41 +00:00
@sio.on ( ' start_webcam_video_stream ' )
def start_webcam_video_stream ( sid ) :
lollmsElfServer . info ( " Starting video capture " )
2024-01-29 21:21:45 +00:00
try :
from lollms . media import WebcamImageSender
lollmsElfServer . webcam = WebcamImageSender ( sio , lollmsCom = lollmsElfServer )
lollmsElfServer . webcam . start_capture ( )
except :
lollmsElfServer . InfoMessage ( " Couldn ' t load media library. \n You will not be able to perform any of the media linked operations. please verify the logs and install any required installations " )
2024-01-09 22:26:41 +00:00
@sio.on ( ' stop_webcam_video_stream ' )
def stop_webcam_video_stream ( sid ) :
lollmsElfServer . info ( " Stopping video capture " )
lollmsElfServer . webcam . stop_capture ( )
@sio.on ( ' start_audio_stream ' )
def start_audio_stream ( sid ) :
2024-05-05 18:57:11 +00:00
client = check_access ( lollmsElfServer , sid )
2024-05-05 15:28:45 +00:00
if lollmsElfServer . config . headless_server_mode :
return { " status " : False , " error " : " Start recording is blocked when in headless mode for obvious security reasons! " }
if lollmsElfServer . config . host != " localhost " and lollmsElfServer . config . host != " 127.0.0.1 " :
return { " status " : False , " error " : " Start recording is blocked when the server is exposed outside for very obvious reasons! " }
2024-01-09 22:26:41 +00:00
lollmsElfServer . info ( " Starting audio capture " )
2024-01-29 21:21:45 +00:00
try :
2024-05-19 12:35:05 +00:00
from lollms . media import RTCom
2024-01-29 21:21:45 +00:00
lollmsElfServer . rec_output_folder = lollmsElfServer . lollms_paths . personal_outputs_path / " audio_rec "
lollmsElfServer . rec_output_folder . mkdir ( exist_ok = True , parents = True )
lollmsElfServer . summoned = False
2024-05-19 12:35:05 +00:00
lollmsElfServer . rt_com = RTCom (
2024-05-18 19:53:39 +00:00
lollmsElfServer ,
2024-05-19 10:27:13 +00:00
lollmsElfServer . sio ,
2024-05-18 21:07:58 +00:00
lollmsElfServer . personality ,
2024-05-19 10:27:13 +00:00
client = client ,
2024-05-18 19:53:39 +00:00
threshold = 1000 ,
silence_duration = 2 ,
sound_threshold_percentage = 10 ,
gain = 1.0 ,
rate = 44100 ,
channels = 1 ,
buffer_size = 10 ,
2024-05-19 12:35:05 +00:00
model = lollmsElfServer . config . whisper_model ,
2024-05-18 19:53:39 +00:00
snd_device = None ,
logs_folder = " logs " ,
voice = None ,
block_while_talking = True ,
context_size = 4096
)
2024-05-19 12:35:05 +00:00
lollmsElfServer . rt_com . start_recording ( )
2024-05-05 18:57:11 +00:00
except Exception as ex :
trace_exception ( ex )
2024-01-29 21:21:45 +00:00
lollmsElfServer . InfoMessage ( " Couldn ' t load media library. \n You will not be able to perform any of the media linked operations. please verify the logs and install any required installations " )
2024-01-09 22:26:41 +00:00
2024-05-05 15:28:45 +00:00
2024-01-09 22:26:41 +00:00
@sio.on ( ' stop_audio_stream ' )
def stop_audio_stream ( sid ) :
2024-05-05 18:57:11 +00:00
client = check_access ( lollmsElfServer , sid )
2024-01-09 22:26:41 +00:00
lollmsElfServer . info ( " Stopping audio capture " )
2024-05-19 12:35:05 +00:00
lollmsElfServer . rt_com . stop_recording ( )
lollmsElfServer . rt_com = None
2024-05-05 18:57:11 +00:00
2024-01-09 22:26:41 +00:00