upgraded ui

This commit is contained in:
Saifeddine ALOUI 2024-02-27 17:06:22 +01:00
parent 1f8cd86133
commit 7521389429
14 changed files with 130 additions and 129 deletions

7
app.py
View File

@ -100,13 +100,14 @@ if __name__ == "__main__":
from lollms.server.endpoints.lollms_extensions_infos import router as lollms_extensions_infos_router
from lollms.server.endpoints.lollms_generator import router as lollms_generator_router
from lollms.server.endpoints.lollms_configuration_infos import router as lollms_configuration_infos_router
from lollms.server.endpoints.lollms_skills_library import router as lollms_skills_library_router
from lollms.server.endpoints.lollms_user import router as lollms_user_router
from lollms.server.endpoints.lollms_xtts import router as lollms_xtts_add_router
from lollms.server.endpoints.lollms_sd import router as lollms_sd_router
from lollms.server.endpoints.lollms_ollama import router as lollms_ollama_router
from lollms.server.endpoints.lollms_vllm import router as lollms_vllm_router
from lollms.server.endpoints.lollms_motion_ctrl import router as lollms_motion_ctrl
from lollms.server.endpoints.lollms_motion_ctrl import router as lollms_motion_ctrl_router
from endpoints.lollms_webui_infos import router as lollms_webui_infos_router
from lollms.server.endpoints.lollms_discussion import router as lollms_discussion_router
@ -124,6 +125,7 @@ if __name__ == "__main__":
from lollms.server.events.lollms_files_events import add_events as lollms_files_events_add
from lollms.server.events.lollms_model_events import add_events as lollms_model_events_add
from lollms.server.events.lollms_rag_events import add_events as lollms_rag_events_add
from events.lollms_generation_events import add_events as lollms_webui_generation_events_add
@ -144,6 +146,7 @@ if __name__ == "__main__":
app.include_router(lollms_models_infos_router)
app.include_router(lollms_personalities_infos_router)
app.include_router(lollms_extensions_infos_router)
app.include_router(lollms_skills_library_router)
app.include_router(lollms_webui_infos_router)
app.include_router(lollms_discussion_router)
@ -157,7 +160,7 @@ if __name__ == "__main__":
app.include_router(lollms_ollama_router)
app.include_router(lollms_petals_router)
app.include_router(lollms_vllm_router)
app.include_router(lollms_motion_ctrl)
app.include_router(lollms_motion_ctrl_router)
app.include_router(lollms_playground_router)

View File

@ -1,5 +1,5 @@
# =================== Lord Of Large Language Multimodal Systems Configuration file ===========================
version: 73
version: 74
binding_name: null
model_name: null
model_variant: null
@ -85,6 +85,10 @@ current_language: en
enable_sd_service: false
sd_base_url: http://localhost:7860
# Motion control service
enable_motion_ctrl_service: false
motion_ctrl_base_url: http://localhost:7861
# ollama service
enable_ollama_service: false
ollama_base_url: http://localhost:11434

View File

