Its nicer to have the manifests be an opaque []byte, rather than a
struct. This way users of the build package don't need to know about the
internal structure of the manifests. The registry can interpret the
manifests as it sees fit, while letting build keep its own Go type of
manifest which is easier to work with in the build package.
It was getting confusing to have the arbirary handling of manifests in
the blobstore. It also prevented us from using model.Ref in the
blobstore because of cyclic dependencies.
This is much easier to grok now.
This allows for better error messages when decoding fails. For example,
instead of:
{"code":"invalid_json","message":"unexpected end of JSON input"}
We now get:
{"code":"invalid_json","field":"manifest","message":"unexpected end of JSON input"}
This allows users of the ollama client library to need only import the
client/ollama package, rather than the oweb package as well when
inspecting errors.