diff options
| author | tanaka takashi <isazaka@gmail.com> | 2026-06-25 02:41:58 +0900 |
|---|---|---|
| committer | tanaka takashi <isazaka@gmail.com> | 2026-06-25 02:41:58 +0900 |
| commit | 5f948a33412dfde6d0a210746e61ac9c8477c9e8 (patch) | |
| tree | dfbd1877e1a1c43df0777f0daff943620d0dac13 /src/ollama_web/routes | |
| parent | 697911563a1e8294aa415e8324bdd07901098876 (diff) | |
各モデルの機能を取得するように修正。thinking, tools, vision対応モデルに応じて機能を変えるように変更。クリアボタンのバグを修正
Diffstat (limited to 'src/ollama_web/routes')
| -rw-r--r-- | src/ollama_web/routes/chat.py | 10 | ||||
| -rw-r--r-- | src/ollama_web/routes/models.py | 13 | ||||
| -rw-r--r-- | src/ollama_web/routes/sessions.py | 11 |
3 files changed, 33 insertions, 1 deletions
diff --git a/src/ollama_web/routes/chat.py b/src/ollama_web/routes/chat.py index 9e0eae6..8b5c3f4 100644 --- a/src/ollama_web/routes/chat.py +++ b/src/ollama_web/routes/chat.py @@ -202,8 +202,16 @@ async def _chat_event_stream( total_image_bytes, ) + capabilities = llm.get_model_capabilities(model, host=host) + logger.info( + "chat stream model=%s capabilities=%s", + model, + sorted(capabilities), + ) + async for event in llm.astream_chat_with_tools( - messages, model, think=think, host=host, registry=registry + messages, model, think=think, host=host, registry=registry, + capabilities=capabilities, ): if event.get("type") == "delta": assistant_text = _limit_text( diff --git a/src/ollama_web/routes/models.py b/src/ollama_web/routes/models.py index 477a44e..406679a 100644 --- a/src/ollama_web/routes/models.py +++ b/src/ollama_web/routes/models.py @@ -15,6 +15,19 @@ async def get_models(request: Request) -> JSONResponse: return JSONResponse({"models": models}) +async def get_model_capabilities(request: Request) -> JSONResponse: + """Return capabilities for a single model via ``ollama.show()``. + + The response contains the raw capability strings reported by ollama, e.g. + ``{"capabilities": ["vision", "tools", "thinking"]}``. Unknown models or + connection failures return an empty list. + """ + model = request.path_params["model"] + host = request.app.state.settings.ollama_host + caps = sorted(llm.get_model_capabilities(model, host=host)) + return JSONResponse({"capabilities": caps}) + + async def health(request: Request) -> JSONResponse: """Report Ollama server reachability.""" host = request.app.state.settings.ollama_host diff --git a/src/ollama_web/routes/sessions.py b/src/ollama_web/routes/sessions.py index 7b01705..64e1bc9 100644 --- a/src/ollama_web/routes/sessions.py +++ b/src/ollama_web/routes/sessions.py @@ -161,3 +161,14 @@ async def delete_file(request: Request) -> JSONResponse: if not ok: return JSONResponse({"error": "File not found"}, status_code=404) return JSONResponse({"deleted": True}) + + +async def clear_messages(request: Request) -> JSONResponse: + store = _get_store(request) + session_id = request.path_params["session_id"] + if not is_valid_id(session_id): + return JSONResponse({"error": "Invalid session id"}, status_code=400) + session = store.clear_messages(session_id) + if session is None: + return JSONResponse({"error": "Session not found"}, status_code=404) + return JSONResponse({"cleared": True, "session": session}) |
