Skip to content

Conversation

@dinhlongviolin1
Copy link
Contributor

@dinhlongviolin1 dinhlongviolin1 commented Sep 23, 2025

Describe Your Changes

  • Use remote conversation and messages
  • Conversation fully supported (can star, delete, create)
  • Conversation message persisted and can load properly
  • 1 key thing to note, we dont actually create the message but the server is saving it on stream
  • Message retrival parsed correctly to jan format
  • Improve synchronization issue (logout -> refreshed messages + thread, login -> load). Cross-tabs also works properly
  • Message deletion + edition supported later.
  • token/s not persisted so shown as 0 after loading. will be removing token/s or loading it later

Fixes Issues

Self Checklist

  • Added relevant comments, esp in complex areas
  • Updated docs (for bug fixes / features)
  • Created issues for follow-up changes or refactoring needed

Important

Introduces web-based remote conversation management using Jan's API, with new classes for handling conversations, updates to authentication, and platform-specific configurations.

  • Behavior:
    • Adds RemoteApi class in api.ts for conversation management using Jan's API.
    • Supports creating, updating, listing, and deleting conversations and messages.
    • Introduces ConversationalExtensionWeb class in extension.ts for managing threads and messages.
    • Updates JanApiClient in api.ts to handle chat completions with conversation context.
    • Implements cross-tab and same-tab auth state synchronization in broadcast.ts.
  • Models and Types:
    • Defines conversation-related types in types.ts.
    • Adds chatCompletionRequest and chatCompletionRequestMessage interfaces in AIEngine.ts.
  • Platform and Configuration:
    • Configures platform-specific features in const.ts and types.ts.
    • Updates vite.config.web.ts for web-specific build settings.
  • Misc:
    • Adds utility functions in utils.ts for parsing and combining conversation items.
    • Modifies useAuth.ts, useThreads.ts, and useMessages.ts hooks for state management.
    • Updates AuthProvider.tsx to initialize auth service and handle auth events.

This description was created by Ellipsis for 9d8afd3. You can customize this summary. It will automatically update as commits are pushed.

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Changes requested ❌

Reviewed everything up to 9af598f in 1 minute and 50 seconds. Click for details.
  • Reviewed 1866 lines of code in 24 files
  • Skipped 0 files when reviewing.
  • Skipped posting 7 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. extensions-web/src/conversational-web/utils.ts:103
  • Draft comment:
    Consider using a lazy regex (e.g. /[.?]/) instead of the greedy /[.]/ for tool call JSON extraction to avoid overshooting.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% The suggestion is technically correct - greedy matching could cause issues if there are multiple JSON arrays in the text. However, given the context, we can see this is specifically for parsing tool calls which would be a single JSON array. The current code works fine for the intended use case. The suggestion is more of an academic improvement than a practical one. The regex change could prevent potential bugs if the format of tool calls changes in the future to include multiple arrays. The current code might be fragile. While true, we should trust that the format is well-defined since this is parsing a specific API response format. The current code handles the known format correctly. This comment suggests a technically correct but unnecessary optimization for the current use case. The existing code works correctly for its purpose.
2. web-app/src/hooks/useThreads.ts:168
  • Draft comment:
    Deletion calls in deleteAllThreads aren’t awaited; consider awaiting these deletions to ensure order and error handling.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% The comment raises a valid point about async operations not being awaited. However, looking at the codebase patterns, this seems to be the standard way these operations are handled throughout the file. The state updates happen synchronously while the server operations happen in the background. There's no evidence that order or error handling is actually causing problems. The comment identifies a real technical concern about async operations. Not awaiting promises could potentially lead to race conditions or unhandled errors. While technically correct, this appears to be an intentional pattern used throughout the codebase. The immediate state updates with background server syncs is a common pattern in frontend apps. The comment should be deleted as it suggests changing an intentional pattern that's consistently used throughout the codebase. This isn't a clear bug or improvement.
