chore: Move ui to src/ui
This commit is contained in:
0
src/ui/README.md
Normal file
0
src/ui/README.md
Normal file
1446
src/ui/poetry.lock
generated
Normal file
1446
src/ui/poetry.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
28
src/ui/pyproject.toml
Normal file
28
src/ui/pyproject.toml
Normal file
@@ -0,0 +1,28 @@
|
||||
[project]
|
||||
name = "ui"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = [
|
||||
{name = "aserrador",email = "alejandro.ayala@onecluster.org"}
|
||||
]
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.13,<4.0"
|
||||
dependencies = [
|
||||
"streamlit (>=1.54.0,<2.0.0)",
|
||||
"httpx (>=0.28.1,<0.29.0)"
|
||||
]
|
||||
|
||||
[tool.poetry]
|
||||
packages = [{include = "ui", from = "src"}]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"taskipy (>=1.14.1,<2.0.0)"
|
||||
]
|
||||
|
||||
[tool.taskipy.tasks]
|
||||
dev-ui = "streamlit run src/ui/app.py"
|
||||
0
src/ui/src/ui/__init__.py
Normal file
0
src/ui/src/ui/__init__.py
Normal file
18
src/ui/src/ui/agent_client.py
Normal file
18
src/ui/src/ui/agent_client.py
Normal file
@@ -0,0 +1,18 @@
|
||||
import httpx
|
||||
from logger import logger
|
||||
|
||||
|
||||
class AgentClient:
|
||||
def __init__(self):
|
||||
self._client = httpx.AsyncClient()
|
||||
|
||||
async def send_message(self, message):
|
||||
logger.info(f"Sending message to agent: {message}")
|
||||
|
||||
response = await self._client.post(
|
||||
"http://localhost:8010/chat",
|
||||
json={"messages": message},
|
||||
timeout=60
|
||||
)
|
||||
|
||||
return response
|
||||
40
src/ui/src/ui/app.py
Normal file
40
src/ui/src/ui/app.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import streamlit as st
|
||||
from agent_client import AgentClient
|
||||
from logger import logger
|
||||
import random
|
||||
import time
|
||||
|
||||
|
||||
def response_generator(response: str = ""):
|
||||
logger.info(f"Generating response stream for: {response}")
|
||||
|
||||
if response:
|
||||
for word in response.split():
|
||||
yield word + " "
|
||||
time.sleep(0.05)
|
||||
|
||||
async def main():
|
||||
st.image("src/ui/assets/logo-naliia.png", width=100, caption="NaliiaBot")
|
||||
|
||||
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"])
|
||||
|
||||
|
||||
if prompt := st.chat_input("What is up?"):
|
||||
st.chat_message("user").markdown(prompt)
|
||||
st.session_state.messages.append({"role": "user", "content": prompt})
|
||||
|
||||
agent_client = AgentClient()
|
||||
response = await agent_client.send_message(prompt)
|
||||
|
||||
formated_response = response.json()['response']['messages'][-1]['content']
|
||||
|
||||
with st.chat_message("assistant"):
|
||||
response = st.write_stream(response_generator(formated_response))
|
||||
st.session_state.messages.append({"role": "assistant", "content": formated_response})
|
||||
|
||||
if __name__ == "__main__": import asyncio; asyncio.run(main())
|
||||
BIN
src/ui/src/ui/assets/logo-naliia.png
Normal file
BIN
src/ui/src/ui/assets/logo-naliia.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
7
src/ui/src/ui/logger.py
Normal file
7
src/ui/src/ui/logger.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import logging
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
0
src/ui/tests/__init__.py
Normal file
0
src/ui/tests/__init__.py
Normal file
Reference in New Issue
Block a user