openai 1.0.0 → 1.0.1
raw patch · 4 files changed
+94/−2 lines, 4 files
Files
- CHANGELOG.md +5/−0
- README.md +41/−0
- openai.cabal +9/−2
- src/OpenAI/V1.hs +39/−0
CHANGELOG.md view
@@ -1,3 +1,8 @@+1.0.1:++- Include `README`+- Include usage example+ 1.0.0: - Initial release
+ README.md view
@@ -0,0 +1,41 @@+# `openai`++This provides a binding to OpenAI's API using `servant`++Example usage:++```haskell+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedLists #-}++module Main where++import Data.Foldable (traverse_)+import OpenAI.V1+import OpenAI.V1.Chat.Completions++import qualified Data.Text as Text+import qualified Data.Text.IO as Text.IO+import qualified System.Environment as Environment++main :: IO ()+main = do+ key <- Environment.getEnv "OPENAI_KEY"++ clientEnv <- getClientEnv "https://api.openai.com"++ let Methods{ createChatCompletion } = makeMethods clientEnv (Text.pack key)++ text <- Text.IO.getLine++ ChatCompletionObject{ choices } <- createChatCompletion _CreateChatCompletion+ { messages = [ User{ content = [ Text{ text } ], name = Nothing } ]+ , model = "gpt-4o-mini"+ }++ let display Choice{ message } = Text.IO.putStrLn (messageToContent message)++ traverse_ display choices+```
openai.cabal view
@@ -1,9 +1,15 @@ cabal-version: 2.4 name: openai-version: 1.0.0+version: 1.0.1 synopsis: Servant bindings to OpenAI description: This package provides comprehensive and type-safe bindings- to OpenAI using Servant+ to OpenAI, providing both a Servant interface and+ non-Servant interface for convenience.+ .+ Read the @README@ below for a fully worked usage example.+ .+ Otherwise, browse the "OpenAI.V1" module, which is the+ intended package entrypoint. license: BSD-3-Clause license-file: LICENSE author: Gabriella Gonzalez@@ -11,6 +17,7 @@ copyright: 2024 Gabriella Gonzalez build-type: Simple extra-source-files: CHANGELOG.md+ README.md library default-language: Haskell2010
src/OpenAI/V1.hs view
@@ -1,4 +1,43 @@ -- | @\/v1@+--+-- Example usage:+--+-- @+-- {-# LANGUAGE DuplicateRecordFields #-}+-- {-# LANGUAGE NamedFieldPuns #-}+-- {-# LANGUAGE OverloadedStrings #-}+-- {-# LANGUAGE OverloadedLists #-}+--+-- module Main where+--+-- import "Data.Foldable" (`Data.Foldable.traverse_`)+-- import "OpenAI.V1"+-- import "OpenAI.V1.Chat.Completions"+--+-- import qualified "Data.Text" as Text+-- import qualified "Data.Text.IO" as Text.IO+-- import qualified "System.Environment" as Environment+--+-- main :: `IO` ()+-- main = do+-- key <- Environment.`System.Environment.getEnv` \"OPENAI_KEY\"+--+-- clientEnv <- `OpenAI.V1.getClientEnv` \"https://api.openai.com\"+--+-- let `OpenAI.V1.Methods`{ createChatCompletion } = `OpenAI.V1.makeMethods` clientEnv (Text.`Data.Text.pack` key)+--+-- text <- Text.IO.`Data.Text.IO.getLine`+--+-- `OpenAI.V1.Chat.Completions.ChatCompletionObject`{ `OpenAI.V1.Chat.Completions.choices` } <- createChatCompletion `OpenAI.V1.Chat.Completions._CreateChatCompletion`+-- { `OpenAI.V1.Chat.Completions.messages` = [ `OpenAI.V1.Chat.Completions.User`{ `OpenAI.V1.Chat.Completions.content` = [ `OpenAI.V1.Chat.Completions.Text`{ `OpenAI.V1.Chat.Completions.text` } ], `OpenAI.V1.Chat.Completions.name` = `Nothing` } ]+-- , `OpenAI.V1.Chat.Completions.model` = \"gpt-4o-mini\"+-- }+--+-- let display `OpenAI.V1.Chat.Completions.Choice`{ `OpenAI.V1.Chat.Completions.message` } = Text.IO.`Data.Text.IO.putStrLn` (`OpenAI.V1.Chat.Completions.messageToContent` message)+--+-- `Data.Foldable.traverse_` display choices+-- @+ module OpenAI.V1 ( -- * Methods getClientEnv