milestone 3 - app.py: added chat history (with help from qwen)
This commit is contained in:
parent
69f82f7f3e
commit
87af354c9c
@ -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
|
||||
|
||||
@ -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"))
|
||||
@ -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 = """\
|
||||
<persona>
|
||||
You are an experienced Python coding assistant.
|
||||
@ -16,7 +18,10 @@ def generate_prompt(user_message: str, file_context=None):
|
||||
|
||||
task = (f"<task> {user_message} </task>")
|
||||
|
||||
context = (f" <code> {st.session_state["file_content"]} </code>")
|
||||
if "file_content" in st.session_state:
|
||||
context = (f" <code> {st.session_state['file_content']} </code>")
|
||||
else:
|
||||
context = ""
|
||||
|
||||
|
||||
return system_content + task + context
|
||||
|
||||
54
app.py
54
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)
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user