{
  "knxUltimateAI": {
    "title": "KNX AI (Traffic Analyzer)",
    "sections": {
      "capture": "Capture",
      "analysis": "Analysis",
      "anomalies": "Anomalies",
      "llm": "LLM Assistant"
    },
    "properties": {
      "server": "Gateway",
      "name": "Name",
      "topic": "Topic",
      "notifywrite": "Capture GroupValue_Write",
      "notifyresponse": "Capture GroupValue_Response",
      "notifyreadrequest": "Capture GroupValue_Read",
      "analysisWindowSec": "Analysis window (seconds)",
      "historyWindowSec": "History window (seconds)",
      "maxEvents": "Max stored events",
      "emitIntervalSec": "Auto emit summary (seconds, 0=off)",
      "topN": "Top list size",
      "enablePattern": "Detect simple patterns (A -> B)",
      "patternMaxLagMs": "Pattern max lag (ms)",
      "patternMinCount": "Pattern min occurrences",
      "rateWindowSec": "Rate window (seconds)",
      "maxTelegramPerSecOverall": "Max overall telegrams/sec (0=off)",
      "maxTelegramPerSecPerGA": "Max telegrams/sec per GA (0=off)",
      "flapWindowSec": "Flap window (seconds)",
      "flapMaxChanges": "Max changes per GA in window (0=off)",
      "llmEnabled": "Enable LLM assistant",
      "llmProvider": "Provider",
      "llmBaseUrl": "Endpoint URL",
      "llmApiKey": "API key",
      "llmModel": "Model",
      "llmSystemPrompt": "System prompt",
      "llmTemperature": "Temperature",
      "llmMaxTokens": "Max tokens",
      "llmTimeoutMs": "Timeout (ms)",
      "llmMaxEventsInPrompt": "Recent events included",
      "llmIncludeRaw": "Include raw payload hex",
      "llmIncludeFlowContext": "Include Node-RED KNX node inventory",
      "llmMaxFlowNodesInPrompt": "Max flow nodes included",
      "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)",
      "llmDocsLanguage": "Docs language",
      "llmDocsMaxSnippets": "Max docs snippets",
      "llmDocsMaxChars": "Max docs chars"
    },
    "outputs": {
      "summary": "Summary/Stats",
      "anomalies": "Anomalies",
      "assistant": "AI Assistant"
    },
    "selectlists": {
      "llmProvider": {
        "openai_compat": "OpenAI-compatible (chat/completions)",
        "ollama": "Ollama (local, beta)"
      }
    },
    "buttons": {
      "refreshModels": "Refresh",
      "installOllamaModel": "2) Install it",
      "ollamaLibrary": "Model library",
      "downloadOllamaModel": "1) Download model"
    },
    "messages": {
      "loadingModels": "Loading models…",
      "loadedModels": "Models loaded",
      "ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
      "ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
      "installingOllamaModel": "Starting Ollama and installing model…",
      "installedOllamaModel": "Ollama model installed",
      "installOllamaModelFailed": "Failed to install Ollama model",
      "ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
      "ollamaStartedAuto": "Ollama server started automatically."
    },
    "placeholder": {
      "llmBaseUrl": "https://api.openai.com/v1/chat/completions (or your compatible endpoint)",
      "llmApiKey": "Paste API key (starts with sk-)",
      "llmModel": "e.g. gpt-4o-mini",
      "llmSystemPrompt": "Optional. Leave empty for default."
    },
    "sidebar": {
      "ui": {
        "refreshNodeList": "Refresh Node List",
        "refreshSummary": "Refresh Summary",
        "auto": "Auto",
        "sections": {
          "summary": "Summary",
          "anomalies": "Anomalies",
          "ask": "Ask"
        },
        "empty": {
          "noNodes": "No KNX AI nodes found.",
          "noAnomalies": "No anomalies."
        },
        "chat": {
          "placeholder": "Ask a question about KNX traffic…",
          "send": "Send",
          "pending": "Thinking…",
          "llmDisabled": "LLM disabled in node config",
          "emptyAnswer": "(empty answer)"
        },
        "status": {
          "ready": "Ready",
          "loadingNodes": "Loading nodes…",
          "loading": "Loading…",
          "asking": "Asking…"
        },
        "errors": {
          "loadNodes": "Failed to load nodes",
          "loadState": "Failed to load state",
          "askFailed": "Ask failed"
        }
      },
      "summary": {
        "noData": "No data available.",
        "header": {
          "gateway": "Gateway: {{gatewayName}}",
          "updated": "Updated: {{at}}"
        },
        "analysisWindowLine": "Analysis window: {{seconds}}s",
        "statsLine": "Telegrams: {{telegrams}} · Rate: {{rate}}/s · Echoed: {{echoed}} · Unknown DPT: {{unknownDpt}}",
        "topGAsTitle": "Top Group Address:",
        "eventsTitle": "Events:",
        "patternsTitle": "Patterns (recurring sequences):",
        "patternItem": "{{from}} → {{to}}  ({{count}} times within {{withinMs}}ms)"
      }
    }
  }
}
