Skip to content

Commit b677dfa

Browse files
authored
Add credo to CI (#25)
* Add credo to lint step * Fix credo issues * Run CI on push to main * check for unused deps
1 parent 2fdae38 commit b677dfa

File tree

12 files changed

+48
-57
lines changed

12 files changed

+48
-57
lines changed

.github/workflows/pull.yaml renamed to .github/workflows/ci.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
name: QA
1+
name: CI
22

33
on:
44
pull_request:
5+
push:
56
branches:
67
- main
78

@@ -79,4 +80,5 @@ jobs:
7980
v2-${{ runner.os }}-plts
8081
- run: mix deps.get
8182
- run: mix compile --warnings-as-errors
83+
- run: mix deps.unlock --check-unused
8284
- run: mix lint

lib/mix/tasks/rag.gen_eval.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Mix.Tasks.Rag.GenEval do
22
use Igniter.Mix.Task
3+
alias Igniter.Project
34

45
@example "mix rag.gen_eval"
56

@@ -40,7 +41,7 @@ defmodule Mix.Tasks.Rag.GenEval do
4041
rag_module = Module.concat(root_module, "Rag")
4142

4243
igniter
43-
|> Igniter.Project.Config.configure(
44+
|> Project.Config.configure(
4445
"config.exs",
4546
app_name,
4647
[:openai_key],

lib/mix/tasks/rag.install.ex

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
defmodule Mix.Tasks.Rag.Install do
22
use Igniter.Mix.Task
3+
alias Igniter.{Libs, Project}
34

45
@example "mix rag.install --vector-store pgvector"
56

@@ -57,10 +58,10 @@ defmodule Mix.Tasks.Rag.Install do
5758

5859
igniter =
5960
igniter
60-
|> Igniter.Project.Deps.add_dep({:text_chunker, "~> 0.3.1"})
61-
|> Igniter.Project.Deps.add_dep({:bumblebee, "~> 0.6.0"})
62-
|> Igniter.Project.Deps.add_dep({:exla, "~> 0.9.1"})
63-
|> Igniter.Project.Config.configure("config.exs", :nx, [:default_backend], EXLA.Backend)
61+
|> Project.Deps.add_dep({:text_chunker, "~> 0.3.1"})
62+
|> Project.Deps.add_dep({:bumblebee, "~> 0.6.0"})
63+
|> Project.Deps.add_dep({:exla, "~> 0.9.1"})
64+
|> Project.Config.configure("config.exs", :nx, [:default_backend], EXLA.Backend)
6465
|> Igniter.compose_task("rag.gen_eval")
6566
|> Igniter.compose_task("rag.gen_servings")
6667
|> Igniter.compose_task("rag.gen_rag_module")
@@ -79,15 +80,15 @@ defmodule Mix.Tasks.Rag.Install do
7980

8081
defp with_chroma(igniter) do
8182
igniter
82-
|> Igniter.Project.Deps.add_dep({:chroma, "~> 0.1.3"})
83+
|> Project.Deps.add_dep({:chroma, "~> 0.1.3"})
8384
|> Igniter.apply_and_fetch_dependencies()
84-
|> Igniter.Project.Config.configure("config.exs", :chroma, [:host], "http://localhost:8000")
85-
|> Igniter.Project.Config.configure("config.exs", :chroma, [:api_base], "api")
86-
|> Igniter.Project.Config.configure("config.exs", :chroma, [:api_version], "v1")
85+
|> Project.Config.configure("config.exs", :chroma, [:host], "http://localhost:8000")
86+
|> Project.Config.configure("config.exs", :chroma, [:api_base], "api")
87+
|> Project.Config.configure("config.exs", :chroma, [:api_version], "v1")
8788
end
8889

8990
defp with_pgvector(igniter) do
90-
app_name = Igniter.Project.Application.app_name(igniter)
91+
app_name = Project.Application.app_name(igniter)
9192

9293
root_module =
9394
app_name
@@ -99,23 +100,23 @@ defmodule Mix.Tasks.Rag.Install do
99100
schema_module = Module.concat(root_module, "Rag.Chunk")
100101

101102
igniter
102-
|> Igniter.Project.Deps.add_dep({:ecto, "~> 3.0"})
103-
|> Igniter.Project.Deps.add_dep({:ecto_sql, "~> 3.10"})
104-
|> Igniter.Project.Deps.add_dep({:pgvector, "~> 0.3.0"})
103+
|> Project.Deps.add_dep({:ecto, "~> 3.0"})
104+
|> Project.Deps.add_dep({:ecto_sql, "~> 3.10"})
105+
|> Project.Deps.add_dep({:pgvector, "~> 0.3.0"})
105106
|> Igniter.apply_and_fetch_dependencies()
106107
|> Igniter.include_or_create_file(
107108
"lib/postgrex_types.ex",
108109
"""
109110
Postgrex.Types.define(#{inspect(postgrex_types_module)}, [Pgvector.Extensions.Vector] ++ Ecto.Adapters.Postgres.extensions(), [])
110111
"""
111112
)
112-
|> Igniter.Project.Config.configure(
113+
|> Project.Config.configure(
113114
"config.exs",
114115
app_name,
115116
[repo_module, :types],
116117
postgrex_types_module
117118
)
118-
|> Igniter.Project.Module.create_module(
119+
|> Project.Module.create_module(
119120
schema_module,
120121
"""
121122
@moduledoc \"""
@@ -138,7 +139,7 @@ defmodule Mix.Tasks.Rag.Install do
138139
end
139140
"""
140141
)
141-
|> Igniter.Libs.Ecto.gen_migration(repo_module, "create_chunks_table",
142+
|> Libs.Ecto.gen_migration(repo_module, "create_chunks_table",
142143
body: """
143144
def up() do
144145
execute("CREATE EXTENSION IF NOT EXISTS vector")

lib/rag/ai/nx.ex

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,14 @@ defmodule Rag.Ai.Nx do
2525
end
2626

2727
def generate_embeddings(%__MODULE__{} = provider, texts, _opts) when is_list(texts) do
28-
try do
29-
embeddings =
30-
Nx.Serving.batched_run(provider.embeddings_serving, texts)
31-
|> Enum.map(&Nx.to_list(&1.embedding))
32-
33-
{:ok, embeddings}
34-
rescue
35-
error ->
36-
{:error, error}
37-
end
28+
embeddings =
29+
Nx.Serving.batched_run(provider.embeddings_serving, texts)
30+
|> Enum.map(&Nx.to_list(&1.embedding))
31+
32+
{:ok, embeddings}
33+
rescue
34+
error ->
35+
{:error, error}
3836
end
3937

4038
@impl Rag.Ai.Provider
@@ -46,14 +44,12 @@ defmodule Rag.Ai.Nx do
4644
end
4745

4846
def generate_text(%__MODULE__{} = provider, prompt, _opts) when is_binary(prompt) do
49-
try do
50-
%{results: [result]} =
51-
Nx.Serving.batched_run(provider.text_serving, prompt)
52-
53-
{:ok, result.text}
54-
rescue
55-
error ->
56-
{:error, error}
57-
end
47+
%{results: [result]} =
48+
Nx.Serving.batched_run(provider.text_serving, prompt)
49+
50+
{:ok, result.text}
51+
rescue
52+
error ->
53+
{:error, error}
5854
end
5955
end

mix.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ defmodule Rag.MixProject do
6666
defp aliases do
6767
[
6868
lint: [
69-
"format --check-formatted"
69+
"format --check-formatted",
70+
"credo --strict"
7071
]
7172
]
7273
end

test/rag/embedding/http_test.exs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ defmodule Rag.Embedding.HttpTest do
22
use ExUnit.Case
33
use Mimic
44

5-
alias Rag.Embedding
6-
alias Rag.Generation
7-
alias Rag.Ai
5+
alias Rag.{Ai, Embedding, Generation}
86

97
setup do
108
%{provider: Ai.OpenAI.new(%{})}

test/rag/embedding/nx_test.exs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ defmodule Rag.Embedding.NxTest do
22
use ExUnit.Case
33
use Mimic
44

5-
alias Rag.Embedding
6-
alias Rag.Generation
5+
alias Rag.{Ai, Embedding, Generation}
76

87
setup do
9-
%{provider: Rag.Ai.Nx.new(%{embeddings_serving: TestEmbeddingsServing})}
8+
%{provider: Ai.Nx.new(%{embeddings_serving: TestEmbeddingsServing})}
109
end
1110

1211
describe "generate_embedding/3" do

test/rag/evaluation/http_test.exs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ defmodule Rag.Evaluation.HttpTest do
22
use ExUnit.Case
33
use Mimic
44

5-
alias Rag.Generation
6-
alias Rag.Evaluation
7-
alias Rag.Ai
5+
alias Rag.{Ai, Evaluation, Generation}
86

97
setup do
108
%{provider: Ai.OpenAI.new(%{})}

test/rag/evaluation/nx_test.exs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ defmodule Rag.Evaluation.NxTest do
22
use ExUnit.Case
33
use Mimic
44

5-
alias Rag.Generation
6-
alias Rag.Evaluation
7-
alias Rag.Ai
5+
alias Rag.{Ai, Evaluation, Generation}
86

97
setup do
108
%{provider: Ai.Nx.new(%{text_serving: TestTextServing})}

test/rag/evaluation_test.exs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
defmodule Rag.EvaluationTest do
22
use ExUnit.Case
33

4-
alias Rag.Generation
5-
alias Rag.Evaluation
4+
alias Rag.{Ai, Evaluation, Generation}
65

76
describe "evaluate_rag_triad/2" do
87
test "takes a query, context, and response and returns an evaluation with scores and reasoning" do
@@ -207,7 +206,7 @@ defmodule Rag.EvaluationTest do
207206
@tag :integration_test
208207
test "openai evaluation" do
209208
api_key = System.get_env("OPENAI_API_KEY")
210-
provider = Rag.Ai.OpenAI.new(text_model: "gpt-4o-mini", api_key: api_key)
209+
provider = Ai.OpenAI.new(text_model: "gpt-4o-mini", api_key: api_key)
211210

212211
query = "When was Elixir 1.18.1 released?"
213212
context = "Elixir 1.18.1 was released on 2024-12-24"
@@ -222,7 +221,7 @@ defmodule Rag.EvaluationTest do
222221
@tag :integration_test
223222
test "cohere evaluation" do
224223
api_key = System.get_env("COHERE_API_KEY")
225-
provider = Rag.Ai.Cohere.new(text_model: "command-r-plus-08-2024", api_key: api_key)
224+
provider = Ai.Cohere.new(text_model: "command-r-plus-08-2024", api_key: api_key)
226225

227226
query = "When was Elixir 1.18.1 released?"
228227
context = "Elixir 1.18.1 was released on 2024-12-24"

0 commit comments

Comments
 (0)