3. extensions-web/src/jan-provider-web/api.ts:127
  • Draft comment:
    Clarify the mapping of conversation identifier fields (using 'conversation' vs 'conversation_id') to ensure consistency with the server API.
  • Reason this comment was not posted:
    Comment looked like it was already resolved.
4. extensions-web/src/shared/auth/broadcast.ts:50
  • Draft comment:
    The removeEventListener implementation in LocalBroadcastChannel uses a cast which might not remove the intended listener; consider storing the listener reference for robust cleanup.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% The comment is technically correct - the removeEventListener implementation won't work properly due to the wrapper function issue. However, the code already acknowledges this with a comment and works around it by implementing proper cleanup in AuthBroadcast class. The issue is already known and handled. The comment might be helping future maintainers understand why the cleanup is handled differently in AuthBroadcast. Also, the suggestion to store listener references could be a valid improvement. While the comment has merit, the code already documents this limitation and implements a working solution. The comment doesn't add significant value beyond what's already in the code comments. The comment should be removed since the code already acknowledges and handles this limitation, making the comment redundant with existing code comments.
5. web-app/src/hooks/useMessages.ts:43
  • Draft comment:
    Consider adding error handling for the promise returned by getServiceHub().messages().createMessage to ensure state consistency in case of failure.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
6. extensions-web/src/jan-provider-web/provider.ts:293
  • Draft comment:
    Methods delete, import, and abortImport throw errors indicating unsupported operations. Ensure these limitations are well-documented for users.
  • Reason this comment was not posted:
    Comment was not on a location in the diff, so it can't be submitted as a review comment.
7. web-app/src/routes/threads/$threadId.tsx:65
  • Draft comment:
    Good job preserving local messages when the server returns an empty array and the FIRST_MESSAGE_PERSISTED_THREAD feature is enabled.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None

Workflow ID: wflow_1umHSAXWqIBOQRq4

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 23, 2025

Barecheck - Code coverage report

Total: 30.03%

Your code coverage diff: -0.26% ▾

