144 Commits

Author SHA1 Message Date
Laurent Paoletti f5a1b72913 🐛(back) add missing color option for project colors
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-24 15:12:56 +01:00
Laurent Paoletti 9e37f71818 ⬆️(dependencies) upgrade Next.js 15 to 16, upgrade python dependencies
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-23 18:04:22 +01:00
Laurent Paoletti 6dd41e827e (front) projects management UI
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-17 10:49:56 +01:00
Laurent Paoletti bcf55c6c0c (back) add projects with custom LLM instructions
Introduce the project concept for conversations:
- Add nested project serializer for search results (`?title=` returns
project id, title, icon)
- Inject project-level custom LLM instructions into the AI agent systemprompt
- Document `title` and `project` query parameters in OpenAPI schema
- Fix ChatProjectFactory deprecation warning
- Add db compound indexes on ChatConversation for and ChatProject to speed
up sidebar queries

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-16 09:50:10 +01:00
Laurent Paoletti 995ad407a6 (search) add search modal with improved UX
- Add search modal and modify left panel layout
- Fix result list flashing by keeping previous data during refetch
- Defer loader display to avoid search icon flickering on fast responses
- Add Cmd+K / Ctrl+K shortcut to toggle search modal
- Auto-focus search input on modal open
- Require minimum 3 characters before triggering search
- Only mount modal when authenticated and open
- Extract shared getRelativeTime utility
- Remove unused controlled selection state in QuickSearch

Co-Authored-By: Eléonore Voisin <elevoisin@gmail.com
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-12 16:31:03 +01:00
providenz 0746d23a1e 🌐(i18n) update translated strings
Update translated files with new translations

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-12 09:17:35 +01:00
Laurent Paoletti c699d7503d 🔖(patch) bump release to 0.0.14
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-11 16:20:40 +01:00
Laurent Paoletti bc7568ccf1 ⬆️(back) update django and pypdf
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-03-11 15:12:22 +01:00
eliott07 c17a8ae9b9 🐛(frontend) fix inverted toast message for settings toggles
fixes inverted toast introduced in smart search PR

Remove fixed inverted toast entry from changelog
2026-03-05 13:58:38 +01:00
eliott07 4545083210 (user) allow disabling automatic internet search
Added user preference to disable automatic tool calls to internet.
Preference is stored in user model, can be changed via frontend setting and
prevents the tool from showing up unless
'Search on the web' is explicitly enabled

Signed-off-by: eliott07 <eliott07@gmail.com>

🐛(settings) fix smart web search default and improve settings layout

Updated default value of smart search, adjusted settings modal layout & spacing
2026-02-26 16:27:56 +01:00
natoromano 1088d88aba 🚑️(back) fix mime type for pptx
Fix wrong mime type in config (for pptx)
2026-02-25 17:33:16 +01:00
Laurent Paoletti 99353357ff ♻️(front) migrate from ESLint 8 to ESLint 9 flat config
- Replace .eslintrc.js files with eslint.config.mjs (flat config)
  - Upgrade eslint from 8.57.0 to ^9.0.0
  - Replace eslint-plugin-import with eslint-plugin-import-x
  - Replace eslint-config-next with eslint-plugin-react +
  eslint-plugin-react-hooks
  - Convert shared config modules from .js (CJS) to .mjs (ESM)
  - Update lint scripts to use `eslint src/` instead of `next lint`

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-25 10:32:49 +01:00
Laurent Paoletti 8feed1e3ac ⬆️(back) update django-pydantic-field and pypdf
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-24 21:27:08 +01:00
Laurent Paoletti 61f86e18df ⬆️(back) update pillow
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-24 20:15:55 +01:00
Laurent Paoletti 2b8123462a 🐛(front) fix dark mode styling on chat messages
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-24 17:58:48 +01:00
Quentin BEY 3c3eaf3eeb 🚸(oidc) ignore case when fallback on email
Some identity providers might change the case, but in our
products we don't consider case variation to be consider as
different email addresses.

