Project Structure: Restructure Packages
Due to better overview we want to restructure the packages a bit.
-
Server gets an own package "server" -
All backoff strategies are getting an own package "backoff"
Proposal (Live Document)
Right now, treebuilder
is taking on the role of providing client interface and schematree
itself is taking the role of server. Proposed solution is to restrict the responsibilities to the following ones. (things in parenthesis are features that are pedantically more correct, but might be ignored for simplicity)
-
schematree: interacts with SchemaTree structs, implements the core recommendation algorithm
-
treebuilder: helper tool to integrate SchemaTree structs with the filesystem, helps with creation and retrieval of model binaries
-
backoff: additional procedures that are able to use the SchemaTree struct and algorithm
-
strategy: configurable workflow that selects which recommendation procedure to use, (ideally configurable but hard-coded presets are a first step)
-
server: builds a server to allow human interaction with the recommender via http, uses a strategy to complete the request, expects a schematree struct
Main Executable
While the schematree
directory is a library, the entire recommender
feels like an application (which uses schematree internally).
Because of this, in the top directory there should be a main, which uses all underlying features. Syntax is similar to most complex client interfaces: recommender <action> [<options> ...]
Instructions to install
Installation instructions would require the user to first generate a binary schematree and then use it in the server configuration.
# generate the binary schematree
./recommender build-model --dataset HOME/10M.nt.gz
# start the api server
./recommender serve HOME/10M.nt.gz.schemaTree.bin --port 8080 --strategy deletelowfrequency