Codex cli OSS not working with openwebUI

Resolved 💬 6 comments Opened Aug 21, 2025 by vyj7 Closed Aug 28, 2025

What version of Codex is running?

codex-cli 0.23.0

Which model were you using?

gpt-oss:20b

What platform is your computer?

Macos

What steps can reproduce the bug?

Hello,
I was trying to run codex-cli with OSS flag and use openwebUI APIs(hosted in a server).
i set the following in environment variable
export OPENAI_API_KEY="openwebui key"
export OPENAI_API_BASE="https://url_of_openwebUI/v1"
export CODEX_OSS_BASE_URL="https://url_of_openwebUI/v1"

when i ran codex --oss -m gpt-oss:20b
and then i enter a prompt it gives me unexpected status 405 Method Not Allowed: {"detail":"Method Not Allowed"}

What is the expected behavior?

OpenWebUI should be supported

What do you see instead?

_No response_

Additional information

_No response_

View original on GitHub ↗

6 Comments

vyj7 · 1 year ago

@ae-openai

vyj7 · 1 year ago
vyj7 · 12 months ago

Able to run it with the following settings :

model = "gpt-oss-20b"
model_provider = "oui"
sandbox_mode = "workspace-write"
show_raw_agent_reasoning=true

[model_providers.oui]
name = "OUI"
base_url = "https://<openwebUI URL>/ollama/v1"
env_key = "OPENAI_API_KEY"

and then run codex.

fivehorizons · 12 months ago
Able to run it with the following settings : model = "gpt-oss-20b" model_provider = "oui" sandbox_mode = "workspace-write" show_raw_agent_reasoning=true [model_providers.oui] name = "OUI" base_url = "https://<openwebUI URL>/ollama/v1" env_key = "OPENAI_API_KEY" and then run codex.

Did you have to use the switches above as well? Did you set these as environment variables?

vyj7 · 12 months ago

No, i added this in config.toml. and OPENAI_API_KEY is an environment variable where i stored API_KEY.
I directly added it as root but can easily be added in individual profiles
https://github.com/openai/codex/blob/main/docs/config.md

tedsluis · 11 months ago

I run open-webui (http://192.168.11.167:8080/api) with ollama (http://192.168.11.167:11434/v1) as backend and I try to run codex to run against my open-webui API.

Here is my Codex config.toml:

$ cat ~/.codex/config.toml
model = "gpt-oss:20b"
model_provider = "open-webui"
sandbox_mode = "workspace-write"
show_raw_agent_reasoning=true

[model_providers.open-webui]
name = "open-webui"
# The path `/chat/completions` will be amended to this URL to make the POST request for the chat completions.
base_url = "http://192.168.11.167:8080/api"
# OPENAI_API_KEY is my open-webui api key
env_key = "OPENAI_API_KEY"
wire_api = "chat"
# I have web search configure in open-webui
tools.web_search = "true"

[projects."/home/tedsluis/git/test-project"]
trust_level = "trusted"

My Ollama with gpt-oss:20b:

$ ollama ps
NAME               ID              SIZE     PROCESSOR          CONTEXT    UNTIL              
gpt-oss:20b        9226d34b40f7    14 GB    18%/82% CPU/GPU    31072      4 minutes from now   

$ ollama show gpt-oss:20b
  Model
    architecture        gptoss    
    parameters          20.9B     
    context length      131072    
    embedding length    2880      
    quantization        MXFP4     

  Capabilities
    completion    
    tools         
    thinking      

  Parameters
    temperature    1    

  License
    Apache License               
    Version 2.0, January 2004    
    ...     

Ollama model list:

$ curl http://192.168.11.167:11434/v1/models |  jq '.data[] | select(.id == "gpt-oss:20b")'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1096  100  1096    0     0   929k      0 --:--:-- --:--:-- --:--:-- 1070k
{
  "id": "gpt-oss:20b",
  "object": "model",
  "created": 1754722888,
  "owned_by": "library"
}

Ollama connect test:

$ curl -s -X POST "http://192.168.11.167:11434/v1/chat/completions"  -H "Content-Type: application/json"  -d '{ "model": "gpt-oss:20b", "messages": [{"role":"user","content":"Hello, this is a quick connectivity test."}], "stream": false }' | jq .
{
  "id": "chatcmpl-97",
  "object": "chat.completion",
  "created": 1758298748,
  "model": "gpt-oss:20b",
  "system_fingerprint": "fp_ollama",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! I’m all online and ready to help. How can I assist you today?",
        "reasoning": "User says \"Hello, this is a quick connectivity test.\" The appropriate response: confirm connectivity."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 76,
    "completion_tokens": 47,
    "total_tokens": 123
  }
}

