Commit Graph

9 Commits

Author SHA1 Message Date
e60b1ea8d5 feat(chat): add optional photo upload support
Add vision/multimodal support to chat, allowing users to send images
alongside or instead of text prompts. Images are transmitted and persisted
as base64 data URLs.

Backend:
- Add Images []string to Message struct for persistence
- Add Images []string to GenerateTextRequest with relaxed validation
- Build multimodal user messages using OpenAI SDK content parts
- Pass images through from handlers to client
- Deep-copy Images slice in message cloning

Frontend:
- Add images?: string[] to Message and GenerateTextRequest types
- Add image selection state and file input handler
- Add camera icon button, hidden file input, and image preview strip
- Render images in user message bubbles
- Pass images through to GenerateTextRequest

Tests:
- Add TestSendMessageWithImage for vision model testing
2026-05-01 18:27:09 -04:00
c51c0ab070 fix(client): support vLLM "reasoning" field for thinking blocks
All checks were successful
continuous-integration/drone/push Build is passing
vLLM sends thinking content in a "reasoning" delta field, unlike
DeepSeek which uses "reasoning_content". Check both field names so
thinking blocks render for vLLM-hosted models like qwen3.6-27b-thinking.

Also update client tests to exercise thinking output and skip by default
so they don't run in Drone CI (require live LLM API).
2026-04-30 21:55:05 -04:00
ce496d1caf fix(api): prevent browser from coalescing concurrent stream requests
All checks were successful
continuous-integration/drone/push Build is passing
Add cache-busting query parameter to the stream fetch URL so each
tab gets a unique request and the browser cannot reuse an in-flight
response. Remove redundant Transfer-Encoding header that Go sets
automatically.
2026-04-28 23:22:48 -04:00
eb66801f58 feat: stream persistent 2026-04-28 22:41:03 -04:00
fad8ed865a fix: streaming
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-28 22:30:37 -04:00
4c1523d81b fix: build 2026-04-28 22:09:19 -04:00
59de41f827 feat(build): embed static assets into Go binary
Some checks failed
continuous-integration/drone/push Build is failing
Embed frontend build output directly into Go binary using //go:embed.
This removes runtime dependency on ../frontend/public/ path and
simplifies Docker builds by serving assets from embedded filesystem.

- Add backend/web/embed.go with embed.FS directive
- Update server to serve from embedded static assets
- Update Makefile to copy frontend build to web/static/
- Update Dockerfile for simplified multi-stage build
- Update frontend package.json output paths
- Remove custom 'oc' command from flake.nix dev shell
2026-02-22 20:36:03 -05:00
627fcbafe1 tests: add backend tests 2026-01-19 12:46:07 -05:00
89f2114b06 initial commit 2026-01-17 10:09:11 -05:00