| defmodule PerplexityMacro.Adapters.Mathematica do | |
| @moduledoc "Mathematica/WolframAlpha research via API or local WolframEngine." | |
| def run(query, opts \\ []) do | |
| appid = System.get_env("WOLFRAM_APPID") || Keyword.get(opts, :appid, "") | |
| if appid == "" do | |
| # Local fallback: return symbolic query as evidence (no external call) | |
| {:ok, [%{title: "Mathematica (local)", url: "mathematica://#{URI.encode(query)}", content: "Symbolic: #{query}", score: 0.9, source_hash: :erlang.phash2(query,0xFFFFFFFF)}]} | |
| else | |
| url = "https://api.wolframalpha.com/v1/query" | |
| case Req.get(url, params: [appid: appid, input: query, format: "plaintext"]) do | |
| {:ok, %{status: 200, body: body}} -> {:ok, [%{title: "WolframAlpha: #{query}", url: url, content: inspect(body) |> String.slice(0,4000), score: 1.0, source_hash: :erlang.phash2(query,0xFFFFFFFF)}]} | |
| e -> e | |
| end | |
| end | |
| end | |
| end | |