New optional input api: ollama|openai|anthropic (default ollama — existing flows unchanged). - openai: OpenAI Chat Completions format (/v1/chat/completions), Bearer auth — targets vLLM and compatible self-hosted servers. - anthropic: Messages API (/v1/messages), x-api-key + anthropic-version headers, top-level system field, mandatory max_tokens (fixed 4096). - Audit outputs unchanged: model_endpoint/model_name always set; model_digest stays Ollama-only (no digest API on openai/anthropic, field is left empty rather than fabricated). - api_key is only ever placed in auth headers; never in outputs, errors, or audit events (verified against the event log). - No streaming, no tool calls. Bump module + capability version to 0.2.0. Wire-format unit tests for request serialization and response parsing against fixed JSON fixtures; live smoke green on the ollama path and on the openai path against an OpenAI-compatible local endpoint. Signed-off-by: flemming-it <sf@flemming.it>
117 lines
4.1 KiB
YAML
117 lines
4.1 KiB
YAML
schema_version: 3
|
|
provider: chain
|
|
name: llm-chat
|
|
version: 0.2.0
|
|
|
|
# Capability provided by this module.
|
|
provides:
|
|
- capability: llm.chat
|
|
version: 0.2.0
|
|
|
|
# Declared inputs in verbose v3 form. Studio renders the
|
|
# description in the active locale as a tooltip on each
|
|
# port; the editor falls back to the English description
|
|
# when no peer is configured.
|
|
inputs:
|
|
prompt:
|
|
type: text
|
|
description:
|
|
en: The user-facing prompt text the model should respond to.
|
|
de: Der vom Modell zu beantwortende Prompt-Text.
|
|
endpoint:
|
|
type: text
|
|
description:
|
|
en: |
|
|
Chat endpoint URL matching the selected api:
|
|
ollama "http://localhost:11434/api/chat",
|
|
openai "https://.../v1/chat/completions" (vLLM etc.),
|
|
anthropic "https://api.anthropic.com/v1/messages".
|
|
de: |
|
|
Chat-Endpunkt-URL passend zur gewählten api:
|
|
ollama "http://localhost:11434/api/chat",
|
|
openai "https://.../v1/chat/completions" (vLLM u. a.),
|
|
anthropic "https://api.anthropic.com/v1/messages".
|
|
api:
|
|
type: text
|
|
description:
|
|
en: |
|
|
Optional wire format: "ollama" (default), "openai"
|
|
(Chat Completions — OpenAI, vLLM, compatible servers),
|
|
or "anthropic" (Messages API). Empty = ollama.
|
|
de: |
|
|
Optionales Wire-Format: "ollama" (Default), "openai"
|
|
(Chat Completions — OpenAI, vLLM, kompatible Server)
|
|
oder "anthropic" (Messages API). Leer = ollama.
|
|
model:
|
|
type: text
|
|
description:
|
|
en: Model identifier as registered with the endpoint, e.g. "qwen2.5:14b" or "llama3.1:8b".
|
|
de: Modell-Identifier wie beim Endpunkt registriert, z. B. "qwen2.5:14b" oder "llama3.1:8b".
|
|
api_key:
|
|
type: text
|
|
description:
|
|
en: |
|
|
Optional API key. Sent as "Authorization: Bearer" for
|
|
ollama/openai and as "x-api-key" for anthropic. Empty
|
|
string means no auth header is sent. Never appears in
|
|
outputs, logs, or audit events.
|
|
de: |
|
|
Optionaler API-Key. Bei ollama/openai als
|
|
"Authorization: Bearer", bei anthropic als "x-api-key"
|
|
gesendet. Leer = kein Auth-Header. Erscheint nie in
|
|
Ausgaben, Logs oder Audit-Events.
|
|
system_prompt:
|
|
type: text
|
|
description:
|
|
en: |
|
|
Optional system prompt. Empty string omits the system
|
|
message and lets the model use its built-in default.
|
|
de: |
|
|
Optionaler System-Prompt. Leer = das Modell verwendet
|
|
seinen eingebauten Default.
|
|
|
|
# Outputs produced.
|
|
outputs:
|
|
response:
|
|
type: text
|
|
description:
|
|
en: The assistant's plain-text reply.
|
|
de: Die Klartext-Antwort des Modells.
|
|
model_endpoint:
|
|
type: text
|
|
description:
|
|
en: The endpoint the response was generated against. Used for audit correlation.
|
|
de: Der Endpunkt, gegen den die Antwort erzeugt wurde — für Audit-Korrelation.
|
|
model_name:
|
|
type: text
|
|
description:
|
|
en: The model identifier as supplied to the LLM API.
|
|
de: Der an die LLM-API übergebene Modell-Identifier.
|
|
model_digest:
|
|
type: text
|
|
description:
|
|
en: |
|
|
SHA-256 digest of the served Ollama model, when reachable.
|
|
Empty for non-Ollama endpoints (OpenAI / Anthropic do not
|
|
expose a digest API). Together with model_endpoint and
|
|
model_name this answers the audit question "which exact
|
|
model produced this response?"
|
|
de: |
|
|
SHA-256-Digest des bedienten Ollama-Modells, wenn erreichbar.
|
|
Leer für Nicht-Ollama-Endpunkte (OpenAI / Anthropic stellen
|
|
keine Digest-API bereit). Zusammen mit model_endpoint und
|
|
model_name beantwortet das die Audit-Frage "welches genaue
|
|
Modell hat diese Antwort erzeugt?"
|
|
|
|
# Permissions required.
|
|
#
|
|
# The module makes outbound HTTP to the configured endpoint.
|
|
# Default declarations cover loopback (Ollama) and the common
|
|
# cloud providers. Operators with different endpoints fork
|
|
# module.yaml in Phase 0.5; operator-config-driven permission
|
|
# overrides arrive in Phase 1+.
|
|
permissions:
|
|
- "net: localhost"
|
|
- "net: 127.0.0.1"
|
|
- "net: api.openai.com"
|
|
- "net: api.anthropic.com"
|