chat_messages 0.1.0

chat_messages is a lightweight Rust library for creating structured messages in chat systems, including HumanMessage, AiMessage, SystemMessage, and more. It supports easy extensibility through macros, Serde-based serialization, and customizable fields, making it ideal for chatbots, AI agents, and messaging platforms.
Documentation
# ChatMessages

**ChatMessages** is a Rust library designed to facilitate the creation and management of structured messages for chat-based systems. This library is inspired by and ports the core message functionalities from the [LangChain Messages](https://github.com/langchain-ai/langchain/tree/master/libs/core/langchain_core/messages) library into Rust, providing an efficient way to build conversational agents, chatbots, and messaging platforms in Rust.

## Features

- **Ported from LangChain**: `chat_messages` brings core concepts from LangChain's message system to Rust, allowing seamless integration for developers familiar with LangChain.
- **Multiple Message Types**: Supports a variety of message types including `AiMessage`, `HumanMessage`, `SystemMessage`, `ChatMessage`, and `ToolMessage`.
- **Macro-based Extensibility**: Easily define new message types using the `BaseMessage` derive macro.
- **Serialization & Deserialization**: Full support for JSON serialization/deserialization via Serde for easy API integration.
- **Customizable Fields**: Add additional fields like metadata, response details, and more to your messages.

## Getting Started

To start using `chat_messages` in your project, add the following to your `Cargo.toml`:

```toml
[dependencies]
chat_messages = "0.1.0"
```

### Example Usage

Here's a quick guide on how to use the various message types supported by the library.

### 1. **HumanMessage**

The `HumanMessage` type represents a message sent by a human user.

```rust
use chat_messages::{HumanMessage, BaseMessage};

fn main() {
    let human_msg = HumanMessage::new("Hello, how can I help you?", false);
    
    // Access the message content
    println!("Message content: {}", human_msg.content());

    // Check the message type
    assert_eq!(human_msg.message_type(), MessageType::Human);
    
    // Access additional metadata
    assert_eq!(human_msg.is_example(), false);
}
```

### 2. **AiMessage**

The `AiMessage` type represents a message generated by an AI or system.

```rust
use chat_messages::{AiMessage, BaseMessage};

fn main() {
    let ai_msg = AiMessage::new("I am here to assist you.", false);

    // Access the message content
    println!("AI Message content: {}", ai_msg.content());

    // Check the message type
    assert_eq!(ai_msg.message_type(), MessageType::Ai);
}
```

### 3. **SystemMessage**

The `SystemMessage` type represents messages originating from a system or backend process.

```rust
use chat_messages::{SystemMessage, BaseMessage};

fn main() {
    let system_msg = SystemMessage::new("System is being rebooted.", false);

    // Access the message content
    println!("System Message content: {}", system_msg.content());

    // Check the message type
    assert_eq!(system_msg.message_type(), MessageType::System);
}
```

### 4. **ChatMessage**

The `ChatMessage` type represents a general chat message, where the role of the speaker can be arbitrary (e.g., a user, bot, or system).

```rust
use chat_messages::{ChatMessage, BaseMessage};

fn main() {
    let chat_msg = ChatMessage::new("How are you today?", "user".to_string());

    // Access the message content
    println!("Chat Message content: {}", chat_msg.content());

    // Check the message type
    assert_eq!(chat_msg.message_type(), MessageType::Chat);
    
    // Access the role
    println!("Role: {}", chat_msg.role);
}
```

### 5. **ToolMessage**

The `ToolMessage` type represents the result of a tool invocation or external process.

```rust
use chat_messages::{ToolMessage, BaseMessage};

fn main() {
    let tool_msg = ToolMessage::new("Tool executed successfully.", "tool_123".to_string());

    // Access the message content
    println!("Tool Message content: {}", tool_msg.content());

    // Check the message type
    assert_eq!(tool_msg.message_type(), MessageType::Tool);
    
    // Access the tool call ID
    println!("Tool Call ID: {}", tool_msg.tool_call_id);
}
```

## Contributing

We welcome contributions from the community! If you're interested in contributing to `chat_messages`, please follow these steps:

1. **Fork the Repository**: Create a personal fork of the repository on GitHub.
2. **Clone Your Fork**: Clone your fork locally to start working on changes.
    ```bash
    git clone https://github.com/yourusername/chat_messages.git
    cd chat_messages
    ```
3. **Create a Branch**: Create a new branch to make your changes.
    ```bash
    git checkout -b feature/your-feature-name
    ```
4. **Make Your Changes**: Make the necessary changes and ensure the code is properly formatted.
5. **Test Your Changes**: Run tests to ensure your changes work as expected.
    ```bash
    cargo test
    ```
6. **Submit a Pull Request**: Once your changes are ready, submit a pull request to the main repository.

### Guidelines

- Follow the Rust community's [style guidelines]https://github.com/rust-dev-tools/fmt-rfcs and make sure your code is properly formatted.
- Add tests for any new functionality.
- Ensure all tests pass before submitting a PR.

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

---

## Acknowledgments

`chat_messages` is based on the core messaging concepts from the [LangChain Messages](https://github.com/langchain-ai/langchain/tree/master/libs/core/langchain_core/messages) library. Special thanks to the LangChain team for providing the original inspiration and structure for this library.

---

## Contact

If you have any questions or need further assistance, feel free to open an issue or contact us via GitHub.

---

### Happy coding with `chat_messages`!

---