Uncovered files and lines
FileLines
extensions-web/src/conversational-web/api.ts5-6, 21, 24-26, 28-31, 33-40, 42-46, 48-55, 57-60, 62-70, 72-73, 75-81, 86-93, 95-100, 102-105, 107-108, 110-114, 116-117, 119-125, 127-131, 133-141, 143-144, 146-152, 154-160
extensions-web/src/conversational-web/const.ts6-10, 12-17
extensions-web/src/conversational-web/extension.ts6, 12-13, 15, 18-21, 23, 26-38, 40-47, 49-60, 62-76, 78-89, 92-95, 97-102, 105, 108, 110-116, 118-121, 123-125, 127-130, 132-138, 140-146, 148-154
extensions-web/src/conversational-web/index.ts1, 3
extensions-web/src/conversational-web/utils.ts1, 3, 5-22, 24-45, 47-61, 63-66, 68-72, 74-75, 77-79, 81-83, 85-87, 89-91, 93-97, 100-101, 103-120, 122-127, 130-136, 139-147, 150-157, 160-163, 166, 168-181, 183-186, 188-192, 198-203, 206-219, 222, 224-226, 228, 231-233, 235-241, 243-244, 246-247
extensions-web/src/jan-provider-web/api.ts6-7, 76, 80-82, 84-89, 91-94, 96-98, 100-101, 103-110, 112-116, 118-137, 139-146, 148, 150-164, 166-169, 171-173, 175-176, 178-179, 181-182, 184-186, 188-189, 192, 194-197, 199-202, 204-212, 214-224, 226-228, 230-240, 242
extensions-web/src/jan-provider-web/provider.ts6, 16-17, 19-21, 23-24, 26, 28-33, 35-36, 38-39, 42-44, 46-48, 50-52, 54-71, 73-74, 77, 79-85, 87, 89-95, 97-99, 101-106, 108-109, 111-119, 121-125, 127-129, 133-136, 139-142, 144-157, 159, 161-162, 164, 167-169, 171-194, 196-201, 203-206, 209-212, 214-219, 221, 223-256, 259-263, 265-268, 271-272, 275-278, 280-282, 284-285, 287-291, 293-295, 297-299, 301-303, 305-307, 309, 311-314
extensions-web/src/shared/index.ts1
extensions-web/src/shared/auth/api.ts7, 14-21, 23-26, 31-38, 40-44, 46-47, 52-59, 61-65, 67-68
extensions-web/src/shared/auth/broadcast.ts10, 18, 21-23, 28-33, 38-40, 42-48, 53, 56-58, 60-61, 64-67, 72-80, 85-86, 89-95, 98-99, 104-106, 111-113, 118-121, 124-129, 133-139, 142-145, 148-151, 156-158, 163-169
extensions-web/src/shared/auth/const.ts7-9, 12-17, 20, 24, 28, 31-34
extensions-web/src/shared/auth/service.ts8-9, 15-17, 20, 22-25, 27-28, 30-34, 39-44, 50-52, 54-56, 59-63, 68-69, 71-74, 76-82, 87-92, 94-97, 99, 101, 104-106, 108-113, 119-120, 122-132, 134, 136-138, 140-141, 143-145, 147-156, 161-162, 164-167, 170-172, 174-184, 186-187, 192-193, 195-196, 198-200, 202, 205, 207, 209-214, 216-218, 223-229, 234-236, 241-245, 247-248, 253-258, 263-264, 266-270, 275-279, 281-282, 284-292, 294-299, 301-306, 311-313, 318-322, 327-330, 332-333, 338-347, 349-351, 356-359, 364-367, 370, 372-374, 376, 378-383, 388-390, 395-397, 402-409, 411-417, 429-434
web-app/vite.config.web.ts1-5, 7-21, 23-47, 49, 51-68, 70-71
web-app/src/hooks/useAppState.ts76, 114-117, 133-141, 148-151, 153-156, 158-161
web-app/src/hooks/useAuth.ts1, 7-8, 44, 46-47, 50-52, 55-56, 59-64, 67-73, 75-79, 81-82, 84-92, 94, 96-97, 99-103, 105-106, 108-112, 114-115, 118-120, 122-127, 129-133, 135-146, 148-153, 155-156, 159, 162-183, 185-189, 191-198, 203-206, 211-213, 219-221, 224-225, 230-232
web-app/src/hooks/useMessages.ts68-69
web-app/src/hooks/useThreads.ts49, 54, 90, 92-96, 150-152, 165-166, 169-171, 173-181, 186-191, 195-197, 212-223, 225, 228, 231, 233-239, 241-262, 264-281, 306-308, 311-314, 317-318, 321, 323-330
web-app/src/lib/completion.ts74-85, 156-164, 166, 168-169, 171-173, 175, 177, 180-185, 187-194, 196-206, 209-217, 219, 221-237, 239-260, 276-282, 333, 336-341, 343-346, 362-367, 372-373, 375-397, 400-423, 425-430, 432, 434-454, 456-465, 467-481, 483-486
web-app/src/lib/platform/const.ts6-7, 13, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66-67
web-app/src/providers/AuthProvider.tsx6-15, 21-24, 27-28, 31-34, 37-38, 41-44, 46-50, 53, 55-57, 60-61, 64-65, 68-69, 72-73, 75-79, 81-84, 86, 88-93, 95-96, 99-102, 104, 106-107, 110, 112-113, 117, 119, 121-123, 125-128, 131, 133-135, 137, 139-142, 144-145
web-app/src/routes/threads/$threadId.tsx1-4, 6-11, 13-23, 26-28, 30-36, 38-39, 41-45, 48-49, 51-56, 58, 60-65, 67-71, 73-74, 77-79, 81, 83-84, 86-87, 89, 91-107, 109-115, 117-126, 128, 130, 132-137, 139-146, 148-153, 155-156, 158-164, 166-175, 178-181, 183-196, 198-205, 207

