README.md
# StreamingDelta
Character-by-character (chunks) conversion of Markdown into a [Delta](https://quilljs.com/docs/delta).
This is useful when streaming Markdown from an LLM response, as it allows just the delta changes to be sent to the browser.
# Parses
- Italic
- Bold
- Headings
- Unordered List
- Ordered list
- Source refs (Not official Markdown useful when you want an LLM to return citations from the context .eg. some text [1].)
- Follow up questions (Not official Markdown useful when you want to extract text that returned in brackets .eg. <<A follow up question?>>.)
- Extractions (Not official Markdown useful when you want to extract a section of text from the main text)
test/streaming_delta/parser_test.exs has many examples that can be used to understand the text formats you would want to provide to an LLM so the right formats our output.
StreamingDelta.parse_chunk is used to parse a chunk and StreamingDelta.Streaming struct is the accumulateur.
To parse a stream of updates you would pass the next chunk and the returnd StreamingDelta.Streaming struct from the previous chunk in a loop.
To get the difference between two chunks you can use StreamingDelta.Streaming.diffs by passing in the StreamingDelta.Streaming struct for the previous chunk and StreamingDelta.Streaming struct for the latest chunk.
## Installation
```elixir
def deps do
[
{:streaming_delta, "~> 0.1.0"}
]
end
```
# Todo
- Add finished option to close the buffer and concat on to raw
- Handle white space stars in list that canceled out by white space .eg. 1. * Not italic
- Links in square brackets
- stripe white space on neasted lists
- stripe white space on orderd list between list and number
- Provied example LLM prompts for the propriety format