Package: httpstan
HTTP-based REST interface to Stan, a package for Bayesian inference.An HTTP 1.1 interface to theStanC++ package,httpstanis ashimthat
allows users to interact with the Stan C++ library using a REST API. The
package is intended for use as a universal backend for frontends which know how
to make HTTP requests. The primary audience for this package is developers.In addition to providing the essential functionality of the command-line interface
to Stan (CmdStan) over HTTP,httpstanprovides the following features:Automatic caching of compiled Stan modelsAutomatic caching of samples from Stan modelsParallel samplingDocumentation:https://httpstan.readthedocs.org.RequirementsLinux or macOSC++ compiler: gcc ≥9.0 or clang ≥10.0.Backgroundhttpstanis ashimallowing clients able to make HTTP-based requests to
call functions in the Stan C++ library’sstan::servicesnamespace.httpstanwas originally developed as a “backend” for a Stan interface
written in Python,PyStan.Stability and maintainability are two overriding goals of this software package.Install$ python3 -m pip install httpstanIn order to install httpstan from PyPI make sure your system satisfies the requirements:Linux or macOSx86-64 CPUC++ compiler: gcc ≥9.0 or clang ≥10.0.If your system uses a different kind of CPU, you should be able to install from source using the following commands:# Build shared libraries
make

# Build the httpstan wheel on your system
python3 -m pip install poetry
python3 -m poetry build

# Install the wheel
python3 -m pip install dist/*.whlUsageAfter installinghttpstan, running the module will begin listening on
localhost, port 8080:python3 -m httpstanIn a different terminal, make a POST request tohttp://localhost:8080/v1/modelswith Stan program code to compile the
program:curl -H "Content-Type: application/json" \
    --data '{"program_code":"parameters {real y;} model {y ~ normal(0,1);}"}' \
    http://localhost:8080/v1/modelsThis request will return a model name along with all the compiler output:{"compiler_output": "In file included from …", "stanc_warnings": "", "name": "models/xc2pdjb4"}(The modelnamedepends on the platform and the version of Stan.)Drawing samples from this model using default settings requires two steps: (1)
launching the sampling operation and (2) retrieving the output of the operation
(once it has finished).First we make a request to launch the sampling operation:curl -H "Content-Type: application/json" \
    --data '{"function":"stan::services::sample::hmc_nuts_diag_e_adapt"}' \
    http://localhost:8080/v1/models/xc2pdjb4/fitsThis request instructshttpstanto draw samples from the normal
distribution described in the model. The function name picks out a specific
function in thestan::servicesnamespace found in the Stan C++ library (see
the Stan C++ documentation for details).  This request will return immediately
with a reference to a long-running fit operation:{"name": "operations/gkf54axb", "done": false, "metadata": {"fit": {"name": "models/xc2pdjb4/fits/gkf54axb"}}}Once the operation is complete, the “fit” can be retrieved. The name of the fit,models/xc2pdjb4/fits/gkf54axb, is included in themetadatafield of the operation.
The fit is saved as sequence of JSON-encoded messages. These messages are strung together
with newlines. To retrieve these messages, saving them locally in the filemyfit.jsonlines, make the following request:curl http://localhost:8080/v1/models/xc2pdjb4/fits/gkf54axb > myfit.jsonlinesThe Stan “fit”, saved inmyfit.jsonlines, aggregates all messages. By reading
them one by one you can recover all messages sent by the Stan C++ library.CitationWe appreciate citations as they let us discover what people have been doing
with the software. Citations also provide evidence of use which can help in
obtaining grant funding.To cite httpstan in publications use:Riddell, A., Hartikainen, A., & Carter, M. (2021). httpstan (4.4.0).https://pypi.org/project/httpstanOr use the following BibTeX entry:@misc{httpstan,
  title = {httpstan (4.4.0)},
  author = {Riddell, Allen and Hartikainen, Ari and Carter, Matthew},
  year = {2021},
  month = mar,
  howpublished = {PyPI}
}Please also cite Stan.LicenseISC License.