summaryrefslogtreecommitdiff
path: root/src/ollama_web/routes
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-06-25 02:41:58 +0900
committertanaka takashi <isazaka@gmail.com>2026-06-25 02:41:58 +0900
commit5f948a33412dfde6d0a210746e61ac9c8477c9e8 (patch)
treedfbd1877e1a1c43df0777f0daff943620d0dac13 /src/ollama_web/routes
parent697911563a1e8294aa415e8324bdd07901098876 (diff)
各モデルの機能を取得するように修正。thinking, tools, vision対応モデルに応じて機能を変えるように変更。クリアボタンのバグを修正
Diffstat (limited to 'src/ollama_web/routes')
-rw-r--r--src/ollama_web/routes/chat.py10
-rw-r--r--src/ollama_web/routes/models.py13
-rw-r--r--src/ollama_web/routes/sessions.py11
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})