55{-# LANGUAGE OverloadedStrings #-}
66{-# LANGUAGE ScopedTypeVariables #-}
77
8- module OllamaApi (writeToMailBox' , answerQuestion , extractAnswer , makeResponseChunk , jsonChunks , chunker ) where
8+ module OllamaApi (answerQuestion , extractAnswer , makeResponseChunk , jsonChunks , chunker ) where
99
1010import ChatLogger
11- import Conduit (ConduitM , ConduitT , MonadResource , awaitForever , concatC , concatMapAccumC , concatMapC , concatMapCE , filterC , leftover , mapAccumWhileC , mapC , mapCE , mapM_C , runConduit , runConduitRes , sinkLazy , sourceLazy , yield , (.|) )
11+ import Conduit
12+ ( ConduitM ,
13+ ConduitT ,
14+ MonadIO (liftIO ),
15+ MonadResource ,
16+ awaitForever ,
17+ filterC ,
18+ leftover ,
19+ mapC ,
20+ mapM_C ,
21+ runConduit ,
22+ runResourceT ,
23+ yield ,
24+ (.|) ,
25+ )
1226import ConfigParser
27+ ( EnvConfig (ollamaHost , ollamaPort , sileroHost , sileroPort ),
28+ )
1329import Control.Concurrent (forkIO )
1430import Control.Concurrent.STM (STM , TQueue , atomically , readTVar , writeTQueue , writeTVar )
1531import Control.Exception (throwIO )
@@ -40,11 +56,10 @@ import Database.Persist.Postgresql (ConnectionPool, Entity (Entity))
4056import GHC.Generics (Generic )
4157import Listener
4258import Network.HTTP.Conduit
43- ( Request (method , port , requestBody , requestHeaders , responseTimeout , secure ),
44- RequestBody (RequestBodyBS , RequestBodyLBS ),
59+ ( Request (method , port , requestBody ),
60+ RequestBody (RequestBodyLBS ),
4561 Response (responseBody ),
4662 http ,
47- httpLbs ,
4863 newManager ,
4964 parseRequest ,
5065 responseTimeoutMicro ,
@@ -99,25 +114,14 @@ isPunct c =
99114makeResponseChunk :: B. ByteString -> Maybe OllamaResponse
100115makeResponseChunk = decode . BLS. fromStrict
101116
102- writeToMailBox' :: MonadResource m => TQueue String -> Maybe ConnectionPool -> Maybe QueryId -> String -> m ()
103- writeToMailBox' mbox dbPool queryId msg =
104- liftResourceT $
105- liftIO $ do
106- mapM_ (\ qid -> addAnswer dbPool (Answer qid msg)) queryId
107- atomically $ writeTQueue mbox msg
108-
109- talker :: MonadResource m => String -> Int -> String -> m ()
110- talker sileroHost sileroPort mesg = do
117+ talker :: MonadResource m => String -> Int -> Maybe ConnectionPool -> Maybe QueryId -> String -> m ()
118+ talker sileroHost sileroPort connectionPool qid mesg = do
111119 liftResourceT $ do
112- liftIO $ sayText sileroHost sileroPort mesg -- TODO: return a list of the durations somewhere so we can advance the time in the listener
120+ liftIO $ do
121+ mapM_ (\ qid -> addAnswer connectionPool (Answer qid mesg)) qid
122+ sayText sileroHost sileroPort mesg -- TODO: return a list of the durations somewhere so we can advance the time in the listener
113123 return ()
114124
115- getDbStuff :: Maybe QueryId -> Maybe ConnectionPool -> Maybe (QueryId , ConnectionPool )
116- getDbStuff q d = do
117- q' <- q
118- d' <- d
119- return (q', d')
120-
121125chunker :: Monad m => (String -> m () ) -> ConduitT B. ByteString c m ()
122126chunker chunkAction =
123127 jsonChunks ' }'
@@ -140,7 +144,7 @@ answerQuestion qid question = do
140144 body = RequestBodyLBS $ encode payload
141145 request' = request {method = " POST" , requestBody = body, port = apiPort}
142146 request'' = setRequestResponseTimeout (responseTimeoutMicro (500 * 1000000 )) request'
143- talker' = talker (sileroHost env) (sileroPort env)
147+ talker' = talker (sileroHost env) (sileroPort env) (dbPool st) qid
144148 manager <- newManager tlsManagerSettings
145149 runResourceT $ do
146150 rsp <- http request'' manager
0 commit comments