ai_se/app.py

73 lines
2.6 KiB
Python

import json
import streamlit as st
from pathlib import Path
from ChatManager import send_message
from FileManager import list_files, save_file, open_file
from ExecutionEngine import run_code
from DebugLogger import format_debug_output, log_error
st.set_page_config(layout="wide")
# Initialisierung wichtiger keys im session_state
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:
# baut den Sidebar aus den vorhanden .py Dateien im Arbeitsverzeichnis
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")
# Oberfläche erhält zusätzliche Buttons, wenn eine Datei geöffnet wird
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"]])
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 = []
# zeigt Chatverlauf als Abschnitt mit eigenem Scrollbalken
with st.container(border=True, height=500):
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.write(msg["content"])
# regelt Verhalten bei Chat mit qwen. Nach Eingabe wird einer der Promptopitionen gewählt und fertiger Prompt sowie qwen Antwort in die messages gespeichert
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.messages.append({"role": "assistant", "content": response})
st.rerun()