packages feed

ollama-haskell-0.4.2.0: examples/GenerateText.hs

module Main (main) where

import qualified Data.Text.IO as TIO
import Ollama

main :: IO ()
main = do
  client <- defaultClient
  putStrLn "=== 1. Non-Streaming Text Generation ==="
  let req =
        (generateRequest "llama3.2:latest" "Write a haiku about Haskell compilers.")
          { genOptions = Just (defaultOptions {optTemperature = Just 0.7, optNumPredict = Just 40})
          }
  res <- generate client req
  case res of
    Left err -> putStrLn $ "Error: " <> show err
    Right resp -> do
      putStrLn "Generated Response:"
      TIO.putStrLn (generateFullText resp)
      case evalTokensPerSecond resp of
        Just tps -> putStrLn $ "Evaluation speed: " <> show tps <> " tokens/sec"
        Nothing -> pure ()
      case promptEvalTokensPerSecond resp of
        Just ptps -> putStrLn $ "Prompt evaluation speed: " <> show ptps <> " tokens/sec"
        Nothing -> pure ()

  putStrLn "\n=== 2. Streaming Text Generation with Conduit ==="
  let streamReq =
        (generateRequest "llama3.2:latest" "Name three benefits of pure functional programming.")
          { genOptions = Just (defaultOptions {optNumPredict = Just 50})
          }
  putStrLn "Streaming response chunks:"
  chunks <- collectStream (generateStream client streamReq)
  mapM_ (TIO.putStr . grResponse) chunks
  putStrLn "\n--- Stream completed ---"