# jutella
[](https://github.com/dmitry-markin/jutella/blob/master/LICENSE) [](https://crates.io/crates/jutella) [](https://docs.rs/jutella/latest/jutella/)
Chatbot API client library and CLI interface. Supports OpenAI (including Azure auth flavor) and OpenRouter chat completions API.
## Features
1. Rolling context window with min/max token limits.
2. Image & PDF file attachments.
3. Image generation and editing (only with OpenRouter).
## Command line interface
To get started with CLI, put your API key and endpoint into `~/.config/jutella.toml`. See a config [example](https://github.com/dmitry-markin/jutella/blob/master/config/jutella.toml).

Invoking the CLI with `jutella -x` makes it copy every response to clipboard on X11.
### Installation
1. Install `cargo` from https://rustup.rs/.
2. Install the CLI from [crates.io](https://crates.io/crates/jutella) with `cargo install jutella`.
3. Alternatively, clone the repo and build the CLI with `cargo build --release`. The resulting executable will be `target/release/jutella`.
## Library
To use the chat API, initialize `ChatClient` with `OPENAI_API_KEY` and `ChatClientConfig`:
```rust
let mut chat = ChatClient::new(Auth::Token(api_key), ChatClientConfig::default())?;
```
Request replies via `ChatClient::ask()`:
```rust
let answer = chat.ask("What is the highest point on Earth?".to_string()).await?;
println!("{answer}");
```
`ChatClient` keeps the conversation context and uses it with every `ask()` to generate the reply.