image_edit:
- speech_bubble operation with Korean font, rounded rect, tail
- sketch quality: CLAHE pre-processing for better line contrast
- output filename with timestamp to prevent overwrites
- anime/painting stylize timeout 30s→600s (AnimeGANv2 model download)
- remove_bg PNG output fix
server-v2.ts:
- resolveToolImageContent: embed edited image as base64 in tool results
so vision models can see the output (3 execution paths covered)
- _activeModelName: fix vision support detection for Ollama-hosted models
(kimi/gemini run via Ollama — provider='ollama' was masking vision capability)
- Synthetic tool call ID generation to prevent Gemini function_response empty name error
- image_edit path hint format changed to English to prevent Gemini hallucination
- userRequestedImageEdit: expanded keyword list (풍선, 달아, 붙여 등)
- image_read OCR failure returns success:true with visual description hint
- TOOL_BLOCKS photo: image_edit workflow documentation updated
web-ui/index.html:
- renderFileDownloads: skip download buttons for image file extensions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reorganize .smallclaw/databases/ around a single entry point with
subcommands (add-terms / add-images / verify / reassign / stats),
absorb pmc_reassign.py into reassign, and route every image source
through inline vision-model verification before commit.
Layout
config.py paths, endpoints, API-key locations (no more
hard-coded absolute paths in source files)
manage.py argparse dispatcher
workflow_terms.py seed-JSON import (JSONC supported, dedupes on
korean/english)
workflow_images.py renamed from dental_image_workflow.py; main()
converted to run(verify=True, ...)
workflow_verify.py validate_image() / verify_db() + verify_updates()
gate used by every add-images source
seeds/ recovered seed_all.json, seed_periodontics.json
scratch/ ad-hoc work area replacing the /tmp habit
(only README.md is tracked)
docs/howto.md moved + expanded
docs/archive_image_rounds/ one-off round scripts + their results
docs/archive_validation/ model-comparison + validation history
Verification
- VERIFY_MODEL defaults to qwen3.5:397b-cloud (50-image test on
procedure-heavy sample: 9.8s/img avg, zero timeouts, Kimi-level
rigor — see archive_validation/).
- Prompt strengthened: in-image text/captions are not valid grounds
for "적합"; technique terms require visible procedure steps, not
generic device/anatomy photos.
- All 9 add-images sources gated through verify_updates() before
commit; --no-verify escape hatch for bulk runs.
.gitignore: API key files, dental_images/, __pycache__/, scratch/*
(README.md kept).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Python stdout already includes the correct markdown download link.
Appending extra bare URL and absolute path caused the model to generate
two download links in its response. Keep only Python's stdout.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The v2.2.3 hint "ALWAYS use /api/files/uploads/filename" was too broad,
causing the model to format PPTX download links as uploads/file.pptx
instead of the correct project_folder/file.pptx path returned by the tool.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Playwright's bundled browser install fails on Ubuntu 26.04 with
"Playwright does not support chromium on ubuntu26.04-x64".
Fall back to system Chromium (/usr/bin/chromium-browser etc.) via
executablePath when launching headless, bypassing the platform check.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>