summaryrefslogtreecommitdiff
path: root/src/ollama_web/routes/sessions.py
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-06-24 01:51:37 +0900
committertanaka takashi <isazaka@gmail.com>2026-06-24 01:51:37 +0900
commit374ba05fe2a4022d95ed45322a13e9eef3ed59de (patch)
tree5ed5fd4a4b5d20766c70789b554ff9a8f5e2f977 /src/ollama_web/routes/sessions.py
parentee1733816744a269f532ece6b241f4a99e007c49 (diff)
vision対応モデル向けに添付画像の処理を変更
Diffstat (limited to 'src/ollama_web/routes/sessions.py')
-rw-r--r--src/ollama_web/routes/sessions.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/ollama_web/routes/sessions.py b/src/ollama_web/routes/sessions.py
index 8980960..8640ec3 100644
--- a/src/ollama_web/routes/sessions.py
+++ b/src/ollama_web/routes/sessions.py
@@ -8,7 +8,7 @@ from typing import Any
from starlette.requests import Request
from starlette.responses import JSONResponse
-from ..sessions import SessionStore
+from ..sessions import SessionStore, _IMAGE_MIMES, _IMAGE_SUFFIXES
from ..tools.pdf import extract_pdf_text
logger = logging.getLogger("ollama_web.sessions")
@@ -18,6 +18,17 @@ def _get_store(request: Request) -> SessionStore:
return request.app.state.session_store
+def _is_image_file(name: str, mime: str) -> bool:
+ mime_lower = mime.lower()
+ name_lower = name.lower()
+ if mime_lower in _IMAGE_MIMES:
+ return True
+ for suffix in _IMAGE_SUFFIXES:
+ if name_lower.endswith(suffix):
+ return True
+ return False
+
+
async def list_sessions(request: Request) -> JSONResponse:
store = _get_store(request)
return JSONResponse({"sessions": store.list_sessions()})
@@ -85,7 +96,10 @@ async def upload_file(request: Request) -> JSONResponse:
name = getattr(upload, "filename", "uploaded-file") or "uploaded-file"
content_type = getattr(upload, "content_type", None) or "application/octet-stream"
text = ""
- if content_type == "application/pdf" or name.lower().endswith(".pdf"):
+ if _is_image_file(name, content_type):
+ # Images are passed to ollama via Message.images (base64), not as text.
+ text = ""
+ elif content_type == "application/pdf" or name.lower().endswith(".pdf"):
text = extract_pdf_text(data)
else:
# Try decode as text for text-like uploads.