lollms-webui/endpoints/lollms_playground.py

123 lines
4.5 KiB
Python
Raw Normal View History

2024-01-11 01:32:21 +00:00
"""
project: lollms_webui
file: lollms_xtts.py
author: ParisNeo
description:
This module contains a set of FastAPI routes that provide information about the Lord of Large Language and Multimodal Systems (LoLLMs) Web UI
application. These routes allow users to
"""
from fastapi import APIRouter, Request
2024-02-17 01:08:14 +00:00
from fastapi import HTTPException
2024-01-11 01:32:21 +00:00
from lollms_webui import LOLLMSWebUI
2024-02-17 01:08:14 +00:00
from pydantic import BaseModel, Field
2024-01-11 01:32:21 +00:00
from starlette.responses import StreamingResponse
from lollms.types import MSG_TYPE
from lollms.main_config import BaseConfig
from lollms.utilities import detect_antiprompt, remove_text_from_string, trace_exception, find_first_available_file_index, add_period, PackageManager
from pathlib import Path
from ascii_colors import ASCIIColors
import os
import platform
2024-01-11 01:50:54 +00:00
import yaml, json
2024-01-11 01:32:21 +00:00
# ----------------------- Defining router and main class ------------------------------
router = APIRouter()
lollmsElfServer:LOLLMSWebUI = LOLLMSWebUI.get_instance()
# ----------------------- voice ------------------------------
2024-01-11 01:50:54 +00:00
@router.get("/get_presets")
2024-01-11 01:32:21 +00:00
def get_presets():
presets = []
presets_folder = Path("__file__").parent/"presets"
for filename in presets_folder.glob('*.yaml'):
with open(filename, 'r', encoding='utf-8') as file:
preset = yaml.safe_load(file)
if preset is not None:
presets.append(preset)
2024-02-18 23:23:15 +00:00
presets_folder = lollmsElfServer.lollms_paths.personal_discussions_path/"lollms_playground_presets"
2024-01-11 01:32:21 +00:00
presets_folder.mkdir(exist_ok=True, parents=True)
for filename in presets_folder.glob('*.yaml'):
with open(filename, 'r', encoding='utf-8') as file:
preset = yaml.safe_load(file)
if preset is not None:
presets.append(preset)
2024-01-11 01:50:54 +00:00
return presets
2024-02-17 01:08:14 +00:00
class PresetData(BaseModel):
name: str = Field(..., min_length=1)
2024-01-11 01:50:54 +00:00
@router.post("/add_preset")
2024-02-17 01:08:14 +00:00
async def add_preset(preset_data: PresetData):
2024-01-11 01:50:54 +00:00
"""
Changes current voice
:param request: The HTTP request object.
:return: A JSON response with the status of the operation.
"""
2024-02-17 01:08:14 +00:00
try:
2024-02-18 23:23:15 +00:00
presets_folder = lollmsElfServer.lollms_paths.personal_discussions_path/"lollms_playground_presets"
2024-02-17 01:08:14 +00:00
if not presets_folder.exists():
presets_folder.mkdir(exist_ok=True, parents=True)
# Ensure the name doesn't contain any path manipulation characters
if ".." in preset_data.name or "/" in preset_data.name:
raise HTTPException(status_code=400, detail="Invalid preset name")
2024-01-11 01:50:54 +00:00
2024-02-17 01:08:14 +00:00
fn = preset_data.name.lower().replace(" ","_")
filename = presets_folder/f"{fn}.yaml"
with open(filename, 'w', encoding='utf-8') as file:
yaml.dump(preset_data, file)
return {"status": True}
except Exception as ex:
trace_exception(ex) # Assuming 'trace_exception' function logs the error
return {"status": False, "error": "There was an error adding the preset"}
2024-01-11 01:50:54 +00:00
@router.post("/del_preset")
2024-02-17 01:08:14 +00:00
async def del_preset(preset_data: PresetData):
2024-01-11 01:50:54 +00:00
"""
Saves a preset to a file.
2024-02-17 01:08:14 +00:00
:param preset_data: The data of the preset.
2024-01-11 01:50:54 +00:00
:return: A JSON response with the status of the operation.
"""
# Get the JSON data from the POST request.
2024-02-17 01:08:14 +00:00
if preset_data.name is None:
raise HTTPException(status_code=400, detail="Preset name is missing in the request")
# Ensure the name doesn't contain any path manipulation characters
if ".." in preset_data.name or "/" in preset_data.name:
raise HTTPException(status_code=400, detail="Invalid preset name")
2024-02-18 23:23:15 +00:00
presets_file = lollmsElfServer.lollms_paths.personal_discussions_path/"lollms_playground_presets"/preset_data.name
2024-02-17 01:08:14 +00:00
try:
presets_file.unlink()
return {"status":True}
except:
return {"status":False}
2024-01-11 01:50:54 +00:00
2024-02-18 23:23:15 +00:00
class PresetDataWithValue(BaseModel):
name: str = Field(..., min_length=1)
preset: str
2024-01-11 01:50:54 +00:00
@router.post("/save_presets")
2024-02-18 23:23:15 +00:00
async def save_presets(preset_data: PresetDataWithValue):
2024-01-11 01:50:54 +00:00
"""
Saves a preset to a file.
2024-02-17 01:08:14 +00:00
:param preset_data: The data of the preset.
2024-01-11 01:50:54 +00:00
:return: A JSON response with the status of the operation.
"""
# Get the JSON data from the POST request.
2024-02-17 01:08:14 +00:00
if preset_data.preset is None:
raise HTTPException(status_code=400, detail="Preset data is missing in the request")
2024-01-11 01:50:54 +00:00
2024-02-18 23:23:15 +00:00
presets_file = lollmsElfServer.lollms_paths.personal_discussions_path/"presets.json"
2024-01-11 01:50:54 +00:00
# Save the JSON data to a file.
with open(presets_file, "w") as f:
2024-02-17 01:08:14 +00:00
json.dump(preset_data.preset, f, indent=4)
2024-01-11 01:50:54 +00:00
return {"status":True,"message":"Preset saved successfully!"}