defmodule LLM.MixProject do use Mix.Project @version "0.1.3" @source_url "https://github.com/sukacipta/llm-elixir" def project do [ app: :llm, version: @version, elixir: "~> 1.16", start_permanent: Mix.env() == :prod, deps: deps(), elixirc_paths: elixirc_paths(Mix.env()), test_coverage: [ summary: [threshold: 90], ignore_modules: [ LLM.TestSupport.MockHelper, LLM.TestSupport.TestTool, LLM.HTTPClient.Req ] ], name: "LLM", description: "Lightweight Elixir client for LLM APIs", source_url: @source_url, docs: docs(), package: package() ] end def application do [ extra_applications: [:logger] ] end defp elixirc_paths(:test), do: ["lib", "test/support"] defp elixirc_paths(_), do: ["lib"] defp deps do [ {:req, "~> 0.5"}, {:telemetry, "~> 1.0", optional: true}, {:ex_doc, "~> 0.34", only: :dev, runtime: false}, {:mox, "~> 1.0", only: :test} ] end defp docs do [ main: "LLM", source_ref: "v#{@version}", extra_section: "GUIDES", extras: extras(), groups_for_extras: groups_for_extras(), groups_for_modules: [ Core: [ LLM, LLM.Context, LLM.Message, LLM.Response, LLM.Tool, LLM.Usage, LLM.Adapter, LLM.HTTPClient, LLM.HTTPClient.Req ], Providers: [ LLM.Provider.OpenAI, LLM.Provider.OpenAIResponse, LLM.Provider.Anthropic, LLM.Provider.Gemini, LLM.Provider.OpenRouter, LLM.Provider, LLM.Provider.Resolver ], Adapters: [ LLM.Adapter.OpenAI, LLM.Adapter.OpenAIResponse, LLM.Adapter.Anthropic, LLM.Adapter.Gemini ], Streaming: [ LLM.Stream, LLM.Stream.Chunk, LLM.Stream.Thinking, LLM.Stream.ToolCall, LLM.Stream.Stop, LLM.Stream.Error ] ] ] end defp extras do [ "README.md", "guides/overview.md", "guides/getting_started.md", "guides/messages.md", "guides/providers.md", "guides/streaming.md", "guides/tools.md", "guides/structured_output.md", "guides/configuration.md" ] end defp groups_for_extras do [ Introduction: ~r"guides/(overview|getting_started)\.md", Guides: ~r"guides/[a-z_]+\.md" ] end defp package do [ licenses: ["MIT"], links: %{"GitHub" => @source_url} ] end end