Metadata-Version: 2.1
Name: streamlit_chat_handler
Version: 0.1.4.dev3
Summary: ...
Author-email: Eduardo Messias de Morais <emdemor415@gmail.com>
Keywords: sample,setuptools,development
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: streamlit==1.33.0
Requires-Dist: streamlit-chat==0.1.1
Requires-Dist: streamlit-extras==0.4.2
Requires-Dist: streamlit-feedback==0.1.3
Requires-Dist: pydantic==2.7.0
Requires-Dist: loguru
Provides-Extra: lint
Requires-Dist: black==23.7.0; extra == "lint"
Requires-Dist: flake8==6.1.0; extra == "lint"
Requires-Dist: Flake8-pyproject==1.2.3; extra == "lint"
Requires-Dist: mypy==1.4.1; extra == "lint"
Requires-Dist: bandit==1.7.5; extra == "lint"
Provides-Extra: test
Requires-Dist: pytest==7.4.0; extra == "test"
Requires-Dist: pytest-cov==4.1.0; extra == "test"
Requires-Dist: pytest-mock==3.11.1; extra == "test"
Requires-Dist: pytest-mypy==0.10.3; extra == "test"

# Streamlit Chat Handler

Streamlit Chat Handler is a Python library designed to manage and render chat elements within a Streamlit application. This library simplifies the process of creating, storing, and dynamically rendering messages in a chat interface, supporting interactive communication scenarios in Streamlit.

## Features

- **Session Management**: Uses a singleton pattern to ensure a unique chat handler instance per session.
- **Dynamic Rendering**: Seamlessly append and render chat elements as user or assistant within the Streamlit session.
- **Customizable Chat Elements**: Supports different types of messages, such as text and markdown, with the flexibility to pass additional arguments and keyword arguments for rendering.

## Installation

You can install the `Streamlit Chat Handler` via pip:

```bash
pip install streamlit-chat-handler
```

## Quick Start

Here's a quick example to get started with using `Streamlit Chat Handler` in your Streamlit app:

```python
import uuid
from time import sleep
import streamlit as st
from streamlit_chat_handler import StreamlitChatHandler

# Initialize session
if "session_id" not in st.session_state:
    st.session_state["session_id"] = str(uuid.uuid4())

# Create a chat handler instance
chat_handler = StreamlitChatHandler(
    st.session_state,
    session_id=st.session_state["session_id"],
).render()

# Process user input
if prompt := st.chat_input("What is up?"):
    chat_handler.append(role="user", type="markdown", content=prompt, render=True)

    with st.spinner("Processing..."):
        sleep(1)
        chat_handler.append(role="assistant", type="markdown", content="answer", render=True)

```

## Documentation

### Class: StreamlitChatHandler

This class handles the state and rendering of chat elements within a Streamlit session. It is designed to manage chat elements dynamically, maintaining a unique instance per session through a singleton pattern.

#### Methods

- `append`: Adds a new chat element to the session.
- `render`: Renders all chat elements stored in the session.
- `render_last`: Renders the last added chat element.

### Class: StreamlitChatElement

Defines the structure of a chat element, handling its rendering through Streamlit's API.

#### Attributes

- `role`: Specifies whether the message is from a user or an assistant.
- `type`: Defines the Streamlit widget type for rendering (`text`, `markdown`, etc.).
- `content`: The content to be rendered, depends on the `type`.

#### Method

- `render`: Renders the chat element using the specified Streamlit widget.

## Contributing

Contributions are welcome! Please fork the repository and submit pull requests to contribute.

## License

This project is licensed under the MIT License - see the LICENSE file for details.