@ -124,49 +124,6 @@ async def execute_code(request: CodeRequest):
class OpenCodeFolderInVsCodeRequestModel(BaseModel):
discussion_id: Optional[int] = Field(None, gt=0)
message_id: Optional[int] = Field(None, gt=0)
code: Optional[str]
folder_path: Optional[str]
@router.post("/open_code_folder_in_vs_code")
async def open_code_folder_in_vs_code(request: OpenCodeFolderInVsCodeRequestModel):
if lollmsElfServer.config.headless_server_mode:
return {"status":False,"error":"Open code folder in vscode 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":"Open code folder in vscode is blocked when the server is exposed outside for very obvious reasons!"}
if lollmsElfServer.config.turn_on_open_file_validation:
if not show_yes_no_dialog("Validation","Do you validate the opening of folder in vscode?"):
return {"status":False,"error":"User refused the execution!"}
try:
if request.discussion_id:
ASCIIColors.info("Opening folder:")
root_folder = lollmsElfServer.lollms_paths.personal_outputs_path/"discussions"/f"d_{request.discussion_id}"
root_folder.mkdir(parents=True,exist_ok=True)
tmp_file = root_folder/f"ai_code_{request.message_id}.py"
with open(tmp_file,"w") as f:
f.write(request.code)
if os.path.isdir(root_folder):
subprocess.run(['code', root_folder], check=True)
elif request.folder_path:
ASCIIColors.info("Opening folder:")
root_folder = request.folder_path
root_folder.mkdir(parents=True,exist_ok=True)
if os.path.isdir(root_folder):
subprocess.run(['code', root_folder], check=True)
return {"status": True, "execution_time": 0}
except Exception as ex:
trace_exception(ex)
lollmsElfServer.error(ex)
return {"status":False,"error":"An error occurred during processing."}
class FilePath(BaseModel):
path: Optional[str] = Field(None, max_length=500)
@ -209,7 +166,49 @@ async def open_file(file_path: FilePath):
lollmsElfServer.error(ex)
return {"status":False,"error":str(ex)}
class OpenCodeFolderInVsCodeRequestModel(BaseModel):
client_id: str = Field(...)
discussion_id: Optional[int] = Field(None, gt=0)
message_id: Optional[int] = Field(None, gt=0)
code: Optional[str]
@router.post("/open_code_folder_in_vs_code")
async def open_code_folder_in_vs_code(request: OpenCodeFolderInVsCodeRequestModel):
client = lollmsElfServer.session.get_client(request.client_id)
if lollmsElfServer.config.headless_server_mode:
return {"status":False,"error":"Open code folder in vscode 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":"Open code folder in vscode is blocked when the server is exposed outside for very obvious reasons!"}
if lollmsElfServer.config.turn_on_open_file_validation:
if not show_yes_no_dialog("Validation","Do you validate the opening of folder in vscode?"):
return {"status":False,"error":"User refused the execution!"}
try:
if request.discussion_id:
ASCIIColors.info("Opening folder:")
root_folder = client.discussion.discussion_folder
root_folder.mkdir(parents=True,exist_ok=True)
tmp_file = root_folder/f"ai_code_{request.message_id}.py"
with open(tmp_file,"w") as f:
f.write(request.code)
if os.path.isdir(root_folder):
subprocess.run(['code', root_folder], check=True)
return {"status": True, "execution_time": 0}
except Exception as ex:
trace_exception(ex)
lollmsElfServer.error(ex)
return {"status":False,"error":"An error occurred during processing."}
class VSCodeData(BaseModel):
client_id: str = Field(...)
discussion_id: Optional[int] = Field(None, ge=0)
message_id: Optional[int] = Field(None, ge=0)
code: str = Field(...)
@ -222,6 +221,7 @@ async def open_code_in_vs_code(vs_code_data: VSCodeData):
:param vs_code_data: The data object.
:return: A JSON response with the status of the operation.
"""
client = lollmsElfServer.session.get_client(vs_code_data.client_id)
if lollmsElfServer.config.headless_server_mode:
return {"status":False,"error":"Open code in vs code is blocked when in headless mode for obvious security reasons!"}
@ -239,14 +239,15 @@ async def open_code_in_vs_code(vs_code_data: VSCodeData):
ASCIIColors.info("Opening folder:")
# Create a temporary file.
root_folder = Path(os.path.realpath(lollmsElfServer.lollms_paths.personal_outputs_path/"discussions"/f"d_{discussion_id}"/f"{message_id}.py"))
root_folder = client.discussion.discussion_folder
root_folder.mkdir(parents=True,exist_ok=True)
tmp_file = root_folder/f"ai_code_{message_id}.py"
with open(tmp_file,"w") as f:
f.write(code)
# Use subprocess.Popen to safely open the file
subprocess.Popen(["code", str(root_folder)])
subprocess.Popen(["code", str(root_folder)], shell=True)
return {"status": True, "execution_time": 0}
except Exception as ex:
@ -255,6 +256,7 @@ async def open_code_in_vs_code(vs_code_data: VSCodeData):
return {"status":False,"error":str(ex)}
class FolderRequest(BaseModel):
client_id: str = Field(...)
discussion_id: Optional[int] = Field(None, title="The discussion ID")
folder_path: Optional[str] = Field(None, title="The folder path")
@ -266,6 +268,7 @@ async def open_code_folder(request: FolderRequest):
:param request: The HTTP request object.
:return: A JSON response with the status of the operation.
"""
client = lollmsElfServer.session.get_client(request.client_id)
if lollmsElfServer.config.headless_server_mode:
return {"status":False,"error":"Open code folder is blocked when in headless mode for obvious security reasons!"}
@ -282,7 +285,7 @@ async def open_code_folder(request: FolderRequest):
ASCIIColors.info("Opening folder:")
# Create a temporary file.
root_folder = lollmsElfServer.lollms_paths.personal_outputs_path / "discussions" / f"d_{discussion_id}"
root_folder = client.discussion.discussion_folder
root_folder.mkdir(parents=True, exist_ok=True)
if platform.system() == 'Windows':
subprocess.run(['start', str(root_folder)], check=True)

@ -1 +1 @@
Subproject commit 11f823bb8a9ced46874d8abe136ba77952265c30
Subproject commit 487aa45ce249d3fd016e734dcf30feb181d576ff

8
web/dist/assets/index-13bf9073.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
web/dist/index.html vendored
View File

@ -6,8 +6,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LoLLMS WebUI - Welcome</title>
<script type="module" crossorigin src="/assets/index-f8b842b6.js"></script>
<link rel="stylesheet" href="/assets/index-37768396.css">
<script type="module" crossorigin src="/assets/index-d102c559.js"></script>
<link rel="stylesheet" href="/assets/index-13bf9073.css">
</head>
<body>
<div id="app"></div>

