# Architecture

The openff-evaluator framework is constructed as a collection of modular components, each performing a specific role within the estimation of physical property data sets. These components are designed to be as extensible as possible, with support for user created plug-ins built into their core.

An overview of the openff-evaluators modular design. The framework is split into a ‘client-side’ which handles the curation and preparation of data sets, and a ‘server-side’ which performs the estimation of the data sets.

The framework is implemented as a client-server architecture. This design allows users to spin up Evaluator Server instances on whichever compute resources they may have available (from a single machine up to a large HPC cluster), and to which Evaluator Client objects may connect to both request that data sets be estimated, and to query and retrieve the results of those requests.

The client-side of the framework is predominantly responsible for providing APIs and objects for:

- curating data sets of physical properties from open data sources.

- specifing custom calculation schemas which describe how individual properties should be computed.

- requesting that data sets be estimated by a running Evaluator Server instance.

- retrieving the results of estimation requests from a running Evaluator Server instance.

while the server-side is responsible for:

- receiving estimation requests from an Evaluator Client object.

- automatically determining which calculation approach to use for each property in the request.

- executing those requests across the available compute resources following the calculation schemas provided by the client

- caching data from any calculations which may be useful for future calculations.

All communication between servers and clients is handled through the TCP protocol.