{
  "id": "com.schuettken.sac.aiantwort",
  "version": "1.0.0",
  "name": "AI Antwort",
  "description": "Schickt einen Prompt an den LLM-Proxy und zeigt die Antwort. Beispiel fuer LLM-Aufrufe aus einem Custom Widget.",
  "newInstancePrefix": "AiAntwort",
  "vendor": "Schuettken",
  "eula": "",
  "license": "",
  "icon": "https://sac-web.schuettken.net/widgets/ai-antwort/icon.png",
  "webcomponents": [
    {
      "kind": "main",
      "tag": "com-schuettken-sac-aiantwort",
      "url": "https://sac-web.schuettken.net/widgets/ai-antwort/main.js",
      "integrity": "",
      "ignoreIntegrity": true
    },
    {
      "kind": "builder",
      "tag": "com-schuettken-sac-aiantwort-builder",
      "url": "https://sac-web.schuettken.net/widgets/ai-antwort/builder.js",
      "integrity": "",
      "ignoreIntegrity": true
    }
  ],
  "properties": {
    "width": { "type": "integer", "default": 460 },
    "height": { "type": "integer", "default": 300 },
    "endpoint": {
      "type": "string",
      "description": "URL des LLM-Proxys",
      "default": "https://sac-web.schuettken.net/api/llm"
    },
    "demoKey": {
      "type": "string",
      "description": "Demo-Key. Bewusst leer vorbelegt - im Builder-Panel der Story eintragen, damit er nicht im ausgelieferten JS steht.",
      "default": ""
    },
    "prompt": {
      "type": "string",
      "description": "Prompt, der an das Modell geht",
      "default": "Fasse in einem Satz zusammen, warum Deckungsbeitragsrechnung im Vertrieb nuetzlich ist."
    },
    "quality": {
      "type": "string",
      "description": "fast (guenstig) oder good (bessere Qualitaet)",
      "default": "fast"
    },
    "answer": {
      "type": "string",
      "description": "Zuletzt erhaltene Antwort",
      "default": ""
    }
  },
  "methods": {
    "ask": {
      "description": "Schickt den Prompt los. Das Ergebnis kommt ueber das Event onAnswer.",
      "parameters": [
        {
          "name": "prompt",
          "type": "string",
          "description": "Optionaler Prompt. Leer lassen, um die Property zu verwenden."
        }
      ]
    },
    "getAnswer": {
      "returnType": "string",
      "description": "Liefert die zuletzt erhaltene Antwort"
    }
  },
  "events": {
    "onAnswer": { "description": "Antwort ist eingetroffen" },
    "onError": { "description": "Aufruf ist fehlgeschlagen" }
  }
}
