ChatStream
ChatStream is a chat toolkit for pre-trained large language models.
It can be embedded in FastAPI/Starlette based web applications/web APIs to perform sequential sentence generation with pre-trained language models under load control.
Installation
pip install chatstream
Quick Start
Install required packages
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
pip install transformers
pip install "uvicorn[standard]" gunicorn
Implementing a ChatStream server
Implement a streaming chat server for pre-trained models.
import torch
from fastapi import FastAPI, Request
from fastsession import FastSessionMiddleware, MemoryStore
from transformers import AutoTokenizer, AutoModelForCausalLM
from chatstream import ChatStream, ChatPromptTogetherRedPajamaINCITEChat as ChatPrompt
model_path = "togethercomputer/RedPajama-INCITE-Chat-3B-v1"
device = "cuda" # "cuda" / "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16)
model.to(device)
chat_stream = ChatStream(
num_of_concurrent_executions=2, # max_concurrent_executions for sentence generation
max_queue_size=5, # size of queue
model=model,
tokenizer=tokenizer,
device=device,
chat_prompt_clazz=ChatPrompt,
)
app = FastAPI()
# Specify session middleware to keep per-user ChatPrompt in the HTTP session
app.add_middleware(FastSessionMiddleware,
secret_key="your-session-secret-key",
store=MemoryStore(),
http_only=True,
secure=False,
)
@app.post("/chat_stream")
async def stream_api(request: Request):
# Just pass a FastAPI Request object to `handle_chat_stream_request` to automatically queue and control concurrency
response = await chat_stream.handle_chat_stream_request(request)
return response
@app.on_event("startup")
async def startup():
# start the queueing system by doing `start_queue_worker` at the same time the web server starts up
await chat_stream.start_queue_worker()
Table of Contents
-
Implementation of Web API Endpoints
-
Queueing System and Concurrency Limit
-
Start the Web server (ASGI server)
-
Console chat implementation
-
Configuration during development
-
Advanced Settings
- Chat History Persistence
- Configuration for large scale access
- Interfacing with login authentication using OAuth
- - Load Balancing on Multi-GPU
- - Load Balancing with Multi-GPU Server
License
Citing ChatStream
@software{chatstream,
title = {{ChatStream: A streaming chat toolkit for pre-trained large language models(LLM)}},
author = {Qualiteg Inc.(https://qualiteg.com) },
url = {https://github.com/qualiteg/ChatStream}
month = {5},
year = {2023},
version = {0.15},
}
Metadata
Release files for chatstream 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| chatstream-0.3.0.tar.gz | 75.7 kB | Without provenance | Details for chatstream-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| chatstream-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for chatstream-0.3.0-py3-none-any.whl |
Total release size: 192.5 kB
Release files / chatstream-0.3.0.tar.gz
| Download URL | chatstream-0.3.0.tar.gz |
|---|---|
| Size | 75.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec56ec1a1d836d3136c2d78a4ff4fdb744033c6b6cc8a9a5080b02f984adec6b
|
|
BLAKE2b-256 checksum How to use checksums |
ed3f2c6438bd99a8c43fae65a8503d942f67b523382b5dc255cb919d95609a0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / chatstream-0.3.0-py3-none-any.whl
| Download URL | chatstream-0.3.0-py3-none-any.whl |
|---|---|
| Size | 116.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ddf90126b4d2627bd3ac91939b76192db4b9db75fb7dd1b6b2d5c23b597d79d4
|
|
BLAKE2b-256 checksum How to use checksums |
51760c77b1235255911aafa2f2a98035ecf7c9df1a6cb080707e9d07342ff7db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Security for chatstream 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.