Skip to content

feat(components): add mittwald AI Hosting chat and embedding provider#6646

Open
twiesing wants to merge 2 commits into
FlowiseAI:mainfrom
twiesing:feat/mittwald-ai-hosting-provider
Open

feat(components): add mittwald AI Hosting chat and embedding provider#6646
twiesing wants to merge 2 commits into
FlowiseAI:mainfrom
twiesing:feat/mittwald-ai-hosting-provider

Conversation

@twiesing

Copy link
Copy Markdown

Summary

Adds an OpenAI-compatible provider for mittwald AI Hosting:

  • ChatMittwald — chat model node
  • MittwaldEmbedding — embedding node
  • mittwaldAIHostingApi — shared credential (API key, type: 'password')
  • Model lists added to models.json for both chat and embedding

Details

  • The API is OpenAI-compatible (/v1/chat/completions, /v1/embeddings, /v1/models), so both nodes wrap ChatOpenAI / OpenAIEmbeddings from @langchain/openai, following the existing Cerebras/Sambanova pattern.
  • Models are loaded via the standard models.json mechanism (getModels), consistent with the other providers rather than a live API fetch.
  • Base URL defaults to https://llm.aihosting.mittwald.de/v1 and can be overridden per node via the Base Path field.
  • checkDenyList is applied to the base URL in both nodes, matching the SSRF hardening used by ChatOpenAICustom / Ollama / LocalAI.

Testing

  • pnpm --filter flowise-components build (tsc) passes
  • eslint --max-warnings 0 clean on the new files
  • prettier --check clean
  • Endpoints verified live against the AI Hosting API (models list, chat completion, embedding with 4096 dimensions)

Tobias Wiesing added 2 commits July 20, 2026 22:42
Add an OpenAI-compatible provider for mittwald AI Hosting:

- ChatMittwald chat model node
- MittwaldEmbedding embedding node
- shared mittwaldAIHostingApi credential (API key)
- model lists in models.json (chat + embedding)

Models are loaded via the standard models.json mechanism, matching the
other providers. The base URL defaults to the public AI Hosting endpoint
and can be overridden per node.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces integration with mittwald AI Hosting, adding a new credential, a chat model node, an embedding node, and updating the models configuration. The review feedback suggests correcting a potential typo in a model name ('Ministral' vs 'Mistral') and adding validation when parsing the temperature input to prevent assigning NaN to the model configuration.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +2334 to +2335
"label": "Ministral-3-14B-Instruct-2512",
"name": "Ministral-3-14B-Instruct-2512"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

There seems to be a typo in the model name. Ministral should likely be Mistral. Using an incorrect model name will cause API requests to fail.

Suggested change
"label": "Ministral-3-14B-Instruct-2512",
"name": "Ministral-3-14B-Instruct-2512"
"label": "Mistral-3-14B-Instruct-2512",
"name": "Mistral-3-14B-Instruct-2512"

Comment on lines +149 to +154
const obj: ChatOpenAIFields = {
temperature: parseFloat(temperature),
model: modelName,
apiKey: mittwaldApiKey,
streaming: streaming ?? true
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The temperature is initialized directly with parseFloat. If the temperature input is empty or invalid, this will result in NaN, which can cause runtime errors. It's safer to parse and validate the value before assigning it to the ChatOpenAI object, only setting it if it's a valid number.

Suggested change
const obj: ChatOpenAIFields = {
temperature: parseFloat(temperature),
model: modelName,
apiKey: mittwaldApiKey,
streaming: streaming ?? true
}
const obj: ChatOpenAIFields = {
model: modelName,
apiKey: mittwaldApiKey,
streaming: streaming ?? true
};
const temp = parseFloat(temperature);
if (!isNaN(temp)) obj.temperature = temp;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant