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>
- 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>
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
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.
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>
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>
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>
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>
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.
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
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.
- 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>
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.
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>