diff --git a/README.md b/README.md index 16ecfa5..f535bd3 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # n8n-nodes-requesty -An n8n community node for using [Requesty](https://requesty.ai)-hosted chat models in your n8n workflows. +An n8n community node for using [Requesty](https://requesty.ai) hosted chat models in your n8n workflows. -Requesty is a unified AI gateway providing access to 300+ models from OpenAI, Anthropic, Google, Meta, Mistral, and more — all through a single OpenAI-compatible API with intelligent routing, automatic fallbacks, and cost optimization. +Requesty is a unified AI gateway providing access to 300+ models from OpenAI, Anthropic, Google, Meta, Mistral, and more, all through a single OpenAI compatible API with intelligent routing, automatic fallbacks, and cost optimization. -[Installation](#installation) | [Credentials](#credentials) | [Usage](#usage) | [Resources](#resources) +[Installation](#installation) · [Credentials](#credentials) · [Usage](#usage) · [Resources](#resources) ## Installation @@ -13,7 +13,7 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes In your n8n instance, go to **Settings > Community Nodes** and install: ``` -@requestyai/n8n-nodes-requesty +@requesty/n8n-nodes-requesty ``` ## Credentials @@ -24,34 +24,35 @@ In your n8n instance, go to **Settings > Community Nodes** and install: ## Usage -The **Requesty Chat Model** node connects to any of the 300+ models available through Requesty's unified gateway. Use it anywhere n8n accepts a chat model — e.g., the AI Agent node, Basic LLM Chain, or any AI workflow. +The **Requesty Chat Model** node connects to any of the 300+ models available through Requesty's unified gateway. Use it anywhere n8n accepts a chat model, such as the AI Agent node, Basic LLM Chain, or any AI workflow. -Once your API key is saved, the **Model** dropdown auto-populates with all available models. You can also set it to a model ID directly using an expression (e.g., `anthropic/claude-sonnet-4-20250514`, `openai/gpt-4o`). +Once your API key is saved, the **Model** dropdown auto populates with all available models. You can also set it to a model ID directly using an expression (for example `anthropic/claude-sonnet-4-20250514` or `openai/gpt-4o`). ### Configuration Options | Option | Default | Description | |--------|---------|-------------| -| Base URL | _(gateway)_ | Override the gateway URL for self-hosted Requesty deployments | -| Enable Web Search | off | Give the model a native web search tool for up-to-date information | -| Web Search Context Size | medium | How much context the web search retrieves per query | -| Frequency Penalty | 0 | Penalizes token repetition (-2 to 2) | -| Maximum Tokens | -1 | Max tokens to generate (-1 for no limit) | -| Presence Penalty | 0 | Penalizes already-seen tokens (-2 to 2) | -| Reasoning Effort | medium | Low/medium/high reasoning for reasoning-capable models | | Response Format | Text | Text, JSON Object, or JSON Schema (strict structured output) | -| Sampling Temperature | 0.7 | Controls randomness (0 = deterministic, 2 = very random) | +| JSON Schema | (example) | The schema the response must match when Response Format is JSON Schema | +| Reasoning Effort | Default | Reasoning level (low, medium, high) for reasoning capable models | +| Base URL | (gateway) | Override the gateway URL for self hosted Requesty deployments | +| Enable Web Search | off | Give the model a native web search tool for up to date information | +| Web Search Context Size | medium | How much context the web search retrieves per query | +| Sampling Temperature | 0.7 | Controls randomness (0 is deterministic, 2 is very random) | +| Maximum Tokens | unlimited | Maximum number of tokens to generate | | Top P | 1 | Nucleus sampling probability mass | +| Frequency Penalty | 0 | Penalizes token repetition | +| Presence Penalty | 0 | Penalizes already seen tokens | ### Key Features - **300+ Models**: Access models from OpenAI, Anthropic, Google, Meta, Mistral, Cohere, and more - **Responses API**: Built on the Responses API, unlocking richer capabilities than plain chat completions -- **Structured Output**: Enforce a strict JSON Schema server-side (real structured output, not prompt-engineered) +- **Structured Output**: Enforce a strict JSON Schema server side (real structured output, not prompt engineered) - **Native Web Search**: Let the model search the web for current information -- **Reasoning Control**: Tune reasoning effort for reasoning-capable models +- **Reasoning Control**: Tune reasoning effort for reasoning capable models - **Intelligent Routing**: Automatic fallbacks and load balancing across providers -- **Self-Hosted Friendly**: Point the node at your own Requesty deployment via the Base URL option +- **Self Hosted Friendly**: Point the node at your own Requesty deployment via the Base URL option ## Resources @@ -62,28 +63,23 @@ Once your API key is saved, the **Model** dropdown auto-populates with all avail ## Development ```bash -# Install dependencies -npm install - -# Build the node -npm run build - -# Run in development mode (starts n8n with hot reload) -npm run dev - -# Lint -npm run lint +npm install # install dependencies +npm run build # build the node +npm run dev # run n8n locally with the node and hot reload +npm run lint # lint +npm test # run unit tests ``` ## Publishing -This package uses GitHub Actions with npm provenance for publishing. To release: +Releases are published to npm automatically by GitHub Actions with npm provenance, using OIDC trusted publishing (no token required). -```bash -npm run release -``` +To release a new version: + +1. Bump the version in `package.json` +2. Create a GitHub Release for the new version -This will lint, build, prompt for a version bump, commit, tag, and push — triggering the publish workflow. +The publish workflow then lints, builds, tests, and publishes the package. ## License diff --git a/package.json b/package.json index 3b9e4df..a8cf86d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@requestyai/n8n-nodes-requesty", - "version": "1.0.0", + "name": "@requesty/n8n-nodes-requesty", + "version": "1.0.1", "description": "n8n community node for Requesty: access 300+ AI models through one unified gateway with structured output, web search and reasoning.", "license": "MIT", "homepage": "https://requesty.ai", diff --git a/test-workflow-chain.json b/test-workflow-chain.json index 4831d49..05e3843 100644 --- a/test-workflow-chain.json +++ b/test-workflow-chain.json @@ -28,7 +28,7 @@ "parameters": { "model": "openai-responses/gpt-5.4", "options": {} }, "id": "cccccccc-0003-0003-0003-000000000003", "name": "Requesty (GPT-5.4)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [120, 420] }, @@ -51,7 +51,7 @@ "parameters": { "model": "vertex/gemini-3.5-flash", "options": {} }, "id": "eeeeeeee-0005-0005-0005-000000000005", "name": "Requesty (Gemini 3.5 Flash)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [560, 420] }, @@ -74,7 +74,7 @@ "parameters": { "model": "anthropic/claude-opus-4-7", "options": {} }, "id": "11110007-0007-0007-0007-000000000007", "name": "Requesty (Claude Opus 4.7)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [1000, 420] } diff --git a/test-workflow-full.json b/test-workflow-full.json index 7a7c1e2..550f6c2 100644 --- a/test-workflow-full.json +++ b/test-workflow-full.json @@ -25,7 +25,7 @@ "parameters": { "model": "openai/gpt-4o-mini", "options": {} }, "id": "cccccccc-0003-0003-0003-000000000003", "name": "Requesty (chat)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [220, 380] }, @@ -48,7 +48,7 @@ "parameters": { "model": "openai/gpt-4o-mini", "options": {} }, "id": "eeeeeeee-0005-0005-0005-000000000005", "name": "Requesty (agent)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [560, 400] }, @@ -82,7 +82,7 @@ }, "id": "11110008-0008-0008-0008-000000000008", "name": "Requesty (structured)", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [1000, 400] } diff --git a/test-workflow.json b/test-workflow.json index 5a0c3a3..dca25fe 100644 --- a/test-workflow.json +++ b/test-workflow.json @@ -37,7 +37,7 @@ }, "id": "33333333-3333-3333-3333-333333333333", "name": "Requesty Chat Model", - "type": "@requestyai/n8n-nodes-requesty.lmChatRequesty", + "type": "@requesty/n8n-nodes-requesty.lmChatRequesty", "typeVersion": 1, "position": [ 520,