Copy link
Contributor

@louis-jan louis-jan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Contributor

@ellipsis-dev ellipsis-dev bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 9d8afd3 in 1 minute and 23 seconds. Click for details.
  • Reviewed 12 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 1 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. web-app/vite.config.web.ts:52
  • Draft comment:
    Hardcoding IS_DEV to false may cause issues in the development environment. Consider deriving it dynamically (e.g., based on process.env.NODE_ENV or Vite’s mode) to ensure consistency between dev and production builds.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 10% vs. threshold = 50% This appears to be a web-specific config file (vite.config.web.ts) where all platform flags are intentionally set to false. The comment assumes this is wrong, but given the pattern of other flags and the file name, it seems the hardcoding is deliberate. The file likely has a counterpart for desktop/native builds where these flags would be set differently. I could be wrong about the intention - maybe IS_DEV should behave differently from the platform flags. Also, development mode might be important for web builds too. While development mode is important, this specific config file seems to be for web production builds only, given its name and the pattern of other hardcoded flags. Development configuration is likely handled elsewhere. The comment should be deleted as it appears to misunderstand the purpose of this config file, which is specifically for web builds with intentionally hardcoded values.

Workflow ID: wflow_o2p2ueUVDkmpT3G1

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

@dinhlongviolin1 dinhlongviolin1 merged commit df61546 into dev Sep 23, 2025
15 checks passed
@dinhlongviolin1 dinhlongviolin1 deleted the feat/web-remote-conversation branch September 23, 2025 08:09
@github-project-automation github-project-automation bot moved this to QA in Jan Sep 23, 2025
@github-actions github-actions bot added this to the v0.7.0 milestone Sep 23, 2025
dinhlongviolin1 added a commit that referenced this pull request Sep 23, 2025
* fix: avoid error validate nested dom

