Packages
nous
0.5.0
0.17.0
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.17
0.12.16
0.12.15
0.12.14
0.12.13
0.12.12
0.12.11
0.12.9
0.12.7
0.12.6
0.12.5
0.12.3
0.12.2
0.12.0
0.11.3
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.5.0
AI agent framework for Elixir with multi-provider LLM support
Current section
Files
Jump to
Current section
Files
mix.exs
defmodule Nous.MixProject do
use Mix.Project
@version "0.5.0"
@source_url "https://github.com/nyo16/nous"
def project do
[
app: :nous,
version: @version,
elixir: "~> 1.15",
start_permanent: Mix.env() == :prod,
deps: deps(),
docs: docs(),
aliases: aliases(),
description: "AI agent framework for Elixir with multi-provider LLM support",
source_url: @source_url,
package: package(),
elixirc_paths: elixirc_paths(Mix.env()),
dialyzer: [
plt_file: {:no_warn, "priv/plts/dialyzer.plt"},
plt_add_apps: [:mix]
]
]
end
def application do
[
extra_applications: [:logger],
mod: {Nous.Application, []}
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
defp deps do
[
# OpenAI client library
{:openai_ex, "~> 0.9.17"},
# Anthropic Claude client library (optional)
# To enable Anthropic support, add {:anthropix, "~> 0.6.2"} to your deps
{:anthropix, "~> 0.6.2", optional: true},
# Google Gemini client library (optional)
# To enable Gemini support, add {:gemini_ex, "~> 0.8.1"} to your deps
{:gemini_ex, "~> 0.8.1", optional: true},
# JSON
{:jason, "~> 1.4"},
# Validation
{:ecto, "~> 3.11"},
# HTTP client (required by openai_ex)
{:finch, "~> 0.18"},
# HTTP client for Mistral API
{:req, "~> 0.4"},
# Telemetry
{:telemetry, "~> 1.2"},
# Note: For Prometheus metrics, users can add {:prom_ex, "~> 1.11"} and {:plug, "~> 1.18"}
# to their deps. The Nous.PromEx.Plugin will automatically be available.
# Dev/Test
{:ex_doc, "~> 0.31", only: :dev, runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:mox, "~> 1.1", only: :test}
]
end
defp docs do
[
main: "readme",
extras: [
"README.md",
"docs/llm_council_design.md",
# Examples and Tutorials
{"examples/README.md", filename: "examples_overview", title: "Examples Overview"},
{"examples/GETTING_STARTED.md", filename: "getting_started", title: "Getting Started (5 min)"},
# Learning Guides
{"examples/DISTRIBUTED_AGENTS.md", filename: "distributed_agents", title: "Distributed Agents"},
{"examples/LIVEVIEW_INTEGRATION.md", filename: "liveview_integration", title: "LiveView Integration"},
{"examples/LIVEVIEW_CHAT_GUIDE.md", filename: "liveview_chat", title: "LiveView Chat Guide"},
# Production Guides
{"examples/guides/best_practices.md", filename: "best_practices", title: "Production Best Practices"},
{"examples/guides/tool_development.md", filename: "tool_development", title: "Tool Development Guide"},
{"examples/guides/troubleshooting.md", filename: "troubleshooting", title: "Troubleshooting Guide"},
{"examples/guides/migration_guide.md", filename: "migration_guide", title: "Migration Guide"}
],
source_ref: "v#{@version}",
source_url: @source_url,
groups_for_modules: [
"Core API": [
Nous,
Nous.Agent,
Nous.ReActAgent
],
"Agent Execution": [
Nous.AgentRunner,
Nous.AgentServer,
Nous.RunContext
],
"Model Providers": [
Nous.Model,
Nous.ModelParser,
Nous.ModelDispatcher,
Nous.Models.Behaviour,
Nous.Models.OpenAICompatible,
Nous.Models.Anthropic,
Nous.Models.Gemini,
Nous.Models.Mistral
],
"Tool System": [
Nous.Tool,
Nous.ToolSchema,
Nous.ToolExecutor
],
"Built-in Tools": [
Nous.Tools.BraveSearch,
Nous.Tools.DateTimeTools,
Nous.Tools.StringTools,
Nous.Tools.TodoTools,
Nous.Tools.ReActTools
],
"Data Types": [
Nous.Types,
Nous.Usage,
Nous.Messages
],
"Infrastructure": [
Nous.Telemetry,
Nous.Errors
],
"Integrations": [
Nous.PromEx.Plugin
]
]
]
end
defp package do
[
licenses: ["MIT"],
links: %{
"GitHub" => @source_url
}
]
end
defp aliases do
[docs: ["docs", ©_images/1]]
end
defp copy_images(_) do
File.mkdir_p!("doc/images")
File.cp!("images/header.jpeg", "doc/images/header.jpeg")
File.cp!("images/logo.jpeg", "doc/images/logo.jpeg")
end
end