Ollama streaming test:

$ curl -s -X POST "http://192.168.11.167:11434/v1/chat/completions"  -H "Content-Type: application/json"  -d '{ "model": "gpt-oss:20b", "messages": [{"role":"user","content":"Hello
, this is a quick streaming test."}], "stream": true }' 
data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299027,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
We"},"finish_reason":null}]}

data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299028,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
 need"},"finish_reason":null}]}

data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299028,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
 to"},"finish_reason":null}]}

data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299028,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
 respond"},"finish_reason":null}]}

data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299028,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
 to"},"finish_reason":null}]}

data: {"id":"chatcmpl-442","object":"chat.completion.chunk","created":1758299028,"model":"gpt-oss:20b","system_fingerprint":"fp_ollama","choices":[{"index":0,"delta":{"role":"assistant","content":"","reasoning":"
 user"},"finish_reason":null}]}

open-webui model list:

$ curl -H "Authorization: Bearer $OPENAI_API_KEY" http://192.168.11.167:8080/api/models |  jq '.data[] | select(.name == "gpt-oss:20b")'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8504  100  8504    0     0   115k      0 --:--:-- --:--:-- --:--:--  115k
{
  "id": "gpt-oss:20b",
  "name": "gpt-oss:20b",
  "object": "model",
  "created": 1758304256,
  "owned_by": "ollama",
  "ollama": {
    "name": "gpt-oss:20b",
    "model": "gpt-oss:20b",
    "modified_at": "2025-08-09T09:01:28.23614486+02:00",
    "size": 13780173839,
    "digest": "f2b8351c629c005bd3f0a0e3046f905afcbffede19b648e4bd7c884cdfd63af6",
    "details": {
      "parent_model": "",
      "format": "gguf",
      "family": "gptoss",
      "families": [
        "gptoss"
      ],
      "parameter_size": "20.9B",
      "quantization_level": "MXFP4"
    },
    "connection_type": "local",
    "urls": [
      0
    ]
  },
  "connection_type": "local",
  "tags": [],
  "actions": [],
  "filters": []
}

Open-webui connection test:

$ curl -s -X POST "http://192.168.11.167:8080/api/chat/completions"  -H "Authorization: Bearer $OPENAI_API_KEY"  -H "Content-Type: application/json"  -d '{ "model": "gpt-oss:20b", "messages": [{"role":"user","content":"Hello, this is a quick connectivity test."}], "stream": false }' | jq .
{
  "id": "gpt-oss:32k-20b-678e2333-7090-4379-9fdc-d482091126f5",
  "created": 1758304387,
  "model": "gpt-oss:32k-20b",
  "choices": [
    {
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop",
      "message": {
        "role": "assistant",
        "content": "Hello! I’m here and ready to help. How can I assist you today?",
        "reasoning_content": "User says: \"Hello, this is a quick connectivity test.\" They might just want confirmation. So we should respond acknowledging connectivity. Possibly ask if they have a question. We'll respond politely."
      }
    }
  ],
  "object": "chat.completion",
  "usage": {
    "response_token/s": 25.38,
    "prompt_token/s": 144.93,
    "total_duration": 5609036964,
    "load_duration": 2521541145,
    "prompt_eval_count": 76,
    "prompt_tokens": 76,
    "prompt_eval_duration": 524383874,
    "eval_count": 65,
    "completion_tokens": 65,
    "eval_duration": 2560909176,
    "approximate_total": "0h0m5s",
    "total_tokens": 141,
    "completion_tokens_details": {
      "reasoning_tokens": 0,
      "accepted_prediction_tokens": 0,
      "rejected_prediction_tokens": 0
    }
  }
}

open-webui streaming test:

$ curl -s -X POST "http://192.168.11.167:8080/api/chat/completions"  -H "Authorization: Bearer $OPENAI_API_KEY"  -H "Content-Type: application/json"  -d '{ "model": "gpt-oss:20b", "messages": [{"role":"user","content":"Hello, this is a streaming connectivity test."}], "stream": true }' 
data: {"id": "gpt-oss:20b-b56d8a47-f630-47e3-ab18-03e07099bd99", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": "The"}}], "object": "chat.completion.chunk"}

data: {"id": "gpt-oss:20b-7a1445ef-684c-4616-bce5-78d2e7a7a1ff", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": " user"}}], "object": "chat.completion.chunk"}

data: {"id": "gpt-oss:20b-ece27c71-adf6-4f4c-bd68-c7321697be54", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": " says"}}], "object": "chat.completion.chunk"}

data: {"id": "gpt-oss:20b-57f08a7c-1c68-4af8-919c-3e85c5ce2ff9", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": ":"}}], "object": "chat.completion.chunk"}

data: {"id": "gpt-oss:20b-3291dada-ed9d-4d70-84da-a98426338066", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": " \""}}], "object": "chat.completion.chunk"}

data: {"id": "gpt-oss:20b-139caf79-f51e-4a3f-82c1-df1843cd771c", "created": 1758304505, "model": "gpt-oss:20b", "choices": [{"index": 0, "logprobs": null, "finish_reason": null, "delta": {"reasoning_content": "Hello"}}], "object": "chat.completion.chunk"}
etc....

We I run codex I can see it is using 80% GPU, 100% vram and about 20% CPU, but it looks like codex "hang":

$ DEBUG=true RUST_LOG=debug codex

✨⬆️ Update available! 0.36.0 -> 0.39.0.
Run npm install -g @openai/codex@latest to update.

╭────────────────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.36.0)                              │
│                                                        │
│ model:     gpt-oss:20b   /model to change              │
│ directory: ~/git/testproject                           │
╰────────────────────────────────────────────────────────╯

  To get started, describe a task or try one of these commands:

  /init - create an AGENTS.md file with instructions for Codex
  /status - show current session configuration
  /approvals - choose what Codex can do without approval
  /model - choose what model and reasoning effort to use

▌ Generate a file named AGENTS.md that serves as a contributor guide for this repository.
▌ Your goal is to produce a clear, concise, and well-structured document with descriptive headings and actionable explanations for each section.
▌ Follow the outline below, but adapt as needed — add sections if relevant, and omit those that do not apply to this project.
▌
▌ Document Requirements
▌
▌ - Title the document "Repository Guidelines".
▌ - Use Markdown headings (#, ##, etc.) for structure.
▌ - Keep the document concise. 200-400 words is optimal.
▌ - Keep explanations short, direct, and specific to this repository.
▌ - Provide examples where helpful (commands, directory paths, naming patterns).
▌ - Maintain a professional, instructional tone.
▌
▌ Recommended Sections
▌
▌ Project Structure & Module Organization
▌
▌ - Outline the project structure, including where the source code, tests, and assets are located.
▌
▌ Build, Test, and Development Commands
▌
▌ - List key commands for building, testing, and running locally (e.g., npm test, make build).
▌ - Briefly explain what each command does.
▌
▌ Coding Style & Naming Conventions
▌
▌ - Specify indentation rules, language-specific style preferences, and naming patterns.
▌ - Include any formatting or linting tools used.
▌
▌ Testing Guidelines
▌
▌ - Identify testing frameworks and coverage requirements.
▌ - State test naming conventions and how to run tests.
▌
▌ Commit & Pull Request Guidelines
▌
▌ - Summarize commit message conventions found in the project’s Git history.
▌ - Outline pull request requirements (descriptions, linked issues, screenshots, etc.).
▌
▌ (Optional) Add other sections if relevant, such as Security & Configuration Tips, Architecture Overview, or Agent-Specific Instructions.
▌
▌ Write tests for @filename                                                                                                                                                                                         

⏎ send   Ctrl+J newline   Ctrl+T transcript   Ctrl+C quit       

Here is my codex log (with DEBUG=true RUST_LOG=debug):
codex-tui.log

Here is my open-webui log:

2025-09-19 18:00:27.949 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:44766 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:01:27.944 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:41764 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:01:28.370 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.11.167:41118 - "POST /api/chat/completions HTTP/1.1" 200
2025-09-19 18:02:27.948 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:34112 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:03:27.948 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:56388 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:04:05.925 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 192.168.11.167:58530 - "POST /api/chat/completions HTTP/1.1" 200
2025-09-19 18:04:27.947 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:35748 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:05:27.947 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:49676 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:07:27.946 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:42642 - "GET /_app/version.json HTTP/1.1" 200
2025-09-19 18:08:27.946 | INFO     | uvicorn.protocols.http.httptools_impl:send:476 - 127.0.0.1:49482 - "GET /_app/version.json HTTP/1.1" 200

Here is my ollama log:

Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.666+02:00 level=INFO source=server.go:199 msg="model wants flash attention"
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.666+02:00 level=INFO source=server.go:216 msg="enabling flash attention"
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.666+02:00 level=WARN source=server.go:224 msg="kv cache type not supported by model" type=""
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.666+02:00 level=INFO source=server.go:398 msg="starting runner" cmd="/usr/local/bin/ollama runner --ollama-engine --model /usr/share/ollama/.ollama/models/blobs/sha256-b112e727c6f18875636c56a779790a590d705aec9e1c0eb5a97d51fc2a778583 --port 37983"
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.674+02:00 level=INFO source=runner.go:1251 msg="starting ollama engine"
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.675+02:00 level=INFO source=runner.go:1286 msg="Server listening on 127.0.0.1:37983"
Sep 19 20:01:07 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:07.799+02:00 level=INFO source=server.go:503 msg="system memory" total="62.3 GiB" free="55.2 GiB" free_swap="8.0 GiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.025+02:00 level=INFO source=server.go:543 msg=offload library=cuda layers.requested=-1 layers.model=25 layers.offload=23 layers.split=[23] memory.available="[11.5 GiB]" memory.gpu_overhead="0 B" memory.required.full="13.0 GiB" memory.required.partial="11.4 GiB" memory.required.kv="204.0 MiB" memory.required.allocations="[11.4 GiB]" memory.weigh>
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.026+02:00 level=INFO source=runner.go:1170 msg=load request="{Operation:commit LoraPath:[] Parallel:1 BatchSize:512 FlashAttention:true KvSize:4096 KvCacheType: NumThreads:6 GPULayers:23[ID:GPU-6a78e8fc-9ae2-72c5-9dfe-5c9691078cfc Layers:23(1..23)] MultiUserCache:false ProjectorPath: MainGPU:0 UseMmap:false}"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.063+02:00 level=INFO source=ggml.go:131 msg="" architecture=gptoss file_type=MXFP4 name="" description="" num_tensors=315 num_key_values=30
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: ggml_cuda_init: GGML_CUDA_FORCE_MMQ:    no
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: ggml_cuda_init: GGML_CUDA_FORCE_CUBLAS: no
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: ggml_cuda_init: found 1 CUDA devices:
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]:   Device 0: NVIDIA RTX A2000 12GB, compute capability 8.6, VMM: yes, ID: GPU-6a78e8fc-9ae2-72c5-9dfe-5c9691078cfc
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: load_backend: loaded CUDA backend from /usr/local/lib/ollama/libggml-cuda.so
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: load_backend: loaded CPU backend from /usr/local/lib/ollama/libggml-cpu-alderlake.so
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.109+02:00 level=INFO source=ggml.go:104 msg=system CPU.0.SSE3=1 CPU.0.SSSE3=1 CPU.0.AVX=1 CPU.0.AVX_VNNI=1 CPU.0.AVX2=1 CPU.0.F16C=1 CPU.0.FMA=1 CPU.0.BMI2=1 CPU.0.LLAMAFILE=1 CPU.1.LLAMAFILE=1 CUDA.0.ARCHS=500,600,610,700,750,800,860,870,890,900,1200 CUDA.0.USE_GRAPHS=1 CUDA.0.PEER_MAX_BATCH_SIZE=128 compiler=cgo(gcc)
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=ggml.go:487 msg="offloading 23 repeating layers to GPU"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=ggml.go:491 msg="offloading output layer to CPU"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=ggml.go:498 msg="offloaded 23/25 layers to GPU"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:310 msg="model weights" device=CUDA0 size="10.2 GiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:315 msg="model weights" device=CPU size="2.6 GiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:321 msg="kv cache" device=CUDA0 size="195.0 MiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:326 msg="kv cache" device=CPU size="9.0 MiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:332 msg="compute graph" device=CUDA0 size="126.8 MiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:337 msg="compute graph" device=CPU size="109.2 MiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=backend.go:342 msg="total memory" size="13.3 GiB"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=sched.go:473 msg="loaded runners" count=1
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.180+02:00 level=INFO source=server.go:1250 msg="waiting for llama runner to start responding"
Sep 19 20:01:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:08.181+02:00 level=INFO source=server.go:1284 msg="waiting for server to become available" status="llm server loading model"
Sep 19 20:01:09 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:09.686+02:00 level=INFO source=server.go:1288 msg="llama runner started in 2.02 seconds"
Sep 19 20:01:09 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:09.790+02:00 level=WARN source=runner.go:160 msg="truncating input prompt" limit=4096 prompt=11594 keep=4 new=4096
Sep 19 20:01:32 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:01:32.744+02:00 level=WARN source=harmonyparser.go:401 msg="harmony parser: no reverse mapping found for function name" harmonyFunctionName=repo_browser.print_tree
Sep 19 20:01:32 fedora ollama-taskset-wrapper[1909]: [GIN] 2025/09/19 - 20:01:32 | 200 | 25.540894057s |  192.168.11.167 | POST     "/api/chat"
Sep 19 20:03:47 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:03:47.055+02:00 level=WARN source=runner.go:160 msg="truncating input prompt" limit=4096 prompt=11276 keep=4 new=4096
Sep 19 20:04:08 fedora ollama-taskset-wrapper[1909]: time=2025-09-19T20:04:08.101+02:00 level=WARN source=harmonyparser.go:401 msg="harmony parser: no reverse mapping found for function name" harmonyFunctionName=container.exec
Sep 19 20:04:08 fedora ollama-taskset-wrapper[1909]: [GIN] 2025/09/19 - 20:04:08 | 200 | 21.165290252s |  192.168.11.167 | POST     "/api/chat"

The model I use is a reasoning model (gpt-oss:20b / Ollama). From the logging I found out that when streaming it looks like it outputs tokens into a non-standard field (e.g. delta.reasoning_content / delta.reasoning) instead of delta.content. Codex (and other OpenAI-compatible clients) expect delta.content when streaming, so Codex never sees streamed text and appears to “hang”.

It think this is also the case in the original issue.

Should this be solved in open-webui, in Codex or may be using a proxy between codex and open-webui?