* fix: correct context shift flag handling in LlamaCPP extension (#6404) (#6431)

* fix: correct context shift flag handling in LlamaCPP extension

The previous implementation added the `--no-context-shift` flag when `cfg.ctx_shift` was disabled, which conflicted with the llama.cpp CLI where the presence of `--context-shift` enables the feature.
The logic is updated to push `--context-shift` only when `cfg.ctx_shift` is true, ensuring the extension passes the correct argument and behaves as expected.

* feat: detect model out of context during generation

---------

Co-authored-by: Dinh Long Nguyen <[email protected]>

* chore: add install-rust-targets step for macOS universal builds

* fix: make install-rust-targets a dependency

* enhancement: copy MCP permission

* chore: make action mutton capitalize

* Update web-app/src/locales/en/tool-approval.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* chore: simplify macos workflow

* fix: KVCache size calculation and refactor (#6438)

- Removed the unused `getKVCachePerToken` helper and replaced it with a unified `estimateKVCache` that returns both total size and per‑token size.
- Fixed the KV cache size calculation to account for all layers, correcting previous under‑estimation.
- Added proper clamping of user‑requested context lengths to the model’s maximum.
- Refactored VRAM budgeting: introduced explicit reserves, fixed engine overhead, and separate multipliers for VRAM and system RAM based on memory mode.
- Implemented a more robust planning flow with clear GPU, Hybrid, and CPU pathways, including fallback configurations when resources are insufficient.
- Updated default context length handling and safety buffers to prevent OOM situations.
- Adjusted usable memory percentage to 90 % and refined logging for easier debugging.

* fix: detect allocation failures as out-of-memory errors (#6459)

The Llama.cpp backend can emit the phrase “failed to allocate” when it runs out of memory.
Adding this check ensures such messages are correctly classified as out‑of‑memory errors,
providing more accurate error handling CPU backends.

* fix: pathname file install BE

* fix: set default memory mode and clean up unused import (#6463)

Use fallback value 'high' for memory_util config and remove unused GgufMetadata import.

* fix: auto update should not block popup

* fix: remove log

* fix: imporove edit message with attachment image

* fix: imporove edit message with attachment image

* fix: type imageurl

* fix: immediate dropdown value update

* fix: linter

* fix/validate-mmproj-from-general-basename

* fix/revalidate-model-gguf

* fix: loader when importing

* fix/mcp-json-validation

* chore: update locale mcp json

* fix: new extension settings aren't populated properly (#6476)

* chore: embed webview2 bootstrapper in tauri windows

* fix: validat type mcp json

* chore: prevent click outside for edit dialog

* feat: add qa checklist

* chore: remove old checklist

* chore: correct typo in checklist

* fix: correct memory suitability checks in llamacpp extension (#6504)

The previous implementation mixed model size and VRAM checks, leading to inaccurate status reporting (e.g., false RED results).
- Simplified import statement for `readGgufMetadata`.
- Fixed RAM/VRAM comparison by removing unnecessary parentheses.
- Replaced ambiguous `modelSize > usableTotalMemory` check with a clear `totalRequired > usableTotalMemory` hard‑limit condition.
- Refactored the status logic to explicitly handle the CPU‑GPU hybrid scenario, returning **YELLOW** when the total requirement fits combined memory but exceeds VRAM.
- Updated comments for better readability and maintenance.

* fix: thread rerender issue

* chore: clean up console log

* chore: uncomment irrelevant fix

* fix: linter

* chore: remove duplicated block

* fix: tests

* Merge pull request #6469 from menloresearch/fix/deeplink-not-work-on-windows

fix: deeplink issue on Windows

* fix: reduce unnessary rerender due to current thread retrieval

* fix: reduce app layout rerender due to router state update

* fix: avoid the entire app layout re render on route change

* clean: unused import

* Merge pull request #6514 from menloresearch/feat/web-gtag

feat: Add GA Measurement and change keyboard bindings on web

* chore: update build tauri commands

* chore: remove unused task

* fix: should not rerender thread message components when typing

* fix re render issue

* direct tokenspeed access

* chore: sync latest

* feat: Add Jan API server Swagger UI (#6502)

* feat: Add Jan API server Swagger UI

- Serve OpenAPI spec (`static/openapi.json`) directly from the proxy server.
- Implement Swagger UI assets (`swagger-ui.css`, `swagger-ui-bundle.js`, `favicon.ico`) and a simple HTML wrapper under `/docs`.
- Extend the proxy whitelist to include Swagger UI routes.
- Add routing logic for `/openapi.json`, `/docs`, and Swagger UI static files.
- Update whitelisted paths and integrate CORS handling for the new endpoints.

* feat: serve Swagger UI at root path

The Swagger UI endpoint previously lived under `/docs`. The route handling and
exclusion list have been updated so the UI is now served directly at `/`.
This simplifies access, aligns with the expected root URL in the Tauri
frontend, and removes the now‑unused `/docs` path handling.

* feat: add model loading state and translations for local API server

Implemented a loading indicator for model startup, updated the start/stop button to reflect model loading and server starting states, and disabled interactions while pending. Added new translation keys (`loadingModel`, `startingServer`) across all supported locales (en, de, id, pl, vn, zh-CN, zh-TW) and integrated them into the UI. Included a small delay after model start to ensure backend state consistency. This improves user feedback and prevents race conditions during server initialization.

* fix: tests

* fix: linter

* fix: build

* docs: update changelog for v0.6.10

* fix(number-input): preserve '0.0x' format when typing (#6520)

* docs: update url for gifs and videos

* chore: update url for jan-v1 docs

* fix: Typo in openapi JSON (#6528)

* enhancement: toaster delete mcp server

* Update 2025-09-18-auto-optimize-vision-imports.mdx

* Merge pull request #6475 from menloresearch/feat/bump-tokenjs

feat: fix remote provider vision capability

* fix: prevent consecutive messages with same role (#6544)

* fix: prevent consecutive messages with same role

* fix: tests

* fix: first message should not be assistant

* fix: tests

* feat: Prompt progress when streaming (#6503)

* feat: Prompt progress when streaming

- BE changes:
    - Add a `return_progress` flag to `chatCompletionRequest` and a corresponding `prompt_progress` payload in `chatCompletionChunk`. Introduce `chatCompletionPromptProgress` interface to capture cache, processed, time, and total token counts.
    - Update the Llamacpp extension to always request progress data when streaming, enabling UI components to display real‑time generation progress and leverage llama.cpp’s built‑in progress reporting.

* Make return_progress optional

* chore: update ui prompt progress before streaming content

* chore: remove log

* chore: remove progress when percentage >= 100

* chore: set timeout prompt progress

* chore: move prompt progress outside streaming content

* fix: tests

---------

Co-authored-by: Faisal Amir <[email protected]>
Co-authored-by: Louis <[email protected]>

* chore: add ci for web stag (#6550)

* feat: add getTokensCount method to compute token usage (#6467)

* feat: add getTokensCount method to compute token usage

Implemented a new async `getTokensCount` function in the LLaMA.cpp extension.
The method validates the model session, checks process health, applies the request template, and tokenizes the resulting prompt to return the token count. Includes detailed error handling for crashed models and API failures, enabling callers to assess token usage before sending completions.

* Fix: typos

* chore: update ui token usage

* chore: remove unused code

* feat: add image token handling for multimodal LlamaCPP models

Implemented support for counting image tokens when using vision-enabled models:
- Extended `SessionInfo` with optional `mmprojPath` to store the multimodal project file.
- Propagated `mmproj_path` from the Tauri plugin into the session info.
- Added import of `chatCompletionRequestMessage` and enhanced token calculation logic in the LlamaCPP extension:
- Detects image content in messages.
- Reads GGUF metadata from `mmprojPath` to compute accurate image token counts.
- Provides a fallback estimation if metadata reading fails.
- Returns the sum of text and image tokens.
- Introduced helper methods `calculateImageTokens` and `estimateImageTokensFallback`.
- Minor clean‑ups such as comment capitalization and debug logging.

* chore: update FE send params message include content type image_url

* fix mmproj path from session info and num tokens calculation

* fix: Correct image token estimation calculation in llamacpp extension

This commit addresses an inaccurate token count for images in the llama.cpp extension.

The previous logic incorrectly calculated the token count based on image patch size and dimensions. This has been replaced with a more precise method that uses the clip.vision.projection_dim value from the model metadata.

Additionally, unnecessary debug logging was removed, and a new log was added to show the mmproj metadata for improved visibility.

* fix per image calc

* fix: crash due to force unwrap

---------

Co-authored-by: Faisal Amir <[email protected]>
Co-authored-by: Louis <[email protected]>

* fix: custom fetch for all providers (#6538)

* fix: custom fetch for all providers

* fix: run in development should use built-in fetch

* add full-width model names (#6350)

* fix: prevent relocation to root directories (#6547)

* fix: prevent relocation to root directories

* Update web-app/src/locales/zh-TW/settings.json

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

---------

Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>

* feat: web remote conversation (#6554)

* feat: implement conversation endpoint

* use conversation aware endpoint

* fetch message correctly

* preserve first message

* fix logout

* fix broadcast issue locally + auth not refreshing profile on other tabs+ clean up and sync messages

* add is dev tag

---------

Co-authored-by: Faisal Amir <[email protected]>
Co-authored-by: Akarshan Biswas <[email protected]>
Co-authored-by: Minh141120 <[email protected]>
Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
Co-authored-by: Nguyen Ngoc Minh <[email protected]>
Co-authored-by: Louis <[email protected]>
Co-authored-by: Bui Quang Huy <[email protected]>
Co-authored-by: Roushan Singh <[email protected]>
Co-authored-by: hiento09 <[email protected]>
Co-authored-by: Alexey Haidamaka <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

feat: support conversation endpoint (UI)

3 participants