defmodule Noizu.OpenAI.Moderation.Category do @derive Jason.Encoder defstruct [ :hate, :hate_threatening, :self_harm, :sexual, :sexual_minors, :violence, :violence_graphic ] @type t :: %__MODULE__{ hate: boolean(), hate_threatening: boolean(), self_harm: boolean(), sexual: boolean(), sexual_minors: boolean(), violence: boolean(), violence_graphic: boolean() } def from_json(map) do %__MODULE__{ hate: Map.get(map, :hate, false), hate_threatening: Map.get(map, :"hate/threatening", false), self_harm: Map.get(map, :self_harm, false), sexual: Map.get(map, :sexual, false), sexual_minors: Map.get(map, :"sexual/minors", false), violence: Map.get(map, :violence, false), violence_graphic: Map.get(map, :"violence/graphic", false) } end end defmodule Noizu.OpenAI.Moderation.CategoryScore do defstruct [ :hate, :hate_threatening, :self_harm, :sexual, :sexual_minors, :violence, :violence_graphic ] @type t :: %__MODULE__{ hate: float(), hate_threatening: float(), self_harm: float(), sexual: float(), sexual_minors: float(), violence: float(), violence_graphic: float() } def from_json(map) do %__MODULE__{ hate: Map.get(map, :hate, 0.0), hate_threatening: Map.get(map, :"hate/threatening", 0.0), self_harm: Map.get(map, :self_harm, 0.0), sexual: Map.get(map, :sexual, 0.0), sexual_minors: Map.get(map, :"sexual/minors", 0.0), violence: Map.get(map, :violence, 0.0), violence_graphic: Map.get(map, :"violence/graphic", 0.0) } end end defmodule Noizu.OpenAI.Moderation.Result do defstruct [ :categories, :category_scores, :flagged ] @type t :: %__MODULE__{ categories: Noizu.OpenAI.Moderation.Category.t(), category_scores: Noizu.OpenAI.Moderation.CategoryScore.t(), flagged: boolean() } def from_json(map) do %__MODULE__{ categories: map[:categories] |> Noizu.OpenAI.Moderation.Category.from_json(), category_scores: map[:category_scores] |> Noizu.OpenAI.Moderation.CategoryScore.from_json(), flagged: Map.get(map, :flagged, false) } end end defmodule Noizu.OpenAI.Moderation do defstruct [ :id, :model, :results ] @type t :: %__MODULE__{ id: String.t(), model: String.t(), results: list(Noizu.OpenAI.Moderation.Result.t()) } def from_json(json) do %__MODULE__{ id: Map.get(json, :id), model: Map.get(json, :model), results: json[:results] |> Enum.map(&Noizu.OpenAI.Moderation.Result.from_json/1) } end end