attune.theconsultant.chat

AI chat,
embedded in Octave Attune EAM.

A widget-only assistant that mounts inside the EAM page and calls EAM REST web services directly. No middle-tier, no proxy — the chat runs in the same browser session as the user, scoped to your tenant's auth and screen catalog.

Capabilities

Talk to EAM in plain English.

The widget speaks the EAM REST surface natively. Ask a question, paste a raw call, or pick a saved prompt — same backend.

Look up records

"What's the status of work order 10000?" → GET /workorders/10000#ORG1 → status, assignee, due date.

Run grid queries

"Show me open alerts" → POST /grids with the right GRID_NAME and a paged result set.

Pull child tabs in one shot

"What parts are on WO-10000?" → GET /workorders/10000#ORG1/parts, summarised.

Raw REST passthrough

Type GET /assets/<ASSET-CODE>#* or POST /grids {…} and see the response inline.

🛡

Catalog-scoped

Ships with an endpoint catalog; the LLM is told never to invent paths outside it.

🔑

Auto context

Tenant / role / organization headers stamped on every call from the widget config.

Install · Octave Attune EAM 12.x

One Extensibility Framework record. Every screen.

EAM's UI is a single-page app — once mounted on document.body the widget follows the user across every screen they navigate to. Install on the Start Center; you're done.

Find your Start Center mnemonic

Administration → Security → Roles → open the default role → note First Screen. Common values: BSHOM (EAM 12.x), OSCHOM, OSOBJA.

Generate an API key for the widget

Administration → Integration → API Keys → New. Pick (or create) a service-account user and a role whose Interface Permissions tab grants Query / Insert / Update / Delete for every web service the widget should reach (work orders, assets, parts, grids, etc. — at minimum the entities listed in the endpoint catalog). Save and copy the generated key; EAM only shows the full value once.

The same screen returns a license / customer code that some tenants embed in the API header. Note it down too — you'll paste it into TCH_LKEY below.

Create the install parameters on BSINST

Administration → Install Parameters (mnemonic BSINST) → New Record for each row below. The launcher reads these at boot via GRIDDATA and hands them to the widget — no source-code edit needed.

Install Parameter Description Value to paste
TCH_AKEY Attune chat API key The API key generated in the previous step. Sent to the EAM REST API as the X-API-Key header on every call the widget makes.
TCH_LKEY Attune chat license / customer code The license / customer code from the API Keys screen. Reserved for licensing checks; safe to paste a placeholder if your tenant doesn't issue one.
APPURL Application server URL (usually already set on every tenant) Standard EAM parameter, e.g. https://b-cafmeam.neom.com/web/base/logindisp?tenant=NEOMUAT. The launcher parses ?tenant=… out of it. If yours doesn't carry the tenant in the query string, edit extractTenantFromUrl in the launcher source or add a dedicated CHATTER_TENANT parameter.
TCHAURL (optional) BYO LLM chat-completions root OpenAI-compatible base URL of your own LLM endpoint, e.g. https://api.openai.com/v1 or https://api.groq.com/openai/v1. Only used when all three TCHA* rows are set; otherwise the relay uses its admin-configured provider chain.
TCHAKEY (optional) BYO LLM bearer token / API key Sent as Authorization: Bearer … to TCHAURL. Read in the browser and forwarded to the relay on every chat turn — it's never persisted server-side, but it is visible in the page source and the browser network tab. Rotate it if you suspect leakage.
TCHAMDL (optional) BYO LLM model id The model name the endpoint expects, e.g. gpt-4o-mini, llama-3.1-70b-versatile, claude-sonnet-4-6-via-proxy. Sent verbatim in the model field of the chat-completions request.

Each row needs its Install Parameter code (the values in the first column above) and the value pasted into the Value column. Description is free-form — the launcher only matches on the code. Re-pasting the same code overwrites the prior value.

Create the framework record

Administration → Screen Configuration → Extensible Framework → New Record.

Name
ATTUNE_CHAT
Screen
your Start Center mnemonic
Active
checked

Paste this into Source code

No edits required. The launcher reads tenant, the API key, and the license key from the install parameters you created in step 3 — just paste, save, and log back in. Source is also at /extensions/eam-chatter.js.

v… last updated
Loading /extensions/eam-chatter.js…

Save, log out, log back in

The chat launcher appears in the lower-right of every screen.

It's installed but the chat didn't appear — what now?

Open DevTools Console. The launcher logs [EAMChatter] warnings when an install-parameter read fails, and ExtJS reports class-resolution errors directly. Common signatures:

What you see in Console / NetworkWhat it means
No requests for chatter.js / chatter.css at allThe framework record didn't fire on this screen. Try a different screen mnemonic — BSHOM, OSCHOM, or OSOBJA.
chatter.js 200s but no widgetThe __attuneChatLoaded guard already fired in this session. Hard-reload (Ctrl-Shift-R) to clear.
chatter.js blocked / refusedOpen Network — most likely a Content-Security-Policy on the EAM page restricting external scripts.
Errors mentioning AbstractExtensibilityFramework or Ext.defineAn older copy of the launcher is still pasted in. Replace it with the snippet above — this one has no Ext.define, no parent class, no 404.
[EAMChatter] install param … read failedThe launcher couldn't read TCH_AKEY / TCH_LKEY off BSINST. Confirm both rows exist in Administration → Install Parameters and that the signed-in user's role allows reading /installationcodes.
REST calls return 401 / 403The X-API-Key the widget is sending isn't valid for the role attached to the API Key. Re-issue the key under Administration → Integration → API Keys and paste the new value into TCH_AKEY.
[EAMChatter] GRIDDATA read failedThe INSTALL_PARAM_GRID values don't match this tenant's Install Parameter screen. Open DevTools → Network on that screen and copy GRID_NAME + the column aliases from the live request.
How it stays safe

The chat runs in your browser, not on our server.

We host only the widget code. When the page loads, your browser fetches it from us — and from that point on the widget talks directly to your own EAM tenant. We never see your records, credentials, or queries.

Runs in your sessionThe widget uses your existing EAM login; nothing new to provision.
No data through usWe can't see what you ask, what comes back, or who's asking.
Scoped to your tenantThe widget can only reach the screens and APIs your role already permits.
Always currentUpdates are delivered automatically — the next page load picks up the latest version.
Enterprise support · installation, custom catalog, on-prem hosting hello@theconsultant.chat