View File

@ -62,6 +62,10 @@ export default {
type: String,
required: true,
},
client_id: {
type: String,
required: true,
},
code: {
type: String,
required: true,
@ -135,7 +139,8 @@ export default {
},
executeCode() {
this.isExecuting=true;
const json = JSON.stringify({
const json = JSON.stringify({
'client_id': this.client_id,
'code': this.code,
'discussion_id': this.discussion_id,
'message_id': this.message_id,
@ -163,7 +168,7 @@ export default {
});
},
openFolderVsCode(){
const json = JSON.stringify({ 'code': this.code, 'discussion_id': this.discussion_id, 'message_id': this.message_id, 'language': this.language})
const json = JSON.stringify({'client_id': this.client_id, 'code': this.code, 'discussion_id': this.discussion_id, 'message_id': this.message_id})
console.log(json)
fetch(`${this.host}/open_code_in_vs_code`, {
method: 'POST',
@ -183,7 +188,7 @@ export default {
});
},
openVsCode() {
const json = JSON.stringify({ 'code': this.code, 'discussion_id': this.discussion_id, 'message_id': this.message_id, 'language': this.language })
const json = JSON.stringify({ 'client_id': this.client_id, 'code': this.code, 'discussion_id': this.discussion_id, 'message_id': this.message_id})
console.log(json)
fetch(`${this.host}/open_code_folder_in_vs_code`, {
method: 'POST',
@ -203,7 +208,7 @@ export default {
});
},
openFolder() {
const json = JSON.stringify({ 'discussion_id': this.discussion_id })
const json = JSON.stringify({ 'client_id': this.client_id, 'discussion_id': this.discussion_id })
console.log(json)
fetch(`${this.host}/open_code_folder`, {
method: 'POST',

View File

@ -9,6 +9,7 @@
:code="item.code"
:discussion_id="discussion_id"
:message_id="message_id"
:client_id="client_id"
></code-block>
<div v-else v-html="item.html"></div>
</div>
@ -48,7 +49,11 @@ export default {
type: String,
required: false,
default: "http://localhost:9600",
},
},
client_id: {
type: String,
required: true,
},
markdownText: {
type: String,
required: true,

View File

@ -7,27 +7,6 @@
<div class="group/avatar " >
<img :src="getImgUrl()" @error="defaultImg($event)" :data-popover-target="'avatar' + message.id" data-popover-placement="bottom"
class="w-10 h-10 rounded-full object-fill text-red-700">
<!-- ADDITIONAL INFO -->
<!-- <div data-popper :id="'avatar' + message.id" role="tooltip"
class=" -mx-2 absolute invisible rounded-lg bg-bg-light-tone-panel dark:bg-bg-dark-tone-panel block m-2 p-1 opacity-0 z-10 transition-opacity ease-in-out duration-500 group-hover/avatar:visible group-hover/avatar:opacity-100 ">
<div class="relative flex flex-row items-start">
<img :src="getImgUrl()" @error="defaultImg($event)" class=" border-2 border-primary p-1 rounded-lg w-60 h-60" />
<div class="flex flex-col justify-between p-4 leading-normal">
<h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white">Noteworthy
technology acquisitions 2021</h5>
<p class="mb-3 font-normal text-gray-700 dark:text-gray-400">Here are the biggest enterprise
technology acquisitions of 2021 so far, in reverse chronological order.</p>
</div>
</div>
</div> -->
</div>
</div>
@ -211,7 +190,7 @@
</div>
</div>
<MarkdownRenderer ref="mdRender" v-if="!editMsgMode" :host="host" :markdown-text="message.content" :message_id="message.id" :discussion_id="message.discussion_id">
<MarkdownRenderer ref="mdRender" v-if="!editMsgMode" :host="host" :markdown-text="message.content" :message_id="message.id" :discussion_id="message.discussion_id" :client_id="this.$store.state.client_id">
</MarkdownRenderer>
<div >
<textarea v-if="message.open" ref="mdTextarea" @keydown.tab.prevent="insertTab"

View File

@ -35,7 +35,8 @@ export const store = createStore({
ai_conditionning: '',
ai_disclaimer: '',
ai_icon: null,
},
},
client_id:"",
// count: 0,
yesNoDialog:null,
universalForm:null,

View File

@ -1082,6 +1082,7 @@ export default {
socketIOConnected() {
console.log("socketIOConnected")
this.$store.state.isConnected=true;
this.$store.state.client_id = socket.id
return true
},
socketIODisconnected() {

@ -1 +1 @@
Subproject commit 30a43e4bd12a10f046fae8fa641668f3019f7706
Subproject commit 88735b07984ea8a1af438edf00a62db93d7ae2cc