diff --git a/ChatManager.py b/ChatManager.py index 00f7a45..675d055 100644 --- a/ChatManager.py +++ b/ChatManager.py @@ -3,7 +3,7 @@ from dotenv import load_dotenv import os from SystemPrompter import generate_prompt - +#environment vaarables sind in eigener .env Datei abgespeichert load_dotenv(dotenv_path=".env") @@ -20,15 +20,15 @@ def get_client() -> OpenAI: client = get_client() -def send_message(message: str): +def send_message(message: str) -> str: # hier gehts darum, die message vorzubereiten -> also nachricht aus den Chatfenster mit systemprompts und file_conntext verknüpfen # hier auch Zeug zusammenkürzen wenns zu lang wird? prompt = generate_prompt(message) response = send_prompt(prompt) return response -def send_prompt(prompt: str): - # hier wird send_message() aufgerufen, damit dann geschickt werden kann +def send_prompt(prompt: str) -> str: + # hier wird send_message() aufgerufen, damit dann an qwen geschickt werden kann response = client.responses.create( input=prompt) return response.output_text diff --git a/FileManager.py b/FileManager.py index 983a21d..e41eacc 100644 --- a/FileManager.py +++ b/FileManager.py @@ -4,18 +4,14 @@ from pathlib import Path def list_files() -> list: - #soll Zugriff auf project directory haben und diese anzeigen - #mypath = "C:/FH_Graubünden/26FS/AI_in_SE/project_ai_se" - #files = [f for f in os.listdir(mypath) if os.path.isfile(os.path.join(mypath, f))] + #Zugriff auf project directory, listet alle gefunden Pythondateien auf mypath = Path.cwd() - #print(f"u ä {mypath}") files = list(mypath.glob('*.py')) return files def read_file(file_path: Path) -> str: # ErrorHandling einbauen, falls der Pfad falsch ist? - # wenn eine Datei im Sidebar angeklickt wird, soll die Funktion sie lesen und im Code Editor anzeigen - # file = open(file_path, 'r').read() + # Datei wird im Sidebar angeklickt, Inhalt wird ausgelesen with file_path.open('r') as file: return file.read() @@ -24,13 +20,9 @@ def save_file(file_path: Path, content: str): with file_path.open('w') as file: file.write(content) -def open_file(file_path): +def open_file(file_path: Path): + #Inhalt und Dateipfad der geöffneten Datei wird im session_state gespeichert content = read_file(file_path) st.session_state["file_content"] = content st.session_state["selected_file"] = file_path - - -print(list_files()) -print(read_file(Path("C:/FH_Graubünden/26FS/AI_in_SE/project_ai_se/example.py"))) -print(save_file(Path("C:/FH_Graubünden/26FS/AI_in_SE/project_ai_se/example_2.py"), "hiHa")) \ No newline at end of file diff --git a/SystemPrompter.py b/SystemPrompter.py index 56f78ab..ed77914 100644 --- a/SystemPrompter.py +++ b/SystemPrompter.py @@ -1,7 +1,9 @@ import streamlit as st -def generate_prompt(user_message: str, file_context=None): +def generate_prompt(user_message: str, file_context=None) -> str: +# Kontext ist entweder leer oder die angeklickte und geöffnete Datei + system_content = """\ You are an experienced Python coding assistant. @@ -16,7 +18,10 @@ def generate_prompt(user_message: str, file_context=None): task = (f" {user_message} ") - context = (f" {st.session_state["file_content"]} ") + if "file_content" in st.session_state: + context = (f" {st.session_state['file_content']} ") + else: + context = "" return system_content + task + context diff --git a/app.py b/app.py index 6ee8b38..7cfec49 100644 --- a/app.py +++ b/app.py @@ -6,25 +6,22 @@ from FileManager import list_files, read_file, save_file, open_file "st.session_state object:", st.session_state +st.set_page_config(layout="wide") + with st.sidebar: - #wenn FileManager integriert wird: Elemente mit list_files bauen + for file in list_files(): st.button(file.name, on_click=open_file, args=[file]) - #bla_button = st.button("bla") - #if bla_button: - # st.session_state["bla"] = "text" - # wenn Datei ausgewählt wird, sollte FileManager aufgerufen werden, der dann im Code Editor den Inhalt anzeigt - # on_click: FileManager: read_file(file_path) -col_editor_output, col_chat = st.columns([0.6, 0.4], gap="xxlarge") + +col_editor_output, col_chat = st.columns([0.6, 0.4], gap="large", vertical_alignment="bottom") with col_editor_output: if "file_content" in st.session_state: text = st.text_area("Code Editor", key="file_content") - #if st.session_state["file_content"] != text: - # st.session_state["editor"] = st.session_state["file_content"] + # Verhalten bei Veränderungen mit on_change festlegen, mit File_Manager verknüpfen # on_change(save_file(file_path, content( -> das wär dann der Inhalt von text_area)) @@ -34,13 +31,44 @@ with col_editor_output: # hier wird der Output angezeigt, der mit DebugLogger erstellt wurde with col_chat: - st.write("Chat with qwen") + + 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) + + + # 2. Display History + for msg in st.session_state.messages: + with st.chat_message(msg["role"]): + st.write(msg["content"]) + + # 3. Input & Response message = st.chat_input("How can qwen help you?", key="chat") if message: + st.session_state.messages.append({"role": "user", "content": message}) response = send_message(message) - st.write(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 - st.write("History") - st.write(message) \ No newline at end of file + + \ No newline at end of file