summaryrefslogtreecommitdiff
path: root/src/ollama_web/routes
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-08-02 15:50:41 +0900
committertanaka takashi <isazaka@gmail.com>2026-08-02 15:50:41 +0900
commit515f96a7779f117a7e37f854de2ded99160d0c76 (patch)
treeb63e4b39da1f7edb18146e94b16a76d4925948a4 /src/ollama_web/routes
parent1729e1c399a41b4128b5dd7ef0286fae128e6157 (diff)
scrape_url / pdf_to_text / search_and_fetch はページング(継続トークン方式)に対応
mypy 6エラー修正
Diffstat (limited to 'src/ollama_web/routes')
-rw-r--r--src/ollama_web/routes/chat.py19
-rw-r--r--src/ollama_web/routes/mcp.py4
-rw-r--r--src/ollama_web/routes/models.py2
-rw-r--r--src/ollama_web/routes/sessions.py5
4 files changed, 17 insertions, 13 deletions
diff --git a/src/ollama_web/routes/chat.py b/src/ollama_web/routes/chat.py
index d69fa36..e5b90d3 100644
--- a/src/ollama_web/routes/chat.py
+++ b/src/ollama_web/routes/chat.py
@@ -113,8 +113,8 @@ def _attachment_context(store: SessionStore, session_id: str, file_ids: list[str
continue
text = _limit_text(chat_file.text or "", settings.max_attachment_text_chars)
parts.append(
- f"<attached-file name=\"{html.escape(chat_file.name)}\" id=\"{chat_file.id}\" "
- f"source=\"{chat_file.source}\">\n{text}\n</attached-file>"
+ f'<attached-file name="{html.escape(chat_file.name)}" id="{chat_file.id}" '
+ f'source="{chat_file.source}">\n{text}\n</attached-file>'
)
if not parts:
return ""
@@ -276,8 +276,14 @@ async def _chat_event_stream(
logger.info("enabled tools capability fallback for cloud model %s", model)
async for event in llm.astream_chat_with_tools(
- messages, model, think=think, host=host, registry=registry,
- capabilities=capabilities, options=ollama_options, language=language,
+ messages,
+ model,
+ think=think,
+ host=host,
+ registry=registry,
+ capabilities=capabilities,
+ options=ollama_options,
+ language=language,
):
if event.get("type") == "delta":
assistant_text = _limit_text(
@@ -296,8 +302,7 @@ async def _chat_event_stream(
# Persist the error as the assistant message so it survives reloads
# and re-renders in the chat pane.
assistant_text = (
- f"[ERROR] {error_msg}\n\n"
- f"{t('errors.vision_model_required', lang=language)}"
+ f"[ERROR] {error_msg}\n\n{t('errors.vision_model_required', lang=language)}"
)
finally:
@@ -375,4 +380,4 @@ async def chat(request: Request) -> StreamingResponse:
async def _single_event(data: str) -> AsyncIterator[bytes]:
"""Yield a single SSE event and finish."""
- yield f"data: {data}\n\n".encode() \ No newline at end of file
+ yield f"data: {data}\n\n".encode()
diff --git a/src/ollama_web/routes/mcp.py b/src/ollama_web/routes/mcp.py
index ee8ba65..ba3628c 100644
--- a/src/ollama_web/routes/mcp.py
+++ b/src/ollama_web/routes/mcp.py
@@ -90,9 +90,7 @@ async def put_servers(request: Request) -> JSONResponse:
continue
cleaned["mcpServers"][name] = cleaned_server
else:
- errors.append(
- f"Server '{name}' must define either 'command' (stdio) or 'url' (http)"
- )
+ errors.append(f"Server '{name}' must define either 'command' (stdio) or 'url' (http)")
if errors:
return JSONResponse({"error": errors}, status_code=400)
diff --git a/src/ollama_web/routes/models.py b/src/ollama_web/routes/models.py
index 406679a..0cc9941 100644
--- a/src/ollama_web/routes/models.py
+++ b/src/ollama_web/routes/models.py
@@ -33,4 +33,4 @@ async def health(request: Request) -> JSONResponse:
host = request.app.state.settings.ollama_host
models = llm.list_models(host=host)
reachable = models is not None
- return JSONResponse({"reachable": reachable, "models": models}) \ No newline at end of file
+ return JSONResponse({"reachable": reachable, "models": models})
diff --git a/src/ollama_web/routes/sessions.py b/src/ollama_web/routes/sessions.py
index 64e1bc9..e1e669c 100644
--- a/src/ollama_web/routes/sessions.py
+++ b/src/ollama_web/routes/sessions.py
@@ -127,7 +127,8 @@ async def upload_file(request: Request) -> JSONResponse:
# 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)
+ # extract_pdf_text now returns (text, has_more, next_page_offset).
+ text = extract_pdf_text(data)[0]
else:
# Try decode as text for text-like uploads.
try:
@@ -171,4 +172,4 @@ async def clear_messages(request: Request) -> JSONResponse:
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})
+ return JSONResponse({"cleared": True, "session": session}) \ No newline at end of file