packages feed

ollama-haskell-0.4.2.0: examples/ModelLifecycle.hs

module Main (main) where

import Ollama

main :: IO ()
main = do
  client <- defaultClient
  let sourceModel = ModelName "llama3.2:latest"
      destModel = ModelName "llama-backup-test:latest"
      customModel = ModelName "haskell-expert:latest"

  putStrLn "=== 1. Copying Model (copyModel) ==="
  putStrLn $ "Copying " <> show (unModelName sourceModel) <> " to " <> show (unModelName destModel) <> "..."
  copyRes <- copyModel client sourceModel destModel
  case copyRes of
    Left err -> putStrLn $ "Copy failed: " <> show err
    Right () -> do
      putStrLn "Model copied successfully!"

      putStrLn "\n=== 2. Inspecting Copied Model (showModelWith) ==="
      showRes <- showModelWith client (ShowRequest destModel (Just True))
      case showRes of
        Left err -> putStrLn $ "Show failed: " <> show err
        Right sr -> do
          putStrLn $ "Model architecture family: " <> show (family (srsDetails sr))
          putStrLn $ "Parameter size: " <> show (parameterSize (srsDetails sr))

      putStrLn "\n=== 3. Creating Custom Model with System Prompt (createModel) ==="
      let createReq =
            (defaultCreateRequest customModel)
              { crqFrom = Just sourceModel
              , crqSystem = Just "You are an expert Haskell compiler engineer."
              }
      createRes <- createModel client createReq
      case createRes of
        Left err -> putStrLn $ "Create failed: " <> show err
        Right resp -> do
          putStrLn $ "Create status: " <> show (crsStatus resp)
          _ <- deleteModel client customModel
          putStrLn $ "Custom model " <> show (unModelName customModel) <> " deleted."

      putStrLn "\n=== 4. Checking Blob Existence (checkBlob) ==="
      let testDigest = Digest "sha256:0000000000000000000000000000000000000000000000000000000000000000"
      blobRes <- checkBlob client testDigest
      case blobRes of
        Left err -> putStrLn $ "Blob check returned expected error/status: " <> show err
        Right exists -> putStrLn $ "Dummy blob exists: " <> show exists

      putStrLn "\n=== 5. Deleting Copied Model (deleteModel) ==="
      delRes <- deleteModel client destModel
      case delRes of
        Left err -> putStrLn $ "Delete failed: " <> show err
        Right () -> putStrLn $ "Model " <> show (unModelName destModel) <> " deleted successfully."