huggingface-0.1.0.0: src/HuggingFace/Types/Tasks.hs
{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module : HuggingFace.Types.Tasks
-- Description : HF Inference task parameters and results
-- Copyright : (c) 2026 Emily Pillmore
-- License : BSD-3-Clause
-- Maintainer : emilypi@cohomolo.gy
-- Stability : experimental
-- Portability : GHC
module HuggingFace.Types.Tasks
( GenerationParameters (..), defaultGenerationParameters
, GeneratedText (..), Classification (..)
) where
import Data.Aeson
import Data.Maybe (catMaybes)
import Data.Text (Text)
import HuggingFace.Types.Parameters (PositiveInt, GenerationTemperature)
-- | Parameters for the HF Inference text-generation task.
data GenerationParameters = GenerationParameters
{ generationMaxNewTokens :: Maybe PositiveInt -- ^ Positive output token limit.
, generationTemperature :: Maybe GenerationTemperature -- ^ Positive finite sampling temperature.
, generationDoSample :: Maybe Bool -- ^ Enable sampling.
, generationReturnFullText :: Maybe Bool -- ^ Include the prompt in output.
} deriving (Eq, Show)
-- | Use the server's generation defaults.
defaultGenerationParameters :: GenerationParameters
defaultGenerationParameters = GenerationParameters Nothing Nothing Nothing Nothing
instance ToJSON GenerationParameters where
toJSON parameters = object $ catMaybes
[ ("max_new_tokens" .=) <$> generationMaxNewTokens parameters
, ("temperature" .=) <$> generationTemperature parameters
, ("do_sample" .=) <$> generationDoSample parameters
, ("return_full_text" .=) <$> generationReturnFullText parameters
]
-- | Generated text and optional token-level details.
data GeneratedText = GeneratedText
{ generatedText :: Text -- ^ Generated output.
, generationDetails :: Maybe Value -- ^ Provider-specific token and sampling details.
} deriving (Eq, Show)
instance FromJSON GeneratedText where
parseJSON = withObject "GeneratedText" $ \o -> GeneratedText <$> o .: "generated_text" <*> o .:? "details"
-- | A predicted label and score.
data Classification = Classification
{ classificationLabel :: Text -- ^ Predicted label.
, classificationScore :: Double -- ^ Model confidence score.
} deriving (Eq, Show)
instance FromJSON Classification where
parseJSON = withObject "Classification" $ \o -> Classification <$> o .: "label" <*> o .: "score"