defmodule Bumblebee.MixProject do
use Mix.Project
@version "0.1.1"
@description "Pre-trained and transformer Neural Network models in Axon"
def project do
[
app: :bumblebee,
version: @version,
description: @description,
name: "Bumblebee",
elixir: "~> 1.13",
elixirc_paths: elixirc_paths(Mix.env()),
start_permanent: Mix.env() == :prod,
deps: deps(),
docs: docs(),
package: package()
]
end
def application do
[
extra_applications: [:logger, :inets, :ssl]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
{:axon, "~> 0.3.1", axon_opts()},
{:tokenizers, "~> 0.2.0"},
{:nx, "~> 0.4.1"},
{:exla, "~> 0.4.1", only: [:dev, :test]},
{:torchx, "~> 0.4.1", only: [:dev, :test]},
{:nx_image, "~> 0.1.0"},
{:unpickler, "~> 0.1.0"},
{:castore, "~> 0.1.0"},
{:jason, "~> 1.4.0"},
{:progress_bar, "~> 2.0"},
{:stb_image, "~> 0.6.0", only: :test},
{:bypass, "~> 2.1", only: :test},
{:ex_doc, "~> 0.28", only: :dev, runtime: false}
]
end
defp axon_opts do
if path = System.get_env("AXON_PATH") do
[path: path]
else
[]
end
end
defp docs do
[
main: "Bumblebee",
source_url: "https://github.com/elixir-nx/bumblebee",
source_ref: "v#{@version}",
extras: ["notebooks/examples.livemd", "notebooks/stable_diffusion.livemd"],
extra_section: "GUIDES",
groups_for_modules: [
Tasks: [
Bumblebee.Text,
Bumblebee.Vision,
Bumblebee.Diffusion.StableDiffusion
],
Models: [
Bumblebee.Diffusion.StableDiffusion.SafetyChecker,
Bumblebee.Diffusion.UNet2DConditional,
Bumblebee.Diffusion.VaeKl,
Bumblebee.Multimodal.Clip,
Bumblebee.Multimodal.LayoutLm,
Bumblebee.Text.Albert,
Bumblebee.Text.Bart,
Bumblebee.Text.Bert,
Bumblebee.Text.ClipText,
Bumblebee.Text.Gpt2,
Bumblebee.Text.Mbart,
Bumblebee.Text.Roberta,
Bumblebee.Vision.ClipVision,
Bumblebee.Vision.ConvNext,
Bumblebee.Vision.Deit,
Bumblebee.Vision.ResNet,
Bumblebee.Vision.Vit
],
Preprocessors: [
Bumblebee.Text.AlbertTokenizer,
Bumblebee.Text.BartTokenizer,
Bumblebee.Text.BertTokenizer,
Bumblebee.Text.ClipTokenizer,
Bumblebee.Text.Gpt2Tokenizer,
Bumblebee.Text.LayoutLmTokenizer,
Bumblebee.Text.MbartTokenizer,
Bumblebee.Text.RobertaTokenizer,
Bumblebee.Vision.ClipFeaturizer,
Bumblebee.Vision.ConvNextFeaturizer,
Bumblebee.Vision.DeitFeaturizer,
Bumblebee.Vision.VitFeaturizer
],
Schedulers: [
Bumblebee.Diffusion.DdimScheduler,
Bumblebee.Diffusion.PndmScheduler
],
Interfaces: [
Bumblebee.Configurable,
Bumblebee.ModelSpec,
Bumblebee.Featurizer,
Bumblebee.Tokenizer,
Bumblebee.Scheduler,
Bumblebee.Text.Generation
]
],
groups_for_functions: [
# Bumblebee
Models: &(&1[:type] == :model),
Featurizers: &(&1[:type] == :featurizer),
Tokenizers: &(&1[:type] == :tokenizer),
Schedulers: &(&1[:type] == :scheduler)
],
before_closing_body_tag: &before_closing_body_tag/1
]
end
def package do
[
licenses: ["Apache-2.0"],
links: %{
"GitHub" => "https://github.com/elixir-nx/bumblebee"
}
]
end
# Add KaTeX integration for rendering math
defp before_closing_body_tag(:html) do
"""
"""
end
defp before_closing_body_tag(_), do: ""
end