{-# 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.Bash,
    module IntelliMonad.Tools.TextToSpeech,
    module IntelliMonad.Tools.DallE3,
    defaultTools,
  )
where

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

defaultTools :: [ToolProxy]
defaultTools :: [ToolProxy]
defaultTools =
  [ 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),
    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),
    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)
  ]