From 4b1ca623491ffb5ca926fc96327c4f29feb26334 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Aug 2026 14:30:51 -0700 Subject: [PATCH] Extract get_output_language for re-use --- src/documents/views.py | 25 +++++++++---------------- src/paperless_ai/ai_classifier.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index f775aebd8..4975f8c2a 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -244,6 +244,7 @@ from paperless.serialisers import GroupSerializer from paperless.serialisers import UserSerializer from paperless.views import StandardPagination from paperless_ai.ai_classifier import get_ai_document_classification +from paperless_ai.ai_classifier import get_llm_output_language from paperless_ai.chat import stream_chat_with_documents from paperless_ai.exceptions import LLMTimeoutError from paperless_ai.matching import extract_unmatched_names @@ -655,20 +656,6 @@ class TagViewSet(PermissionsAwareDocumentCountMixin, ModelViewSet[Tag]): update_document_parent_tags(tag, new_parent) -def _get_llm_output_language(ai_config: AIConfig, request) -> str | None: - output_language = ai_config.llm_output_language - if ( - not output_language - and hasattr(request.user, "ui_settings") - and isinstance( - request.user.ui_settings.settings, - dict, - ) - ): - output_language = request.user.ui_settings.settings.get("language") - return output_language - - @extend_schema_view(**generate_object_with_permissions_schema(DocumentTypeSerializer)) class DocumentTypeViewSet( PermissionsAwareDocumentCountMixin, @@ -1530,7 +1517,10 @@ class DocumentViewSet( if not ai_config.ai_enabled: return HttpResponseBadRequest("AI is required for this feature") - output_language = _get_llm_output_language(ai_config=ai_config, request=request) + output_language = get_llm_output_language( + ai_config=ai_config, + user=request.user, + ) llm_cache_backend = ":".join( part for part in ( @@ -2275,7 +2265,10 @@ class ChatStreamingView(GenericAPIView[Any]): id__in=permitted_document_ids(request.user), ) - output_language = _get_llm_output_language(ai_config=ai_config, request=request) + output_language = get_llm_output_language( + ai_config=ai_config, + user=request.user, + ) response = StreamingHttpResponse( stream_chat_with_documents( diff --git a/src/paperless_ai/ai_classifier.py b/src/paperless_ai/ai_classifier.py index 13a145709..67f2670a7 100644 --- a/src/paperless_ai/ai_classifier.py +++ b/src/paperless_ai/ai_classifier.py @@ -23,6 +23,22 @@ def get_language_name(language_code: str) -> str: return language_code +def get_llm_output_language(ai_config: AIConfig, user: User | None) -> str | None: + """ + Language to localize LLM output into: the configured language, falling back + to the user's own UI language when unset. + """ + output_language = ai_config.llm_output_language + if ( + not output_language + and user is not None + and hasattr(user, "ui_settings") + and isinstance(user.ui_settings.settings, dict) + ): + output_language = user.ui_settings.settings.get("language") + return output_language + + def build_prompt_without_rag( document: Document, config: AIConfig,