{-# LANGUAGE OverloadedStrings #-}
module Data.Ollama.Load
(
loadGenModel
, unloadGenModel
, loadGenModelM
, unloadGenModelM
) where
import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Ollama.Common.Error
import Data.Ollama.Common.Utils (commonNonStreamingHandler, withOllamaRequest)
import Data.Ollama.Generate qualified as Gen
import Data.Text (Text)
loadGenModel ::
Text ->
IO (Either OllamaError ())
loadGenModel :: Text -> IO (Either OllamaError ())
loadGenModel Text
m = do
let ops :: GenerateOps
ops = GenerateOps
Gen.defaultGenerateOps {Gen.modelName = m}
Text
-> ByteString
-> Maybe GenerateOps
-> Maybe OllamaConfig
-> (Response BodyReader -> IO (Either OllamaError ()))
-> IO (Either OllamaError ())
forall payload response.
ToJSON payload =>
Text
-> ByteString
-> Maybe payload
-> Maybe OllamaConfig
-> (Response BodyReader -> IO (Either OllamaError response))
-> IO (Either OllamaError response)
withOllamaRequest Text
"/api//generate" ByteString
"POST" (GenerateOps -> Maybe GenerateOps
forall a. a -> Maybe a
Just GenerateOps
ops) Maybe OllamaConfig
forall a. Maybe a
Nothing Response BodyReader -> IO (Either OllamaError ())
forall a.
FromJSON a =>
Response BodyReader -> IO (Either OllamaError a)
commonNonStreamingHandler
unloadGenModel ::
Text ->
IO (Either OllamaError ())
unloadGenModel :: Text -> IO (Either OllamaError ())
unloadGenModel Text
m = do
let ops :: GenerateOps
ops = GenerateOps
Gen.defaultGenerateOps {Gen.modelName = m, Gen.keepAlive = Just 0}
Text
-> ByteString
-> Maybe GenerateOps
-> Maybe OllamaConfig
-> (Response BodyReader -> IO (Either OllamaError ()))
-> IO (Either OllamaError ())
forall payload response.
ToJSON payload =>
Text
-> ByteString
-> Maybe payload
-> Maybe OllamaConfig
-> (Response BodyReader -> IO (Either OllamaError response))
-> IO (Either OllamaError response)
withOllamaRequest Text
"/api//generate" ByteString
"POST" (GenerateOps -> Maybe GenerateOps
forall a. a -> Maybe a
Just GenerateOps
ops) Maybe OllamaConfig
forall a. Maybe a
Nothing Response BodyReader -> IO (Either OllamaError ())
forall a.
FromJSON a =>
Response BodyReader -> IO (Either OllamaError a)
commonNonStreamingHandler
loadGenModelM :: MonadIO m => Text -> m (Either OllamaError ())
loadGenModelM :: forall (m :: * -> *).
MonadIO m =>
Text -> m (Either OllamaError ())
loadGenModelM Text
t = IO (Either OllamaError ()) -> m (Either OllamaError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either OllamaError ()) -> m (Either OllamaError ()))
-> IO (Either OllamaError ()) -> m (Either OllamaError ())
forall a b. (a -> b) -> a -> b
$ Text -> IO (Either OllamaError ())
loadGenModel Text
t
unloadGenModelM :: MonadIO m => Text -> m (Either OllamaError ())
unloadGenModelM :: forall (m :: * -> *).
MonadIO m =>
Text -> m (Either OllamaError ())
unloadGenModelM Text
t = IO (Either OllamaError ()) -> m (Either OllamaError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either OllamaError ()) -> m (Either OllamaError ()))
-> IO (Either OllamaError ()) -> m (Either OllamaError ())
forall a b. (a -> b) -> a -> b
$ Text -> IO (Either OllamaError ())
unloadGenModel Text
t