Nextcloud Talk Translation Always Tries to Use gpt-4.1-mini

Nextcloud Hub 25 Autumn (32.0.3)

I am running a local LLM via vLLM. Nextcloud Assistant is working with it using LocalAI. The configuration in Nextcloud, via the OpenAI API, recognized the existing LLM model without issues. The correct LLM model is selected under /settings/admin/ai. Nevertheless, the translation function integrated into Nextcloud Talk keeps using gpt-4.1-mini instead of the configured LLM model.

What could be the cause? Is there another configuration option besides under /settings/admin/ai to select the LLM model for Talk translation?

Error log:

{
    "reqId": "bQBkx3OuoH7yONy7JLx5",
    "level": 2,
    "time": "2026-01-11T12:47:45+00:00",
    "remoteAddr": "127.0.0.1",
    "user": "xxx",
    "app": "no app in context",
    "method": "POST",
    "url": "/ocs/v2.php/translation/translate",
    "message": "Failed to translate from en to de_DE using provider LocalAI",
    "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
    "version": "32.0.3.2",
    "exception": {
        "Exception": "RuntimeException",
        "Message": "Failed translate from English (US) to Deutsch (Förmlich: Sie)",
        "Code": 0,
        "Trace": [
            {
                "file": "/var/www/html/lib/private/Translation/TranslationManager.php",
                "line": 106,
                "function": "translate",
                "class": "OCA\\OpenAi\\OldProcessing\\Translation\\TranslationProvider",
                "type": "->",
                "args": [
                    "English (US)",
                    "Deutsch (Förmlich: Sie)",
                    "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming"
                ]
            },
            {
                "file": "/var/www/html/core/Controller/TranslationApiController.php",
                "line": 74,
                "function": "translate",
                "class": "OC\\Translation\\TranslationManager",
                "type": "->",
                "args": [
                    "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming",
                    "en",
                    "de_DE"
                ]
            },
            {
                "file": "/var/www/html/lib/private/AppFramework/Http/Dispatcher.php",
                "line": 204,
                "function": "translate",
                "class": "OC\\Core\\Controller\\TranslationApiController",
                "type": "->",
                "args": [
                    "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming",
                    "en",
                    "de_DE"
                ]
            },
            {
                "file": "/var/www/html/lib/private/AppFramework/Http/Dispatcher.php",
                "line": 118,
                "function": "executeController",
                "class": "OC\\AppFramework\\Http\\Dispatcher",
                "type": "->",
                "args": [
                    {
                        "__class__": "OC\\Core\\Controller\\TranslationApiController"
                    },
                    "translate"
                ]
            },
            {
                "file": "/var/www/html/lib/private/AppFramework/App.php",
                "line": 153,
                "function": "dispatch",
                "class": "OC\\AppFramework\\Http\\Dispatcher",
                "type": "->",
                "args": [
                    {
                        "__class__": "OC\\Core\\Controller\\TranslationApiController"
                    },
                    "translate"
                ]
            },
            {
                "file": "/var/www/html/lib/private/Route/Router.php",
                "line": 321,
                "function": "main",
                "class": "OC\\AppFramework\\App",
                "type": "::",
                "args": [
                    "OC\\Core\\Controller\\TranslationApiController",
                    "translate",
                    {
                        "__class__": "OC\\AppFramework\\DependencyInjection\\DIContainer"
                    },
                    {
                        "_route": "ocs.core.translationapi.translate"
                    }
                ]
            },
            {
                "file": "/var/www/html/ocs/v1.php",
                "line": 61,
                "function": "match",
                "class": "OC\\Route\\Router",
                "type": "->",
                "args": [
                    "/ocsapp/translation/translate"
                ]
            },
            {
                "file": "/var/www/html/ocs/v2.php",
                "line": 8,
                "args": [
                    "/var/www/html/ocs/v1.php"
                ],
                "function": "require_once"
            }
        ],
        "File": "/var/www/html/custom_apps/integration_openai/lib/OldProcessing/Translation/TranslationProvider.php",
        "Line": 135,
        "Previous": {
            "Exception": "Exception",
            "Message": "Fehler bei der API-Anfrage:The model `gpt-4.1-mini` does not exist.",
            "Code": 404,
            "Trace": [
                {
                    "file": "/var/www/html/custom_apps/integration_openai/lib/Service/OpenAiAPIService.php",
                    "line": 622,
                    "function": "request",
                    "class": "OCA\\OpenAi\\Service\\OpenAiAPIService",
                    "type": "->",
                    "args": [
                        "*** sensitive parameters replaced ***",
                        "chat/completions",
                        {
                            "model": "*** sensitive parameters replaced ***",
                            "messages": [
                                {
                                    "role": "user",
                                    "content": "*** sensitive parameters replaced ***"
                                }
                            ],
                            "n": "*** sensitive parameters replaced ***",
                            "max_tokens": "*** sensitive parameters replaced ***"
                        },
                        "POST"
                    ]
                },
                {
                    "file": "/var/www/html/custom_apps/integration_openai/lib/OldProcessing/Translation/TranslationProvider.php",
                    "line": 124,
                    "function": "createChatCompletion",
                    "class": "OCA\\OpenAi\\Service\\OpenAiAPIService",
                    "type": "->",
                    "args": [
                        "*** sensitive parameters replaced ***"
                    ]
                },
                {
                    "file": "/var/www/html/lib/private/Translation/TranslationManager.php",
                    "line": 106,
                    "function": "translate",
                    "class": "OCA\\OpenAi\\OldProcessing\\Translation\\TranslationProvider",
                    "type": "->",
                    "args": [
                        "English (US)",
                        "Deutsch (Förmlich: Sie)",
                        "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming"
                    ]
                },
                {
                    "file": "/var/www/html/core/Controller/TranslationApiController.php",
                    "line": 74,
                    "function": "translate",
                    "class": "OC\\Translation\\TranslationManager",
                    "type": "->",
                    "args": [
                        "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming",
                        "en",
                        "de_DE"
                    ]
                },
                {
                    "file": "/var/www/html/lib/private/AppFramework/Http/Dispatcher.php",
                    "line": 204,
                    "function": "translate",
                    "class": "OC\\Core\\Controller\\TranslationApiController",
                    "type": "->",
                    "args": [
                        "related, but not the same. \n\nIt is called JSON streaming. https://en.wikipedia.org/wiki/JSON_streaming",
                        "en",
                        "de_DE"
                    ]
                },
                {
                    "file": "/var/www/html/lib/private/AppFramework/Http/Dispatcher.php",
                    "line": 118,
                    "function": "executeController",
                    "class": "OC\\AppFramework\\Http\\Dispatcher",
                    "type": "->",
                    "args": [
                        {
                            "__class__": "OC\\Core\\Controller\\TranslationApiController"
                        },
                        "translate"
                    ]
                },
                {
                    "file": "/var/www/html/lib/private/AppFramework/App.php",
                    "line": 153,
                    "function": "dispatch",
                    "class": "OC\\AppFramework\\Http\\Dispatcher",
                    "type": "->",
                    "args": [
                        {
                            "__class__": "OC\\Core\\Controller\\TranslationApiController"
                        },
                        "translate"
                    ]
                },
                {
                    "file": "/var/www/html/lib/private/Route/Router.php",
                    "line": 321,
                    "function": "main",
                    "class": "OC\\AppFramework\\App",
                    "type": "::",
                    "args": [
                        "OC\\Core\\Controller\\TranslationApiController",
                        "translate",
                        {
                            "__class__": "OC\\AppFramework\\DependencyInjection\\DIContainer"
                        },
                        {
                            "_route": "ocs.core.translationapi.translate"
                        }
                    ]
                },
                {
                    "file": "/var/www/html/ocs/v1.php",
                    "line": 61,
                    "function": "match",
                    "class": "OC\\Route\\Router",
                    "type": "->",
                    "args": [
                        "/ocsapp/translation/translate"
                    ]
                },
                {
                    "file": "/var/www/html/ocs/v2.php",
                    "line": 8,
                    "args": [
                        "/var/www/html/ocs/v1.php"
                    ],
                    "function": "require_once"
                }
            ],
            "File": "/var/www/html/custom_apps/integration_openai/lib/Service/OpenAiAPIService.php",
            "Line": 1075
        },
        "message": "Failed to translate from en to de_DE using provider LocalAI",
        "exception": [],
        "CustomMessage": "Failed to translate from en to de_DE using provider LocalAI"
    },
    "id": "69639dd205739"
}

Same here.

A workaround I found is changing the “DEFAULT_COMPLETION_MODEL_ID” constant in this file:

custom_apps/integration_openai/lib/AppInfo/Application.php

Just set DEFAULT_COMPLETION_MODEL_ID to the model you want (it must be listed in the “Default completion model to use” option in settings/admin/ai ).

If you’re using Nextcloud AIO, it is easier to access the file through the nextcloud-aio-nextcloud container.

This is far from ideal, because the change will be lost the next time the App gets updated. But it works for now.

1 Like

Thank you! I can confirm that this is a proper workaround.

I’m not that deep into Nextcloud development, but is it worth filing a bug report? I think it doesn’t make sense to default to an LLM that probably nobody owns when hosting their own LLM.

I agree. Can you please report it at https://github.com/nextcloud/integration_openai/issues ?

1 Like