Next step would be to normalize the DB value of email to
be lower-case.
2026-02-24 16:07:21 +01:00
Laurent Paoletti ba712af899 ♻️(back) refactor AIAgentService for readability and maintainability
Extract large _run_agent method into smaller focused methods
Add comprehensive module and method documentation
Minor fixes

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-19 23:31:28 +01:00
Manuel Raynaud e60c938d44 🐛(helm) reverse liveness and readiness for backend deployment
The liveness and readiness are reversed. The liveness was using the
heartbeat process that is cheking all django checks and the database
connection.

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-19 19:46:45 +01:00
Eléonore Voisin 5d895d15f9 (table) temporarily adjust array
temporarily adjust css table
2026-02-18 09:56:27 +01:00
Eléonore Voisin 96a2963adf (waffle) hide the waffle if not fr theme
show waffe only on fr theme
2026-02-16 18:20:49 +01:00
Laurent Paoletti 224e6f83fd ⬆️(back) update pydantic-ai
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-16 11:11:27 +01:00
Laurent Paoletti af6facf4a3 ️(front) optimize streaming markdown rendering with block splitting
Split streaming content into independent memoized blocks to avoid
re-rendering all markdown/katex/syntax-highlighting on each update.
Add some tests for split functions and components.

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-16 09:46:23 +01:00
natoromano 9d16460777 ⬆️ (fix): redo after rebase
(front) add e2e pasting an attachment from clipboard

add test e2e paste attachment
2026-02-13 11:53:17 +01:00
Laurent Paoletti 09dceb508d 🐛(front) fix math formulas and carousel translations
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-10 10:23:11 +01:00
Laurent Paoletti 63e0e6c383 💚(docker) vendor mime.types file i/o fetching from Apache
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-10 09:45:25 +01:00
Laurent Paoletti 9506df341a 🔖(patch) bump release to 0.0.13
- 💄(front) ui fix : update ui-kit
- (front) add persistent darkmode
- (front) add ui kit #240
- 🧱(files) allow to use S3 storage without external access #849
- (backend) add FindRagBackend #209
- ⬆️(back) update dependencies
- (back) Use adaptive parsing for pdf documents

- 💄(darkmode) change color feedback butto
- 🏗️(back) migrate to uv
- ♻️(front) optimize syntax highlighting bundle size

-  🐛(back) Cast collection Ids to API expected types

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-09 15:10:10 +01:00
Laurent Paoletti c87c734e98 🐛(back) cast collection Ids to API expected types
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-05 14:56:38 +01:00
Eléonore Voisin 41ade65a49 💄(darkmode) change color feedback button
change the color of the feedback button & add a dark mode illustration
2026-02-05 10:41:58 +01:00
Laurent Paoletti 3bbe7fb125 (back) Add adaptive pdf parser (text extraction /ocr)
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-04 16:01:06 +01:00
Eléonore Voisin 082937e107 💄(front) ui fix : update ui-kit - fix Marianne font
upgrade package ui-kit
add darkmode logo gouv
2026-02-04 11:57:59 +01:00
Laurent Paoletti 54d2d3e807 ⬆️(back) update django
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-03 23:19:13 +01:00
Quentin BEY 23964cbf12 ♻️(front) optimize syntax highlighting bundle size
Replace rehype-pretty-code with direct Shiki integration

Migrate syntax highlighting from rehype-pretty-code to @shikijs/rehype for
better bundle optimization. Create a centralized Shiki highlighter that
pre-loads only required languages.

Also remove unused dependencies: @ag-media/react-pdf-table,
@react-pdf/renderer, react-select.

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-02-03 21:30:42 +01:00
Eléonore Voisin ff9e8335f2 (front) add persistent darkmode
add persistent darkmode and change settings modal
2026-02-03 17:37:27 +01:00
charles 23fa1d6b9e (backend) implement FindRagBackend
We want to be able to use Find api in rag tools.
I add a new rag backend class to do so.
2026-02-02 22:27:26 +01:00
Eléonore Voisin 8ed72fb305 (front) fix hover button darkmode
fix buttons colors missing -> source item, feedback buttons
2026-02-02 14:18:58 +01:00
Eléonore Voisin c231e69871 (front) add ui kit with dark mode
Add UI kit and dark mode
Fix missing color variables
2026-02-02 11:00:31 +01:00
Quentin BEY 853305ae74 🧱(files) allow to use S3 storage without external access
Some architectures do not expose their S3, in such cases
it is only available through the backend.

