genai-lib 2.0.1 → 2.1.0
raw patch · 5 files changed
+22/−14 lines, 5 filesdep ~bytestringPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
+ GenAILib: modRequest :: r -> RequestMod r -> r
- GenAILib: appendMessage :: Request a => Message -> a -> a
+ GenAILib: appendMessage :: Request a => Message -> RequestMod a
Files
- genai-lib.cabal +3/−3
- src/lib/GenAILib.hs +11/−3
- src/lib/GenAILib/Ollama.hs +2/−2
- src/lib/GenAILib/OpenAI.hs +5/−5
- stack.yaml.lock +1/−1
genai-lib.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: genai-lib-version: 2.0.1+version: 2.1.0 synopsis: A library for interacting with various generative AI LLMs description: A library for performing completions and chats with various generative AI LLMs (Large Language Models). Works today with Ollama and@@ -9,7 +9,7 @@ author: Dino Morelli maintainer: dino@ui3.info copyright: 2024 Dino Morelli-category: Unclassified+category: AI, Library license: ISC license-file: LICENSE build-type: Simple@@ -72,7 +72,7 @@ build-depends: aeson >= 2.1.2.1 && < 2.3 , base >= 4.18.1.0 && < 5- , bytestring >= 0.11.5.2 && < 0.12+ , bytestring >= 0.11.5.2 && < 0.13 , containers >= 0.6.7 && < 0.7 , http-client >= 0.7.16 && < 0.8 , http-client-tls >= 0.3.6.3 && < 0.4
src/lib/GenAILib.hs view
@@ -55,6 +55,7 @@ , optional , mkMessage , mkMessageWithRole+ , modRequest , Model (..) , Message (..) , Role (..)@@ -157,7 +158,7 @@ class Request a where -- | Append a @Message@ to an existing request- appendMessage :: Message -> a -> a+ appendMessage :: Message -> RequestMod a -- | Construct a new @Request@ -- Note: This request has no prompt data yet so at a minimum it must be used like this@@ -176,15 +177,22 @@ RequestMod f1 <> RequestMod f2 = RequestMod (f2 . f1) +-- | Modify an existing request+--+-- > modRequest existingReq $ numopt "foo" 42+modRequest :: r -> RequestMod r -> r+modRequest req (RequestMod optSetter) = optSetter req++ -- | Append a system prompt systemmsg :: Request r => TL.Text -> RequestMod r-systemmsg systemPrompt = RequestMod . appendMessage+systemmsg systemPrompt = appendMessage $ mkMessageWithRole (Role "system") systemPrompt -- | Append a user message (prompt) usermsg :: Request r => TL.Text -> RequestMod r-usermsg prompt = RequestMod . appendMessage $ mkMessage prompt+usermsg prompt = appendMessage $ mkMessage prompt -- | Apply a request modifier to a Maybe value
src/lib/GenAILib/Ollama.hs view
@@ -43,8 +43,8 @@ toEncoding = genericToEncoding customJSONOptions instance Request OllamaRequest where- appendMessage :: Message -> OllamaRequest -> OllamaRequest- appendMessage newMessage oldReq = oldReq { messages = oldReq.messages |> newMessage }+ appendMessage :: Message -> RequestMod OllamaRequest+ appendMessage newMessage = RequestMod (\req -> req { messages = req.messages |> newMessage }) mkRequest :: TL.Text -> RequestMod OllamaRequest -> OllamaRequest mkRequest modelName (RequestMod optSetter) = optSetter
src/lib/GenAILib/OpenAI.hs view
@@ -41,8 +41,8 @@ toEncoding = genericToEncoding customJSONOptions instance Request OpenAIRequest where- appendMessage :: Message -> OpenAIRequest -> OpenAIRequest- appendMessage newMessage oldReq = oldReq { messages = oldReq.messages |> newMessage }+ appendMessage :: Message -> RequestMod OpenAIRequest+ appendMessage newMessage = RequestMod (\req -> req { messages = req.messages |> newMessage }) mkRequest :: TL.Text -> RequestMod OpenAIRequest -> OpenAIRequest mkRequest modelName (RequestMod optSetter) = optSetter@@ -72,9 +72,9 @@ instance FromJSON OpenAIResponse where parseJSON (Object o) = do choices <- o .: "choices"- choice <- if null choices- then fail "No elements in choices array, unable to decode this JSON"- else pure $ head choices+ choice <- case choices of+ [] -> fail "No elements in choices array, unable to decode this JSON"+ (c : _) -> pure c OpenAIResponse <$> (Model <$> o .: "model") <*> (posixSecondsToUTCTime <$> o .: "created")
stack.yaml.lock view
@@ -1,7 +1,7 @@ # This file was autogenerated by Stack. # You should not edit this file by hand. # For more information, please see the documentation at:-# https://docs.haskellstack.org/en/stable/lock_files+# https://docs.haskellstack.org/en/stable/topics/lock_files packages: [] snapshots: