Current section
Files
Jump to
Current section
Files
mix.exs
defmodule Sycophant.MixProject do
use Mix.Project
def project do
[
app: :sycophant,
description: description(),
package: package(),
version: "0.4.2",
elixir: "~> 1.19",
dialyzer: [
plt_core_path: "_plts/core"
],
start_permanent: Mix.env() == :prod,
deps: deps(),
docs: docs(),
elixirc_paths: elixirc_paths(Mix.env()),
aliases: aliases()
]
end
def cli do
[
preferred_envs: [
coveralls: :test,
"coveralls.post": :test,
"coveralls.github": :test,
"coveralls.html": :test,
"test.recording": :test,
"test.integration": :test
]
]
end
defp docs do
[
main: "readme",
logo: "logo.png",
extras: [
{"README.md", title: "Overview"},
{"guides/getting-started.md", title: "Getting Started"},
{"guides/architecture.md", title: "Architecture"},
{"guides/tool-use.md", title: "Tool Use"},
{"guides/error-handling.md", title: "Error Handling"},
{"guides/telemetry.md", title: "Telemetry"},
{"guides/pricing.md", title: "Pricing and Cost Tracking"},
{"guides/agent-mode.md", title: "Agent Mode"},
{"guides/serialization.md", title: "Serialization"},
{"guides/http-configuration.md", title: "HTTP Configuration"},
{"guides/github-copilot.md", title: "GitHub Copilot"},
{"guides/custom-providers.md", title: "Custom Providers"},
{"guides/recording-tests.md", title: "Recording Tests"},
{"CHANGELOG.md", title: "Changelog"},
{"LICENSE", title: "License"}
],
groups_for_extras: [
Guides: [
"guides/getting-started.md",
"guides/architecture.md",
"guides/tool-use.md",
"guides/error-handling.md",
"guides/telemetry.md",
"guides/pricing.md",
"guides/agent-mode.md",
"guides/serialization.md",
"guides/http-configuration.md",
"guides/github-copilot.md"
],
"Extending Sycophant": [
"guides/custom-providers.md",
"guides/recording-tests.md"
]
],
groups_for_modules: [
"Client API": [
Sycophant,
Sycophant.Request,
Sycophant.Response,
Sycophant.Context,
Sycophant.Message,
Sycophant.Message.Content.Text,
Sycophant.Message.Content.Image
],
"Tools & Execution": [
Sycophant.Tool,
Sycophant.ToolCall,
Sycophant.ToolExecutor
],
Agent: [
Sycophant.Agent,
Sycophant.Agent.Callbacks,
Sycophant.Agent.Stats,
Sycophant.Agent.Stats.Turn,
Sycophant.Agent.State,
Sycophant.Agent.Telemetry
],
Pipeline: [
Sycophant.Pipeline,
Sycophant.ModelResolver,
Sycophant.ResponseValidator
],
"Wire Protocols": [
Sycophant.WireProtocol,
Sycophant.WireProtocol.AnthropicMessages,
Sycophant.WireProtocol.OpenAICompletions,
Sycophant.WireProtocol.OpenAIResponses,
Sycophant.WireProtocol.GoogleGemini,
Sycophant.WireProtocol.BedrockConverse
],
Embeddings: [
Sycophant.EmbeddingPipeline,
Sycophant.EmbeddingRequest,
Sycophant.EmbeddingResponse,
Sycophant.EmbeddingParams,
Sycophant.EmbeddingWireProtocol,
Sycophant.EmbeddingWireProtocol.OpenAIEmbed,
Sycophant.EmbeddingWireProtocol.BedrockEmbed
],
Authentication: [
Sycophant.Auth,
Sycophant.Auth.Bearer,
Sycophant.Auth.Anthropic,
Sycophant.Auth.Google,
Sycophant.Auth.Bedrock,
Sycophant.Auth.Azure,
Sycophant.Auth.GithubCopilot
],
"Telemetry & Observability": [
Sycophant.Telemetry,
Sycophant.OpenTelemetry
],
Serialization: [
Sycophant.Serializable,
Sycophant.Serializable.Decoder
],
Configuration: [
Sycophant.Config,
Sycophant.Credentials,
Sycophant.ParamDefs
],
"Data Types": [
Sycophant.StreamChunk,
Sycophant.Usage,
Sycophant.Reasoning
],
Errors: [
Sycophant.Error,
~r/Sycophant\.Error\./
],
Infrastructure: [
Sycophant.Transport,
Sycophant.Registry,
Sycophant.Application,
Sycophant.AWS.EventStream,
Sycophant.Schema.JsonSchema
]
],
nest_modules_by_prefix: [
Sycophant.Error,
Sycophant.Auth,
Sycophant.Agent,
Sycophant.WireProtocol,
Sycophant.EmbeddingWireProtocol,
Sycophant.Message.Content
]
]
end
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
def application do
[
extra_applications: [:logger],
mod: {Sycophant.Application, []}
]
end
defp aliases do
[
"test.recording": ["test --include recording test/recording/"]
]
end
defp deps do
[
{:bandit, "~> 1.8", only: :dev, runtime: false},
{:credo, "~> 1.7", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.4", only: [:dev, :test], runtime: false},
{:doctor, "~> 0.22", only: :dev},
{:ex_check, "~> 0.16", only: [:dev, :test], runtime: false},
{:ex_json_schema, "~> 0.11"},
{:excoveralls, "~> 0.18", only: [:dev, :test]},
{:ex_doc, "~> 0.34", only: :dev, runtime: false},
{:gen_state_machine, "~> 3.0"},
{:jason, "~> 1.4"},
{:llm_db, "~> 2026.4.2"},
{:mimic, "~> 2.0", only: :test},
{:mix_audit, ">= 0.0.0", only: [:dev, :test], runtime: false},
{:opentelemetry_telemetry, "~> 1.1", optional: true},
{:quiver, "~> 0.1", only: [:dev, :test]},
{:recode, "~> 0.8", only: [:dev], runtime: false},
{:splode, "~> 0.3"},
{:telemetry, "~> 1.3"},
{:tesla, "~> 1.16"},
{:tesla_aws_sigv4, "~> 0.1"},
{:tidewave, "~> 0.5", only: :dev, runtime: false},
{:zoi, "~> 0.11"},
{:zoi_defstruct, "~> 0.2"}
]
end
defp description do
"You are absolutely right if you use this lib!"
end
defp package do
[
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/edlontech/sycophant"},
files: ~w(lib mix.exs README.md LICENSE .formatter.exs)
]
end
end