import streamlit as st import subprocess import threading import queue import os import sys import time # Add the current directory to sys.path to import OpenManus modules sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "."))) st.set_page_config(page_title="OpenManus Web UI", page_icon="🤖") st.title("🤖 OpenManus Web UI") st.markdown("Déploiement persistant avec Qwen2.5-Coder-7B (GGUF)") if "messages" not in st.session_state: st.session_state.messages = [] for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) def run_openmanus(prompt, output_queue): # This is a simplified way to run the CLI and capture output # In a real scenario, we'd want to integrate with the Agent class directly process = subprocess.Popen( [sys.executable, "main.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1, env=os.environ ) # Send the prompt to the process process.stdin.write(prompt + "\n") process.stdin.flush() # Read output for line in iter(process.stdout.readline, ""): output_queue.put(line) process.stdout.close() process.wait() output_queue.put(None) prompt = st.chat_input("Que puis-je faire pour vous ?") if prompt: st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt) with st.chat_message("assistant"): response_placeholder = st.empty() full_response = "" output_queue = queue.Queue() # Start OpenManus in a thread thread = threading.Thread(target=run_openmanus, args=(prompt, output_queue)) thread.start() while True: try: line = output_queue.get(timeout=1) if line is None: break full_response += line response_placeholder.markdown(full_response + "▌") except queue.Empty: if not thread.is_alive(): break continue response_placeholder.markdown(full_response) st.session_state.messages.append({"role": "assistant", "content": full_response})