diff --git a/backend/open_webui/main.py b/backend/open_webui/main.py index ded2db081a..2cbc0d7558 100644 --- a/backend/open_webui/main.py +++ b/backend/open_webui/main.py @@ -1305,6 +1305,7 @@ async def chat_completion( else None, 'user_id': user.id, 'user_agent': request.headers.get('user-agent', '') or '', + 'client_ip': request.client.host if request.client else '', 'internal': getattr(request.state, 'internal', False) is True, 'chat_id': chat_id, 'user_message': user_message, diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 28b4e787f0..862b1adc67 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -1765,6 +1765,7 @@ async def index_file( 'file_id': file.id, 'file_name': file.filename, 'file_content_type': file.meta.get('content_type'), + 'client_ip': request.client.host if request.client else '', } docs = await loader.aload(file.filename, file.meta.get('content_type'), file_path) diff --git a/backend/open_webui/utils/headers.py b/backend/open_webui/utils/headers.py index 09d0683c9e..36d5bb07c7 100644 --- a/backend/open_webui/utils/headers.py +++ b/backend/open_webui/utils/headers.py @@ -131,6 +131,8 @@ def parse_custom_headers( if not user_agent: user_agent = metadata.get('user_agent', '') or '' + client_ip = getattr(getattr(request, 'client', None), 'host', None) or metadata.get('client_ip', '') or '' + # Extract user_message info for tree mapping user_message = metadata.get('user_message') or {} user_message_id = metadata.get('user_message_id', '') or (user_message.get('id', '') if user_message else '') @@ -153,6 +155,8 @@ def parse_custom_headers( '{{USER_GROUPS}}': ','.join(group.name.strip() for group in user_groups) if user_groups else '', '{{USER_GROUP_IDS}}': ','.join(group.id for group in user_groups) if user_groups else '', '{{USER_AGENT}}': user_agent, + '{{USER_IP}}': client_ip, + '{{X_FORWARDED_FOR}}': client_ip, '{{AUTH_TYPE}}': getattr(getattr(request, 'state', None), 'auth_type', None) or '', }