[GH-ISSUE #13442] issue: llm thinks the tool response is empty #16911

Closed
opened 2026-04-19 22:43:51 -05:00 by GiteaMirror · 3 comments
Owner

Originally created by @filiptrplan on GitHub (May 2, 2025).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/13442

Check Existing Issues

  • I have searched the existing issues and discussions.
  • I am using the latest version of Open WebUI.

Installation Method

Docker

Open WebUI Version

v0.6.5

Ollama Version (if applicable)

No response

Operating System

Linux Mint

Browser (if applicable)

No response

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have listed steps to reproduce the bug in detail.

Expected Behavior

It should read the file. I even see the output in the chat

Actual Behavior

It acts as if it didn't get a response from the tool.

Steps to Reproduce

  1. Setup the filesystem MCP using MCPO (https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem)
  2. Add it to tools on OpenWebUI
  3. Try to read a file, the API outputs it as just a string but it appears the LLM doesn't see it.

Logs & Screenshots

Image

Executing tool function tool_directory_tree_post with params: {'path': '/Repos/fri-compilers-2025/src'}
2025-05-02 16:13:06.211 | DEBUG    | open_webui.utils.chat:generate_chat_completion:164 - generate_chat_completion: {'model': 'google/gemini-2.5-flash-preview:thinking', 'stream': True, 'tools': [{'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_file_post', 'description': 'Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_multiple_files_post', 'description': "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'paths': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Paths', 'description': ''}}, 'required': ['paths']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_write_file_post', 'description': 'Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'content': {'type': 'string', 'title': 'Content', 'description': ''}}, 'required': ['content', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_edit_file_post', 'description': 'Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'edits': {'items': {'properties': {'oldText': {'type': 'string', 'title': 'Oldtext', 'description': 'Text to search for - must match exactly'}, 'newText': {'type': 'string', 'title': 'Newtext', 'description': 'Text to replace with'}}, 'type': 'object', 'required': ['oldText', 'newText'], 'title': 'edit_file_form_model_edits_item_model'}, 'type': 'array', 'title': 'Edits', 'description': ''}, 'dryRun': {'type': 'boolean', 'title': 'Dryrun', 'description': 'Preview changes using git-style diff format', 'default': False}}, 'required': ['edits', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_create_directory_post', 'description': 'Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_directory_post', 'description': 'Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_directory_tree_post', 'description': "Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_move_file_post', 'description': 'Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.', 'parameters': {'type': 'object', 'properties': {'source': {'type': 'string', 'title': 'Source', 'description': ''}, 'destination': {'type': 'string', 'title': 'Destination', 'description': ''}}, 'required': ['destination', 'source']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_search_files_post', 'description': "Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'pattern': {'type': 'string', 'title': 'Pattern', 'description': ''}, 'excludePatterns': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Excludepatterns', 'description': '', 'default': []}}, 'required': ['pattern', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_get_file_info_post', 'description': 'Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_allowed_directories_post', 'description': 'Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'system', 'content': '\n\nUser Context:\n1. [2025-05-02]. [Tags: interest, behavior] User is interested in asmgen phase\n'}, {'role': 'user', 'content': 'List the Repos/fri-compilers-2025 directory'}, {'role': 'assistant', 'content': '<tool_calls name="tool_list_directory_post" result="&quot;{\\n  \\&quot;error\\&quot;: \\&quot;HTTP error 500: {\\\\\\&quot;detail\\\\\\&quot;:{\\\\\\&quot;message\\\\\\&quot;:\\\\\\&quot;Unexpected error\\\\\\&quot;,\\\\\\&quot;error\\\\\\&quot;:\\\\\\&quot;500: {&#x27;message&#x27;: &#x27;Error: Access denied - path outside allowed directories: /app/Repos/fri-compilers-2025 not in /Repos&#x27;}\\\\\\&quot;}}\\&quot;\\n}&quot;"/>\n\n\nI couldn\'t list the contents of that directory because it is outside of the allowed directories. I can show you the directories that I\'m allowed to access. Would you like me to do that?'}, {'role': 'user', 'content': 'It is /Repos'}, {'role': 'assistant', 'content': 'Okay, I\'ll list the contents of the `/Repos` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[DIR] PS-2024\\n[DIR] Verizna_replikacija\\n[DIR] blog\\n[DIR] diplomska\\n[DIR] fri-compilers-2025\\n[DIR] korpusi\\n[DIR] open-webui\\n[DIR] open_webui_functions\\n[DIR] others\\n[DIR] prev25-syntax-highlighting\\n[DIR] uozp&quot;"/>\n\n\nOkay, you are correct. `fri-compilers-2025` is listed within the `/Repos` directory.\n\nNow I will list the contents of the `/Repos/fri-compilers-2025` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[FILE] .aider.chat.history.md\\n[FILE] .aider.input.history\\n[DIR] .aider.tags.cache.v3\\n[FILE] .classpath\\n[DIR] .git\\n[FILE] .gitignore\\n[FILE] .project\\n[DIR] .venv\\n[FILE] 63220340-imcgen.zip\\n[FILE] Makefile\\n[FILE] README.md\\n[DIR] bin\\n[FILE] compare.py\\n[DIR] doc\\n[DIR] lib\\n[DIR] prev25\\n[FILE] prev25-imclin.zip\\n[DIR] prg\\n[FILE] run.py\\n[DIR] src\\n[FILE] testOut.py\\n[FILE] zip.py&quot;"/>\n\n\nHere are the contents of the `/Repos/fri-compilers-2025` directory:\n\n*   [FILE] .aider.chat.history.md\n*   [FILE] .aider.input.history\n*   [DIR] .aider.tags.cache.v3\n*   [FILE] .classpath\n*   [DIR] .git\n*   [FILE] .gitignore\n*   [FILE] .project\n*   [DIR] .venv\n*   [FILE] 63220340-imcgen.zip\n*   [FILE] Makefile\n*   [FILE] README.md\n*   [DIR] bin\n*   [FILE] compare.py\n*   [DIR] doc\n*   [DIR] lib\n*   [DIR] prev25\n*   [FILE] prev25-imclin.zip\n*   [DIR] prg\n*   [FILE] run.py\n*   [DIR] src\n*   [FILE] testOut.py\n*   [FILE] zip.py'}, {'role': 'user', 'content': 'Find out how the asmgen phase works by reading src/compilers/phase/asmgen/AsmGen.java'}, {'role': 'assistant', 'content': 'Okay, I will read the file `/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java` to understand how the `asmgen` phase works.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': '{\n  "error": "HTTP error 500: {\\"detail\\":{\\"message\\":\\"Unexpected error\\",\\"error\\":\\"500: {\'message\': \'Error: Parent directory does not exist: /Repos/fri-compilers-2025/src/compilers/phase/asmgen\'}\\"}}"\n}'}, {'role': 'assistant', 'content': "It seems I couldn't read the file because the directory path `/Repos/fri-compilers-2025/src/compilers/phase/asmgen` was not found.\n\nLet me check the directory structure within `/Repos/fri-compilers-2025/src` to find the correct location of the `AsmGen.java` file.", 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_directory_tree_post', 'type': 'function', 'function': {'name': 'tool_directory_tree_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_directory_tree_post', 'content': '[\n  {\n    "name": "compiler",\n    "type": "directory",\n    "children": [\n      {\n        "name": "Compiler.java",\n        "type": "file"\n      },\n      {\n        "name": "common",\n        "type": "directory",\n        "children": [\n          {\n            "name": "logger",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Loggable.java",\n                "type": "file"\n              },\n              {\n                "name": "Logger.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "package-info.java",\n            "type": "file"\n          },\n          {\n            "name": "report",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Locatable.java",\n                "type": "file"\n              },\n              {\n                "name": "Location.java",\n                "type": "file"\n              },\n              {\n                "name": "Report.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        "name": "package-info.java",\n        "type": "file"\n      },\n      {\n        "name": "phase",\n        "type": "directory",\n        "children": [\n          {\n            "name": "Phase.java",\n            "type": "file"\n          },\n          {\n            "name": "abstr",\n            "type": "directory",\n            "children": [\n              {\n                "name": "AST.java",\n                "type": "file"\n              },\n              {\n                "name": "Abstr.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "asmgen",\n            "type": "directory",\n            "children": [\n              {\n                "name": "ASM.java",\n                "type": "file"\n              },\n              {\n                "name": "AsmGen.java",\n                "type": "file"\n              },\n              {\n                "name": "AsmGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "Tile.java",\n                "type": "file"\n              },\n              {\n                "name": "Tiles.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "imcgen",\n            "type": "directory",\n            "children": [\n              {\n                "name": "IMC.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcGen.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "imclin",\n            "type": "directory",\n            "children": [\n              {\n                "name": "BasicBlocksTransformer.java",\n                "type": "file"\n              },\n              {\n                "name": "ChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "CodeChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "DataChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcLin.java",\n                "type": "file"\n              },\n              {\n                "name": "Interpreter.java",\n                "type": "file"\n              },\n              {\n                "name": "LIN.java",\n                "type": "file"\n              },\n              {\n                "name": "NestedCallsTransformer.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "lexan",\n            "type": "directory",\n            "children": [\n              {\n                "name": "LexAn.java",\n                "type": "file"\n              },\n              {\n                "name": "Makefile",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.g4",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.interp",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.java",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.tokens",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "memory",\n            "type": "directory",\n            "children": [\n              {\n                "name": "MEM.java",\n                "type": "file"\n              },\n              {\n                "name": "MemEvaluator.java",\n                "type": "file"\n              },\n              {\n                "name": "Memory.java",\n                "type": "file"\n              },\n              {\n                "name": "SizeEvaluator.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "package-info.java",\n            "type": "file"\n          },\n          {\n            "name": "seman",\n            "type": "directory",\n            "children": [\n              {\n                "name": "CycleChecker.java",\n                "type": "file"\n              },\n              {\n                "name": "NameResolver.java",\n                "type": "file"\n              },\n              {\n                "name": "SemAn.java",\n                "type": "file"\n              },\n              {\n                "name": "TYP.java",\n                "type": "file"\n              },\n              {\n                "name": "TypeChecker.java",\n                "type": "file"\n              },\n              {\n                "name": "TypeResolver.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "synan",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Makefile",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.g4",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.interp",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.java",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.tokens",\n                "type": "file"\n              },\n              {\n                "name": "SynAn.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  },\n  {\n    "name": "module-info.java",\n    "type": "file"\n  }\n]'}]} - {}
2025-05-02 16:13:06.213 | DEBUG    | aiocache.base:get:201 - GET o
2025-05-02 16:13:06.214 | INFO     | open_webui.routers.openai:get_all_models:389 - get_all_models() - {}
2025-05-02 16:13:06.214 | DEBUG    | open_webui.routers.openai:get_all_models_responses:370 - get_all_models:responses() [{'object': 'list', 'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}]}, {'object': 'list', 'data': [{'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}]}] - {}
2025-05-02 16:13:06.214 | DEBUG    | open_webui.routers.openai:merge_models_lists:404 - merge_models_lists <map object at 0x7e1e381fbeb0> - {}
2025-05-02 16:13:06.214 | DEBUG    | open_webui.routers.openai:get_all_models:442 - models: {'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}, 'urlIdx': 1}]} - {}
2025-05-02 16:13:06.215 | DEBUG    | aiocache.base:set:280 - SET open_webui.routers.openaiget_all_models(<starlette.requests.Request object at 0x7e1e20c91a50>,)[('user', UserModel(id='4dc204b5-a18f-454e-a930-2e3861a63e17', name='Filip', email='tg.trplan@gmail.com', role='admin', profile_image_url='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACJklEQVR4Xu2XPU4DMRQGHYmCmoYW0XMIrkBNwb1AFFTcAaWKuAocIFkpKAkGUa4iFK9/diwNdd7zx0y+7HqxfrqIwT8MgYVCMC7+giiE5UMhMB8KUQiNACyPzxCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4nTRkPPbx3B2fVcEXRw+wvB6U2RXjSUKqUE1Y6dCMuDVGO1SyHb5EOJumMbj+yscPt+nzTaY6lLI5uUqhN26AZ72RyikPfN/T1SIQtIJjF97/clKZ1h0QiFFceYvU0g+w6IbFFIUZ/4yheQzLLphLGT7dh/iPvFiGOPvhXBVNFeNZV2+9k4CEfdh83w5abTlkEJa0j7hLIWcAKnlR7oU4sWw5VfkyFm+Zc0sYHy8QhQyGwGfIbOhP36wQhSSTsBnSDqzqhMKqYo3fblC0plVnVBIVbzpyxWSzqzqhEKq4k1frpB0Zk4UItDFxbDQ/9rFGoXANClEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwOD+DUKb0/fnPKgAAAABJRU5ErkJggg==', last_active_at=1746202380, updated_at=1738150675, created_at=1738150675, api_key=None, settings=UserSettings(ui={'version': '0.6.5', 'title': {'auto': True}, 'landingPageMode': '', 'widescreenMode': False, 'models': ['google/gemini-2.5-flash-preview'], 'imageCompression': False, 'params': {}, 'notificationEnabled': True, 'memory': True, 'chatBubble': True, 'webSearch': None}, functions={'valves': {'adaptive_memory_v2': {'enabled': True, 'show_status': False, 'timezone': ''}}}), info=None, oauth_sub=None))] 1 (0.0000)s - {}
Executing tool function tool_read_file_post with params: {'path': '/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java'}
2025-05-02 16:13:10.062 | DEBUG    | open_webui.utils.chat:generate_chat_completion:164 - generate_chat_completion: {'model': 'google/gemini-2.5-flash-preview:thinking', 'stream': True, 'tools': [{'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_file_post', 'description': 'Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_multiple_files_post', 'description': "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'paths': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Paths', 'description': ''}}, 'required': ['paths']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_write_file_post', 'description': 'Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'content': {'type': 'string', 'title': 'Content', 'description': ''}}, 'required': ['content', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_edit_file_post', 'description': 'Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'edits': {'items': {'properties': {'oldText': {'type': 'string', 'title': 'Oldtext', 'description': 'Text to search for - must match exactly'}, 'newText': {'type': 'string', 'title': 'Newtext', 'description': 'Text to replace with'}}, 'type': 'object', 'required': ['oldText', 'newText'], 'title': 'edit_file_form_model_edits_item_model'}, 'type': 'array', 'title': 'Edits', 'description': ''}, 'dryRun': {'type': 'boolean', 'title': 'Dryrun', 'description': 'Preview changes using git-style diff format', 'default': False}}, 'required': ['edits', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_create_directory_post', 'description': 'Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_directory_post', 'description': 'Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_directory_tree_post', 'description': "Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_move_file_post', 'description': 'Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.', 'parameters': {'type': 'object', 'properties': {'source': {'type': 'string', 'title': 'Source', 'description': ''}, 'destination': {'type': 'string', 'title': 'Destination', 'description': ''}}, 'required': ['destination', 'source']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_search_files_post', 'description': "Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'pattern': {'type': 'string', 'title': 'Pattern', 'description': ''}, 'excludePatterns': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Excludepatterns', 'description': '', 'default': []}}, 'required': ['pattern', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_get_file_info_post', 'description': 'Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_allowed_directories_post', 'description': 'Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'system', 'content': '\n\nUser Context:\n1. [2025-05-02]. [Tags: interest, behavior] User is interested in asmgen phase\n'}, {'role': 'user', 'content': 'List the Repos/fri-compilers-2025 directory'}, {'role': 'assistant', 'content': '<tool_calls name="tool_list_directory_post" result="&quot;{\\n  \\&quot;error\\&quot;: \\&quot;HTTP error 500: {\\\\\\&quot;detail\\\\\\&quot;:{\\\\\\&quot;message\\\\\\&quot;:\\\\\\&quot;Unexpected error\\\\\\&quot;,\\\\\\&quot;error\\\\\\&quot;:\\\\\\&quot;500: {&#x27;message&#x27;: &#x27;Error: Access denied - path outside allowed directories: /app/Repos/fri-compilers-2025 not in /Repos&#x27;}\\\\\\&quot;}}\\&quot;\\n}&quot;"/>\n\n\nI couldn\'t list the contents of that directory because it is outside of the allowed directories. I can show you the directories that I\'m allowed to access. Would you like me to do that?'}, {'role': 'user', 'content': 'It is /Repos'}, {'role': 'assistant', 'content': 'Okay, I\'ll list the contents of the `/Repos` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[DIR] PS-2024\\n[DIR] Verizna_replikacija\\n[DIR] blog\\n[DIR] diplomska\\n[DIR] fri-compilers-2025\\n[DIR] korpusi\\n[DIR] open-webui\\n[DIR] open_webui_functions\\n[DIR] others\\n[DIR] prev25-syntax-highlighting\\n[DIR] uozp&quot;"/>\n\n\nOkay, you are correct. `fri-compilers-2025` is listed within the `/Repos` directory.\n\nNow I will list the contents of the `/Repos/fri-compilers-2025` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[FILE] .aider.chat.history.md\\n[FILE] .aider.input.history\\n[DIR] .aider.tags.cache.v3\\n[FILE] .classpath\\n[DIR] .git\\n[FILE] .gitignore\\n[FILE] .project\\n[DIR] .venv\\n[FILE] 63220340-imcgen.zip\\n[FILE] Makefile\\n[FILE] README.md\\n[DIR] bin\\n[FILE] compare.py\\n[DIR] doc\\n[DIR] lib\\n[DIR] prev25\\n[FILE] prev25-imclin.zip\\n[DIR] prg\\n[FILE] run.py\\n[DIR] src\\n[FILE] testOut.py\\n[FILE] zip.py&quot;"/>\n\n\nHere are the contents of the `/Repos/fri-compilers-2025` directory:\n\n*   [FILE] .aider.chat.history.md\n*   [FILE] .aider.input.history\n*   [DIR] .aider.tags.cache.v3\n*   [FILE] .classpath\n*   [DIR] .git\n*   [FILE] .gitignore\n*   [FILE] .project\n*   [DIR] .venv\n*   [FILE] 63220340-imcgen.zip\n*   [FILE] Makefile\n*   [FILE] README.md\n*   [DIR] bin\n*   [FILE] compare.py\n*   [DIR] doc\n*   [DIR] lib\n*   [DIR] prev25\n*   [FILE] prev25-imclin.zip\n*   [DIR] prg\n*   [FILE] run.py\n*   [DIR] src\n*   [FILE] testOut.py\n*   [FILE] zip.py'}, {'role': 'user', 'content': 'Find out how the asmgen phase works by reading src/compilers/phase/asmgen/AsmGen.java'}, {'role': 'assistant', 'content': 'Okay, I will read the file `/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java` to understand how the `asmgen` phase works.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': '{\n  "error": "HTTP error 500: {\\"detail\\":{\\"message\\":\\"Unexpected error\\",\\"error\\":\\"500: {\'message\': \'Error: Parent directory does not exist: /Repos/fri-compilers-2025/src/compilers/phase/asmgen\'}\\"}}"\n}'}, {'role': 'assistant', 'content': "It seems I couldn't read the file because the directory path `/Repos/fri-compilers-2025/src/compilers/phase/asmgen` was not found.\n\nLet me check the directory structure within `/Repos/fri-compilers-2025/src` to find the correct location of the `AsmGen.java` file.", 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_directory_tree_post', 'type': 'function', 'function': {'name': 'tool_directory_tree_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_directory_tree_post', 'content': '[\n  {\n    "name": "compiler",\n    "type": "directory",\n    "children": [\n      {\n        "name": "Compiler.java",\n        "type": "file"\n      },\n      {\n        "name": "common",\n        "type": "directory",\n        "children": [\n          {\n            "name": "logger",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Loggable.java",\n                "type": "file"\n              },\n              {\n                "name": "Logger.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "package-info.java",\n            "type": "file"\n          },\n          {\n            "name": "report",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Locatable.java",\n                "type": "file"\n              },\n              {\n                "name": "Location.java",\n                "type": "file"\n              },\n              {\n                "name": "Report.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          }\n        ]\n      },\n      {\n        "name": "package-info.java",\n        "type": "file"\n      },\n      {\n        "name": "phase",\n        "type": "directory",\n        "children": [\n          {\n            "name": "Phase.java",\n            "type": "file"\n          },\n          {\n            "name": "abstr",\n            "type": "directory",\n            "children": [\n              {\n                "name": "AST.java",\n                "type": "file"\n              },\n              {\n                "name": "Abstr.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "asmgen",\n            "type": "directory",\n            "children": [\n              {\n                "name": "ASM.java",\n                "type": "file"\n              },\n              {\n                "name": "AsmGen.java",\n                "type": "file"\n              },\n              {\n                "name": "AsmGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "Tile.java",\n                "type": "file"\n              },\n              {\n                "name": "Tiles.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "imcgen",\n            "type": "directory",\n            "children": [\n              {\n                "name": "IMC.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcGen.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "imclin",\n            "type": "directory",\n            "children": [\n              {\n                "name": "BasicBlocksTransformer.java",\n                "type": "file"\n              },\n              {\n                "name": "ChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "CodeChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "DataChunkGenerator.java",\n                "type": "file"\n              },\n              {\n                "name": "ImcLin.java",\n                "type": "file"\n              },\n              {\n                "name": "Interpreter.java",\n                "type": "file"\n              },\n              {\n                "name": "LIN.java",\n                "type": "file"\n              },\n              {\n                "name": "NestedCallsTransformer.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "lexan",\n            "type": "directory",\n            "children": [\n              {\n                "name": "LexAn.java",\n                "type": "file"\n              },\n              {\n                "name": "Makefile",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.g4",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.interp",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.java",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Lexer.tokens",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "memory",\n            "type": "directory",\n            "children": [\n              {\n                "name": "MEM.java",\n                "type": "file"\n              },\n              {\n                "name": "MemEvaluator.java",\n                "type": "file"\n              },\n              {\n                "name": "Memory.java",\n                "type": "file"\n              },\n              {\n                "name": "SizeEvaluator.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "package-info.java",\n            "type": "file"\n          },\n          {\n            "name": "seman",\n            "type": "directory",\n            "children": [\n              {\n                "name": "CycleChecker.java",\n                "type": "file"\n              },\n              {\n                "name": "NameResolver.java",\n                "type": "file"\n              },\n              {\n                "name": "SemAn.java",\n                "type": "file"\n              },\n              {\n                "name": "TYP.java",\n                "type": "file"\n              },\n              {\n                "name": "TypeChecker.java",\n                "type": "file"\n              },\n              {\n                "name": "TypeResolver.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          },\n          {\n            "name": "synan",\n            "type": "directory",\n            "children": [\n              {\n                "name": "Makefile",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.g4",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.interp",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.java",\n                "type": "file"\n              },\n              {\n                "name": "Prev25Parser.tokens",\n                "type": "file"\n              },\n              {\n                "name": "SynAn.java",\n                "type": "file"\n              },\n              {\n                "name": "package-info.java",\n                "type": "file"\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  },\n  {\n    "name": "module-info.java",\n    "type": "file"\n  }\n]'}, {'role': 'assistant', 'content': 'Ah, I see the mistake. The path should be `/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java` with "compiler" in the singular, not "compilers".\n\nLet me read the file with the correct path now.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': 'package compiler.phase.mcgen;\n\nimport java.util.Vector;\n\nimport compiler.phase.Phase;\n\npublic class AsmGen extends Phase {\n\tpublic static final Vector<ASM.CodeInstrChunk> codeChunks = new Vector<>();\n\n\tpublic AsmGen() {\n\t\tsuper("asmgen");\n\t}\n}\n'}]} - {}
2025-05-02 16:13:10.065 | INFO     | open_webui.routers.openai:get_all_models:389 - get_all_models() - {}
2025-05-02 16:13:10.065 | DEBUG    | open_webui.routers.openai:get_all_models_responses:370 - get_all_models:responses() [{'object': 'list', 'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}]}, {'object': 'list', 'data': [{'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}]}] - {}
2025-05-02 16:13:10.065 | DEBUG    | open_webui.routers.openai:merge_models_lists:404 - merge_models_lists <map object at 0x7e1e381f9060> - {}
2025-05-02 16:13:10.065 | DEBUG    | open_webui.routers.openai:get_all_models:442 - models: {'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}, 'urlIdx': 1}]} - {}
2025-05-02 16:13:10.066 | DEBUG    | aiocache.base:set:280 - SET open_webui.routers.openaiget_all_models(<starlette.requests.Request object at 0x7e1e20c91a50>,)[('user', UserModel(id='4dc204b5-a18f-454e-a930-2e3861a63e17', name='Filip', email='tg.trplan@gmail.com', role='admin', profile_image_url='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACJklEQVR4Xu2XPU4DMRQGHYmCmoYW0XMIrkBNwb1AFFTcAaWKuAocIFkpKAkGUa4iFK9/diwNdd7zx0y+7HqxfrqIwT8MgYVCMC7+giiE5UMhMB8KUQiNACyPzxCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4nTRkPPbx3B2fVcEXRw+wvB6U2RXjSUKqUE1Y6dCMuDVGO1SyHb5EOJumMbj+yscPt+nzTaY6lLI5uUqhN26AZ72RyikPfN/T1SIQtIJjF97/clKZ1h0QiFFceYvU0g+w6IbFFIUZ/4yheQzLLphLGT7dh/iPvFiGOPvhXBVNFeNZV2+9k4CEfdh83w5abTlkEJa0j7hLIWcAKnlR7oU4sWw5VfkyFm+Zc0sYHy8QhQyGwGfIbOhP36wQhSSTsBnSDqzqhMKqYo3fblC0plVnVBIVbzpyxWSzqzqhEKq4k1frpB0Zk4UItDFxbDQ/9rFGoXANClEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwOD+DUKb0/fnPKgAAAABJRU5ErkJggg==', last_active_at=1746202380, updated_at=1738150675, created_at=1738150675, api_key=None, settings=UserSettings(ui={'version': '0.6.5', 'title': {'auto': True}, 'landingPageMode': '', 'widescreenMode': False, 'models': ['google/gemini-2.5-flash-preview'], 'imageCompression': False, 'params': {}, 'notificationEnabled': True, 'memory': True, 'chatBubble': True, 'webSearch': None}, functions={'valves': {'adaptive_memory_v2': {'enabled': True, 'show_status': False, 'timezone': ''}}}), info=None, oauth_sub=None))] 1 (0.0000)s - {}
2025-05-02 16:13:15.340 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "POST /api/chat/completed HTTP/1.1" 200 - {}
2025-05-02 16:13:15.488 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "POST /api/v1/chats/3804c238-04e8-4a23-a79e-2b10d186d59e HTTP/1.1" 200 - {}
2025-05-02 16:13:15.598 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {}
{"timestamp": "2025-05-02 16:13:57,530", "level": "INFO", "logger": "openwebui.plugins.neural_recall", "message": "Error counters: {'embedding_errors': 0, 'llm_call_errors': 0, 'json_parse_errors': 0, 'memory_crud_errors': 0}", "module": "<string>", "funcName": "_log_error_counters_loop", "lineNo": 594, "process": 1, "thread": 138674079779712}
2025-05-02 16:13:57.530 | INFO     | function_adaptive_memory_v2:_log_error_counters_loop:594 - Error counters: {'embedding_errors': 0, 'llm_call_errors': 0, 'json_parse_errors': 0, 'memory_crud_errors': 0} - {}

Additional Information

No response

Originally created by @filiptrplan on GitHub (May 2, 2025). Original GitHub issue: https://github.com/open-webui/open-webui/issues/13442 ### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] I am using the latest version of Open WebUI. ### Installation Method Docker ### Open WebUI Version v0.6.5 ### Ollama Version (if applicable) _No response_ ### Operating System Linux Mint ### Browser (if applicable) _No response_ ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have listed steps to reproduce the bug in detail. ### Expected Behavior It should read the file. I even see the output in the chat ### Actual Behavior It acts as if it didn't get a response from the tool. ### Steps to Reproduce 1. Setup the filesystem MCP using MCPO (https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) 2. Add it to tools on OpenWebUI 3. Try to read a file, the API outputs it as just a string but it appears the LLM doesn't see it. ### Logs & Screenshots ![Image](https://github.com/user-attachments/assets/35dfbc13-8602-4303-b9e9-ca3e57af7ac2) ``` Executing tool function tool_directory_tree_post with params: {'path': '/Repos/fri-compilers-2025/src'} 2025-05-02 16:13:06.211 | DEBUG | open_webui.utils.chat:generate_chat_completion:164 - generate_chat_completion: {'model': 'google/gemini-2.5-flash-preview:thinking', 'stream': True, 'tools': [{'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_file_post', 'description': 'Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_multiple_files_post', 'description': "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'paths': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Paths', 'description': ''}}, 'required': ['paths']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_write_file_post', 'description': 'Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'content': {'type': 'string', 'title': 'Content', 'description': ''}}, 'required': ['content', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_edit_file_post', 'description': 'Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'edits': {'items': {'properties': {'oldText': {'type': 'string', 'title': 'Oldtext', 'description': 'Text to search for - must match exactly'}, 'newText': {'type': 'string', 'title': 'Newtext', 'description': 'Text to replace with'}}, 'type': 'object', 'required': ['oldText', 'newText'], 'title': 'edit_file_form_model_edits_item_model'}, 'type': 'array', 'title': 'Edits', 'description': ''}, 'dryRun': {'type': 'boolean', 'title': 'Dryrun', 'description': 'Preview changes using git-style diff format', 'default': False}}, 'required': ['edits', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_create_directory_post', 'description': 'Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_directory_post', 'description': 'Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_directory_tree_post', 'description': "Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_move_file_post', 'description': 'Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.', 'parameters': {'type': 'object', 'properties': {'source': {'type': 'string', 'title': 'Source', 'description': ''}, 'destination': {'type': 'string', 'title': 'Destination', 'description': ''}}, 'required': ['destination', 'source']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_search_files_post', 'description': "Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'pattern': {'type': 'string', 'title': 'Pattern', 'description': ''}, 'excludePatterns': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Excludepatterns', 'description': '', 'default': []}}, 'required': ['pattern', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_get_file_info_post', 'description': 'Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_allowed_directories_post', 'description': 'Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'system', 'content': '\n\nUser Context:\n1. [2025-05-02]. [Tags: interest, behavior] User is interested in asmgen phase\n'}, {'role': 'user', 'content': 'List the Repos/fri-compilers-2025 directory'}, {'role': 'assistant', 'content': '<tool_calls name="tool_list_directory_post" result="&quot;{\\n \\&quot;error\\&quot;: \\&quot;HTTP error 500: {\\\\\\&quot;detail\\\\\\&quot;:{\\\\\\&quot;message\\\\\\&quot;:\\\\\\&quot;Unexpected error\\\\\\&quot;,\\\\\\&quot;error\\\\\\&quot;:\\\\\\&quot;500: {&#x27;message&#x27;: &#x27;Error: Access denied - path outside allowed directories: /app/Repos/fri-compilers-2025 not in /Repos&#x27;}\\\\\\&quot;}}\\&quot;\\n}&quot;"/>\n\n\nI couldn\'t list the contents of that directory because it is outside of the allowed directories. I can show you the directories that I\'m allowed to access. Would you like me to do that?'}, {'role': 'user', 'content': 'It is /Repos'}, {'role': 'assistant', 'content': 'Okay, I\'ll list the contents of the `/Repos` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[DIR] PS-2024\\n[DIR] Verizna_replikacija\\n[DIR] blog\\n[DIR] diplomska\\n[DIR] fri-compilers-2025\\n[DIR] korpusi\\n[DIR] open-webui\\n[DIR] open_webui_functions\\n[DIR] others\\n[DIR] prev25-syntax-highlighting\\n[DIR] uozp&quot;"/>\n\n\nOkay, you are correct. `fri-compilers-2025` is listed within the `/Repos` directory.\n\nNow I will list the contents of the `/Repos/fri-compilers-2025` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[FILE] .aider.chat.history.md\\n[FILE] .aider.input.history\\n[DIR] .aider.tags.cache.v3\\n[FILE] .classpath\\n[DIR] .git\\n[FILE] .gitignore\\n[FILE] .project\\n[DIR] .venv\\n[FILE] 63220340-imcgen.zip\\n[FILE] Makefile\\n[FILE] README.md\\n[DIR] bin\\n[FILE] compare.py\\n[DIR] doc\\n[DIR] lib\\n[DIR] prev25\\n[FILE] prev25-imclin.zip\\n[DIR] prg\\n[FILE] run.py\\n[DIR] src\\n[FILE] testOut.py\\n[FILE] zip.py&quot;"/>\n\n\nHere are the contents of the `/Repos/fri-compilers-2025` directory:\n\n* [FILE] .aider.chat.history.md\n* [FILE] .aider.input.history\n* [DIR] .aider.tags.cache.v3\n* [FILE] .classpath\n* [DIR] .git\n* [FILE] .gitignore\n* [FILE] .project\n* [DIR] .venv\n* [FILE] 63220340-imcgen.zip\n* [FILE] Makefile\n* [FILE] README.md\n* [DIR] bin\n* [FILE] compare.py\n* [DIR] doc\n* [DIR] lib\n* [DIR] prev25\n* [FILE] prev25-imclin.zip\n* [DIR] prg\n* [FILE] run.py\n* [DIR] src\n* [FILE] testOut.py\n* [FILE] zip.py'}, {'role': 'user', 'content': 'Find out how the asmgen phase works by reading src/compilers/phase/asmgen/AsmGen.java'}, {'role': 'assistant', 'content': 'Okay, I will read the file `/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java` to understand how the `asmgen` phase works.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': '{\n "error": "HTTP error 500: {\\"detail\\":{\\"message\\":\\"Unexpected error\\",\\"error\\":\\"500: {\'message\': \'Error: Parent directory does not exist: /Repos/fri-compilers-2025/src/compilers/phase/asmgen\'}\\"}}"\n}'}, {'role': 'assistant', 'content': "It seems I couldn't read the file because the directory path `/Repos/fri-compilers-2025/src/compilers/phase/asmgen` was not found.\n\nLet me check the directory structure within `/Repos/fri-compilers-2025/src` to find the correct location of the `AsmGen.java` file.", 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_directory_tree_post', 'type': 'function', 'function': {'name': 'tool_directory_tree_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_directory_tree_post', 'content': '[\n {\n "name": "compiler",\n "type": "directory",\n "children": [\n {\n "name": "Compiler.java",\n "type": "file"\n },\n {\n "name": "common",\n "type": "directory",\n "children": [\n {\n "name": "logger",\n "type": "directory",\n "children": [\n {\n "name": "Loggable.java",\n "type": "file"\n },\n {\n "name": "Logger.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "report",\n "type": "directory",\n "children": [\n {\n "name": "Locatable.java",\n "type": "file"\n },\n {\n "name": "Location.java",\n "type": "file"\n },\n {\n "name": "Report.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "phase",\n "type": "directory",\n "children": [\n {\n "name": "Phase.java",\n "type": "file"\n },\n {\n "name": "abstr",\n "type": "directory",\n "children": [\n {\n "name": "AST.java",\n "type": "file"\n },\n {\n "name": "Abstr.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "asmgen",\n "type": "directory",\n "children": [\n {\n "name": "ASM.java",\n "type": "file"\n },\n {\n "name": "AsmGen.java",\n "type": "file"\n },\n {\n "name": "AsmGenerator.java",\n "type": "file"\n },\n {\n "name": "Tile.java",\n "type": "file"\n },\n {\n "name": "Tiles.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "imcgen",\n "type": "directory",\n "children": [\n {\n "name": "IMC.java",\n "type": "file"\n },\n {\n "name": "ImcGen.java",\n "type": "file"\n },\n {\n "name": "ImcGenerator.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "imclin",\n "type": "directory",\n "children": [\n {\n "name": "BasicBlocksTransformer.java",\n "type": "file"\n },\n {\n "name": "ChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "CodeChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "DataChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "ImcLin.java",\n "type": "file"\n },\n {\n "name": "Interpreter.java",\n "type": "file"\n },\n {\n "name": "LIN.java",\n "type": "file"\n },\n {\n "name": "NestedCallsTransformer.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "lexan",\n "type": "directory",\n "children": [\n {\n "name": "LexAn.java",\n "type": "file"\n },\n {\n "name": "Makefile",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.g4",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.interp",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.java",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.tokens",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "memory",\n "type": "directory",\n "children": [\n {\n "name": "MEM.java",\n "type": "file"\n },\n {\n "name": "MemEvaluator.java",\n "type": "file"\n },\n {\n "name": "Memory.java",\n "type": "file"\n },\n {\n "name": "SizeEvaluator.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "seman",\n "type": "directory",\n "children": [\n {\n "name": "CycleChecker.java",\n "type": "file"\n },\n {\n "name": "NameResolver.java",\n "type": "file"\n },\n {\n "name": "SemAn.java",\n "type": "file"\n },\n {\n "name": "TYP.java",\n "type": "file"\n },\n {\n "name": "TypeChecker.java",\n "type": "file"\n },\n {\n "name": "TypeResolver.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "synan",\n "type": "directory",\n "children": [\n {\n "name": "Makefile",\n "type": "file"\n },\n {\n "name": "Prev25Parser.g4",\n "type": "file"\n },\n {\n "name": "Prev25Parser.interp",\n "type": "file"\n },\n {\n "name": "Prev25Parser.java",\n "type": "file"\n },\n {\n "name": "Prev25Parser.tokens",\n "type": "file"\n },\n {\n "name": "SynAn.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n "name": "module-info.java",\n "type": "file"\n }\n]'}]} - {} 2025-05-02 16:13:06.213 | DEBUG | aiocache.base:get:201 - GET o 2025-05-02 16:13:06.214 | INFO | open_webui.routers.openai:get_all_models:389 - get_all_models() - {} 2025-05-02 16:13:06.214 | DEBUG | open_webui.routers.openai:get_all_models_responses:370 - get_all_models:responses() [{'object': 'list', 'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}]}, {'object': 'list', 'data': [{'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}]}] - {} 2025-05-02 16:13:06.214 | DEBUG | open_webui.routers.openai:merge_models_lists:404 - merge_models_lists <map object at 0x7e1e381fbeb0> - {} 2025-05-02 16:13:06.214 | DEBUG | open_webui.routers.openai:get_all_models:442 - models: {'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}, 'urlIdx': 1}]} - {} 2025-05-02 16:13:06.215 | DEBUG | aiocache.base:set:280 - SET open_webui.routers.openaiget_all_models(<starlette.requests.Request object at 0x7e1e20c91a50>,)[('user', UserModel(id='4dc204b5-a18f-454e-a930-2e3861a63e17', name='Filip', email='tg.trplan@gmail.com', role='admin', profile_image_url='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACJklEQVR4Xu2XPU4DMRQGHYmCmoYW0XMIrkBNwb1AFFTcAaWKuAocIFkpKAkGUa4iFK9/diwNdd7zx0y+7HqxfrqIwT8MgYVCMC7+giiE5UMhMB8KUQiNACyPzxCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4nTRkPPbx3B2fVcEXRw+wvB6U2RXjSUKqUE1Y6dCMuDVGO1SyHb5EOJumMbj+yscPt+nzTaY6lLI5uUqhN26AZ72RyikPfN/T1SIQtIJjF97/clKZ1h0QiFFceYvU0g+w6IbFFIUZ/4yheQzLLphLGT7dh/iPvFiGOPvhXBVNFeNZV2+9k4CEfdh83w5abTlkEJa0j7hLIWcAKnlR7oU4sWw5VfkyFm+Zc0sYHy8QhQyGwGfIbOhP36wQhSSTsBnSDqzqhMKqYo3fblC0plVnVBIVbzpyxWSzqzqhEKq4k1frpB0Zk4UItDFxbDQ/9rFGoXANClEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwOD+DUKb0/fnPKgAAAABJRU5ErkJggg==', last_active_at=1746202380, updated_at=1738150675, created_at=1738150675, api_key=None, settings=UserSettings(ui={'version': '0.6.5', 'title': {'auto': True}, 'landingPageMode': '', 'widescreenMode': False, 'models': ['google/gemini-2.5-flash-preview'], 'imageCompression': False, 'params': {}, 'notificationEnabled': True, 'memory': True, 'chatBubble': True, 'webSearch': None}, functions={'valves': {'adaptive_memory_v2': {'enabled': True, 'show_status': False, 'timezone': ''}}}), info=None, oauth_sub=None))] 1 (0.0000)s - {} Executing tool function tool_read_file_post with params: {'path': '/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java'} 2025-05-02 16:13:10.062 | DEBUG | open_webui.utils.chat:generate_chat_completion:164 - generate_chat_completion: {'model': 'google/gemini-2.5-flash-preview:thinking', 'stream': True, 'tools': [{'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_file_post', 'description': 'Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_read_multiple_files_post', 'description': "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'paths': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Paths', 'description': ''}}, 'required': ['paths']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_write_file_post', 'description': 'Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'content': {'type': 'string', 'title': 'Content', 'description': ''}}, 'required': ['content', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_edit_file_post', 'description': 'Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'edits': {'items': {'properties': {'oldText': {'type': 'string', 'title': 'Oldtext', 'description': 'Text to search for - must match exactly'}, 'newText': {'type': 'string', 'title': 'Newtext', 'description': 'Text to replace with'}}, 'type': 'object', 'required': ['oldText', 'newText'], 'title': 'edit_file_form_model_edits_item_model'}, 'type': 'array', 'title': 'Edits', 'description': ''}, 'dryRun': {'type': 'boolean', 'title': 'Dryrun', 'description': 'Preview changes using git-style diff format', 'default': False}}, 'required': ['edits', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_create_directory_post', 'description': 'Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_directory_post', 'description': 'Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_directory_tree_post', 'description': "Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_move_file_post', 'description': 'Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.', 'parameters': {'type': 'object', 'properties': {'source': {'type': 'string', 'title': 'Source', 'description': ''}, 'destination': {'type': 'string', 'title': 'Destination', 'description': ''}}, 'required': ['destination', 'source']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_search_files_post', 'description': "Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.", 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}, 'pattern': {'type': 'string', 'title': 'Pattern', 'description': ''}, 'excludePatterns': {'items': {'type': 'string'}, 'type': 'array', 'title': 'Excludepatterns', 'description': '', 'default': []}}, 'required': ['pattern', 'path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_get_file_info_post', 'description': 'Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.', 'parameters': {'type': 'object', 'properties': {'path': {'type': 'string', 'title': 'Path', 'description': ''}}, 'required': ['path']}}}, {'type': 'function', 'function': {'type': 'function', 'name': 'tool_list_allowed_directories_post', 'description': 'Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.', 'parameters': {'type': 'object', 'properties': {}, 'required': []}}}], 'messages': [{'role': 'system', 'content': '\n\nUser Context:\n1. [2025-05-02]. [Tags: interest, behavior] User is interested in asmgen phase\n'}, {'role': 'user', 'content': 'List the Repos/fri-compilers-2025 directory'}, {'role': 'assistant', 'content': '<tool_calls name="tool_list_directory_post" result="&quot;{\\n \\&quot;error\\&quot;: \\&quot;HTTP error 500: {\\\\\\&quot;detail\\\\\\&quot;:{\\\\\\&quot;message\\\\\\&quot;:\\\\\\&quot;Unexpected error\\\\\\&quot;,\\\\\\&quot;error\\\\\\&quot;:\\\\\\&quot;500: {&#x27;message&#x27;: &#x27;Error: Access denied - path outside allowed directories: /app/Repos/fri-compilers-2025 not in /Repos&#x27;}\\\\\\&quot;}}\\&quot;\\n}&quot;"/>\n\n\nI couldn\'t list the contents of that directory because it is outside of the allowed directories. I can show you the directories that I\'m allowed to access. Would you like me to do that?'}, {'role': 'user', 'content': 'It is /Repos'}, {'role': 'assistant', 'content': 'Okay, I\'ll list the contents of the `/Repos` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[DIR] PS-2024\\n[DIR] Verizna_replikacija\\n[DIR] blog\\n[DIR] diplomska\\n[DIR] fri-compilers-2025\\n[DIR] korpusi\\n[DIR] open-webui\\n[DIR] open_webui_functions\\n[DIR] others\\n[DIR] prev25-syntax-highlighting\\n[DIR] uozp&quot;"/>\n\n\nOkay, you are correct. `fri-compilers-2025` is listed within the `/Repos` directory.\n\nNow I will list the contents of the `/Repos/fri-compilers-2025` directory for you.\n\n\n<tool_calls name="tool_list_directory_post" result="&quot;[FILE] .aider.chat.history.md\\n[FILE] .aider.input.history\\n[DIR] .aider.tags.cache.v3\\n[FILE] .classpath\\n[DIR] .git\\n[FILE] .gitignore\\n[FILE] .project\\n[DIR] .venv\\n[FILE] 63220340-imcgen.zip\\n[FILE] Makefile\\n[FILE] README.md\\n[DIR] bin\\n[FILE] compare.py\\n[DIR] doc\\n[DIR] lib\\n[DIR] prev25\\n[FILE] prev25-imclin.zip\\n[DIR] prg\\n[FILE] run.py\\n[DIR] src\\n[FILE] testOut.py\\n[FILE] zip.py&quot;"/>\n\n\nHere are the contents of the `/Repos/fri-compilers-2025` directory:\n\n* [FILE] .aider.chat.history.md\n* [FILE] .aider.input.history\n* [DIR] .aider.tags.cache.v3\n* [FILE] .classpath\n* [DIR] .git\n* [FILE] .gitignore\n* [FILE] .project\n* [DIR] .venv\n* [FILE] 63220340-imcgen.zip\n* [FILE] Makefile\n* [FILE] README.md\n* [DIR] bin\n* [FILE] compare.py\n* [DIR] doc\n* [DIR] lib\n* [DIR] prev25\n* [FILE] prev25-imclin.zip\n* [DIR] prg\n* [FILE] run.py\n* [DIR] src\n* [FILE] testOut.py\n* [FILE] zip.py'}, {'role': 'user', 'content': 'Find out how the asmgen phase works by reading src/compilers/phase/asmgen/AsmGen.java'}, {'role': 'assistant', 'content': 'Okay, I will read the file `/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java` to understand how the `asmgen` phase works.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compilers/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': '{\n "error": "HTTP error 500: {\\"detail\\":{\\"message\\":\\"Unexpected error\\",\\"error\\":\\"500: {\'message\': \'Error: Parent directory does not exist: /Repos/fri-compilers-2025/src/compilers/phase/asmgen\'}\\"}}"\n}'}, {'role': 'assistant', 'content': "It seems I couldn't read the file because the directory path `/Repos/fri-compilers-2025/src/compilers/phase/asmgen` was not found.\n\nLet me check the directory structure within `/Repos/fri-compilers-2025/src` to find the correct location of the `AsmGen.java` file.", 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_directory_tree_post', 'type': 'function', 'function': {'name': 'tool_directory_tree_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_directory_tree_post', 'content': '[\n {\n "name": "compiler",\n "type": "directory",\n "children": [\n {\n "name": "Compiler.java",\n "type": "file"\n },\n {\n "name": "common",\n "type": "directory",\n "children": [\n {\n "name": "logger",\n "type": "directory",\n "children": [\n {\n "name": "Loggable.java",\n "type": "file"\n },\n {\n "name": "Logger.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "report",\n "type": "directory",\n "children": [\n {\n "name": "Locatable.java",\n "type": "file"\n },\n {\n "name": "Location.java",\n "type": "file"\n },\n {\n "name": "Report.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "phase",\n "type": "directory",\n "children": [\n {\n "name": "Phase.java",\n "type": "file"\n },\n {\n "name": "abstr",\n "type": "directory",\n "children": [\n {\n "name": "AST.java",\n "type": "file"\n },\n {\n "name": "Abstr.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "asmgen",\n "type": "directory",\n "children": [\n {\n "name": "ASM.java",\n "type": "file"\n },\n {\n "name": "AsmGen.java",\n "type": "file"\n },\n {\n "name": "AsmGenerator.java",\n "type": "file"\n },\n {\n "name": "Tile.java",\n "type": "file"\n },\n {\n "name": "Tiles.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "imcgen",\n "type": "directory",\n "children": [\n {\n "name": "IMC.java",\n "type": "file"\n },\n {\n "name": "ImcGen.java",\n "type": "file"\n },\n {\n "name": "ImcGenerator.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "imclin",\n "type": "directory",\n "children": [\n {\n "name": "BasicBlocksTransformer.java",\n "type": "file"\n },\n {\n "name": "ChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "CodeChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "DataChunkGenerator.java",\n "type": "file"\n },\n {\n "name": "ImcLin.java",\n "type": "file"\n },\n {\n "name": "Interpreter.java",\n "type": "file"\n },\n {\n "name": "LIN.java",\n "type": "file"\n },\n {\n "name": "NestedCallsTransformer.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "lexan",\n "type": "directory",\n "children": [\n {\n "name": "LexAn.java",\n "type": "file"\n },\n {\n "name": "Makefile",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.g4",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.interp",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.java",\n "type": "file"\n },\n {\n "name": "Prev25Lexer.tokens",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "memory",\n "type": "directory",\n "children": [\n {\n "name": "MEM.java",\n "type": "file"\n },\n {\n "name": "MemEvaluator.java",\n "type": "file"\n },\n {\n "name": "Memory.java",\n "type": "file"\n },\n {\n "name": "SizeEvaluator.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "package-info.java",\n "type": "file"\n },\n {\n "name": "seman",\n "type": "directory",\n "children": [\n {\n "name": "CycleChecker.java",\n "type": "file"\n },\n {\n "name": "NameResolver.java",\n "type": "file"\n },\n {\n "name": "SemAn.java",\n "type": "file"\n },\n {\n "name": "TYP.java",\n "type": "file"\n },\n {\n "name": "TypeChecker.java",\n "type": "file"\n },\n {\n "name": "TypeResolver.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n },\n {\n "name": "synan",\n "type": "directory",\n "children": [\n {\n "name": "Makefile",\n "type": "file"\n },\n {\n "name": "Prev25Parser.g4",\n "type": "file"\n },\n {\n "name": "Prev25Parser.interp",\n "type": "file"\n },\n {\n "name": "Prev25Parser.java",\n "type": "file"\n },\n {\n "name": "Prev25Parser.tokens",\n "type": "file"\n },\n {\n "name": "SynAn.java",\n "type": "file"\n },\n {\n "name": "package-info.java",\n "type": "file"\n }\n ]\n }\n ]\n }\n ]\n },\n {\n "name": "module-info.java",\n "type": "file"\n }\n]'}, {'role': 'assistant', 'content': 'Ah, I see the mistake. The path should be `/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java` with "compiler" in the singular, not "compilers".\n\nLet me read the file with the correct path now.', 'tool_calls': [{'index': 0, 'id': 'tool_0_tool_read_file_post', 'type': 'function', 'function': {'name': 'tool_read_file_post', 'arguments': '{"path":"/Repos/fri-compilers-2025/src/compiler/phase/asmgen/AsmGen.java"}'}}]}, {'role': 'tool', 'tool_call_id': 'tool_0_tool_read_file_post', 'content': 'package compiler.phase.mcgen;\n\nimport java.util.Vector;\n\nimport compiler.phase.Phase;\n\npublic class AsmGen extends Phase {\n\tpublic static final Vector<ASM.CodeInstrChunk> codeChunks = new Vector<>();\n\n\tpublic AsmGen() {\n\t\tsuper("asmgen");\n\t}\n}\n'}]} - {} 2025-05-02 16:13:10.065 | INFO | open_webui.routers.openai:get_all_models:389 - get_all_models() - {} 2025-05-02 16:13:10.065 | DEBUG | open_webui.routers.openai:get_all_models_responses:370 - get_all_models:responses() [{'object': 'list', 'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}]}, {'object': 'list', 'data': [{'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}]}] - {} 2025-05-02 16:13:10.065 | DEBUG | open_webui.routers.openai:merge_models_lists:404 - merge_models_lists <map object at 0x7e1e381f9060> - {} 2025-05-02 16:13:10.065 | DEBUG | open_webui.routers.openai:get_all_models:442 - models: {'data': [{'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001', 'name': 'google/gemini-2.0-flash-001', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.0-flash-001'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free', 'name': 'google/gemini-2.5-pro-exp-03-25:free', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-exp-03-25:free'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25', 'name': 'google/gemini-2.5-pro-preview-03-25', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-pro-preview-03-25'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high', 'name': 'openai/o4-mini-high', 'owned_by': 'openai', 'openai': {'id': 'openai/o4-mini-high'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview', 'name': 'google/gemini-2.5-flash-preview', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking', 'name': 'google/gemini-2.5-flash-preview:thinking', 'owned_by': 'openai', 'openai': {'id': 'google/gemini-2.5-flash-preview:thinking'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest', 'name': 'openai/chatgpt-4o-latest', 'owned_by': 'openai', 'openai': {'id': 'openai/chatgpt-4o-latest'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324', 'name': 'deepseek/deepseek-chat-v3-0324', 'owned_by': 'openai', 'openai': {'id': 'deepseek/deepseek-chat-v3-0324'}, 'urlIdx': 0}, 'urlIdx': 0}, {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1', 'name': 'deepseek-ai/DeepSeek-R1', 'owned_by': 'openai', 'openai': {'id': 'deepseek-ai/DeepSeek-R1'}, 'urlIdx': 1}, 'urlIdx': 1}]} - {} 2025-05-02 16:13:10.066 | DEBUG | aiocache.base:set:280 - SET open_webui.routers.openaiget_all_models(<starlette.requests.Request object at 0x7e1e20c91a50>,)[('user', UserModel(id='4dc204b5-a18f-454e-a930-2e3861a63e17', name='Filip', email='tg.trplan@gmail.com', role='admin', profile_image_url='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACJklEQVR4Xu2XPU4DMRQGHYmCmoYW0XMIrkBNwb1AFFTcAaWKuAocIFkpKAkGUa4iFK9/diwNdd7zx0y+7HqxfrqIwT8MgYVCMC7+giiE5UMhMB8KUQiNACyPzxCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4tgQhcAIwOLYEIXACMDi2BCFwAjA4nTRkPPbx3B2fVcEXRw+wvB6U2RXjSUKqUE1Y6dCMuDVGO1SyHb5EOJumMbj+yscPt+nzTaY6lLI5uUqhN26AZ72RyikPfN/T1SIQtIJjF97/clKZ1h0QiFFceYvU0g+w6IbFFIUZ/4yheQzLLphLGT7dh/iPvFiGOPvhXBVNFeNZV2+9k4CEfdh83w5abTlkEJa0j7hLIWcAKnlR7oU4sWw5VfkyFm+Zc0sYHy8QhQyGwGfIbOhP36wQhSSTsBnSDqzqhMKqYo3fblC0plVnVBIVbzpyxWSzqzqhEKq4k1frpB0Zk4UItDFxbDQ/9rFGoXANClEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwODZEITACsDg2RCEwArA4NkQhMAKwOD+DUKb0/fnPKgAAAABJRU5ErkJggg==', last_active_at=1746202380, updated_at=1738150675, created_at=1738150675, api_key=None, settings=UserSettings(ui={'version': '0.6.5', 'title': {'auto': True}, 'landingPageMode': '', 'widescreenMode': False, 'models': ['google/gemini-2.5-flash-preview'], 'imageCompression': False, 'params': {}, 'notificationEnabled': True, 'memory': True, 'chatBubble': True, 'webSearch': None}, functions={'valves': {'adaptive_memory_v2': {'enabled': True, 'show_status': False, 'timezone': ''}}}), info=None, oauth_sub=None))] 1 (0.0000)s - {} 2025-05-02 16:13:15.340 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "POST /api/chat/completed HTTP/1.1" 200 - {} 2025-05-02 16:13:15.488 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "POST /api/v1/chats/3804c238-04e8-4a23-a79e-2b10d186d59e HTTP/1.1" 200 - {} 2025-05-02 16:13:15.598 | INFO | uvicorn.protocols.http.httptools_impl:send:476 - 93.103.123.189:0 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200 - {} {"timestamp": "2025-05-02 16:13:57,530", "level": "INFO", "logger": "openwebui.plugins.neural_recall", "message": "Error counters: {'embedding_errors': 0, 'llm_call_errors': 0, 'json_parse_errors': 0, 'memory_crud_errors': 0}", "module": "<string>", "funcName": "_log_error_counters_loop", "lineNo": 594, "process": 1, "thread": 138674079779712} 2025-05-02 16:13:57.530 | INFO | function_adaptive_memory_v2:_log_error_counters_loop:594 - Error counters: {'embedding_errors': 0, 'llm_call_errors': 0, 'json_parse_errors': 0, 'memory_crud_errors': 0} - {} ``` ### Additional Information _No response_
GiteaMirror added the bug label 2026-04-19 22:43:51 -05:00
Author
Owner

@torisetxd commented on GitHub (May 2, 2025):

Had this issue aswell but i don't think its OWUI related. It might just be the model.

<!-- gh-comment-id:2847778176 --> @torisetxd commented on GitHub (May 2, 2025): Had this issue aswell but i don't think its OWUI related. It might just be the model.
Author
Owner

@filiptrplan commented on GitHub (May 2, 2025):

Had this issue aswell but i don't think its OWUI related. It might just be the model.

Did you fix it by using another model?

<!-- gh-comment-id:2848089080 --> @filiptrplan commented on GitHub (May 2, 2025): > Had this issue aswell but i don't think its OWUI related. It might just be the model. Did you fix it by using another model?
Author
Owner

@torisetxd commented on GitHub (May 3, 2025):

Had this issue aswell but i don't think its OWUI related. It might just be the model.

Did you fix it by using another model?

Using another model fixed it sometimes, some models understood it worked, some didn't. Though it could be an issue with OWUI as well since I've had mixed results with same models repeatedly.

<!-- gh-comment-id:2848542913 --> @torisetxd commented on GitHub (May 3, 2025): > > Had this issue aswell but i don't think its OWUI related. It might just be the model. > > Did you fix it by using another model? Using another model fixed it sometimes, some models understood it worked, some didn't. Though it could be an issue with OWUI as well since I've had mixed results with same models repeatedly.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#16911