{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}

module IntelliMonad.Tools
  ( module IntelliMonad.Tools.Utils,
    module IntelliMonad.Tools.Arxiv,
    module IntelliMonad.Tools.Bash,
    module IntelliMonad.Tools.TextToSpeech,
    module IntelliMonad.Tools.DallE3,
    defaultTools,
  )
where

import Data.Proxy
import IntelliMonad.Tools.Arxiv
import IntelliMonad.Tools.Bash
import IntelliMonad.Tools.DallE3
import IntelliMonad.Tools.TextToSpeech
import IntelliMonad.Tools.Utils
import IntelliMonad.Types

arxiv :: ToolProxy
arxiv = Proxy Arxiv -> ToolProxy
forall t.
(Tool t, FromJSON t, ToJSON t, FromJSON (Output t),
 ToJSON (Output t)) =>
Proxy t -> ToolProxy
ToolProxy (Proxy Arxiv
forall {k} (t :: k). Proxy t
Proxy :: Proxy Arxiv)

bash :: ToolProxy
bash = Proxy Bash -> ToolProxy
forall t.
(Tool t, FromJSON t, ToJSON t, FromJSON (Output t),
 ToJSON (Output t)) =>
Proxy t -> ToolProxy
ToolProxy (Proxy Bash
forall {k} (t :: k). Proxy t
Proxy :: Proxy Bash)

textToSpeech :: ToolProxy
textToSpeech = Proxy TextToSpeech -> ToolProxy
forall t.
(Tool t, FromJSON t, ToJSON t, FromJSON (Output t),
 ToJSON (Output t)) =>
Proxy t -> ToolProxy
ToolProxy (Proxy TextToSpeech
forall {k} (t :: k). Proxy t
Proxy :: Proxy TextToSpeech)

dallE3 :: ToolProxy
dallE3 = Proxy DallE3 -> ToolProxy
forall t.
(Tool t, FromJSON t, ToJSON t, FromJSON (Output t),
 ToJSON (Output t)) =>
Proxy t -> ToolProxy
ToolProxy (Proxy DallE3
forall {k} (t :: k). Proxy t
Proxy :: Proxy DallE3)

defaultTools :: [ToolProxy]
defaultTools :: [ToolProxy]
defaultTools =
  [ Item [ToolProxy]
ToolProxy
bash,
    Item [ToolProxy]
ToolProxy
arxiv
  ]