This commit proposes two implementations to manage this:
- frontend can now upload files to the backend (no direct access
  to S3)
- two new modes to send file to the LLM: a temporary URL on the
  backend, or directly the file in b64.
2026-01-29 22:30:15 +01:00
Laurent Paoletti ab2ad0348b 🏗️(back) migrate to uv
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-29 15:27:49 +01:00
Quentin BEY 30f825c337 🔖(patch) bump release to 0.0.12
Fixed

- ️(front) performance improvements on chat input
- 💄(front) i18n and standardize pdf parsing display

Removed

- 🔥(chat) consider PDF documents as other kind of documents #234
2026-01-27 16:37:54 +01:00
natoromano f52a27f218 (front) i18n and standardize pdf parsing display
fix: align i18n key

🌐fix: keep filename

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-27 12:13:36 +01:00
Laurent Paoletti 120b204729 ️(front) chat input performance improvements
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-22 12:19:27 +01:00
Quentin BEY abf61a9556 🔥(chat) consider PDF documents as other kind of documents
We remove the specific management for PDF because it introduces:
 - limitation regarding the LLM we can use
 - bad behavior when uploading huge PDFs
 - more code complexity
while not providing really actionnable improvements.

This commit removes this, to keep a better control over this.
2026-01-19 14:04:32 +01:00
Laurent Paoletti 3e8c5c77d5 (chat) generate and edit conversation title
- Auto-generate title via LLM after reaching user message threshold
- Add title_set_by_user_at field to track user-customized titles
- Skip auto-generation when user has set a custom title
- Stream conversation_metadata event to frontend on title update
- Invalidate React Query cache to refresh conversation list

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-18 23:04:43 +01:00
Laurent Paoletti ddfc86a88f 🐛(back) stream tool responses to prevent too call timeouts
Implement sync/sync utilities that inject
keepalive messages at regular intervals during stream pauses,
preventing proxy timeouts on long-running operations like
document(s) summarization.

Keepalive messages maintain active connections while tools execute,
eliminating forced conversation restarts.

Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-17 13:50:35 +01:00
Quentin BEY fd3399dd66 🔖(patch) bump release to 0.0.11
Changed

- 📦️(front) update react

Fixed

- 🐛(e2e) fix test-e2e-chromium
- 🐛(back) fix system prompt compatibility with self-hosted models #200
- ⚰️(back) remove dead code and unused files

Removed

- 🔥(chat) remove thinking part from frontend #227
2026-01-16 12:03:05 +01:00
Quentin BEY 13c6499c66 🔥(chat) remove thinking part from frontend
We want to enable the OSS model but seems like it returns
thinking values twice and we don't manage it well...

So we disable the frontend while we still don't know
how to display the thinking stuff.
We could have also cleaned the backend while unused.
2026-01-16 11:43:05 +01:00
Laurent Paoletti daf90cf110 ⚰️(back) remove dead code and unused files
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-16 11:43:05 +01:00
Laurent Paoletti 29f76fe040 🐛(back) fix system prompt compatibility with self-hosted models
Pydantic AI allows setting multiple static and dynamic system prompts
to define conversation context and rules. Previously, these were sent
to the model API as separate messages, which caused compatibility
issues with some self-hosted models (e.g., Gemma3/vLLM).

This commit switches from using `system_prompt` to `instruction` as
recommended in the Pydantic AI documentation, thus merging several
instructions into a single message.

Reference: https://ai.pydantic.dev/agents/#system-prompts
Signed-off-by: Laurent Paoletti <lp@providenz.fr>
2026-01-16 11:43:05 +01:00
Eléonore Voisin dc61fdce00 🐛(e2e) fix test-e2e-chronium
don't need to wait for the See more button to appear
2025-12-19 08:27:02 +01:00
Eléonore Voisin aa42a9b4d3 📦️(front) update react
update react to 19.2.1
2025-12-16 16:48:06 +01:00