109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
import json
|
|
|
|
import streamlit as st
|
|
from pathlib import Path
|
|
from ChatManager import send_message
|
|
from FileManager import list_files, read_file, save_file, open_file
|
|
from ExecutionEngine import run_code
|
|
from DebugLogger import format_debug_output, log_error
|
|
|
|
|
|
#"Last sent prompt:",
|
|
#if "last_prompt" in st.session_state:
|
|
# st.session_state["last_prompt"]
|
|
#if "file_content" in st.session_state:
|
|
# st.session_state["file_content"]
|
|
#type(st.session_state["file_content"])
|
|
#print(type(st.session_state["file_content"]))
|
|
|
|
st.set_page_config(layout="wide")
|
|
|
|
if not "file_content" in st.session_state:
|
|
st.session_state["file_content"] = ""
|
|
if not "selected_file" in st.session_state:
|
|
st.session_state["selected_file"] = ""
|
|
|
|
with st.sidebar:
|
|
|
|
for file in list_files():
|
|
st.button(file.name, on_click=open_file, args=[file])
|
|
|
|
|
|
col_editor_output, col_chat = st.columns([0.6, 0.4], gap="large", vertical_alignment="top")
|
|
|
|
with col_editor_output:
|
|
if "file_content" in st.session_state:
|
|
text = st.text_area("Code Editor", height="stretch", key="file_content")
|
|
|
|
# Preferred pattern for editor
|
|
if st.session_state["selected_file"] != "":
|
|
st.button("Save", on_click=save_file, args=[st.session_state["selected_file"], st.session_state["file_content"]])
|
|
st.button("Execute Code", on_click=run_code, args=[st.session_state["selected_file"]])
|
|
#st.button("Debugging mode", on_click=send_debug_message)
|
|
|
|
|
|
# wenn angezigter Code bearbeitet wird, sollte ExecutionEngine aufgerufen werden, diese soll den Code ausführen und im Outputfenster angezeigt werden mit DebugLogger
|
|
# fürs Ausführen vllt eigener Button machen? st.button("execute code", key="execution", on_click=run_code)
|
|
#st.write("Output and debugging messages")
|
|
|
|
if "code_output" in st.session_state:
|
|
st.text_area("Output", key="code_output")
|
|
|
|
|
|
if "code_error" in st.session_state:
|
|
st.text_area("Errors", key="code_error")
|
|
|
|
|
|
|
|
with col_chat:
|
|
|
|
if "messages" not in st.session_state:
|
|
st.session_state.messages = []
|
|
#if "history" in st.session_state:
|
|
# string = ""
|
|
# for item in st.session_state["history"]:
|
|
# string += item
|
|
# st.write(string)
|
|
|
|
|
|
# Display History
|
|
with st.container(border=True, height=500):
|
|
for msg in st.session_state.messages:
|
|
with st.chat_message(msg["role"]):
|
|
st.write(msg["content"])
|
|
|
|
# Input & Response
|
|
message = st.chat_input("How can qwen help you?", key="chat")
|
|
internet = st.toggle("enable internet search", key="internet")
|
|
if "code_output" in st.session_state or "code_error" in st.session_state:
|
|
debug = st.toggle("debug with qwen", key="debug")
|
|
if message:
|
|
st.session_state.messages.append({"role": "user", "content": message})
|
|
response = send_message(message)
|
|
if "debug" in st.session_state and st.session_state["debug"]:
|
|
response = format_debug_output(json.loads(response))
|
|
log_error(response)
|
|
# st.session_state["bugs"] = response
|
|
st.session_state.messages.append({"role": "assistant", "content": response})
|
|
st.rerun()
|
|
|
|
|
|
|
|
#st.write("Chat with qwen")
|
|
#message = st.chat_input("How can qwen help you?", key="chat")
|
|
#if message:
|
|
# response = send_message(message)
|
|
# #st.write(response)
|
|
|
|
# if not "history" in st.session_state:
|
|
# st.session_state["history"] = []
|
|
# st.session_state["history"].append(f"Message: {message} \n ----- \n Response: {response} \n ----- \n")
|
|
# st.rerun()
|
|
|
|
|
|
|
|
#Verhalten bei Veränderungen mit on_submit festlegen
|
|
#ChatManager kümmert sich um chat history und Verbindung mit AI API (qwen)
|
|
#Systemprompter schickt Kontext mit
|
|
|
|
|