PHPackages                             jvmtech/ai-toolkit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. jvmtech/ai-toolkit

ActiveNeos-package[Utility &amp; Helpers](/categories/utility)

jvmtech/ai-toolkit
==================

Foundation for easy AI integration in Neos CMS

2.0.3(6mo ago)47614[4 issues](https://github.com/jvm-tech/JvMTECH.AIToolkit/issues)[1 PRs](https://github.com/jvm-tech/JvMTECH.AIToolkit/pulls)MITJavaScript

Since Feb 27Pushed 6mo ago2 watchersCompare

[ Source](https://github.com/jvm-tech/JvMTECH.AIToolkit)[ Packagist](https://packagist.org/packages/jvmtech/ai-toolkit)[ RSS](/packages/jvmtech-ai-toolkit/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (5)Dependencies (5)Versions (9)Used By (0)

JvMTECH.AIToolkit Package for Neos CMS
======================================

[](#jvmtechaitoolkit-package-for-neos-cms)

[![Latest Stable Version](https://camo.githubusercontent.com/65b73a007a40abe25e2a674a9cde14894afbca3b19afb77ab88cc51e1e93e7de/68747470733a2f2f706f7365722e707567782e6f72672f6a766d746563682f61692d746f6f6c6b69742f762f737461626c65)](https://packagist.org/packages/jvmtech/ai-toolkit)[![License](https://camo.githubusercontent.com/cbc2e510438330adeae1a25061bc6115949b1604efc778a5d0ee18134e0e48c0/68747470733a2f2f706f7365722e707567782e6f72672f6a766d746563682f61692d746f6f6c6b69742f6c6963656e7365)](https://packagist.org/packages/jvmtech/ai-toolkit)

> Foundation for easy AI integration in Neos CMS Extensible and ready to go with SEO Meta-Description, Image Alt-Text generation Mixins and In-Place text translation

- Easy AI text generation configuration on properties in NodeType YAML files
- One-Click text translation in In-Place Editor
- Full control over prompts
- Easily extensible with custom AI model-handlers and -connectors
- Suitable for all properties with inspector editors of type TextFieldEditor and TextAreaEditor

SEO Text GenerationIn-Place Text Translation[![SEO Text Generation](Documentation/jvmtech-aitoolkit-seo-text-generation-square.gif)](Documentation/jvmtech-aitoolkit-seo-text-generation.webm)[![In-Place Text Translation](Documentation/jvmtech-aitoolkit-inplace-text-translation-square.gif)](Documentation/jvmtech-aitoolkit-inplace-text-translation.webm)Installation
------------

[](#installation)

```
composer require jvmtech/ai-toolkit

```

```
JvMTECH:
  AIToolkit:
    modelPresets:
      gemini:
        apiKey: 'my-gemini-api-key'
```

NodeType Configuration Contcept
-------------------------------

[](#nodetype-configuration-contcept)

- First we have to change to an AI ready Editor to be able to use the AI functionality.

    ```
    properties:
      summary:
        ui:
          inspector:
            editor: 'JvMTECH.AIToolkit/TextAreaEditor'
            editorOptions: [...]
    ```
- By choosing a "**Model Handler**" we define what kind of job has to be done and by choosing a "**Model Preset**" we define with which AI model we want to process it.

    ```
    modelHandler: 'textToText'
    modelPreset: 'gemini'
    ```
- By defining the "**Prompt Variables**" values we prepare the data which can be used by the AI model - in the "Prompt" but also directly in the request to the AI model.

    ```
    promptVariables:
      type: "${Neos.Node.labelForNode(documentNode)}"
      content: "${documentBody}"
    ```
- By writing the "**Prompt Template**" we give instructions to the AI model on what we want to achieve.

    ```
    promptTemplate: 'Create a short {type} summary of: {content}'
    ```

This way we have full flexibility and control over the AI model and the data we want to process.

Examples
--------

[](#examples)

### Playing with Meta-Description

[](#playing-with-meta-description)

```
# Use default configuration:
'Vendor:Page.Document':
  superTypes:
    'JvMTECH.AIToolkit:Mixin.SEO': true

# Or customize the AI model and prompt ("ADDITIONAL SPECIFICATIONS" are added to the default prompt):
'Vendor:Product.Document':
  superTypes:
    'JvMTECH.AIToolkit:Mixin.SEO': true
  properties:
    metaDescription:
      ui:
        inspector:
          editorOptions:
            promptTemplate: |
              # ROLE
              You are an expert SEO copywriter specializing in meta descriptions that drive clicks and improve search rankings.

              # TASK
              Create a compelling SEO meta description for the content provided below.

              # SPECIFICATIONS
              - Length: Maximum 160 characters (including spaces)
              - Style: Compelling, action-oriented, using active voice
              - Content: Must accurately represent the source material
              - Focus Keyphrase: Use "{node.properties.aiToolkitMetaFocusKeyphrase}" if available; otherwise use "{node.properties.title}"
              - Language: Write in {targetLanguage}

              # ADDITIONAL SPECIFICATIONS
              - Fun: Always use multiple Emojis

              # FORMAT REQUIREMENTS
              Deliver the meta description as plain text only.
              Do not include HTML tags, Markdown formatting, quotes, or explanatory notes.
              Provide only the final meta description text.

              # SOURCE CONTENT
              {content}
```

### Image Alt-Text generation

[](#image-alt-text-generation)

```
# Enable image alt-text generation
'Vendor:Image.Content':
  superTypes:
    'JvMTECH.AIToolkit:Mixin.ImageAlternativeText': true
    # We assume the image is in a property named "asset"

# Or do your own thing:
'Vendor:SpecialImage.Content':
  properties:
    # specialImage: ...
    specialAlternativeText:
      options:
        preset: 'image.alternativeText'
      ui:
        inspector:
          editor: 'JvMTECH.AIToolkit/TextAreaEditor'
          editorOptions:
            modelHandler: 'imageToText'
            modelPreset: 'openai-advanced'
            promptVariables:
              targetLanguage: "${Configuration.setting('Neos.ContentRepository.contentDimensions.language.presets.' + node.context.targetDimensions.language + '.label')}"
              # The "imageToText" model handler requires the prompt variable "asset" to attach the image to the AI model request.
              asset: "${transientValues.specialImage ? transientValues.specialImage : q(node).property('specialImage')}"
            promptTemplate: |
              You are creating content for an accessible website.
              Describe the content of the attached image in a {targetLanguage} short sentence.
```

### Disabling In-Place Translation

[](#disabling-in-place-translation)

```
JvMTECH:
  AIToolkit:
    Toolbar:
      translation: ~
```

Extensibility
-------------

[](#extensibility)

### Model Handlers

[](#model-handlers)

Model Handlers are responsible for the communication with the AI model. They allow you to manipulate the input and output of the AI model.

The package comes with the following handlers:

- TextToText
- ImageToText

#### Custom Model Handlers

[](#custom-model-handlers)

```
JvMTECH:
  AIToolkit:
    modelHandlers:

      customTextToText:
        className: 'Vendor\Name\ModelHandlers\CustomTextToTextModelHandler'
        # ... optional configuration
```

### Model Connectors

[](#model-connectors)

Model Connectors are responsible for the actual requests to the AI model. They allow you to manipulate the input and output of the AI model.

The package comes with the following connectors:

- OpenAI
- Gemini

#### Custom Model Connectors

[](#custom-model-connectors)

```
JvMTECH:
  AIToolkit:
    modelPresets:

      customAI:
        className: 'Vendor\Name\ModelConnectors\CustomAIModelConnector'
        # ... optional configuration
```

Tips &amp; Tricks
-----------------

[](#tips--tricks)

My Neos Backend is behind an additional Basic-Auth and I think this causes problems.You are right. In this situation you need to configure the credentials that AI Toolkit is able to load document content. ```
JvMTECH:
  AIToolkit:
    backendRequest:
      auth: ['username', 'password', ]

```

I get a maximum context length error message.You have two main options to resolve the maximum context length error:

a) Use a model with a larger context window - Switch to a model that can handle more tokens/text at once. Different models have different context limits, so upgrading to one with a higher capacity will allow you to process longer inputs.

b) Manually reduce the variables in your prompt - Trim down your input by removing unnecessary text, shortening examples, or breaking your task into smaller chunks that fit within the current model's limits.

The first option gives you more capacity, while the second requires optimizing what you're sending to fit the constraints.

Background
----------

[](#background)

The Neos AI-Toolkit package is completely free and can be tailored to your needs.

We also rely on this package to build our commercial product [Neos AI-Toolbox](https://jvmtech.ch/neos-ai-toolbox) by Jung von Matt TECH.

**Neos AI-Toolbox:** A suite of AI-powered tools for Neos websites that enhances SEO, accessibility, and content management. The toolbox includes SEO AI (creates meta descriptions and keywords), Translation AI (translates content), Corporate Language AI (ensures brand consistency), Accessibility AI (improves website accessibility) and Web Readability AI (optimizes text readability). Additionally, automated AI agents handle SEO optimization, translation, and CRM interactions. Available through flexible subscription models with credit-based usage, it significantly reduces manual work while improving website performance and user experience.

---

by [jvmtech.ch](https://jvmtech.ch)

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance46

Moderate activity, may be stable

Popularity25

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 76.9% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~40 days

Recently: every ~6 days

Total

8

Last Release

202d ago

Major Versions

1.1.0 → 2.0.02025-06-13

1.1.1 → 2.0.12025-11-11

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/56817323?v=4)[jvmtech](/maintainers/jvmtech)[@Jvmtech](https://github.com/Jvmtech)

---

Top Contributors

[![sbruggmann](https://avatars.githubusercontent.com/u/1162368?v=4)](https://github.com/sbruggmann "sbruggmann (10 commits)")[![c4ll-m3-j4ck](https://avatars.githubusercontent.com/u/7119811?v=4)](https://github.com/c4ll-m3-j4ck "c4ll-m3-j4ck (2 commits)")[![dMuensPeters](https://avatars.githubusercontent.com/u/153167236?v=4)](https://github.com/dMuensPeters "dMuensPeters (1 commits)")

### Embed Badge

![Health badge](/badges/jvmtech-ai-toolkit/health.svg)

```
[![Health](https://phpackages.com/badges/jvmtech-ai-toolkit/health.svg)](https://phpackages.com/packages/jvmtech-ai-toolkit)
```

###  Alternatives

[maestroerror/laragent

Power of AI Agents in your Laravel project

639142.5k](/packages/maestroerror-laragent)[neos/neos-base-distribution

Neos Base Distribution

4265.4k](/packages/neos-neos-base-distribution)[verbb/formie

The most user-friendly forms plugin for Craft.

100387.6k57](/packages/verbb-formie)[techdivision/ckstyles

Neos package which enables you adding your custom style classes for the CkEditor with a simple Yaml configuration

21175.8k](/packages/techdivision-ckstyles)[sitegeist/taxonomy

Manage vocabularies and taxonomies as separate node-hierarchy.

1593.1k1](/packages/sitegeist-taxonomy)[shel/neos-colorpicker

A plugin for Neos CMS which provides a colorpicker editor

14101.5k6](/packages/shel-neos-colorpicker)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
