4 ms·
Just a note from my own experiments with Ollama—it's tempting to use LangChain as a sort of unofficial Ollama client library because it's so easy to set up, but
by lolinder 3y ago
Just a note from my own experiments with Ollama—it's tempting to use LangChain as a sort of unofficial Ollama client library because it's so easy to set up, but be warned that because LangChain abstracts over many providers it doesn't actually give access to the full power of the Ollama API, so for anything other than very simple toy demos it's not a great choice unless you actually want to use the other LangChain abstractions.
The first pain point you're likely to run into is that Ollama provides a running binary context that represents all the processing your GPU has done in the conversation so far, but the last time I looked into LangChain they wanted you to build up a plaintext context on the client and ask Ollama to re-process it on every request. This works well as part of the wider suite of LangChain tools, but isn't great if you really just need Ollama.
For JS/TS and Python, Ollama now provides an official client library which presumably does take advantage of all Ollama features [0]. For other languages, the Ollama API is actually very simple [1] and easy to wrap yourself, and I'd recommend doing so unless you specifically need some of the abstractions LangChain provides.
[0] https://ollama.com/blog/python-javascript-libraries https://ollama.com/blog/python-javascript-libraries
[1] https://github.com/ollama/ollama/blob/main/docs/api.md#generate-a-completion https://github.com/ollama/ollama/blob/main/docs/api.md#gener...
- threecheese 3y agoCan you share a source or docs describing the “running binary context”? I am using this stack (as a dev, not an ml engineer) and appreciate the tip but would like to understand the delta better. Just spent a few minutes searching through code but don’t see anything obvious. Thanks!
- lolinder 3y agoMy second link documents the `context` parameter for Ollama. It's unfortunately pretty hard to search for because the term is overloaded. `context` is a number array that gets returned with each /generate request and can be returned to the server with the next request. There's not much more documentation than what's there in that link, but as I understand it the array is a JSON representation of the current state of inference at the time that Ollama returned. So when you send the context back up with a second request, Ollama can just load that array into memory and then start inference with the new prompt, rather than having to re-encode the whole conversation up to that point.
- CuriouslyC 3y agoI'm pretty sure it's just a cache of the context embedding.
- rybosome 3y agoSince you brought up that context, do you happen to know how it works? I tested it, and it definitely works like a history - eg you can feed it to a model and ask it a question about what you just talked about, and it works. Does Ollama essentially just convert the conversation so far into a binary representation, then convert it back to text and feed it back to the model ahead of your newest query? Or is it doing something more involved?
- CuriouslyC 3y agoEach time you do inference you're basically converting the context to an embedding, why not cache that?
- rybosome 3y agoThanks. I wish it was better documented, have a ton of questions about how it functions in practice that I’ll end up trying to reverse engineer. Like, what’s the lifetime of this context? If I load a new model into memory then reload the original, is that context valid? Is it valid if the computer restarts? Is it valid if the model gets updated? Not an LLM expert but based on your explanation that it’s related to embedding (and another comment that Ollama loads it directly into memory) then I’m guessing that the model updating its weights definitely invalidates the context. Not so sure about the other options, like unloading/reloading the same model.
- CuriouslyC 3y agoIt's easier to reason about if you understand what it is. That binary data is basically a big vector representation of a textual context's contents. I suspect that it doesn't matter which model you use with the context binary, as ollama is handling providing it to the model.
- rybosome 3y agoThanks for the insights. Any particular resources you’d recommend to learn more about this? So if I’m understanding it correctly, there’s one consistent way that Ollama will vectorize a set of text. Perhaps there are various ways one could, but Ollama chooses one. What about multimodality? Ie taking a context from a prompt to llava to identify an image, with further questions about the contents of that image? Any non-llava model would definitely hallucinate, but would llava?
- jondwillis 3y agoAFAIU, typically LangChain will use the underlying (Ollama’s in this case) SDK, and prefers using the native configuration types and options, so support for whatever advanced features could be added!